Merge branch 'improve-privileged' of https://gitlab.com/dschuermann/fdroidclient
This commit is contained in:
commit
8f6af2be55
@ -386,10 +386,10 @@
|
||||
</activity>
|
||||
<!-- Note: Theme.NoDisplay, this activity shows dialogs only -->
|
||||
<activity
|
||||
android:name=".privileged.install.InstallPrivilegedDialogActivity"
|
||||
android:name=".privileged.install.InstallExtensionDialogActivity"
|
||||
android:theme="@android:style/Theme.NoDisplay" />
|
||||
<receiver
|
||||
android:name=".privileged.install.InstallPrivilegedBootReceiver" >
|
||||
android:name=".privileged.install.InstallExtensionBootReceiver" >
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.BOOT_COMPLETED" />
|
||||
</intent-filter>
|
||||
|
@ -178,8 +178,8 @@ Deberíes tener procuru con aplicaciones baxaes dende índices ensin roblar.</st
|
||||
<string name="root_access_denied_title">Refugóse l\'accesu root</string>
|
||||
<string name="root_access_denied_body">O\'l to preséu Android nun ta rootexáu o refuguesti l\'accesu root pa F-Droid.</string>
|
||||
<string name="update_all">Anovar too</string>
|
||||
<string name="system_permission_denied_title">Nun ta disponible F-Droid privilexáu</string>
|
||||
<string name="system_permission_denied_body">Esta opción ta namái disponible cuando s\'instale F-Droid como una aplicación del sistema.</string>
|
||||
<string name="system_install_denied_title">Nun ta disponible F-Droid privilexáu</string>
|
||||
<string name="system_install_denied_body">Esta opción ta namái disponible cuando s\'instale F-Droid como una aplicación del sistema.</string>
|
||||
<string name="app_description">F-Droid ye un catálogu de software FOSS (software llibre y de baldre) instalable pa la plataforma Android. El veceru fai cenciello restolar, instalar y caltener el rastrexu d\'anovamientos nel to preséu.</string>
|
||||
<string name="swap_nfc_description">Si\'l to collaciu tien F-Droid y NFC activáu, axuntái los vuesos teléfonos pela parte d\'atras.</string>
|
||||
<string name="swap_join_same_wifi">Xúnite a la mesma Wi-Fi que\'l to collaciu</string>
|
||||
|
@ -154,7 +154,7 @@
|
||||
<string name="requesting_root_access_body">Изисква Root достъп…</string>
|
||||
<string name="root_access_denied_title">Root достъпът е отказан</string>
|
||||
<string name="update_all">Актуализирай всички</string>
|
||||
<string name="system_permission_denied_body">Опцията е налична само когато сте инсталирали F-Droid като системно приложение.</string>
|
||||
<string name="system_install_denied_body">Опцията е налична само когато сте инсталирали F-Droid като системно приложение.</string>
|
||||
<string name="swap_nfc_description">Ако приятелят ви има F-Droid и е активирал NFC можете да докоснете телефоните си.</string>
|
||||
<string name="swap_join_same_wifi">Свържете се към една и съща Wi-Fi мрежа с приятеля си</string>
|
||||
<string name="menu_swap">Размяна на приложения</string>
|
||||
|
@ -146,8 +146,8 @@ Uvolněno pod GPLv3 licencí.</string>
|
||||
<string name="root_access_denied_title">Root přístup odepřen</string>
|
||||
<string name="root_access_denied_body">Buď toto Android zařízení není rootnuté, nebo jsi odepřel F-Droidu opránění roota.</string>
|
||||
<string name="update_all">Aktualizovat vše</string>
|
||||
<string name="system_permission_denied_title">Systémová oprávnění odepřena</string>
|
||||
<string name="system_permission_denied_body">Tato volba je dostupná pouze, pokud je F-Droid nainstalován jako systémová aplikace.</string>
|
||||
<string name="system_install_denied_title">Systémová oprávnění odepřena</string>
|
||||
<string name="system_install_denied_body">Tato volba je dostupná pouze, pokud je F-Droid nainstalován jako systémová aplikace.</string>
|
||||
<string name="swap_join_same_wifi">Připoj se na stejnou WiFi jako tvůj přítel</string>
|
||||
<string name="menu_swap">Přepnout aplikace</string>
|
||||
<string name="swap_no_wifi_network">Zatím žádná síť</string>
|
||||
|
@ -183,8 +183,8 @@ wird verbunden</string>
|
||||
<string name="root_access_denied_title">Root-Zugriff verweigert</string>
|
||||
<string name="root_access_denied_body">Entweder ist Ihr Android-Gerät nicht gerootet oder Sie haben den Root-Zugriff für F-Droid verweigert.</string>
|
||||
<string name="update_all">Alle aktualisieren</string>
|
||||
<string name="system_permission_denied_title">Systemberechtigungen verweigert</string>
|
||||
<string name="system_permission_denied_body">Diese Option ist nur verfügbar, wenn F-Droid als System-App installiert wurde.</string>
|
||||
<string name="system_install_denied_title">Systemberechtigungen verweigert</string>
|
||||
<string name="system_install_denied_body">Diese Option ist nur verfügbar, wenn F-Droid als System-App installiert wurde.</string>
|
||||
<string name="app_description">F-Droid ist ein installierbarer App-Store für FOSS (Freie und Quelloffene Software) Anwendungen für die Android-Plattform. Der Client macht es auf deinem Gerät einfach zu durchsuchen, zu installieren und Aktualisierungen zu verfolgen.</string>
|
||||
<string name="swap_nfc_description">Wenn Sie die Telefone mit Ihrem Freund aneinander halten.</string>
|
||||
<string name="swap_join_same_wifi">Treten Sie dem gleichen WLAN-Netzwerk bei wie Ihr Freund</string>
|
||||
|
@ -183,8 +183,8 @@ Deberías tener cuidado con aplicaciones descargadas desde índices no firmados.
|
||||
<string name="root_access_denied_title">Acceso «root» denegado</string>
|
||||
<string name="root_access_denied_body">El dispositivo Android no está «rooteado» o se ha denegado el acceso «root» para F-Droid.</string>
|
||||
<string name="update_all">Actualizar todo</string>
|
||||
<string name="system_permission_denied_title">F-Droid con permisos de sistema no está disponible</string>
|
||||
<string name="system_permission_denied_body">Esta opción sólo está disponible cuando F-Droid está instalado con permisos de sistema.</string>
|
||||
<string name="system_install_denied_title">F-Droid con permisos de sistema no está disponible</string>
|
||||
<string name="system_install_denied_body">Esta opción sólo está disponible cuando F-Droid está instalado con permisos de sistema.</string>
|
||||
<string name="app_description">F-Droid es un catálogo instalable de aplicaciones FOSS (Software libre y de Código Abierto) para la plataforma Android. El cliente hace que sea fácil navegar, instalar y mantener un registro de cambios en el dispositivo.</string>
|
||||
<string name="swap_nfc_description">Si tu amigo tiene F-Droid y NFC encendido, colocad los un teléfonos una contra el otro.</string>
|
||||
<string name="swap_join_same_wifi">Unirse a la misma Red Wi-Fi que tu amigo</string>
|
||||
|
@ -151,8 +151,8 @@ Sinun pitää
|
||||
<string name="root_access_denied_title">Root-oikeudet kielletty</string>
|
||||
<string name="root_access_denied_body">Joko Android-laitettasi ei ole rootattu tai olet kieltänyt F-Droidin root-oikeuksiin pääsyn.</string>
|
||||
<string name="update_all">Päivitä kaikki</string>
|
||||
<string name="system_permission_denied_title">Järjestelmäasetukset kielletty</string>
|
||||
<string name="system_permission_denied_body">Tämä asetus on käytössä vain silloin, kun F-Droid on asennettu järjestelmäsovellukseksi.</string>
|
||||
<string name="system_install_denied_title">Järjestelmäasetukset kielletty</string>
|
||||
<string name="system_install_denied_body">Tämä asetus on käytössä vain silloin, kun F-Droid on asennettu järjestelmäsovellukseksi.</string>
|
||||
<string name="app_description">F-Droid on asennettava FOSS-sovellusten hakemisto (Free and Open Source Software) Androidille. Asiakasohjelma helpottaa selailemista, asentamista ja laitteesi pitämistä päivitettynä.</string>
|
||||
<string name="swap_nfc_description">Jos ystävälläsi on koskekaa puhelimianne yhtäaikaa.</string>
|
||||
<string name="swap_join_same_wifi">Liity ystäväsi kanssa samaan WiFi-verkkoon</string>
|
||||
|
@ -182,8 +182,8 @@ Publiée sous licence GNU GPLv3.</string>
|
||||
<string name="root_access_denied_title">Droits root refusés</string>
|
||||
<string name="root_access_denied_body">Soit votre système Android n\'a pas les droits root/SuperUser, soit vous les avez refusés à F-Droid.</string>
|
||||
<string name="update_all">Tout mettre à jour</string>
|
||||
<string name="system_permission_denied_title">Permissions systèmes refusées</string>
|
||||
<string name="system_permission_denied_body">Cette option est seulement disponible quand F-Droid est installé comme application-système.</string>
|
||||
<string name="system_install_denied_title">Permissions systèmes refusées</string>
|
||||
<string name="system_install_denied_body">Cette option est seulement disponible quand F-Droid est installé comme application-système.</string>
|
||||
<string name="app_description">F-Droid est un catalogue installable de logiciels libres et open source pour le système Android. Le client permet une navigation facile, l\'installation, et garder une trace des mises à jour sur votre appareil.</string>
|
||||
<string name="swap_join_same_wifi">Se connecter au même Wi-Fi que votre ami</string>
|
||||
<string name="menu_swap">Échanger des apps</string>
|
||||
|
@ -179,8 +179,8 @@ Prova a collegarti a questa rete: %s</string>
|
||||
<string name="root_access_denied_title">Accesso Root negato</string>
|
||||
<string name="root_access_denied_body">Il tuo telefono non ha i permessi di root oppure li hai negati ad F-Droid.</string>
|
||||
<string name="update_all">Aggiorna tutto</string>
|
||||
<string name="system_permission_denied_title">Permessi di sistema negati</string>
|
||||
<string name="system_permission_denied_body">Questa opzione è disponibile solo quando F-Droid è installato come app di sistema.</string>
|
||||
<string name="system_install_denied_title">Permessi di sistema negati</string>
|
||||
<string name="system_install_denied_body">Questa opzione è disponibile solo quando F-Droid è installato come app di sistema.</string>
|
||||
<string name="app_description">F-Droid è un catalogo installabile di applicazioni FOSS (Free and Open Source Software) per Android. Il client rende semplice cercare, installare e tenere traccia deglii aggiornamenti sul tuo dispositivo.</string>
|
||||
<string name="swap_join_same_wifi">Collegati alla stessa WiFi del tuo amico</string>
|
||||
<string name="menu_swap">Invia apps</string>
|
||||
|
@ -179,8 +179,8 @@
|
||||
<string name="root_access_denied_title">管理者権限での接続が拒絶されました</string>
|
||||
<string name="root_access_denied_body">この端末はroot化されていないか、F-Droidの管理者権限要求が拒絶されされました。</string>
|
||||
<string name="update_all">全て更新</string>
|
||||
<string name="system_permission_denied_title">システムアクセス許可が拒絶されました</string>
|
||||
<string name="system_permission_denied_body">この設定は、F-Droidがシステムアプリとしてインストールされているときのみ有効です。</string>
|
||||
<string name="system_install_denied_title">システムアクセス許可が拒絶されました</string>
|
||||
<string name="system_install_denied_body">この設定は、F-Droidがシステムアプリとしてインストールされているときのみ有効です。</string>
|
||||
<string name="app_description">F-DroidはAndroidプラットフォーム向けFOSS(フリーのオープンソースソフトウェア) アプリケーションのインストール可能なカタログです。このクライアントで、お使いの端末で簡単に参照、インストール、および更新履歴を記録することができます。</string>
|
||||
<string name="swap_nfc_description">友達がF-DroidとNFCを持っていれば、一緒に電話をタッチしてください。</string>
|
||||
<string name="swap_join_same_wifi">友達として同じWi-Fiに参加</string>
|
||||
|
@ -178,8 +178,8 @@ GNU GPLv3 라이센스 하에 배포됩니다.</string>
|
||||
<string name="root_access_denied_title">루트 권한 거부됨</string>
|
||||
<string name="root_access_denied_body">기기가 루팅되지 않았거나 F-Droid의 루트 권한 요청을 거부한 경우입니다.</string>
|
||||
<string name="update_all">모두 업데이트</string>
|
||||
<string name="system_permission_denied_title">시스템 권한 거부됨</string>
|
||||
<string name="system_permission_denied_body">이 옵션은 F-Droid가 시스템 앱으로 설치된 경우에만 사용 가능합니다.</string>
|
||||
<string name="system_install_denied_title">시스템 권한 거부됨</string>
|
||||
<string name="system_install_denied_body">이 옵션은 F-Droid가 시스템 앱으로 설치된 경우에만 사용 가능합니다.</string>
|
||||
<string name="app_description">F-Droid는 안드로이드 플랫폼을 위한 \'오픈 소스 및 자유 소프트웨어(FOSS)\' 앱들의 설치 목록입니다. F-Droid는 기기에서 앱들을 쉽게 검색, 설치, 업데이트를 할 수 있게 해줍니다.</string>
|
||||
<string name="swap_nfc_description">기기를 서로 맞대어 놓으세요.</string>
|
||||
<string name="swap_join_same_wifi">같은 WiFi 네트워크에 접속하세요</string>
|
||||
|
@ -188,8 +188,8 @@ Du må
|
||||
<string name="root_access_denied_title">Root tilgang nektet</string>
|
||||
<string name="root_access_denied_body">Enten mangler din Android-enhet superbrukertilgang, eller så har du nektet F-droid root-tilgang.</string>
|
||||
<string name="update_all">Oppdater alle</string>
|
||||
<string name="system_permission_denied_title">System-rettigheter avslått</string>
|
||||
<string name="system_permission_denied_body">Dette valget er bare tilgjengelig når F-Droid er installert som system-program.</string>
|
||||
<string name="system_install_denied_title">System-rettigheter avslått</string>
|
||||
<string name="system_install_denied_body">Dette valget er bare tilgjengelig når F-Droid er installert som system-program.</string>
|
||||
<string name="app_description">F-droid er en ansamling fri programvare som kan installeres på Android-plattformen. Klienten gjør det enkelt å sjekke ut, installere og holde øye med oppdateringer på din enhet.</string>
|
||||
<string name="swap_nfc_description">Hvis du og din venn holder telefonene deres sammen.</string>
|
||||
<string name="swap_join_same_wifi">Koble til samme Wi-Fi-nett som din venn</string>
|
||||
|
@ -176,8 +176,8 @@
|
||||
<string name="root_access_denied_title">Root toegang geweigerd</string>
|
||||
<string name="root_access_denied_body">Uw Android apparaat is niet geroot, of u heeft F-Droid geen root toegang gegeven.</string>
|
||||
<string name="update_all">Update alles</string>
|
||||
<string name="system_permission_denied_title">Systeemrechten geweigerd</string>
|
||||
<string name="system_permission_denied_body">Deze optie is alleen beschikbaar als F-Droid als systeemapp geïnstalleerd is.</string>
|
||||
<string name="system_install_denied_title">Systeemrechten geweigerd</string>
|
||||
<string name="system_install_denied_body">Deze optie is alleen beschikbaar als F-Droid als systeemapp geïnstalleerd is.</string>
|
||||
<string name="app_description">F-Droid is een installeerbare cataloges van FOSS (Vrije en Open Source Software) apps voor Android. Het programma maakt het gemakkelijk om door apps te bladeren, te installeren en up-to-date te houden.</string>
|
||||
<string name="swap_join_same_wifi">Verbind met hetzelfde Wi-Fi netwerk als jouw vriend</string>
|
||||
<string name="menu_swap">Deel apps</string>
|
||||
|
@ -137,8 +137,8 @@ Uwaga: Wszystkie poprzednio zainstalowane aplikacje zostaną na urządzeniu.</st
|
||||
<string name="root_access_denied_title">Odmówiono uprawnień roota</string>
|
||||
<string name="root_access_denied_body">Urządzenie nie zostało zrootowane lub odmówiono uprawnień roota F-Droidowi.</string>
|
||||
<string name="update_all">Uaktualnij wszystko</string>
|
||||
<string name="system_permission_denied_title">Odmówiono uprawnień systemowych</string>
|
||||
<string name="system_permission_denied_body">Opcja dostępna tylko wtedy, gdy F-Droid został zainstalowany jako aplikacja systemowa.</string>
|
||||
<string name="system_install_denied_title">Odmówiono uprawnień systemowych</string>
|
||||
<string name="system_install_denied_body">Opcja dostępna tylko wtedy, gdy F-Droid został zainstalowany jako aplikacja systemowa.</string>
|
||||
<string name="app_description">F-Droid jest katalogiem aplikacji FOSS (Wolne i Otwarte Oprogramowanie) dla platformy Android. Klient umożliwia łatwe przeglądanie, instalowanie i zarządzanie aktualizacjami na Twoim urządzeniu.</string>
|
||||
<string name="swap_nfc_description">Jeśli oba urządzenie mają F-Droida i NFC, możecie je zbliżyć do siebie.</string>
|
||||
<string name="swap_join_same_wifi">Połącz się z tą samą siecią Wi-Fi</string>
|
||||
|
@ -181,8 +181,8 @@ com aplicativos baixados a partir de índices não assinados.</string>
|
||||
<string name="root_access_denied_title">Acesso root negado</string>
|
||||
<string name="root_access_denied_body">Ou o seu dispositivo Android não está \"rooteado\" ou você recusou o acesso root para o F-Droid.</string>
|
||||
<string name="update_all">Atualizar tudo</string>
|
||||
<string name="system_permission_denied_title">Permissões do sistema negadas</string>
|
||||
<string name="system_permission_denied_body">Esta opção só está disponível quando o F-Droid está instalado como um aplicativo de sistema.</string>
|
||||
<string name="system_install_denied_title">Permissões do sistema negadas</string>
|
||||
<string name="system_install_denied_body">Esta opção só está disponível quando o F-Droid está instalado como um aplicativo de sistema.</string>
|
||||
<string name="app_description">F-Droid é um catálogo instalável de aplicativos FOSS (Software Livre e de Código Aberto) para a plataforma Android. O cliente faz com que seja fácil navegar, instalar e manter o controle das atualizações no seu dispositivo.</string>
|
||||
<string name="swap_nfc_description">Caso seu(sua) amigo(a) encoste o telefone dele(a) junto ao seu.</string>
|
||||
<string name="swap_join_same_wifi">Juntar-se a mesma rede Wi-Fi do(a) seu(sua) amigo(a)</string>
|
||||
|
@ -177,8 +177,8 @@
|
||||
<string name="root_access_denied_title">Отказано в root доступе</string>
|
||||
<string name="root_access_denied_body">Либо у вашего устройства нет root доступа, либо вы отклонили запрос от F-Droid.</string>
|
||||
<string name="update_all">Обновить всё</string>
|
||||
<string name="system_permission_denied_title">Запрос на системные привилегии отклонён</string>
|
||||
<string name="system_permission_denied_body">Данная опция доступна только если F-Droid установлен как системное приложение.</string>
|
||||
<string name="system_install_denied_title">Запрос на системные привилегии отклонён</string>
|
||||
<string name="system_install_denied_body">Данная опция доступна только если F-Droid установлен как системное приложение.</string>
|
||||
<string name="app_description">F-Droid — каталог FOSS (свободного и открытого программного обеспечения) для платформы Android. Клиент позволяет с лёгкостью просматривать, устанавливать и обновлять приложение на вашем устройстве.</string>
|
||||
<string name="swap_join_same_wifi">Подключиться к той же Wi-Fi сети, что и ваш друг</string>
|
||||
<string name="menu_swap">Обмен приложениями</string>
|
||||
|
@ -179,8 +179,8 @@ Intregadu cun sa litzèntzia
|
||||
<string name="root_access_denied_title">Atzessu root dennegadu</string>
|
||||
<string name="root_access_denied_body">Su dispositivu tuo non tenet sos permissos de root o non los as datu a F-droid.</string>
|
||||
<string name="update_all">Agiorna totu</string>
|
||||
<string name="system_permission_denied_title">Permissos de sistema dennegados</string>
|
||||
<string name="system_permission_denied_body">Custa optzione est disponìbile petzi cando F-Droid est installadu comente aplicatzione de sistema.</string>
|
||||
<string name="system_install_denied_title">Permissos de sistema dennegados</string>
|
||||
<string name="system_install_denied_body">Custa optzione est disponìbile petzi cando F-Droid est installadu comente aplicatzione de sistema.</string>
|
||||
<string name="app_description">F-Droid est unu catàlogu installàbile de FOSS (Free and Open Source Software - Aplicatziones lìberas e a mitza aberta) pro Android. S\'aplicatzione-client permitit de chircare, installare, e compidare sos agiornamentos in su dispositivu tuo.</string>
|
||||
<string name="swap_nfc_description">Si s\'amigu tuo tenet pone a cuntatu sos duos dispositivos.</string>
|
||||
<string name="swap_join_same_wifi">Intra in sa matessi retza Wi-Fi de s\'amigu tuo</string>
|
||||
|
@ -175,8 +175,8 @@ Vydaný pod licenciou
|
||||
<string name="root_access_denied_title">Root prístup zamietnutý</string>
|
||||
<string name="root_access_denied_body">Buď vaše zariadenie s Androidom nemá urobený root alebo ste odmietli root prístup pre F-Droid.</string>
|
||||
<string name="update_all">Aktualizovať všetko</string>
|
||||
<string name="system_permission_denied_title">Systémové povolenia zamietnuté</string>
|
||||
<string name="system_permission_denied_body">Táto možnosť je dostupná iba ak je F-Droid inštalovaný ako systémová aplikácia.</string>
|
||||
<string name="system_install_denied_title">Systémové povolenia zamietnuté</string>
|
||||
<string name="system_install_denied_body">Táto možnosť je dostupná iba ak je F-Droid inštalovaný ako systémová aplikácia.</string>
|
||||
<string name="app_description">F-Droid je inštalovateľný katalóg FOSS (Free a Open Source Software) aplikácií pre platformu Android. Klient umožňuje ľahko prechádzať, inštalovať, a sledovať aktualizácie na vašom zariadení.</string>
|
||||
<string name="swap_nfc_description">Ak má váš kamarát F-Droid a zapnuté NFC, spojte prosím telefóny dohromady.</string>
|
||||
<string name="swap_join_same_wifi">Pripojte sa na rovnaké Wi-fi ako kamarát</string>
|
||||
|
@ -175,8 +175,8 @@
|
||||
<string name="root_access_denied_title">Корени приступ одбијен</string>
|
||||
<string name="root_access_denied_body">Или ваш Андроид уређај није рутован или сте Ф-дроиду одбили корени приступ.</string>
|
||||
<string name="update_all">Надогради све</string>
|
||||
<string name="system_permission_denied_title">Системске дозволе одбијене</string>
|
||||
<string name="system_permission_denied_body">Ова опција доступна само када је Ф-дроид инсталиран као системска апликација.</string>
|
||||
<string name="system_install_denied_title">Системске дозволе одбијене</string>
|
||||
<string name="system_install_denied_body">Ова опција доступна само када је Ф-дроид инсталиран као системска апликација.</string>
|
||||
<string name="app_description">Ф-дроид је каталог ФОСС (слободан и софтвер отвореног кôда) апликација за Андроид платформу. Клијент олакшава претрагу, инсталацију и праћење надоградњи на вашем уређају.</string>
|
||||
<string name="swap_nfc_description">Ако ваш пријатељ има НФЦ, спојите телефоне.</string>
|
||||
<string name="swap_join_same_wifi">Повежите се на исту бежичну мрежу на којој је ваш пријатељ</string>
|
||||
|
@ -177,8 +177,8 @@ Släppt under licensen GNU GPLv3.</string>
|
||||
<string name="root_access_denied_title">Root-åtkomst nekad</string>
|
||||
<string name="root_access_denied_body">Antingen är din Android-enhet inte rootad eller så har du nekat root-åtkomst för F-Droid.</string>
|
||||
<string name="update_all">Uppdatera alla</string>
|
||||
<string name="system_permission_denied_title">Systembehörigheter nekade</string>
|
||||
<string name="system_permission_denied_body">Detta val är endast tillgängligt när F-Droid installerats som en system-app.</string>
|
||||
<string name="system_install_denied_title">Systembehörigheter nekade</string>
|
||||
<string name="system_install_denied_body">Detta val är endast tillgängligt när F-Droid installerats som en system-app.</string>
|
||||
<string name="app_description">F-Droid är en installerbar katalog av fri och öppen källkodsprogramvara (FOSS) för Android-plattformen. Klienten gör det enkelt att bläddra bland, installera och hålla koll på uppdateringar på din enhet.</string>
|
||||
<string name="swap_join_same_wifi">Använd samma wifi som din vän</string>
|
||||
<string name="menu_swap">Byt appar</string>
|
||||
|
@ -190,8 +190,8 @@ Ondan uygulama indirmek için bu depoyu tekrar etkinleştirmeniz gerekecektir.</
|
||||
<string name="root_access_denied_title">Root erişimi engellendi</string>
|
||||
<string name="root_access_denied_body">Ya Android cihazınız rootlu değil ya da F-Droid için root erişimini engellediniz.</string>
|
||||
<string name="update_all">Tümünü güncelle</string>
|
||||
<string name="system_permission_denied_title">Sistem izinleri reddedildi</string>
|
||||
<string name="system_permission_denied_body">Bu seçenek sadece F-Droid bir sistem uygulaması olarak kurulduğunda mevcuttur.</string>
|
||||
<string name="system_install_denied_title">Sistem izinleri reddedildi</string>
|
||||
<string name="system_install_denied_body">Bu seçenek sadece F-Droid bir sistem uygulaması olarak kurulduğunda mevcuttur.</string>
|
||||
<string name="app_description">F-Droid, Android platformu için kurulabilir Özgür ve Açık Kaynaklı Yazılım kataloğudur. İstemci cihazınızda uygulama taramayı, kurmayı ve güncellemeyi kolaylaştırır.</string>
|
||||
<string name="swap_nfc_description">Arkadaşınızda NFC varsa telefonlarınızı birbirine dokundurun.</string>
|
||||
<string name="swap_join_same_wifi">Arkadaşınızla aynı kablosuz ağda bulunun</string>
|
||||
|
@ -161,8 +161,8 @@
|
||||
<string name="root_access_denied_title">Bị từ chối quyền root</string>
|
||||
<string name="root_access_denied_body">Thiết bị của bạn chưa được root hoặc bạn đã từ chối quyền root của F-Droid.</string>
|
||||
<string name="update_all">Cập nhật tất cả</string>
|
||||
<string name="system_permission_denied_title">Bị từ chối quyền hệ thống</string>
|
||||
<string name="system_permission_denied_body">Chỉ có tuỳ chọn này khi F-Droid được cài làm ứng dụng hệ thống.</string>
|
||||
<string name="system_install_denied_title">Bị từ chối quyền hệ thống</string>
|
||||
<string name="system_install_denied_body">Chỉ có tuỳ chọn này khi F-Droid được cài làm ứng dụng hệ thống.</string>
|
||||
<string name="app_description">F-Droid là một kho ứng dụng FOSS (tự do và mã nguồn mở) cài đặt được trên nền tảng Android. Ứng dụng F-Droid giúp bạn tìm kiếm, cài đặt và theo dõi cập nhật dễ dàng hơn.</string>
|
||||
<string name="swap_nfc_description">Nếu bạn của bạn có NFC, hãy chạm hai điện thoại vào nhau.</string>
|
||||
<string name="swap_join_same_wifi">Vào cùng một mạng Wi-Fi với bạn của bạn</string>
|
||||
|
@ -145,7 +145,7 @@
|
||||
<string name="requesting_root_access_body">要求 root 權限中…</string>
|
||||
<string name="root_access_denied_title">Root 權限被拒絕</string>
|
||||
<string name="update_all">更新所有應用程式</string>
|
||||
<string name="system_permission_denied_title">系統權限被拒絕</string>
|
||||
<string name="system_install_denied_title">系統權限被拒絕</string>
|
||||
<string name="app_description">F-Droid 是一個為 Android 而設,可供安裝的自由開源應用程式目錄。F-Droid 讓您更容易瀏覽、安裝和管理在您裝置上的應用程式更新。</string>
|
||||
<string name="menu_swap">交換應用程式</string>
|
||||
<string name="swap">交換應用程式</string>
|
||||
|
@ -27,10 +27,10 @@
|
||||
<string name="notify_on">Show a notification when updates are available</string>
|
||||
<string name="update_history">Update history</string>
|
||||
<string name="update_history_summ">Days to consider apps new or recent: %s</string>
|
||||
<string name="system_installer">Enable privileged F-Droid</string>
|
||||
<string name="system_installer_on">Use privileged permissions to install, update, and remove packages</string>
|
||||
<string name="uninstall_system">Uninstall privileged F-Droid</string>
|
||||
<string name="uninstall_system_summary">Uninstalls the additional privileged F-Droid app</string>
|
||||
<string name="system_installer">Privileged Extension</string>
|
||||
<string name="system_installer_on">Use F-Droid Privileged Extension to install, update, and remove packages</string>
|
||||
<string name="uninstall_system">Update/Uninstall Privileged Extension</string>
|
||||
<string name="uninstall_system_summary">Open details screen of Privileged Extension to update/uninstall it.</string>
|
||||
<string name="local_repo_name">Name of your Local Repo</string>
|
||||
<string name="local_repo_name_summary">The advertised title of your local repo: %s</string>
|
||||
<string name="local_repo_https">Use Private Connection</string>
|
||||
@ -257,23 +257,27 @@
|
||||
<string name="install_error_cannot_parse">An error occurred while parsing the package</string>
|
||||
<string name="uninstall_error_title">Uninstall error</string>
|
||||
<string name="uninstall_error_unknown">Failed to uninstall due to an unknown error</string>
|
||||
<string name="system_permission_denied_title">Privileged F-Droid is not available</string>
|
||||
<string name="system_permission_denied_body">This option is only available when privileged F-Droid is installed.</string>
|
||||
<string name="system_permission_install_via_root">Install privileged F-Droid</string>
|
||||
<string name="system_install_first_time_notification">Install privileged F-Droid?</string>
|
||||
<string name="system_install_denied_title">F-Droid Privileged Extension is not available</string>
|
||||
<string name="system_install_denied_body">This option is only available when F-Droid Privileged Extension is installed.</string>
|
||||
<string name="system_install_denied_signature">The signature of the extension is wrong! Please create a bug report!</string>
|
||||
<string name="system_install_denied_permissions">The privileged permissions have not been granted to the extension! Please create a bug report!</string>
|
||||
<string name="system_install_button_install">Install</string>
|
||||
<string name="system_install_button_open">Open Extension</string>
|
||||
<string name="system_install_first_time_notification">Install F-Droid Privileged Extension?</string>
|
||||
<string name="system_install_first_time_notification_message_short">Touch for more information.</string>
|
||||
<string name="system_install_first_time_notification_message">Touch to install privileged F-Droid, tightly coupled with the Android operating system. This allows F-Droid to install, upgrade and uninstall apps on its own.\nYou can also do this later from F-Droid\'s preferences.</string>
|
||||
<string name="system_install_post_success">Successfully installed privileged F-Droid</string>
|
||||
<string name="system_install_post_fail">Installation of privileged F-Droid failed</string>
|
||||
<string name="system_install_post_success_message">Privileged F-Droid has been successfully installed. This allows F-Droid to install, upgrade and uninstall apps on its own.</string>
|
||||
<string name="system_install_post_fail_message">The installation of privileged F-Droid has failed. The installation method is not supported by all Android distributions, please consult the F-Droid bug tracker for more information.</string>
|
||||
<string name="system_install_installing">Installing…</string>
|
||||
<string name="system_install_uninstalling">Uninstalling…</string>
|
||||
<string name="system_install_question">Do you want to install privileged F-Droid?\nThis takes up to 10 seconds.</string>
|
||||
<string name="system_install_question_lollipop">Do you want to install privileged F-Droid?\nThis takes up to 10 seconds and the device will be rebooted afterwards.</string>
|
||||
<string name="system_install_first_time_message">Looks like you have root access on your device. You can now install privileged F-Droid, tightly coupled with the Android operating system. This allows F-Droid to install, upgrade and uninstall apps on its own.</string>
|
||||
<string name="system_uninstall">Do you want to uninstall privileged F-Droid?</string>
|
||||
<string name="system_uninstall_message">This will uninstall privileged F-Droid.</string>
|
||||
<string name="system_install_first_time_notification_message">Touch to install F-Droid Privileged Extension, tightly coupled with the Android operating system. This allows F-Droid to install, upgrade and uninstall apps on its own.\nYou can also do this later from F-Droid\'s preferences.</string>
|
||||
<string name="system_install_post_success">Successfully installed F-Droid Privileged Extension</string>
|
||||
<string name="system_install_post_fail">Installation of F-Droid Privileged Extension failed</string>
|
||||
<string name="system_install_post_success_message">F-Droid Privileged Extension has been successfully installed. This allows F-Droid to install, upgrade and uninstall apps on its own.</string>
|
||||
<string name="system_install_post_fail_message">The installation of F-Droid Privileged Extension has failed. The installation method is not supported by all Android distributions, please consult the F-Droid bug tracker for more information.</string>
|
||||
<string name="system_install_installing">installing…</string>
|
||||
<string name="system_install_installing_rebooting">installing and rebooting…</string>
|
||||
<string name="system_install_uninstalling">uninstalling…</string>
|
||||
<string name="system_install_question">Do you want to install F-Droid Privileged Extension?</string>
|
||||
<string name="system_install_warning">This takes up to 10 seconds.</string>
|
||||
<string name="system_install_warning_lollipop">This takes up to 10 seconds and the device will be <b>rebooted</b> afterwards.</string>
|
||||
<string name="system_install_first_time_message">Looks like you have root access on your device. You can now install F-Droid Privileged Extension, tightly coupled with the Android operating system. This allows F-Droid to install, upgrade and uninstall apps on its own.</string>
|
||||
<string name="system_uninstall">Do you want to uninstall F-Droid Privileged Extension?</string>
|
||||
<string name="system_uninstall_button">Uninstall</string>
|
||||
|
||||
<string name="app_description">F-Droid is an installable catalogue of FOSS (Free and Open Source Software) applications for the Android platform. The client makes it easy to browse, install, and keep track of updates on your device.</string>
|
||||
|
@ -43,7 +43,7 @@ import android.widget.Toast;
|
||||
import org.fdroid.fdroid.compat.TabManager;
|
||||
import org.fdroid.fdroid.data.AppProvider;
|
||||
import org.fdroid.fdroid.data.NewRepoConfig;
|
||||
import org.fdroid.fdroid.privileged.install.InstallPrivilegedDialogActivity;
|
||||
import org.fdroid.fdroid.privileged.install.InstallExtensionDialogActivity;
|
||||
import org.fdroid.fdroid.views.AppListFragmentPagerAdapter;
|
||||
import org.fdroid.fdroid.views.ManageReposActivity;
|
||||
import org.fdroid.fdroid.views.swap.SwapWorkflowActivity;
|
||||
@ -97,7 +97,7 @@ public class FDroid extends ActionBarActivity {
|
||||
Uri uri = AppProvider.getContentUri();
|
||||
getContentResolver().registerContentObserver(uri, true, new AppObserver());
|
||||
|
||||
InstallPrivilegedDialogActivity.firstTime(this);
|
||||
InstallExtensionDialogActivity.firstTime(this);
|
||||
|
||||
if (UpdateService.isNetworkAvailableForUpdate(this)) {
|
||||
UpdateService.updateNow(this);
|
||||
|
@ -27,7 +27,7 @@ import android.util.Log;
|
||||
|
||||
import org.fdroid.fdroid.Preferences;
|
||||
import org.fdroid.fdroid.Utils;
|
||||
import org.fdroid.fdroid.privileged.install.InstallPrivilegedDialogActivity;
|
||||
import org.fdroid.fdroid.privileged.install.InstallExtensionDialogActivity;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
@ -109,7 +109,8 @@ abstract public class Installer {
|
||||
// system permissions and pref enabled -> SystemInstaller
|
||||
boolean isSystemInstallerEnabled = Preferences.get().isPrivilegedInstallerEnabled();
|
||||
if (isSystemInstallerEnabled) {
|
||||
if (PrivilegedInstaller.isAvailable(activity)) {
|
||||
if (PrivilegedInstaller.isExtensionInstalledCorrectly(activity)
|
||||
== PrivilegedInstaller.IS_EXTENSION_INSTALLED_YES) {
|
||||
Utils.debugLog(TAG, "system permissions -> SystemInstaller");
|
||||
|
||||
try {
|
||||
@ -154,8 +155,8 @@ abstract public class Installer {
|
||||
return;
|
||||
}
|
||||
|
||||
// special case: Install F-Droid Privileged
|
||||
if (packageName != null && packageName.equals(PrivilegedInstaller.PRIVILEGED_PACKAGE_NAME)) {
|
||||
// special case: F-Droid Privileged Extension
|
||||
if (packageName != null && packageName.equals(PrivilegedInstaller.PRIVILEGED_EXTENSION_PACKAGE_NAME)) {
|
||||
Activity activity;
|
||||
try {
|
||||
activity = (Activity) mContext;
|
||||
@ -164,9 +165,9 @@ abstract public class Installer {
|
||||
return;
|
||||
}
|
||||
|
||||
Intent installIntent = new Intent(activity, InstallPrivilegedDialogActivity.class);
|
||||
installIntent.setAction(InstallPrivilegedDialogActivity.ACTION_INSTALL);
|
||||
installIntent.putExtra(InstallPrivilegedDialogActivity.EXTRA_INSTALL_APK, apkFile.getAbsolutePath());
|
||||
Intent installIntent = new Intent(activity, InstallExtensionDialogActivity.class);
|
||||
installIntent.setAction(InstallExtensionDialogActivity.ACTION_INSTALL);
|
||||
installIntent.putExtra(InstallExtensionDialogActivity.EXTRA_INSTALL_APK, apkFile.getAbsolutePath());
|
||||
activity.startActivity(installIntent);
|
||||
return;
|
||||
}
|
||||
@ -195,6 +196,22 @@ abstract public class Installer {
|
||||
return;
|
||||
}
|
||||
|
||||
// special case: F-Droid Privileged Extension
|
||||
if (packageName != null && packageName.equals(PrivilegedInstaller.PRIVILEGED_EXTENSION_PACKAGE_NAME)) {
|
||||
Activity activity;
|
||||
try {
|
||||
activity = (Activity) mContext;
|
||||
} catch (ClassCastException e) {
|
||||
Log.d(TAG, "F-Droid Privileged can only be uninstalled using an activity!");
|
||||
return;
|
||||
}
|
||||
|
||||
Intent uninstallIntent = new Intent(activity, InstallExtensionDialogActivity.class);
|
||||
uninstallIntent.setAction(InstallExtensionDialogActivity.ACTION_UNINSTALL);
|
||||
activity.startActivity(uninstallIntent);
|
||||
return;
|
||||
}
|
||||
|
||||
deletePackageInternal(packageName);
|
||||
}
|
||||
|
||||
|
@ -74,28 +74,40 @@ public class PrivilegedInstaller extends Installer {
|
||||
|
||||
private static final String TAG = "PrivilegedInstaller";
|
||||
|
||||
private static final String PRIVILEGED_SERVICE_INTENT = "org.fdroid.fdroid.privileged.IPrivilegedService";
|
||||
public static final String PRIVILEGED_PACKAGE_NAME = "org.fdroid.fdroid.privileged";
|
||||
private static final String PRIVILEGED_EXTENSION_SERVICE_INTENT = "org.fdroid.fdroid.privileged.IPrivilegedService";
|
||||
public static final String PRIVILEGED_EXTENSION_PACKAGE_NAME = "org.fdroid.fdroid.privileged";
|
||||
|
||||
private Activity mActivity;
|
||||
|
||||
public static final int REQUEST_CONFIRM_PERMS = 0;
|
||||
|
||||
public static final int IS_EXTENSION_INSTALLED_NO = 0;
|
||||
public static final int IS_EXTENSION_INSTALLED_YES = 1;
|
||||
public static final int IS_EXTENSION_INSTALLED_SIGNATURE_PROBLEM = 2;
|
||||
public static final int IS_EXTENSION_INSTALLED_PERMISSIONS_PROBLEM = 3;
|
||||
|
||||
public PrivilegedInstaller(Activity activity, PackageManager pm,
|
||||
InstallerCallback callback) throws AndroidNotCompatibleException {
|
||||
super(activity, pm, callback);
|
||||
this.mActivity = activity;
|
||||
}
|
||||
|
||||
public static boolean isAvailable(Context context) {
|
||||
|
||||
// check if installed
|
||||
public static boolean isExtensionInstalled(Context context) {
|
||||
PackageManager pm = context.getPackageManager();
|
||||
try {
|
||||
pm.getPackageInfo(PRIVILEGED_PACKAGE_NAME, PackageManager.GET_ACTIVITIES);
|
||||
pm.getPackageInfo(PRIVILEGED_EXTENSION_PACKAGE_NAME, PackageManager.GET_ACTIVITIES);
|
||||
return true;
|
||||
} catch (PackageManager.NameNotFoundException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static int isExtensionInstalledCorrectly(Context context) {
|
||||
|
||||
// check if installed
|
||||
if (!isExtensionInstalled(context)) {
|
||||
return IS_EXTENSION_INSTALLED_NO;
|
||||
}
|
||||
|
||||
// check if it has the privileged permissions granted
|
||||
final Object mutex = new Object();
|
||||
@ -119,10 +131,15 @@ public class PrivilegedInstaller extends Installer {
|
||||
public void onServiceDisconnected(ComponentName name) {
|
||||
}
|
||||
};
|
||||
Intent serviceIntent = new Intent(PRIVILEGED_SERVICE_INTENT);
|
||||
serviceIntent.setPackage(PRIVILEGED_PACKAGE_NAME);
|
||||
Intent serviceIntent = new Intent(PRIVILEGED_EXTENSION_SERVICE_INTENT);
|
||||
serviceIntent.setPackage(PRIVILEGED_EXTENSION_PACKAGE_NAME);
|
||||
|
||||
try {
|
||||
context.getApplicationContext().bindService(serviceIntent, mServiceConnection,
|
||||
Context.BIND_AUTO_CREATE);
|
||||
} catch (SecurityException e) {
|
||||
return IS_EXTENSION_INSTALLED_SIGNATURE_PROBLEM;
|
||||
}
|
||||
|
||||
synchronized (mutex) {
|
||||
try {
|
||||
@ -132,7 +149,12 @@ public class PrivilegedInstaller extends Installer {
|
||||
}
|
||||
}
|
||||
|
||||
return (returnBundle.getBoolean("has_permission", false));
|
||||
boolean hasPermissions = returnBundle.getBoolean("has_permissions", false);
|
||||
if (hasPermissions) {
|
||||
return IS_EXTENSION_INSTALLED_YES;
|
||||
} else {
|
||||
return IS_EXTENSION_INSTALLED_PERMISSIONS_PROBLEM;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -210,8 +232,8 @@ public class PrivilegedInstaller extends Installer {
|
||||
}
|
||||
};
|
||||
|
||||
Intent serviceIntent = new Intent(PRIVILEGED_SERVICE_INTENT);
|
||||
serviceIntent.setPackage(PRIVILEGED_PACKAGE_NAME);
|
||||
Intent serviceIntent = new Intent(PRIVILEGED_EXTENSION_SERVICE_INTENT);
|
||||
serviceIntent.setPackage(PRIVILEGED_EXTENSION_PACKAGE_NAME);
|
||||
mContext.getApplicationContext().bindService(serviceIntent, mServiceConnection,
|
||||
Context.BIND_AUTO_CREATE);
|
||||
}
|
||||
@ -316,8 +338,8 @@ public class PrivilegedInstaller extends Installer {
|
||||
}
|
||||
};
|
||||
|
||||
Intent serviceIntent = new Intent(PRIVILEGED_SERVICE_INTENT);
|
||||
serviceIntent.setPackage(PRIVILEGED_PACKAGE_NAME);
|
||||
Intent serviceIntent = new Intent(PRIVILEGED_EXTENSION_SERVICE_INTENT);
|
||||
serviceIntent.setPackage(PRIVILEGED_EXTENSION_PACKAGE_NAME);
|
||||
mContext.getApplicationContext().bindService(serviceIntent, mServiceConnection,
|
||||
Context.BIND_AUTO_CREATE);
|
||||
}
|
||||
|
@ -36,17 +36,17 @@ import eu.chainfire.libsuperuser.Shell;
|
||||
* http://omerjerk.in/2014/08/how-to-install-an-app-to-system-partition/
|
||||
* https://github.com/omerjerk/RemoteDroid/blob/master/app/src/main/java/in/omerjerk/remotedroid/app/MainActivity.java
|
||||
*/
|
||||
abstract class InstallPrivileged {
|
||||
abstract class InstallExtension {
|
||||
|
||||
protected final Context context;
|
||||
|
||||
private static final String APK_FILE_NAME = "FDroidPrivileged.apk";
|
||||
|
||||
public InstallPrivileged(final Context context) {
|
||||
public InstallExtension(final Context context) {
|
||||
this.context = context;
|
||||
}
|
||||
|
||||
public static InstallPrivileged create(final Context context) {
|
||||
public static InstallExtension create(final Context context) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
return new LollipopImpl(context);
|
||||
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||||
@ -56,32 +56,27 @@ abstract class InstallPrivileged {
|
||||
}
|
||||
}
|
||||
|
||||
final void runInstall(String apkPath) {
|
||||
onPreInstall();
|
||||
Shell.SU.run(getInstallCommands(apkPath));
|
||||
}
|
||||
|
||||
final void runUninstall() {
|
||||
Shell.SU.run(getUninstallCommands());
|
||||
}
|
||||
|
||||
protected abstract String getSystemFolder();
|
||||
|
||||
protected void onPreInstall() {
|
||||
// To be overridden by relevant base class[es]
|
||||
}
|
||||
|
||||
public String getWarningInfo() {
|
||||
return context.getString(R.string.system_install_question);
|
||||
public String getWarningString() {
|
||||
return context.getString(R.string.system_install_warning);
|
||||
}
|
||||
|
||||
final void runUninstall() {
|
||||
final String[] commands = {
|
||||
"am force-stop " + PrivilegedInstaller.PRIVILEGED_PACKAGE_NAME,
|
||||
"pm clear " + PrivilegedInstaller.PRIVILEGED_PACKAGE_NAME,
|
||||
"mount -o rw,remount /system",
|
||||
"pm uninstall " + PrivilegedInstaller.PRIVILEGED_PACKAGE_NAME,
|
||||
"rm -f " + getInstallPath(),
|
||||
"sleep 5",
|
||||
"mount -o ro,remount /system"
|
||||
};
|
||||
Shell.SU.run(commands);
|
||||
}
|
||||
|
||||
final void runInstall(String apkPath) {
|
||||
onPreInstall();
|
||||
Shell.SU.run(getInstallCommands(apkPath));
|
||||
public String getInstallingString() {
|
||||
return context.getString(R.string.system_install_installing);
|
||||
}
|
||||
|
||||
protected String getInstallPath() {
|
||||
@ -92,12 +87,12 @@ abstract class InstallPrivileged {
|
||||
final List<String> commands = new ArrayList<>();
|
||||
commands.add("mount -o rw,remount /system");
|
||||
commands.addAll(getCopyToSystemCommands(apkPath));
|
||||
commands.add("pm uninstall " + PrivilegedInstaller.PRIVILEGED_PACKAGE_NAME);
|
||||
commands.add("pm uninstall " + PrivilegedInstaller.PRIVILEGED_EXTENSION_PACKAGE_NAME);
|
||||
commands.add("mv " + getInstallPath() + ".tmp " + getInstallPath());
|
||||
commands.add("pm install -r " + getInstallPath());
|
||||
commands.add("sleep 5"); // wait until the app is really installed
|
||||
commands.add("mount -o ro,remount /system");
|
||||
commands.add("am force-stop " + PrivilegedInstaller.PRIVILEGED_PACKAGE_NAME);
|
||||
commands.add("am force-stop " + PrivilegedInstaller.PRIVILEGED_EXTENSION_PACKAGE_NAME);
|
||||
commands.addAll(getPostInstallCommands());
|
||||
return commands;
|
||||
}
|
||||
@ -111,11 +106,35 @@ abstract class InstallPrivileged {
|
||||
|
||||
protected List<String> getPostInstallCommands() {
|
||||
final List<String> commands = new ArrayList<>(1);
|
||||
commands.add("am start -n org.fdroid.fdroid/.installer.InstallIntoSystemDialogActivity --ez post_install true");
|
||||
commands.add("am start -n org.fdroid.fdroid/.privileged.install.InstallExtensionDialogActivity --ez "
|
||||
+ InstallExtensionDialogActivity.ACTION_POST_INSTALL + " true");
|
||||
return commands;
|
||||
}
|
||||
|
||||
private static class PreKitKatImpl extends InstallPrivileged {
|
||||
private List<String> getUninstallCommands() {
|
||||
final List<String> commands = new ArrayList<>();
|
||||
commands.add("am force-stop " + PrivilegedInstaller.PRIVILEGED_EXTENSION_PACKAGE_NAME);
|
||||
commands.add("pm clear " + PrivilegedInstaller.PRIVILEGED_EXTENSION_PACKAGE_NAME);
|
||||
commands.add("mount -o rw,remount /system");
|
||||
commands.add("pm uninstall " + PrivilegedInstaller.PRIVILEGED_EXTENSION_PACKAGE_NAME);
|
||||
commands.addAll(getCleanUninstallCommands());
|
||||
commands.add("sleep 5");
|
||||
commands.add("mount -o ro,remount /system");
|
||||
commands.addAll(getPostUninstallCommands());
|
||||
return commands;
|
||||
}
|
||||
|
||||
protected List<String> getCleanUninstallCommands() {
|
||||
final List<String> commands = new ArrayList<>(1);
|
||||
commands.add("rm -f " + getInstallPath());
|
||||
return commands;
|
||||
}
|
||||
|
||||
protected List<String> getPostUninstallCommands() {
|
||||
return new ArrayList<>(0);
|
||||
}
|
||||
|
||||
private static class PreKitKatImpl extends InstallExtension {
|
||||
|
||||
public PreKitKatImpl(Context context) {
|
||||
super(context);
|
||||
@ -128,7 +147,7 @@ abstract class InstallPrivileged {
|
||||
|
||||
}
|
||||
|
||||
private static class KitKatToLollipopImpl extends InstallPrivileged {
|
||||
private static class KitKatToLollipopImpl extends InstallExtension {
|
||||
|
||||
public KitKatToLollipopImpl(Context context) {
|
||||
super(context);
|
||||
@ -149,7 +168,7 @@ abstract class InstallPrivileged {
|
||||
* History of PackageManagerService in Lollipop:
|
||||
* https://github.com/android/platform_frameworks_base/commits/lollipop-release/services/core/java/com/android/server/pm/PackageManagerService.java
|
||||
*/
|
||||
private static class LollipopImpl extends InstallPrivileged {
|
||||
private static class LollipopImpl extends InstallExtension {
|
||||
|
||||
public LollipopImpl(Context context) {
|
||||
super(context);
|
||||
@ -161,8 +180,12 @@ abstract class InstallPrivileged {
|
||||
Preferences.get().setPostPrivilegedInstall(true);
|
||||
}
|
||||
|
||||
public String getWarningInfo() {
|
||||
return context.getString(R.string.system_install_question_lollipop);
|
||||
public String getWarningString() {
|
||||
return context.getString(R.string.system_install_warning_lollipop);
|
||||
}
|
||||
|
||||
public String getInstallingString() {
|
||||
return context.getString(R.string.system_install_installing_rebooting);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -204,6 +227,24 @@ abstract class InstallPrivileged {
|
||||
return commands;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<String> getCleanUninstallCommands() {
|
||||
final List<String> commands = new ArrayList<>(3);
|
||||
commands.add("rm -f " + getInstallPath());
|
||||
commands.add("sleep 1");
|
||||
commands.add("rm -f " + getSystemFolder());
|
||||
return commands;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<String> getPostUninstallCommands() {
|
||||
List<String> commands = new ArrayList<>(3);
|
||||
commands.add("am broadcast -a android.intent.action.ACTION_SHUTDOWN");
|
||||
commands.add("sleep 1");
|
||||
commands.add("reboot");
|
||||
return commands;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -25,7 +25,7 @@ import android.content.Intent;
|
||||
|
||||
import org.fdroid.fdroid.Preferences;
|
||||
|
||||
public class InstallPrivilegedBootReceiver extends BroadcastReceiver {
|
||||
public class InstallExtensionBootReceiver extends BroadcastReceiver {
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
@ -33,8 +33,8 @@ public class InstallPrivilegedBootReceiver extends BroadcastReceiver {
|
||||
if (Preferences.get().isPostPrivilegedInstall()) {
|
||||
Preferences.get().setPostPrivilegedInstall(false);
|
||||
|
||||
Intent postInstall = new Intent(context.getApplicationContext(), InstallPrivilegedDialogActivity.class);
|
||||
postInstall.setAction(InstallPrivilegedDialogActivity.ACTION_POST_INSTALL);
|
||||
Intent postInstall = new Intent(context.getApplicationContext(), InstallExtensionDialogActivity.class);
|
||||
postInstall.setAction(InstallExtensionDialogActivity.ACTION_POST_INSTALL);
|
||||
postInstall.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
context.startActivity(postInstall);
|
||||
}
|
@ -48,7 +48,7 @@ import eu.chainfire.libsuperuser.Shell;
|
||||
/**
|
||||
* Note: This activity has no view on its own, it displays consecutive dialogs.
|
||||
*/
|
||||
public class InstallPrivilegedDialogActivity extends FragmentActivity {
|
||||
public class InstallExtensionDialogActivity extends FragmentActivity {
|
||||
|
||||
private static final String TAG = "InstallIntoSystem";
|
||||
|
||||
@ -59,7 +59,6 @@ public class InstallPrivilegedDialogActivity extends FragmentActivity {
|
||||
public static final String ACTION_POST_INSTALL = "post_install";
|
||||
public static final String ACTION_FIRST_TIME = "first_time";
|
||||
|
||||
String action;
|
||||
String apkFile;
|
||||
|
||||
@Override
|
||||
@ -81,7 +80,7 @@ public class InstallPrivilegedDialogActivity extends FragmentActivity {
|
||||
uninstall();
|
||||
break;
|
||||
case ACTION_INSTALL:
|
||||
checkRootTask.execute();
|
||||
askBeforeInstall();
|
||||
break;
|
||||
case ACTION_FIRST_TIME:
|
||||
checkRootTask.execute();
|
||||
@ -96,10 +95,20 @@ public class InstallPrivilegedDialogActivity extends FragmentActivity {
|
||||
if (Preferences.get().isFirstTime()) {
|
||||
Preferences.get().setFirstTime(false);
|
||||
|
||||
if (PrivilegedInstaller.isAvailable(context)) {
|
||||
int isInstalledCorrectly = PrivilegedInstaller.isExtensionInstalledCorrectly(context);
|
||||
switch (isInstalledCorrectly) {
|
||||
case PrivilegedInstaller.IS_EXTENSION_INSTALLED_YES:
|
||||
Preferences.get().setPrivilegedInstallerEnabled(true);
|
||||
} else {
|
||||
break;
|
||||
|
||||
case PrivilegedInstaller.IS_EXTENSION_INSTALLED_NO:
|
||||
runFirstTime(context);
|
||||
break;
|
||||
|
||||
case PrivilegedInstaller.IS_EXTENSION_INSTALLED_PERMISSIONS_PROBLEM:
|
||||
case PrivilegedInstaller.IS_EXTENSION_INSTALLED_SIGNATURE_PROBLEM:
|
||||
default:
|
||||
// do nothing
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -123,8 +132,8 @@ public class InstallPrivilegedDialogActivity extends FragmentActivity {
|
||||
if (false && probablyRoot) {
|
||||
// looks like we have root, at least su has a version number and is present
|
||||
|
||||
Intent installIntent = new Intent(context, InstallPrivilegedDialogActivity.class);
|
||||
installIntent.setAction(InstallPrivilegedDialogActivity.ACTION_FIRST_TIME);
|
||||
Intent installIntent = new Intent(context, InstallExtensionDialogActivity.class);
|
||||
installIntent.setAction(InstallExtensionDialogActivity.ACTION_FIRST_TIME);
|
||||
installIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
|
||||
PendingIntent resultPendingIntent =
|
||||
@ -165,34 +174,58 @@ public class InstallPrivilegedDialogActivity extends FragmentActivity {
|
||||
* first time
|
||||
*/
|
||||
private void firstTime() {
|
||||
// hack to get holo design (which is not automatically applied due to activity's Theme.NoDisplay
|
||||
// hack to get theme applied (which is not automatically applied due to activity's Theme.NoDisplay
|
||||
ContextThemeWrapper theme = new ContextThemeWrapper(this, FDroidApp.getCurThemeResId());
|
||||
|
||||
String message = getString(R.string.system_install_first_time_message) + "<br/><br/>"
|
||||
+ InstallPrivileged.create(getApplicationContext()).getWarningInfo();
|
||||
+ getString(R.string.system_install_question);
|
||||
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(theme)
|
||||
.setMessage(Html.fromHtml(message))
|
||||
.setPositiveButton(R.string.system_permission_install_via_root, new DialogInterface.OnClickListener() {
|
||||
.setPositiveButton(R.string.system_install_button_open, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialogInterface, int i) {
|
||||
// Open details of F-Droid Privileged
|
||||
Intent intent = new Intent(InstallPrivilegedDialogActivity.this, AppDetails.class);
|
||||
Intent intent = new Intent(InstallExtensionDialogActivity.this, AppDetails.class);
|
||||
intent.putExtra(AppDetails.EXTRA_APPID,
|
||||
PrivilegedInstaller.PRIVILEGED_PACKAGE_NAME);
|
||||
PrivilegedInstaller.PRIVILEGED_EXTENSION_PACKAGE_NAME);
|
||||
startActivity(intent);
|
||||
}
|
||||
})
|
||||
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialogInterface, int i) {
|
||||
InstallPrivilegedDialogActivity.this.setResult(Activity.RESULT_CANCELED);
|
||||
InstallPrivilegedDialogActivity.this.finish();
|
||||
InstallExtensionDialogActivity.this.setResult(Activity.RESULT_CANCELED);
|
||||
InstallExtensionDialogActivity.this.finish();
|
||||
}
|
||||
});
|
||||
builder.create().show();
|
||||
}
|
||||
|
||||
public void askBeforeInstall() {
|
||||
// hack to get theme applied (which is not automatically applied due to activity's Theme.NoDisplay
|
||||
ContextThemeWrapper theme = new ContextThemeWrapper(this, FDroidApp.getCurThemeResId());
|
||||
|
||||
AlertDialog.Builder alertBuilder = new AlertDialog.Builder(theme);
|
||||
alertBuilder.setTitle(R.string.system_install_question);
|
||||
String message = InstallExtension.create(getApplicationContext()).getWarningString();
|
||||
alertBuilder.setMessage(Html.fromHtml(message));
|
||||
alertBuilder.setPositiveButton(R.string.system_install_button_install, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
checkRootTask.execute();
|
||||
}
|
||||
});
|
||||
alertBuilder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
InstallExtensionDialogActivity.this.setResult(Activity.RESULT_CANCELED);
|
||||
InstallExtensionDialogActivity.this.finish();
|
||||
}
|
||||
});
|
||||
alertBuilder.create().show();
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Check for root access
|
||||
*/
|
||||
@ -203,8 +236,8 @@ public class InstallPrivilegedDialogActivity extends FragmentActivity {
|
||||
protected void onPreExecute() {
|
||||
super.onPreExecute();
|
||||
|
||||
// hack to get holo design (which is not automatically applied due to activity's Theme.NoDisplay
|
||||
ContextThemeWrapper theme = new ContextThemeWrapper(InstallPrivilegedDialogActivity.this,
|
||||
// hack to get theme applied (which is not automatically applied due to activity's Theme.NoDisplay
|
||||
ContextThemeWrapper theme = new ContextThemeWrapper(InstallExtensionDialogActivity.this,
|
||||
FDroidApp.getCurThemeResId());
|
||||
|
||||
mProgressDialog = new ProgressDialog(theme);
|
||||
@ -228,7 +261,7 @@ public class InstallPrivilegedDialogActivity extends FragmentActivity {
|
||||
if (rootGranted) {
|
||||
// root access granted
|
||||
|
||||
switch (action) {
|
||||
switch (getIntent().getAction()) {
|
||||
case ACTION_UNINSTALL:
|
||||
uninstallTask.execute();
|
||||
break;
|
||||
@ -242,9 +275,9 @@ public class InstallPrivilegedDialogActivity extends FragmentActivity {
|
||||
} else {
|
||||
// root access denied
|
||||
|
||||
if (!ACTION_FIRST_TIME.equals(action)) {
|
||||
// hack to get holo design (which is not automatically applied due to activity's Theme.NoDisplay
|
||||
ContextThemeWrapper theme = new ContextThemeWrapper(InstallPrivilegedDialogActivity.this,
|
||||
if (!ACTION_FIRST_TIME.equals(getIntent().getAction())) {
|
||||
// hack to get theme applied (which is not automatically applied due to activity's Theme.NoDisplay
|
||||
ContextThemeWrapper theme = new ContextThemeWrapper(InstallExtensionDialogActivity.this,
|
||||
FDroidApp.getCurThemeResId());
|
||||
|
||||
AlertDialog.Builder alertBuilder = new AlertDialog.Builder(theme)
|
||||
@ -253,8 +286,8 @@ public class InstallPrivilegedDialogActivity extends FragmentActivity {
|
||||
.setNeutralButton(android.R.string.ok, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
InstallPrivilegedDialogActivity.this.setResult(Activity.RESULT_CANCELED);
|
||||
InstallPrivilegedDialogActivity.this.finish();
|
||||
InstallExtensionDialogActivity.this.setResult(Activity.RESULT_CANCELED);
|
||||
InstallExtensionDialogActivity.this.finish();
|
||||
}
|
||||
});
|
||||
alertBuilder.create().show();
|
||||
@ -273,12 +306,12 @@ public class InstallPrivilegedDialogActivity extends FragmentActivity {
|
||||
protected void onPreExecute() {
|
||||
super.onPreExecute();
|
||||
|
||||
// hack to get holo design (which is not automatically applied due to activity's Theme.NoDisplay
|
||||
ContextThemeWrapper theme = new ContextThemeWrapper(InstallPrivilegedDialogActivity.this,
|
||||
// hack to get theme applied (which is not automatically applied due to activity's Theme.NoDisplay
|
||||
ContextThemeWrapper theme = new ContextThemeWrapper(InstallExtensionDialogActivity.this,
|
||||
FDroidApp.getCurThemeResId());
|
||||
|
||||
mProgressDialog = new ProgressDialog(theme);
|
||||
mProgressDialog.setMessage(getString(R.string.system_install_installing));
|
||||
mProgressDialog.setMessage(InstallExtension.create(getApplicationContext()).getInstallingString());
|
||||
mProgressDialog.setIndeterminate(true);
|
||||
mProgressDialog.setCancelable(false);
|
||||
mProgressDialog.show();
|
||||
@ -286,7 +319,7 @@ public class InstallPrivilegedDialogActivity extends FragmentActivity {
|
||||
|
||||
@Override
|
||||
protected Void doInBackground(Void... voids) {
|
||||
InstallPrivileged.create(getApplicationContext()).runInstall(apkFile);
|
||||
InstallExtension.create(getApplicationContext()).runInstall(apkFile);
|
||||
return null;
|
||||
}
|
||||
};
|
||||
@ -295,23 +328,54 @@ public class InstallPrivilegedDialogActivity extends FragmentActivity {
|
||||
* 3. Verify that install worked
|
||||
*/
|
||||
private void postInstall() {
|
||||
// hack to get holo design (which is not automatically applied due to activity's Theme.NoDisplay
|
||||
// hack to get theme applied (which is not automatically applied due to activity's Theme.NoDisplay
|
||||
ContextThemeWrapper theme = new ContextThemeWrapper(this, FDroidApp.getCurThemeResId());
|
||||
|
||||
final boolean success = PrivilegedInstaller.isAvailable(this);
|
||||
int isInstalledCorrectly =
|
||||
PrivilegedInstaller.isExtensionInstalledCorrectly(this);
|
||||
|
||||
String title;
|
||||
String message;
|
||||
final int result;
|
||||
switch (isInstalledCorrectly) {
|
||||
case PrivilegedInstaller.IS_EXTENSION_INSTALLED_YES:
|
||||
title = getString(R.string.system_install_post_success);
|
||||
message = getString(R.string.system_install_post_success_message);
|
||||
result = Activity.RESULT_OK;
|
||||
|
||||
// enable system installer on installation success
|
||||
Preferences.get().setPrivilegedInstallerEnabled(success);
|
||||
Preferences.get().setPrivilegedInstallerEnabled(true);
|
||||
break;
|
||||
case PrivilegedInstaller.IS_EXTENSION_INSTALLED_NO:
|
||||
title = getString(R.string.system_install_post_fail);
|
||||
message = getString(R.string.system_install_post_fail_message);
|
||||
result = Activity.RESULT_CANCELED;
|
||||
break;
|
||||
case PrivilegedInstaller.IS_EXTENSION_INSTALLED_SIGNATURE_PROBLEM:
|
||||
title = getString(R.string.system_install_post_fail);
|
||||
message = getString(R.string.system_install_post_fail_message) +
|
||||
"\n\n" + getString(R.string.system_install_denied_signature);
|
||||
result = Activity.RESULT_CANCELED;
|
||||
break;
|
||||
case PrivilegedInstaller.IS_EXTENSION_INSTALLED_PERMISSIONS_PROBLEM:
|
||||
title = getString(R.string.system_install_post_fail);
|
||||
message = getString(R.string.system_install_post_fail_message) +
|
||||
"\n\n" + getString(R.string.system_install_denied_permissions);
|
||||
result = Activity.RESULT_CANCELED;
|
||||
break;
|
||||
default:
|
||||
throw new RuntimeException("unhandled return");
|
||||
}
|
||||
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(theme)
|
||||
.setTitle(success ? R.string.system_install_post_success : R.string.system_install_post_fail)
|
||||
.setMessage(success ? R.string.system_install_post_success_message : R.string.system_install_post_fail_message)
|
||||
.setTitle(title)
|
||||
.setMessage(message)
|
||||
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialogInterface, int i) {
|
||||
InstallPrivilegedDialogActivity.this.setResult(success ? Activity.RESULT_OK : Activity.RESULT_CANCELED);
|
||||
InstallPrivilegedDialogActivity.this.finish();
|
||||
startActivity(new Intent(InstallPrivilegedDialogActivity.this, FDroid.class));
|
||||
InstallExtensionDialogActivity.this.setResult(result);
|
||||
InstallExtensionDialogActivity.this.finish();
|
||||
startActivity(new Intent(InstallExtensionDialogActivity.this, FDroid.class));
|
||||
}
|
||||
})
|
||||
.setCancelable(false);
|
||||
@ -319,15 +383,17 @@ public class InstallPrivilegedDialogActivity extends FragmentActivity {
|
||||
}
|
||||
|
||||
private void uninstall() {
|
||||
// hack to get holo design (which is not automatically applied due to activity's Theme.NoDisplay
|
||||
// hack to get theme applied (which is not automatically applied due to activity's Theme.NoDisplay
|
||||
ContextThemeWrapper theme = new ContextThemeWrapper(this, FDroidApp.getCurThemeResId());
|
||||
|
||||
final boolean isAvailable = PrivilegedInstaller.isAvailable(this);
|
||||
final boolean isInstalled = PrivilegedInstaller.isExtensionInstalled(this);
|
||||
|
||||
if (isInstalled) {
|
||||
String message = InstallExtension.create(getApplicationContext()).getWarningString();
|
||||
|
||||
if (isAvailable) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(theme)
|
||||
.setTitle(R.string.system_uninstall)
|
||||
.setMessage(R.string.system_uninstall_message)
|
||||
.setMessage(Html.fromHtml(message))
|
||||
.setPositiveButton(R.string.system_uninstall_button, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialogInterface, int i) {
|
||||
@ -337,23 +403,13 @@ public class InstallPrivilegedDialogActivity extends FragmentActivity {
|
||||
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
InstallPrivilegedDialogActivity.this.setResult(Activity.RESULT_CANCELED);
|
||||
InstallPrivilegedDialogActivity.this.finish();
|
||||
InstallExtensionDialogActivity.this.setResult(Activity.RESULT_CANCELED);
|
||||
InstallExtensionDialogActivity.this.finish();
|
||||
}
|
||||
});
|
||||
builder.create().show();
|
||||
} else {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(theme)
|
||||
.setTitle(R.string.system_permission_denied_title)
|
||||
.setMessage(getString(R.string.system_permission_denied_body))
|
||||
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
InstallPrivilegedDialogActivity.this.setResult(Activity.RESULT_CANCELED);
|
||||
InstallPrivilegedDialogActivity.this.finish();
|
||||
}
|
||||
});
|
||||
builder.create().show();
|
||||
throw new RuntimeException("Uninstall invoked, but extension is not installed!");
|
||||
}
|
||||
}
|
||||
|
||||
@ -364,8 +420,8 @@ public class InstallPrivilegedDialogActivity extends FragmentActivity {
|
||||
protected void onPreExecute() {
|
||||
super.onPreExecute();
|
||||
|
||||
// hack to get holo design (which is not automatically applied due to activity's Theme.NoDisplay
|
||||
ContextThemeWrapper theme = new ContextThemeWrapper(InstallPrivilegedDialogActivity.this,
|
||||
// hack to get theme applied (which is not automatically applied due to activity's Theme.NoDisplay
|
||||
ContextThemeWrapper theme = new ContextThemeWrapper(InstallExtensionDialogActivity.this,
|
||||
FDroidApp.getCurThemeResId());
|
||||
|
||||
mProgressDialog = new ProgressDialog(theme);
|
||||
@ -377,7 +433,7 @@ public class InstallPrivilegedDialogActivity extends FragmentActivity {
|
||||
|
||||
@Override
|
||||
protected Void doInBackground(Void... voids) {
|
||||
InstallPrivileged.create(getApplicationContext()).runUninstall();
|
||||
InstallExtension.create(getApplicationContext()).runUninstall();
|
||||
return null;
|
||||
}
|
||||
|
@ -3,7 +3,6 @@ package org.fdroid.fdroid.views.fragments;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.preference.CheckBoxPreference;
|
||||
import android.preference.EditTextPreference;
|
||||
@ -21,7 +20,6 @@ import org.fdroid.fdroid.PreferencesActivity;
|
||||
import org.fdroid.fdroid.R;
|
||||
import org.fdroid.fdroid.Utils;
|
||||
import org.fdroid.fdroid.installer.PrivilegedInstaller;
|
||||
import org.fdroid.fdroid.privileged.install.InstallPrivilegedDialogActivity;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
@ -196,36 +194,47 @@ public class PreferencesFragment extends PreferenceFragment
|
||||
final CheckBoxPreference pref = (CheckBoxPreference) preference;
|
||||
|
||||
if (pref.isChecked()) {
|
||||
if (PrivilegedInstaller.isAvailable(getActivity())) {
|
||||
// system-permission are granted, i.e. F-Droid is a system-app
|
||||
int isInstalledCorrectly =
|
||||
PrivilegedInstaller.isExtensionInstalledCorrectly(getActivity());
|
||||
if (isInstalledCorrectly == PrivilegedInstaller.IS_EXTENSION_INSTALLED_YES) {
|
||||
// privileged permission are granted, i.e. the extension is installed correctly
|
||||
SharedPreferences.Editor editor = pref.getSharedPreferences().edit();
|
||||
editor.putBoolean(Preferences.PREF_PRIVILEGED_INSTALLER, true);
|
||||
editor.commit();
|
||||
pref.setChecked(true);
|
||||
} else {
|
||||
// system-permission not available
|
||||
// privileged permission not available
|
||||
SharedPreferences.Editor editor = pref.getSharedPreferences().edit();
|
||||
editor.putBoolean(Preferences.PREF_PRIVILEGED_INSTALLER, false);
|
||||
editor.commit();
|
||||
pref.setChecked(false);
|
||||
|
||||
AlertDialog.Builder alertBuilder = new AlertDialog.Builder(getActivity());
|
||||
alertBuilder.setTitle(R.string.system_permission_denied_title);
|
||||
String message = getActivity().getString(R.string.system_permission_denied_body) +
|
||||
"<br/><br/>";
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
message += getActivity().getString(R.string.system_install_question_lollipop);
|
||||
} else {
|
||||
message += getActivity().getString(R.string.system_install_question);
|
||||
alertBuilder.setTitle(R.string.system_install_denied_title);
|
||||
|
||||
String message = null;
|
||||
switch (isInstalledCorrectly) {
|
||||
case PrivilegedInstaller.IS_EXTENSION_INSTALLED_NO:
|
||||
message = getActivity().getString(R.string.system_install_denied_body) +
|
||||
"<br/><br/>" + getActivity().getString(R.string.system_install_question);
|
||||
break;
|
||||
case PrivilegedInstaller.IS_EXTENSION_INSTALLED_SIGNATURE_PROBLEM:
|
||||
message = getActivity().getString(R.string.system_install_denied_signature);
|
||||
break;
|
||||
case PrivilegedInstaller.IS_EXTENSION_INSTALLED_PERMISSIONS_PROBLEM:
|
||||
message = getActivity().getString(R.string.system_install_denied_permissions);
|
||||
break;
|
||||
default:
|
||||
throw new RuntimeException("unhandled return");
|
||||
}
|
||||
alertBuilder.setMessage(Html.fromHtml(message));
|
||||
alertBuilder.setPositiveButton(R.string.system_permission_install_via_root, new DialogInterface.OnClickListener() {
|
||||
alertBuilder.setPositiveButton(R.string.system_install_button_open, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
// Open details of F-Droid Privileged
|
||||
Intent intent = new Intent(getActivity(), AppDetails.class);
|
||||
intent.putExtra(AppDetails.EXTRA_APPID,
|
||||
PrivilegedInstaller.PRIVILEGED_PACKAGE_NAME);
|
||||
PrivilegedInstaller.PRIVILEGED_EXTENSION_PACKAGE_NAME);
|
||||
startActivity(intent);
|
||||
}
|
||||
});
|
||||
@ -244,7 +253,7 @@ public class PreferencesFragment extends PreferenceFragment
|
||||
});
|
||||
}
|
||||
|
||||
protected void initUninstallPrivilegedAppPreference() {
|
||||
protected void initManagePrivilegedAppPreference() {
|
||||
Preference pref = findPreference(Preferences.PREF_UNINSTALL_PRIVILEGED_APP);
|
||||
pref.setPersistent(false);
|
||||
|
||||
@ -252,9 +261,11 @@ public class PreferencesFragment extends PreferenceFragment
|
||||
|
||||
@Override
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
Intent uninstallIntent = new Intent(getActivity(), InstallPrivilegedDialogActivity.class);
|
||||
uninstallIntent.setAction(InstallPrivilegedDialogActivity.ACTION_UNINSTALL);
|
||||
startActivity(uninstallIntent);
|
||||
// Open details of F-Droid Privileged
|
||||
Intent intent = new Intent(getActivity(), AppDetails.class);
|
||||
intent.putExtra(AppDetails.EXTRA_APPID,
|
||||
PrivilegedInstaller.PRIVILEGED_EXTENSION_PACKAGE_NAME);
|
||||
startActivity(intent);
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -284,7 +295,7 @@ public class PreferencesFragment extends PreferenceFragment
|
||||
}
|
||||
|
||||
initPrivilegedInstallerPreference();
|
||||
initUninstallPrivilegedAppPreference();
|
||||
initManagePrivilegedAppPreference();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Loading…
x
Reference in New Issue
Block a user