Merge branch 'master' of gitorious.org:f-droid/fdroidclient
This commit is contained in:
commit
ae6e9d57ff
158
locale/de.po
158
locale/de.po
@ -6,8 +6,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2010-11-15 07:54+0000\n"
|
||||
"PO-Revision-Date: 2010-10-31 21:13+0200\n"
|
||||
"POT-Creation-Date: 2011-01-16 16:16+0000\n"
|
||||
"PO-Revision-Date: 2010-11-16 09:54+0200\n"
|
||||
"Last-Translator: Jan-Christoph <JanCBorchardt@gmail.com>\n"
|
||||
"Language-Team: de <LL@li.org>\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||
@ -16,65 +16,72 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 1.0dev\n"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "SignatureMismatch"
|
||||
msgid ""
|
||||
"The new version is signed with a different key to the old one. To install"
|
||||
" the new version, the old one must be uninstalled first. Please do this "
|
||||
"and try again. (Note that uninstalling will erase any internal data "
|
||||
"stored by the application)"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "version"
|
||||
msgid "Version"
|
||||
msgstr "Server-Version:"
|
||||
msgstr "Version"
|
||||
|
||||
#, fuzzy, python-format
|
||||
#, python-format
|
||||
msgctxt "n_versions_available"
|
||||
msgid "%d versions available"
|
||||
msgstr "Aktualisierungen verfügbar"
|
||||
msgstr "%d verfügbare Versionen"
|
||||
|
||||
#, fuzzy, python-format
|
||||
#, python-format
|
||||
msgctxt "n_version_available"
|
||||
msgid "%d version available"
|
||||
msgstr "Aktualisierungen verfügbar"
|
||||
msgstr "%d verfügbare Version"
|
||||
|
||||
msgctxt "notify"
|
||||
msgid "Notify"
|
||||
msgstr ""
|
||||
msgstr "Benachrichtigen"
|
||||
|
||||
msgctxt "storage"
|
||||
msgid "Storage"
|
||||
msgstr ""
|
||||
msgstr "Speicherplatz"
|
||||
|
||||
msgctxt "cache_downloaded"
|
||||
msgid "Cache downloaded apps"
|
||||
msgstr ""
|
||||
msgstr "Heruntergeladene Anwendungen zwischenspeichern"
|
||||
|
||||
msgctxt "keep_downloaded"
|
||||
msgid "Keep downloaded apk files on SD card"
|
||||
msgstr ""
|
||||
msgstr "Heruntergeladene Anwendungsdateien auf der SD-Karte behalten"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "updates"
|
||||
msgid "Updates"
|
||||
msgstr "Aktualisierungen"
|
||||
|
||||
msgctxt "clear_all_cached_data"
|
||||
msgid "Clear all cached data"
|
||||
msgstr ""
|
||||
msgstr "Zwischenspeicher leeren"
|
||||
|
||||
msgctxt "reset"
|
||||
msgid "Reset"
|
||||
msgstr ""
|
||||
msgstr "Zurücksetzen"
|
||||
|
||||
msgctxt "maintenance"
|
||||
msgid "Maintenance"
|
||||
msgstr ""
|
||||
msgstr "Verwaltung"
|
||||
|
||||
msgctxt "notify_updates_available"
|
||||
msgid "Notify when new updates are available"
|
||||
msgstr ""
|
||||
msgstr "Bei Aktualisierungen benachrichtigen"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "update_apps_list"
|
||||
msgid "Update apps list from repositories automatically"
|
||||
msgstr ""
|
||||
msgid "Update app list from repositories automatically"
|
||||
msgstr "Anwendungsliste automatisch aktualisieren"
|
||||
|
||||
msgctxt "automatic_repo_scan"
|
||||
msgid "Automatic repo scan"
|
||||
msgstr ""
|
||||
msgstr "Automatische Archivkontrolle"
|
||||
|
||||
msgctxt "app_name"
|
||||
msgid "FDroid"
|
||||
@ -88,37 +95,38 @@ msgstr "Über FDroid"
|
||||
msgctxt "about_desc"
|
||||
msgid ""
|
||||
"Originally based on Aptoide.\n"
|
||||
"Released under the GNU GPL v2 license."
|
||||
"Released under the GNU GPLv2 license."
|
||||
msgstr ""
|
||||
"Basierend auf Aptoide.\n"
|
||||
"Lizensiert unter GNU GPLv2."
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "about_site"
|
||||
msgid "Home:"
|
||||
msgstr "Internetseite:"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "about_mail"
|
||||
msgid "Email:"
|
||||
msgstr "E-Mail:"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "about_version"
|
||||
msgid "Version:"
|
||||
msgstr "Server-Version:"
|
||||
|
||||
msgctxt "about_website"
|
||||
msgid "Web Site"
|
||||
msgid "Website:"
|
||||
msgstr "Internetseite"
|
||||
|
||||
msgctxt "about_mail"
|
||||
msgid "Email:"
|
||||
msgstr "Email:"
|
||||
|
||||
msgctxt "about_version"
|
||||
msgid "Version:"
|
||||
msgstr "Version:"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "about_website"
|
||||
msgid "Website"
|
||||
msgstr "Internetseite"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "no_repo"
|
||||
msgid ""
|
||||
"You have no repositories configured!\n"
|
||||
"You don't have any repositories configured!\n"
|
||||
"\n"
|
||||
"A repository is a source of applications. To add one, press the MENU "
|
||||
"button now and enter the URL.\n"
|
||||
"\n"
|
||||
"A repository URL looks something like this: http://f-droid.org/repo"
|
||||
"A repository address looks something like this: http://f-droid.org/repo"
|
||||
msgstr ""
|
||||
"Sie haben keine Archive eingestellt!\n"
|
||||
"\n"
|
||||
@ -136,8 +144,8 @@ msgid "Update possible - Ver.:"
|
||||
msgstr "Aktualisierung verfügbar – Version:"
|
||||
|
||||
msgctxt "ok"
|
||||
msgid "Ok"
|
||||
msgstr "OK"
|
||||
msgid "OK"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "yes"
|
||||
msgid "Yes"
|
||||
@ -159,7 +167,6 @@ msgctxt "cancel"
|
||||
msgid "Cancel"
|
||||
msgstr "Abbrechen"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "repo_delete_title"
|
||||
msgid "Choose repository to remove"
|
||||
msgstr "Zu entfernendes Archiv auswählen"
|
||||
@ -216,8 +223,9 @@ msgctxt "download_server"
|
||||
msgid "Getting application from"
|
||||
msgstr "Anwendung wird heruntergeladen von"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "repo_add_url"
|
||||
msgid "Repository URL"
|
||||
msgid "Repository address"
|
||||
msgstr "Archiv-Adresse"
|
||||
|
||||
msgctxt "isinst"
|
||||
@ -236,18 +244,20 @@ msgctxt "update"
|
||||
msgid "Update!"
|
||||
msgstr "Aktualisieren!"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "update_alrt"
|
||||
msgid ""
|
||||
"There updates available for some installed applications.\n"
|
||||
"Do you wish to see them?"
|
||||
"There are updates available for some installed applications.\n"
|
||||
"Do you want to see them?"
|
||||
msgstr ""
|
||||
"Für einige installierte Anwendungen sind Aktualisierungen verfügbar.\n"
|
||||
"Sollen diese angezeigt werden?"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "repo_alrt"
|
||||
msgid ""
|
||||
"The list of repositories in use has been changed.\n"
|
||||
"Do you wish to update them?"
|
||||
"The list of used repositories has changed.\n"
|
||||
"Do you want to update them?"
|
||||
msgstr ""
|
||||
"Die Liste der genutzten Archive wurde geändert.\n"
|
||||
"Soll sie aktualisiert werden?"
|
||||
@ -272,7 +282,7 @@ msgstr "Archive verwalten"
|
||||
|
||||
msgctxt "menu_preferences"
|
||||
msgid "Preferences"
|
||||
msgstr ""
|
||||
msgstr "Einstellungen"
|
||||
|
||||
msgctxt "menu_about"
|
||||
msgid "About"
|
||||
@ -294,8 +304,9 @@ msgctxt "menu_uninstall"
|
||||
msgid "Uninstall"
|
||||
msgstr "Entfernen"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "menu_website"
|
||||
msgid "Web Site"
|
||||
msgid "Website"
|
||||
msgstr "Internetseite"
|
||||
|
||||
msgctxt "menu_issues"
|
||||
@ -314,22 +325,65 @@ msgctxt "menu_update"
|
||||
msgid "Update"
|
||||
msgstr "Aktualisieren"
|
||||
|
||||
#, fuzzy, python-format
|
||||
#, python-format
|
||||
msgctxt "details_installed"
|
||||
msgid "Version %s installed"
|
||||
msgstr "Nicht Installiert"
|
||||
msgstr "Version %s installiert"
|
||||
|
||||
#, python-format
|
||||
msgctxt "details_notinstalled"
|
||||
msgid "Not installed (%d available)"
|
||||
msgstr ""
|
||||
msgstr "Nicht installiert (%d verfügbar)"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "inst"
|
||||
msgid "Installed"
|
||||
msgstr "Installiert"
|
||||
|
||||
msgctxt "corrupt_download"
|
||||
msgid "Downloaded file is corrupt"
|
||||
msgstr "Heruntergeladene Datei ist fehlerhaft"
|
||||
|
||||
msgctxt "antifeatures"
|
||||
msgid "Anti-Features"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antiads"
|
||||
msgid "Advertising"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antiadslong"
|
||||
msgid "Show apps that contain advertising"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antitrack"
|
||||
msgid "Tracking"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antitracklong"
|
||||
msgid "Show apps that track and report your activity"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antinonfreead"
|
||||
msgid "Add-ons"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antinonfreeadlong"
|
||||
msgid "Show apps that promote non-free add-ons"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antinonfreenet"
|
||||
msgid "Network Services"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antinonfreenetlong"
|
||||
msgid "Show apps that promote non-free network services"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "expert"
|
||||
msgid "Expert"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "expert_mode"
|
||||
msgid "Enabled expert mode"
|
||||
msgstr ""
|
||||
|
||||
|
235
locale/fr.po
235
locale/fr.po
@ -2,14 +2,13 @@
|
||||
# Copyright (C) 2010 ORGANIZATION
|
||||
# This file is distributed under the same license as the PACKAGE project.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2010-11-15 07:54+0000\n"
|
||||
"PO-Revision-Date: 2010-11-15 07:54+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-01-16 16:16+0000\n"
|
||||
"PO-Revision-Date: 2010-12-15 06:43+0200\n"
|
||||
"Last-Translator: MagicFab <magicfab@member.fsf.org>\n"
|
||||
"Language-Team: fr <LL@li.org>\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -17,299 +16,373 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 1.0dev\n"
|
||||
|
||||
msgctxt "SignatureMismatch"
|
||||
msgid ""
|
||||
"The new version is signed with a different key to the old one. To install"
|
||||
" the new version, the old one must be uninstalled first. Please do this "
|
||||
"and try again. (Note that uninstalling will erase any internal data "
|
||||
"stored by the application)"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "version"
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
msgstr "Version"
|
||||
|
||||
#, python-format
|
||||
msgctxt "n_versions_available"
|
||||
msgid "%d versions available"
|
||||
msgstr ""
|
||||
msgstr "%d versions disponibles"
|
||||
|
||||
#, python-format
|
||||
msgctxt "n_version_available"
|
||||
msgid "%d version available"
|
||||
msgstr ""
|
||||
msgstr "%d version disponible"
|
||||
|
||||
msgctxt "notify"
|
||||
msgid "Notify"
|
||||
msgstr ""
|
||||
msgstr "Notifier"
|
||||
|
||||
msgctxt "storage"
|
||||
msgid "Storage"
|
||||
msgstr ""
|
||||
msgstr "Mémoire"
|
||||
|
||||
msgctxt "cache_downloaded"
|
||||
msgid "Cache downloaded apps"
|
||||
msgstr ""
|
||||
msgstr "Garder en mémoire cache les applications téléchargées"
|
||||
|
||||
msgctxt "keep_downloaded"
|
||||
msgid "Keep downloaded apk files on SD card"
|
||||
msgstr ""
|
||||
msgstr "Garder les fichiers apk téléchargés sur la carte SD"
|
||||
|
||||
msgctxt "updates"
|
||||
msgid "Updates"
|
||||
msgstr ""
|
||||
msgstr "Mises à jour"
|
||||
|
||||
msgctxt "clear_all_cached_data"
|
||||
msgid "Clear all cached data"
|
||||
msgstr ""
|
||||
msgstr "Vider la mémoire cache"
|
||||
|
||||
msgctxt "reset"
|
||||
msgid "Reset"
|
||||
msgstr ""
|
||||
msgstr "Réinitialisation"
|
||||
|
||||
msgctxt "maintenance"
|
||||
msgid "Maintenance"
|
||||
msgstr ""
|
||||
msgstr "Maintenance"
|
||||
|
||||
msgctxt "notify_updates_available"
|
||||
msgid "Notify when new updates are available"
|
||||
msgstr ""
|
||||
msgstr "Notifier quand de nouvelles mises à jour sont disponibles"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "update_apps_list"
|
||||
msgid "Update apps list from repositories automatically"
|
||||
msgstr ""
|
||||
msgid "Update app list from repositories automatically"
|
||||
msgstr "Mettre à jour automatiquement la liste d'applications à partir des dépôts "
|
||||
|
||||
msgctxt "automatic_repo_scan"
|
||||
msgid "Automatic repo scan"
|
||||
msgstr ""
|
||||
msgstr "Balayage automatique du dépôt"
|
||||
|
||||
msgctxt "app_name"
|
||||
msgid "FDroid"
|
||||
msgstr ""
|
||||
msgstr "FDroid"
|
||||
|
||||
msgctxt "about_title"
|
||||
msgid "About FDroid"
|
||||
msgstr ""
|
||||
msgstr "À propos de FDroid"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "about_desc"
|
||||
msgid ""
|
||||
"Originally based on Aptoide.\n"
|
||||
"Released under the GNU GPL v2 license."
|
||||
"Released under the GNU GPLv2 license."
|
||||
msgstr ""
|
||||
"Originallement basée sur Aptoide.\n"
|
||||
"Libéré sous licence GNU GPL v2."
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "about_site"
|
||||
msgid "Home:"
|
||||
msgstr ""
|
||||
msgid "Website:"
|
||||
msgstr "Site Web"
|
||||
|
||||
msgctxt "about_mail"
|
||||
msgid "Email:"
|
||||
msgstr ""
|
||||
msgstr "Courriel:"
|
||||
|
||||
msgctxt "about_version"
|
||||
msgid "Version:"
|
||||
msgstr ""
|
||||
msgstr "Version:"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "about_website"
|
||||
msgid "Web Site"
|
||||
msgstr ""
|
||||
msgid "Website"
|
||||
msgstr "Site Web"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "no_repo"
|
||||
msgid ""
|
||||
"You have no repositories configured!\n"
|
||||
"You don't have any repositories configured!\n"
|
||||
"\n"
|
||||
"A repository is a source of applications. To add one, press the MENU "
|
||||
"button now and enter the URL.\n"
|
||||
"\n"
|
||||
"A repository URL looks something like this: http://f-droid.org/repo"
|
||||
"A repository address looks something like this: http://f-droid.org/repo"
|
||||
msgstr ""
|
||||
"Aucun dépôt n'est configuré!\n"
|
||||
"\n"
|
||||
"Un dépôt est une source d'applications. Pour en ajouter un, appuyez sur "
|
||||
"MENU maintenant et entrez l'adresse URL.\n"
|
||||
"\n"
|
||||
"L'URL d'un dépôt ressemble à ceci: http://f-droid.org/repo"
|
||||
|
||||
msgctxt "not_inst"
|
||||
msgid "Not Installed"
|
||||
msgstr ""
|
||||
msgstr "Pas installée"
|
||||
|
||||
msgctxt "installed_update"
|
||||
msgid "Update possible - Ver.:"
|
||||
msgstr ""
|
||||
msgstr "Mise à jour possible - Ver.:"
|
||||
|
||||
msgctxt "ok"
|
||||
msgid "Ok"
|
||||
msgid "OK"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "yes"
|
||||
msgid "Yes"
|
||||
msgstr ""
|
||||
msgstr "Oui"
|
||||
|
||||
msgctxt "no"
|
||||
msgid "No"
|
||||
msgstr ""
|
||||
msgstr "Non"
|
||||
|
||||
msgctxt "repo_add_title"
|
||||
msgid "Add new repository"
|
||||
msgstr ""
|
||||
msgstr "Ajouter un nouveau dépôt"
|
||||
|
||||
msgctxt "repo_add_add"
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
msgstr "Ajouter"
|
||||
|
||||
msgctxt "cancel"
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
msgstr "Annuler"
|
||||
|
||||
msgctxt "repo_delete_title"
|
||||
msgid "Choose repository to remove"
|
||||
msgstr ""
|
||||
msgstr "Choisissez le dépôt à supprimer"
|
||||
|
||||
msgctxt "server_connection_error"
|
||||
msgid "Could not connect to server!"
|
||||
msgstr ""
|
||||
msgstr "Connection au serveur impossible!"
|
||||
|
||||
msgctxt "repo_update_title"
|
||||
msgid "Update repositories"
|
||||
msgstr ""
|
||||
msgstr "Mettre à jour les dépôts"
|
||||
|
||||
msgctxt "tab_installed"
|
||||
msgid "Installed"
|
||||
msgstr ""
|
||||
msgstr "Installée"
|
||||
|
||||
msgctxt "tab_noninstalled"
|
||||
msgid "Available"
|
||||
msgstr ""
|
||||
msgstr "Disponible"
|
||||
|
||||
msgctxt "tab_updates"
|
||||
msgid "Updates"
|
||||
msgstr ""
|
||||
msgstr "Mises à jour"
|
||||
|
||||
msgctxt "update_available"
|
||||
msgid "Updates available"
|
||||
msgstr ""
|
||||
msgstr "Mises à jour disponibles"
|
||||
|
||||
msgctxt "process_wait_title"
|
||||
msgid "Please Wait"
|
||||
msgstr ""
|
||||
msgstr "Patientez"
|
||||
|
||||
msgctxt "process_update_msg"
|
||||
msgid "Updating application list..."
|
||||
msgstr ""
|
||||
msgstr "Mise à jour de la liste d'applications..."
|
||||
|
||||
msgctxt "connection_error"
|
||||
msgid "Could not connect to the network."
|
||||
msgstr ""
|
||||
msgstr "Connection au réseau impossible."
|
||||
|
||||
msgctxt "connection_timeout"
|
||||
msgid "Timeout"
|
||||
msgstr ""
|
||||
msgstr "Délai d'attente"
|
||||
|
||||
msgctxt "connection_error_msg"
|
||||
msgid "Could not connect to server!"
|
||||
msgstr ""
|
||||
msgstr "Connection au serveur impossible!"
|
||||
|
||||
msgctxt "download"
|
||||
msgid "Download"
|
||||
msgstr ""
|
||||
msgstr "Téléchargement"
|
||||
|
||||
msgctxt "download_server"
|
||||
msgid "Getting application from"
|
||||
msgstr ""
|
||||
msgstr "Réception d'application de"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "repo_add_url"
|
||||
msgid "Repository URL"
|
||||
msgstr ""
|
||||
msgid "Repository address"
|
||||
msgstr "URL du dépôt"
|
||||
|
||||
msgctxt "isinst"
|
||||
msgid "Installed:"
|
||||
msgstr ""
|
||||
msgstr "Installé:"
|
||||
|
||||
msgctxt "install"
|
||||
msgid "Install"
|
||||
msgstr ""
|
||||
msgstr "Installer"
|
||||
|
||||
msgctxt "uninstall"
|
||||
msgid "Uninstall"
|
||||
msgstr ""
|
||||
msgstr "Supprimer"
|
||||
|
||||
msgctxt "update"
|
||||
msgid "Update!"
|
||||
msgstr ""
|
||||
msgstr "Mise à jour!"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "update_alrt"
|
||||
msgid ""
|
||||
"There updates available for some installed applications.\n"
|
||||
"Do you wish to see them?"
|
||||
"There are updates available for some installed applications.\n"
|
||||
"Do you want to see them?"
|
||||
msgstr ""
|
||||
"Des mises à jour sont disponibles pour certaines applications.\n"
|
||||
"\n"
|
||||
"Désirez-vous les voir?"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "repo_alrt"
|
||||
msgid ""
|
||||
"The list of repositories in use has been changed.\n"
|
||||
"Do you wish to update them?"
|
||||
"The list of used repositories has changed.\n"
|
||||
"Do you want to update them?"
|
||||
msgstr ""
|
||||
"La liste des dépôts a changé.\n"
|
||||
"Voulez-vous les mettre à jour?"
|
||||
|
||||
msgctxt "error_download_alrt"
|
||||
msgid "Could not connect to server or apk file is corrupt!"
|
||||
msgstr ""
|
||||
msgstr "Connections au serveur impossible ou fichier apk corrompu!"
|
||||
|
||||
msgctxt "download_alrt"
|
||||
msgid "Getting application from:\n"
|
||||
msgstr ""
|
||||
msgstr "Réception d'application de:\n"
|
||||
|
||||
msgctxt "menu_update_repo"
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
msgstr "Mise à jour"
|
||||
|
||||
msgctxt "menu_manage"
|
||||
msgid "Manage Repos"
|
||||
msgstr ""
|
||||
msgstr "Gestion de dépôts"
|
||||
|
||||
msgctxt "menu_preferences"
|
||||
msgid "Preferences"
|
||||
msgstr ""
|
||||
msgstr "Préférences"
|
||||
|
||||
msgctxt "menu_about"
|
||||
msgid "About"
|
||||
msgstr ""
|
||||
msgstr "À propos de"
|
||||
|
||||
msgctxt "menu_add_repo"
|
||||
msgid "New Repository"
|
||||
msgstr ""
|
||||
msgstr "Nouveau dépôt"
|
||||
|
||||
msgctxt "menu_rem_repo"
|
||||
msgid "Remove Repository"
|
||||
msgstr ""
|
||||
msgstr "Supprimer un dépôt"
|
||||
|
||||
msgctxt "menu_install"
|
||||
msgid "Install"
|
||||
msgstr ""
|
||||
msgstr "Installer"
|
||||
|
||||
msgctxt "menu_uninstall"
|
||||
msgid "Uninstall"
|
||||
msgstr ""
|
||||
msgstr "Supprimer"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "menu_website"
|
||||
msgid "Web Site"
|
||||
msgstr ""
|
||||
msgid "Website"
|
||||
msgstr "Site Web"
|
||||
|
||||
msgctxt "menu_issues"
|
||||
msgid "Issues"
|
||||
msgstr ""
|
||||
msgstr "Problèmes"
|
||||
|
||||
msgctxt "menu_source"
|
||||
msgid "Source Code"
|
||||
msgstr ""
|
||||
msgstr "Code source"
|
||||
|
||||
msgctxt "menu_market"
|
||||
msgid "Market"
|
||||
msgstr ""
|
||||
msgstr "Marché"
|
||||
|
||||
msgctxt "menu_update"
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
msgstr "Mise à jour"
|
||||
|
||||
#, python-format
|
||||
msgctxt "details_installed"
|
||||
msgid "Version %s installed"
|
||||
msgstr ""
|
||||
msgstr "Version %s installée"
|
||||
|
||||
#, python-format
|
||||
msgctxt "details_notinstalled"
|
||||
msgid "Not installed (%d available)"
|
||||
msgstr ""
|
||||
msgstr "Pas installée (%d disponible)"
|
||||
|
||||
msgctxt "inst"
|
||||
msgid "Installed"
|
||||
msgstr ""
|
||||
msgstr "Installée"
|
||||
|
||||
msgctxt "corrupt_download"
|
||||
msgid "Downloaded file is corrupt"
|
||||
msgstr "Le fichier téléchargé est corrompu"
|
||||
|
||||
msgctxt "antifeatures"
|
||||
msgid "Anti-Features"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antiads"
|
||||
msgid "Advertising"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antiadslong"
|
||||
msgid "Show apps that contain advertising"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antitrack"
|
||||
msgid "Tracking"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antitracklong"
|
||||
msgid "Show apps that track and report your activity"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antinonfreead"
|
||||
msgid "Add-ons"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antinonfreeadlong"
|
||||
msgid "Show apps that promote non-free add-ons"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antinonfreenet"
|
||||
msgid "Network Services"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antinonfreenetlong"
|
||||
msgid "Show apps that promote non-free network services"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "expert"
|
||||
msgid "Expert"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "expert_mode"
|
||||
msgid "Enabled expert mode"
|
||||
msgstr ""
|
||||
|
||||
|
91
locale/it.po
91
locale/it.po
@ -6,7 +6,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2010-11-15 07:54+0000\n"
|
||||
"POT-Creation-Date: 2011-01-16 16:16+0000\n"
|
||||
"PO-Revision-Date: 2010-11-04 15:42+0200\n"
|
||||
"Last-Translator: graziano <graziano@sorbaioli.org>\n"
|
||||
"Language-Team: it <LL@li.org>\n"
|
||||
@ -16,6 +16,14 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 1.0dev\n"
|
||||
|
||||
msgctxt "SignatureMismatch"
|
||||
msgid ""
|
||||
"The new version is signed with a different key to the old one. To install"
|
||||
" the new version, the old one must be uninstalled first. Please do this "
|
||||
"and try again. (Note that uninstalling will erase any internal data "
|
||||
"stored by the application)"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "version"
|
||||
msgid "Version"
|
||||
@ -69,7 +77,7 @@ msgid "Notify when new updates are available"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "update_apps_list"
|
||||
msgid "Update apps list from repositories automatically"
|
||||
msgid "Update app list from repositories automatically"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "automatic_repo_scan"
|
||||
@ -88,14 +96,15 @@ msgstr "Informazioni"
|
||||
msgctxt "about_desc"
|
||||
msgid ""
|
||||
"Originally based on Aptoide.\n"
|
||||
"Released under the GNU GPL v2 license."
|
||||
"Released under the GNU GPLv2 license."
|
||||
msgstr ""
|
||||
"Basato su Aptoide.\n"
|
||||
"Rilasciato sotto licenza GNU GPL v2."
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "about_site"
|
||||
msgid "Home:"
|
||||
msgstr "Home:"
|
||||
msgid "Website:"
|
||||
msgstr "Sito Web"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "about_mail"
|
||||
@ -107,18 +116,20 @@ msgctxt "about_version"
|
||||
msgid "Version:"
|
||||
msgstr "Versione Server:"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "about_website"
|
||||
msgid "Web Site"
|
||||
msgid "Website"
|
||||
msgstr "Sito Web"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "no_repo"
|
||||
msgid ""
|
||||
"You have no repositories configured!\n"
|
||||
"You don't have any repositories configured!\n"
|
||||
"\n"
|
||||
"A repository is a source of applications. To add one, press the MENU "
|
||||
"button now and enter the URL.\n"
|
||||
"\n"
|
||||
"A repository URL looks something like this: http://f-droid.org/repo"
|
||||
"A repository address looks something like this: http://f-droid.org/repo"
|
||||
msgstr ""
|
||||
"Non hai configurato nessun repository!\n"
|
||||
"\n"
|
||||
@ -136,8 +147,8 @@ msgid "Update possible - Ver.:"
|
||||
msgstr "Aggiornamento: - Ver.:"
|
||||
|
||||
msgctxt "ok"
|
||||
msgid "Ok"
|
||||
msgstr "Ok"
|
||||
msgid "OK"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "yes"
|
||||
msgid "Yes"
|
||||
@ -216,8 +227,9 @@ msgctxt "download_server"
|
||||
msgid "Getting application from"
|
||||
msgstr "Scaricamento applicazione da"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "repo_add_url"
|
||||
msgid "Repository URL"
|
||||
msgid "Repository address"
|
||||
msgstr "Repository URL"
|
||||
|
||||
msgctxt "isinst"
|
||||
@ -236,19 +248,21 @@ msgctxt "update"
|
||||
msgid "Update!"
|
||||
msgstr "Aggiorna!"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "update_alrt"
|
||||
msgid ""
|
||||
"There updates available for some installed applications.\n"
|
||||
"Do you wish to see them?"
|
||||
"There are updates available for some installed applications.\n"
|
||||
"Do you want to see them?"
|
||||
msgstr ""
|
||||
"Aggiornamenti disponibili.\n"
|
||||
"\n"
|
||||
"Vuoi visualizzarli?"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "repo_alrt"
|
||||
msgid ""
|
||||
"The list of repositories in use has been changed.\n"
|
||||
"Do you wish to update them?"
|
||||
"The list of used repositories has changed.\n"
|
||||
"Do you want to update them?"
|
||||
msgstr ""
|
||||
"L'elenco dei repository in uso e' cambiato.\n"
|
||||
"\n"
|
||||
@ -296,8 +310,9 @@ msgctxt "menu_uninstall"
|
||||
msgid "Uninstall"
|
||||
msgstr "Disinstalla"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "menu_website"
|
||||
msgid "Web Site"
|
||||
msgid "Website"
|
||||
msgstr "Sito Web"
|
||||
|
||||
msgctxt "menu_issues"
|
||||
@ -335,3 +350,47 @@ msgctxt "corrupt_download"
|
||||
msgid "Downloaded file is corrupt"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antifeatures"
|
||||
msgid "Anti-Features"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antiads"
|
||||
msgid "Advertising"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antiadslong"
|
||||
msgid "Show apps that contain advertising"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antitrack"
|
||||
msgid "Tracking"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antitracklong"
|
||||
msgid "Show apps that track and report your activity"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antinonfreead"
|
||||
msgid "Add-ons"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antinonfreeadlong"
|
||||
msgid "Show apps that promote non-free add-ons"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antinonfreenet"
|
||||
msgid "Network Services"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antinonfreenetlong"
|
||||
msgid "Show apps that promote non-free network services"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "expert"
|
||||
msgid "Expert"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "expert_mode"
|
||||
msgid "Enabled expert mode"
|
||||
msgstr ""
|
||||
|
||||
|
80
locale/nl.po
80
locale/nl.po
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2010-11-15 07:54+0000\n"
|
||||
"POT-Creation-Date: 2011-01-16 16:16+0000\n"
|
||||
"PO-Revision-Date: 2010-11-15 07:54+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: nl <LL@li.org>\n"
|
||||
@ -17,6 +17,14 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 1.0dev\n"
|
||||
|
||||
msgctxt "SignatureMismatch"
|
||||
msgid ""
|
||||
"The new version is signed with a different key to the old one. To install"
|
||||
" the new version, the old one must be uninstalled first. Please do this "
|
||||
"and try again. (Note that uninstalling will erase any internal data "
|
||||
"stored by the application)"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "version"
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
@ -68,7 +76,7 @@ msgid "Notify when new updates are available"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "update_apps_list"
|
||||
msgid "Update apps list from repositories automatically"
|
||||
msgid "Update app list from repositories automatically"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "automatic_repo_scan"
|
||||
@ -86,11 +94,11 @@ msgstr ""
|
||||
msgctxt "about_desc"
|
||||
msgid ""
|
||||
"Originally based on Aptoide.\n"
|
||||
"Released under the GNU GPL v2 license."
|
||||
"Released under the GNU GPLv2 license."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "about_site"
|
||||
msgid "Home:"
|
||||
msgid "Website:"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "about_mail"
|
||||
@ -102,17 +110,17 @@ msgid "Version:"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "about_website"
|
||||
msgid "Web Site"
|
||||
msgid "Website"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "no_repo"
|
||||
msgid ""
|
||||
"You have no repositories configured!\n"
|
||||
"You don't have any repositories configured!\n"
|
||||
"\n"
|
||||
"A repository is a source of applications. To add one, press the MENU "
|
||||
"button now and enter the URL.\n"
|
||||
"\n"
|
||||
"A repository URL looks something like this: http://f-droid.org/repo"
|
||||
"A repository address looks something like this: http://f-droid.org/repo"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "not_inst"
|
||||
@ -124,7 +132,7 @@ msgid "Update possible - Ver.:"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "ok"
|
||||
msgid "Ok"
|
||||
msgid "OK"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "yes"
|
||||
@ -204,7 +212,7 @@ msgid "Getting application from"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "repo_add_url"
|
||||
msgid "Repository URL"
|
||||
msgid "Repository address"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "isinst"
|
||||
@ -225,14 +233,14 @@ msgstr ""
|
||||
|
||||
msgctxt "update_alrt"
|
||||
msgid ""
|
||||
"There updates available for some installed applications.\n"
|
||||
"Do you wish to see them?"
|
||||
"There are updates available for some installed applications.\n"
|
||||
"Do you want to see them?"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "repo_alrt"
|
||||
msgid ""
|
||||
"The list of repositories in use has been changed.\n"
|
||||
"Do you wish to update them?"
|
||||
"The list of used repositories has changed.\n"
|
||||
"Do you want to update them?"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "error_download_alrt"
|
||||
@ -276,7 +284,7 @@ msgid "Uninstall"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "menu_website"
|
||||
msgid "Web Site"
|
||||
msgid "Website"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "menu_issues"
|
||||
@ -313,3 +321,47 @@ msgctxt "corrupt_download"
|
||||
msgid "Downloaded file is corrupt"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antifeatures"
|
||||
msgid "Anti-Features"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antiads"
|
||||
msgid "Advertising"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antiadslong"
|
||||
msgid "Show apps that contain advertising"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antitrack"
|
||||
msgid "Tracking"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antitracklong"
|
||||
msgid "Show apps that track and report your activity"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antinonfreead"
|
||||
msgid "Add-ons"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antinonfreeadlong"
|
||||
msgid "Show apps that promote non-free add-ons"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antinonfreenet"
|
||||
msgid "Network Services"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antinonfreenetlong"
|
||||
msgid "Show apps that promote non-free network services"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "expert"
|
||||
msgid "Expert"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "expert_mode"
|
||||
msgid "Enabled expert mode"
|
||||
msgstr ""
|
||||
|
||||
|
387
locale/sv.po
Normal file
387
locale/sv.po
Normal file
@ -0,0 +1,387 @@
|
||||
# Swedish translations for PACKAGE.
|
||||
# Copyright (C) 2010 ORGANIZATION
|
||||
# This file is distributed under the same license as the PACKAGE project.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2011-01-16 16:16+0000\n"
|
||||
"PO-Revision-Date: 2011-01-14 07:33+0200\n"
|
||||
"Last-Translator: Henrik <tunedal@gmail.com>\n"
|
||||
"Language-Team: sv <LL@li.org>\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 1.0dev\n"
|
||||
|
||||
msgctxt "SignatureMismatch"
|
||||
msgid ""
|
||||
"The new version is signed with a different key to the old one. To install"
|
||||
" the new version, the old one must be uninstalled first. Please do this "
|
||||
"and try again. (Note that uninstalling will erase any internal data "
|
||||
"stored by the application)"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "version"
|
||||
msgid "Version"
|
||||
msgstr "Version"
|
||||
|
||||
#, python-format
|
||||
msgctxt "n_versions_available"
|
||||
msgid "%d versions available"
|
||||
msgstr "%d versioner tillgängliga"
|
||||
|
||||
#, python-format
|
||||
msgctxt "n_version_available"
|
||||
msgid "%d version available"
|
||||
msgstr "%d version tillgänglig"
|
||||
|
||||
msgctxt "notify"
|
||||
msgid "Notify"
|
||||
msgstr "Meddela"
|
||||
|
||||
msgctxt "storage"
|
||||
msgid "Storage"
|
||||
msgstr "Lagring"
|
||||
|
||||
msgctxt "cache_downloaded"
|
||||
msgid "Cache downloaded apps"
|
||||
msgstr "Cacha nerladdade program"
|
||||
|
||||
msgctxt "keep_downloaded"
|
||||
msgid "Keep downloaded apk files on SD card"
|
||||
msgstr "Behåll nerladdade apk-filer på SD-kortet"
|
||||
|
||||
msgctxt "updates"
|
||||
msgid "Updates"
|
||||
msgstr "Uppdateringar"
|
||||
|
||||
msgctxt "clear_all_cached_data"
|
||||
msgid "Clear all cached data"
|
||||
msgstr "Rensa all cachad data"
|
||||
|
||||
msgctxt "reset"
|
||||
msgid "Reset"
|
||||
msgstr "Återställ"
|
||||
|
||||
msgctxt "maintenance"
|
||||
msgid "Maintenance"
|
||||
msgstr "Underhåll"
|
||||
|
||||
msgctxt "notify_updates_available"
|
||||
msgid "Notify when new updates are available"
|
||||
msgstr "Meddela mig när nya uppdateringar finns"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "update_apps_list"
|
||||
msgid "Update app list from repositories automatically"
|
||||
msgstr "Uppdatera programlistan från förråd automatiskt"
|
||||
|
||||
msgctxt "automatic_repo_scan"
|
||||
msgid "Automatic repo scan"
|
||||
msgstr "Automatisk förrådsskanning"
|
||||
|
||||
msgctxt "app_name"
|
||||
msgid "FDroid"
|
||||
msgstr "FDroid"
|
||||
|
||||
msgctxt "about_title"
|
||||
msgid "About FDroid"
|
||||
msgstr "Om FDroid"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "about_desc"
|
||||
msgid ""
|
||||
"Originally based on Aptoide.\n"
|
||||
"Released under the GNU GPLv2 license."
|
||||
msgstr ""
|
||||
"Ursprungligen baserat på Aptoide.\n"
|
||||
"Släppt under GNU GPLv2-licensen."
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "about_site"
|
||||
msgid "Website:"
|
||||
msgstr "Webbsida"
|
||||
|
||||
msgctxt "about_mail"
|
||||
msgid "Email:"
|
||||
msgstr "E-post:"
|
||||
|
||||
msgctxt "about_version"
|
||||
msgid "Version:"
|
||||
msgstr "Version:"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "about_website"
|
||||
msgid "Website"
|
||||
msgstr "Webbsida"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "no_repo"
|
||||
msgid ""
|
||||
"You don't have any repositories configured!\n"
|
||||
"\n"
|
||||
"A repository is a source of applications. To add one, press the MENU "
|
||||
"button now and enter the URL.\n"
|
||||
"\n"
|
||||
"A repository address looks something like this: http://f-droid.org/repo"
|
||||
msgstr ""
|
||||
"Du har inga förråd konfigurerade!\n"
|
||||
"\n"
|
||||
"Ett förråd är en källa för program. Tryck på Meny-knappen och ange URL:en"
|
||||
" för att lägga till ett nu.\n"
|
||||
"\n"
|
||||
"En förråds-URL ser ut ungefär så här: http://f-droid.org/repo"
|
||||
|
||||
msgctxt "not_inst"
|
||||
msgid "Not Installed"
|
||||
msgstr "Inte installerad"
|
||||
|
||||
msgctxt "installed_update"
|
||||
msgid "Update possible - Ver.:"
|
||||
msgstr "Uppdatering möjlig - Ver.:"
|
||||
|
||||
msgctxt "ok"
|
||||
msgid "OK"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "yes"
|
||||
msgid "Yes"
|
||||
msgstr "Ja"
|
||||
|
||||
msgctxt "no"
|
||||
msgid "No"
|
||||
msgstr "Nej"
|
||||
|
||||
msgctxt "repo_add_title"
|
||||
msgid "Add new repository"
|
||||
msgstr "Lägg till nytt förråd"
|
||||
|
||||
msgctxt "repo_add_add"
|
||||
msgid "Add"
|
||||
msgstr "Lägg till"
|
||||
|
||||
msgctxt "cancel"
|
||||
msgid "Cancel"
|
||||
msgstr "Avbryt"
|
||||
|
||||
msgctxt "repo_delete_title"
|
||||
msgid "Choose repository to remove"
|
||||
msgstr "Välj förråd att ta bort"
|
||||
|
||||
msgctxt "server_connection_error"
|
||||
msgid "Could not connect to server!"
|
||||
msgstr "Kunde inte ansluta till servern!"
|
||||
|
||||
msgctxt "repo_update_title"
|
||||
msgid "Update repositories"
|
||||
msgstr "Uppdatera förråd"
|
||||
|
||||
msgctxt "tab_installed"
|
||||
msgid "Installed"
|
||||
msgstr "Installerade"
|
||||
|
||||
msgctxt "tab_noninstalled"
|
||||
msgid "Available"
|
||||
msgstr "Tillgängliga"
|
||||
|
||||
msgctxt "tab_updates"
|
||||
msgid "Updates"
|
||||
msgstr "Uppdateringar"
|
||||
|
||||
msgctxt "update_available"
|
||||
msgid "Updates available"
|
||||
msgstr "Uppdateringar tillgängliga"
|
||||
|
||||
msgctxt "process_wait_title"
|
||||
msgid "Please Wait"
|
||||
msgstr "Var vänlig vänta"
|
||||
|
||||
msgctxt "process_update_msg"
|
||||
msgid "Updating application list..."
|
||||
msgstr "Uppdaterar programlistan..."
|
||||
|
||||
msgctxt "connection_error"
|
||||
msgid "Could not connect to the network."
|
||||
msgstr "Kunde inte ansluta till nätverket."
|
||||
|
||||
msgctxt "connection_timeout"
|
||||
msgid "Timeout"
|
||||
msgstr "Timeout"
|
||||
|
||||
msgctxt "connection_error_msg"
|
||||
msgid "Could not connect to server!"
|
||||
msgstr "Kunde inte ansluta till servern!"
|
||||
|
||||
msgctxt "download"
|
||||
msgid "Download"
|
||||
msgstr "Ladda ner"
|
||||
|
||||
msgctxt "download_server"
|
||||
msgid "Getting application from"
|
||||
msgstr "Hämtar program från"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "repo_add_url"
|
||||
msgid "Repository address"
|
||||
msgstr "Förråds-URL"
|
||||
|
||||
msgctxt "isinst"
|
||||
msgid "Installed:"
|
||||
msgstr "Installerad:"
|
||||
|
||||
msgctxt "install"
|
||||
msgid "Install"
|
||||
msgstr "Installera"
|
||||
|
||||
msgctxt "uninstall"
|
||||
msgid "Uninstall"
|
||||
msgstr "Avinstallera"
|
||||
|
||||
msgctxt "update"
|
||||
msgid "Update!"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "update_alrt"
|
||||
msgid ""
|
||||
"There are updates available for some installed applications.\n"
|
||||
"Do you want to see them?"
|
||||
msgstr ""
|
||||
"Det finns uppdateringar för vissa av de installerade programmen.\n"
|
||||
"Vill du se dem?"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "repo_alrt"
|
||||
msgid ""
|
||||
"The list of used repositories has changed.\n"
|
||||
"Do you want to update them?"
|
||||
msgstr ""
|
||||
"Listan över förråd har ändrats.\n"
|
||||
"Vill du uppdatera dem?"
|
||||
|
||||
msgctxt "error_download_alrt"
|
||||
msgid "Could not connect to server or apk file is corrupt!"
|
||||
msgstr "Kunde inte ansluta till servern eller så är apk-filen är skadad!"
|
||||
|
||||
msgctxt "download_alrt"
|
||||
msgid "Getting application from:\n"
|
||||
msgstr "Hämtar program från:\n"
|
||||
|
||||
msgctxt "menu_update_repo"
|
||||
msgid "Update"
|
||||
msgstr "Uppdatera"
|
||||
|
||||
msgctxt "menu_manage"
|
||||
msgid "Manage Repos"
|
||||
msgstr "Hantera förråd"
|
||||
|
||||
msgctxt "menu_preferences"
|
||||
msgid "Preferences"
|
||||
msgstr "Inställningar"
|
||||
|
||||
msgctxt "menu_about"
|
||||
msgid "About"
|
||||
msgstr "Om"
|
||||
|
||||
msgctxt "menu_add_repo"
|
||||
msgid "New Repository"
|
||||
msgstr "Nytt förråd"
|
||||
|
||||
msgctxt "menu_rem_repo"
|
||||
msgid "Remove Repository"
|
||||
msgstr "Ta bort förråd"
|
||||
|
||||
msgctxt "menu_install"
|
||||
msgid "Install"
|
||||
msgstr "Installera"
|
||||
|
||||
msgctxt "menu_uninstall"
|
||||
msgid "Uninstall"
|
||||
msgstr "Avinstallera"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "menu_website"
|
||||
msgid "Website"
|
||||
msgstr "Webbsida"
|
||||
|
||||
msgctxt "menu_issues"
|
||||
msgid "Issues"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "menu_source"
|
||||
msgid "Source Code"
|
||||
msgstr "Källkod"
|
||||
|
||||
msgctxt "menu_market"
|
||||
msgid "Market"
|
||||
msgstr "Market"
|
||||
|
||||
msgctxt "menu_update"
|
||||
msgid "Update"
|
||||
msgstr "Uppdatera"
|
||||
|
||||
#, python-format
|
||||
msgctxt "details_installed"
|
||||
msgid "Version %s installed"
|
||||
msgstr "Version %s är installerad"
|
||||
|
||||
#, python-format
|
||||
msgctxt "details_notinstalled"
|
||||
msgid "Not installed (%d available)"
|
||||
msgstr "Inte installerat (%d tillgängliga)"
|
||||
|
||||
msgctxt "inst"
|
||||
msgid "Installed"
|
||||
msgstr "Installerad"
|
||||
|
||||
msgctxt "corrupt_download"
|
||||
msgid "Downloaded file is corrupt"
|
||||
msgstr "Den nerladdade filen är skadad"
|
||||
|
||||
msgctxt "antifeatures"
|
||||
msgid "Anti-Features"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antiads"
|
||||
msgid "Advertising"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antiadslong"
|
||||
msgid "Show apps that contain advertising"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antitrack"
|
||||
msgid "Tracking"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antitracklong"
|
||||
msgid "Show apps that track and report your activity"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antinonfreead"
|
||||
msgid "Add-ons"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antinonfreeadlong"
|
||||
msgid "Show apps that promote non-free add-ons"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antinonfreenet"
|
||||
msgid "Network Services"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antinonfreenetlong"
|
||||
msgid "Show apps that promote non-free network services"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "expert"
|
||||
msgid "Expert"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "expert_mode"
|
||||
msgid "Enabled expert mode"
|
||||
msgstr ""
|
||||
|
@ -1,14 +1,14 @@
|
||||
# Translations template for PROJECT.
|
||||
# Copyright (C) 2010 ORGANIZATION
|
||||
# Copyright (C) 2011 ORGANIZATION
|
||||
# This file is distributed under the same license as the PROJECT project.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2010-11-15 07:54+0000\n"
|
||||
"POT-Creation-Date: 2011-01-16 16:16+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@ -17,6 +17,14 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 1.0dev\n"
|
||||
|
||||
msgctxt "SignatureMismatch"
|
||||
msgid ""
|
||||
"The new version is signed with a different key to the old one. To install"
|
||||
" the new version, the old one must be uninstalled first. Please do this "
|
||||
"and try again. (Note that uninstalling will erase any internal data "
|
||||
"stored by the application)"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "version"
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
@ -68,7 +76,7 @@ msgid "Notify when new updates are available"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "update_apps_list"
|
||||
msgid "Update apps list from repositories automatically"
|
||||
msgid "Update app list from repositories automatically"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "automatic_repo_scan"
|
||||
@ -86,11 +94,11 @@ msgstr ""
|
||||
msgctxt "about_desc"
|
||||
msgid ""
|
||||
"Originally based on Aptoide.\n"
|
||||
"Released under the GNU GPL v2 license."
|
||||
"Released under the GNU GPLv2 license."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "about_site"
|
||||
msgid "Home:"
|
||||
msgid "Website:"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "about_mail"
|
||||
@ -102,17 +110,17 @@ msgid "Version:"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "about_website"
|
||||
msgid "Web Site"
|
||||
msgid "Website"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "no_repo"
|
||||
msgid ""
|
||||
"You have no repositories configured!\n"
|
||||
"You don't have any repositories configured!\n"
|
||||
"\n"
|
||||
"A repository is a source of applications. To add one, press the MENU "
|
||||
"button now and enter the URL.\n"
|
||||
"\n"
|
||||
"A repository URL looks something like this: http://f-droid.org/repo"
|
||||
"A repository address looks something like this: http://f-droid.org/repo"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "not_inst"
|
||||
@ -124,7 +132,7 @@ msgid "Update possible - Ver.:"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "ok"
|
||||
msgid "Ok"
|
||||
msgid "OK"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "yes"
|
||||
@ -204,7 +212,7 @@ msgid "Getting application from"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "repo_add_url"
|
||||
msgid "Repository URL"
|
||||
msgid "Repository address"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "isinst"
|
||||
@ -225,14 +233,14 @@ msgstr ""
|
||||
|
||||
msgctxt "update_alrt"
|
||||
msgid ""
|
||||
"There updates available for some installed applications.\n"
|
||||
"Do you wish to see them?"
|
||||
"There are updates available for some installed applications.\n"
|
||||
"Do you want to see them?"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "repo_alrt"
|
||||
msgid ""
|
||||
"The list of repositories in use has been changed.\n"
|
||||
"Do you wish to update them?"
|
||||
"The list of used repositories has changed.\n"
|
||||
"Do you want to update them?"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "error_download_alrt"
|
||||
@ -276,7 +284,7 @@ msgid "Uninstall"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "menu_website"
|
||||
msgid "Web Site"
|
||||
msgid "Website"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "menu_issues"
|
||||
@ -313,3 +321,47 @@ msgctxt "corrupt_download"
|
||||
msgid "Downloaded file is corrupt"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antifeatures"
|
||||
msgid "Anti-Features"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antiads"
|
||||
msgid "Advertising"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antiadslong"
|
||||
msgid "Show apps that contain advertising"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antitrack"
|
||||
msgid "Tracking"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antitracklong"
|
||||
msgid "Show apps that track and report your activity"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antinonfreead"
|
||||
msgid "Add-ons"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antinonfreeadlong"
|
||||
msgid "Show apps that promote non-free add-ons"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antinonfreenet"
|
||||
msgid "Network Services"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "antinonfreenetlong"
|
||||
msgid "Show apps that promote non-free network services"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "expert"
|
||||
msgid "Expert"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "expert_mode"
|
||||
msgid "Enabled expert mode"
|
||||
msgstr ""
|
||||
|
||||
|
@ -28,6 +28,10 @@
|
||||
android:textSize="12sp" android:layout_height="wrap_content"
|
||||
android:layout_width="fill_parent" />
|
||||
|
||||
<TextView android:id="@+id/signature" android:layout_below="@id/status"
|
||||
android:layout_alignParentLeft="true" android:textSize="12sp"
|
||||
android:layout_height="wrap_content" android:layout_width="fill_parent" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
@ -1,17 +1,29 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<resources>
|
||||
<string name="version">Version</string>
|
||||
<string name="n_versions_available">%d verfügbare Versionen</string>
|
||||
<string name="n_version_available">%d verfügbare Version</string>
|
||||
<string name="notify">Benachrichtigen</string>
|
||||
<string name="storage">Speicherplatz</string>
|
||||
<string name="cache_downloaded">Heruntergeladene Anwendungen zwischenspeichern</string>
|
||||
<string name="keep_downloaded">Heruntergeladene Anwendungsdateien auf der SD-Karte behalten</string>
|
||||
<string name="updates">Aktualisierungen</string>
|
||||
<string name="clear_all_cached_data">Zwischenspeicher leeren</string>
|
||||
<string name="reset">Zurücksetzen</string>
|
||||
<string name="maintenance">Verwaltung</string>
|
||||
<string name="notify_updates_available">Bei Aktualisierungen benachrichtigen</string>
|
||||
<string name="update_apps_list">Anwendungsliste automatisch aktualisieren</string>
|
||||
<string name="automatic_repo_scan">Automatische Archivkontrolle</string>
|
||||
<string name="app_name">FDroid</string>
|
||||
<string name="about_title">Über FDroid</string>
|
||||
<string name="about_desc">Basierend auf Aptoide.\nLizensiert unter GNU GPLv2.</string>
|
||||
<string name="about_site">Internetseite:</string>
|
||||
<string name="about_mail">E-Mail:</string>
|
||||
<string name="about_mail">Email:</string>
|
||||
<string name="about_version">Version:</string>
|
||||
<string name="about_website">Internetseite</string>
|
||||
<string name="no_found">Keine Anwendung gefunden!</string>
|
||||
<string name="no_repo">Sie haben keine Archive eingestellt!\n\nEin Archiv ist eine Sammlung von Anwendungen. Drücken Sie den Menü-Knopf und fügen Sie die Adresse eines Archivs hinzu.\n\nEine Archiv-Adresse sieht ungefähr so aus: http://f-droid.org/repo</string>
|
||||
<string name="not_inst">Nicht Installiert</string>
|
||||
<string name="installed">Installiert – Version:</string>
|
||||
<string name="installed_update">Aktualisierung verfügbar – Version:</string>
|
||||
<string name="error">Fehler</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="yes">Ja</string>
|
||||
<string name="no">Nein</string>
|
||||
@ -19,7 +31,6 @@
|
||||
<string name="repo_add_add">Hinzufügen</string>
|
||||
<string name="cancel">Abbrechen</string>
|
||||
<string name="repo_delete_title">Zu entfernendes Archiv auswählen</string>
|
||||
<string name="url_website">http://f-droid.org</string>
|
||||
<string name="server_connection_error">Die Serververbindung konnte nicht hergestellt werden!</string>
|
||||
<string name="repo_update_title">Archive aktualisieren</string>
|
||||
<string name="tab_installed">Installiert</string>
|
||||
@ -33,21 +44,8 @@
|
||||
<string name="connection_error_msg">Die Serververbindung konnte nicht hergestellt werden!</string>
|
||||
<string name="download">Herunterladen</string>
|
||||
<string name="download_server">Anwendung wird heruntergeladen von</string>
|
||||
<string name="apk_version_new">Verfügbare Version</string>
|
||||
<string name="settings_sort_title">Anwendungsliste sortieren:</string>
|
||||
<string name="settings_sort_abc">Alphabetisch</string>
|
||||
<string name="settings_sort_installed">Installiert / nicht installiert</string>
|
||||
<string name="settings_sort_recent">Neueste zuerst</string>
|
||||
<string name="settings_sort_rating">Bewertung</string>
|
||||
<string name="settings_filter_title">Anwendungen anzeigen:</string>
|
||||
<string name="settings_filter_category">Nach Kategorie</string>
|
||||
<string name="settings_filter_all">Alle Anwendungen</string>
|
||||
<string name="settings_save">Speichern</string>
|
||||
<string name="repo_add_url">Archiv-Adresse</string>
|
||||
<string name="up_server">Server:</string>
|
||||
<string name="lstver">Server-Version:</string>
|
||||
<string name="isinst">Installiert:</string>
|
||||
<string name="instver">Installierte Version:</string>
|
||||
<string name="install">Installieren</string>
|
||||
<string name="uninstall">Entfernen</string>
|
||||
<string name="update">Aktualisieren!</string>
|
||||
@ -57,6 +55,7 @@
|
||||
<string name="download_alrt">Anwendung wird geladen von:\n</string>
|
||||
<string name="menu_update_repo">Aktualisieren</string>
|
||||
<string name="menu_manage">Archive verwalten</string>
|
||||
<string name="menu_preferences">Einstellungen</string>
|
||||
<string name="menu_about">Über</string>
|
||||
<string name="menu_add_repo">Archiv hinzufügen</string>
|
||||
<string name="menu_rem_repo">Archiv entfernen</string>
|
||||
@ -67,4 +66,8 @@
|
||||
<string name="menu_source">Quelltext</string>
|
||||
<string name="menu_market">Markt</string>
|
||||
<string name="menu_update">Aktualisieren</string>
|
||||
<string name="details_installed">Version %s installiert</string>
|
||||
<string name="details_notinstalled">Nicht installiert (%d verfügbar)</string>
|
||||
<string name="inst">Installiert</string>
|
||||
<string name="corrupt_download">Heruntergeladene Datei ist fehlerhaft</string>
|
||||
</resources>
|
||||
|
@ -1,2 +1,73 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<resources/>
|
||||
<resources>
|
||||
<string name="version">Version</string>
|
||||
<string name="n_versions_available">%d versions disponibles</string>
|
||||
<string name="n_version_available">%d version disponible</string>
|
||||
<string name="notify">Notifier</string>
|
||||
<string name="storage">Mémoire</string>
|
||||
<string name="cache_downloaded">Garder en mémoire cache les applications téléchargées</string>
|
||||
<string name="keep_downloaded">Garder les fichiers apk téléchargés sur la carte SD</string>
|
||||
<string name="updates">Mises à jour</string>
|
||||
<string name="clear_all_cached_data">Vider la mémoire cache</string>
|
||||
<string name="reset">Réinitialisation</string>
|
||||
<string name="maintenance">Maintenance</string>
|
||||
<string name="notify_updates_available">Notifier quand de nouvelles mises à jour sont disponibles</string>
|
||||
<string name="update_apps_list">"Mettre à jour automatiquement la liste d\'applications à partir des dépôts "</string>
|
||||
<string name="automatic_repo_scan">Balayage automatique du dépôt</string>
|
||||
<string name="app_name">FDroid</string>
|
||||
<string name="about_title">À propos de FDroid</string>
|
||||
<string name="about_desc">Originallement basée sur Aptoide.\nLibéré sous licence GNU GPL v2.</string>
|
||||
<string name="about_site">Accueil:</string>
|
||||
<string name="about_mail">Courriel:</string>
|
||||
<string name="about_version">Version:</string>
|
||||
<string name="about_website">Site Web</string>
|
||||
<string name="no_repo">Aucun dépôt n\'est configuré!\n\nUn dépôt est une source d\'applications. Pour en ajouter un, appuyez sur MENU maintenant et entrez l\'adresse URL.\n\nL\'URL d\'un dépôt ressemble à ceci: http://f-droid.org/repo</string>
|
||||
<string name="not_inst">Pas installée</string>
|
||||
<string name="installed_update">Mise à jour possible - Ver.:</string>
|
||||
<string name="ok">Ok</string>
|
||||
<string name="yes">Oui</string>
|
||||
<string name="no">Non</string>
|
||||
<string name="repo_add_title">Ajouter un nouveau dépôt</string>
|
||||
<string name="repo_add_add">Ajouter</string>
|
||||
<string name="cancel">Annuler</string>
|
||||
<string name="repo_delete_title">Choisissez le dépôt à supprimer</string>
|
||||
<string name="server_connection_error">Connection au serveur impossible!</string>
|
||||
<string name="repo_update_title">Mettre à jour les dépôts</string>
|
||||
<string name="tab_installed">Installée</string>
|
||||
<string name="tab_noninstalled">Disponible</string>
|
||||
<string name="tab_updates">Mises à jour</string>
|
||||
<string name="update_available">Mises à jour disponibles</string>
|
||||
<string name="process_wait_title">Patientez</string>
|
||||
<string name="process_update_msg">Mise à jour de la liste d\'applications...</string>
|
||||
<string name="connection_error">Connection au réseau impossible.</string>
|
||||
<string name="connection_timeout">Délai d\'attente</string>
|
||||
<string name="connection_error_msg">Connection au serveur impossible!</string>
|
||||
<string name="download">Téléchargement</string>
|
||||
<string name="download_server">Réception d\'application de</string>
|
||||
<string name="repo_add_url">URL du dépôt</string>
|
||||
<string name="isinst">Installé:</string>
|
||||
<string name="install">Installer</string>
|
||||
<string name="uninstall">Supprimer</string>
|
||||
<string name="update">Mise à jour!</string>
|
||||
<string name="update_alrt">Des mises à jour sont disponibles pour certaines applications.\n\nDésirez-vous les voir?</string>
|
||||
<string name="repo_alrt">La liste des dépôts a changé.\nVoulez-vous les mettre à jour?</string>
|
||||
<string name="error_download_alrt">Connections au serveur impossible ou fichier apk corrompu!</string>
|
||||
<string name="download_alrt">Réception d\'application de:\n</string>
|
||||
<string name="menu_update_repo">Mise à jour</string>
|
||||
<string name="menu_manage">Gestion de dépôts</string>
|
||||
<string name="menu_preferences">Préférences</string>
|
||||
<string name="menu_about">À propos de</string>
|
||||
<string name="menu_add_repo">Nouveau dépôt</string>
|
||||
<string name="menu_rem_repo">Supprimer un dépôt</string>
|
||||
<string name="menu_install">Installer</string>
|
||||
<string name="menu_uninstall">Supprimer</string>
|
||||
<string name="menu_website">Site Web</string>
|
||||
<string name="menu_issues">Problèmes</string>
|
||||
<string name="menu_source">Code source</string>
|
||||
<string name="menu_market">Marché</string>
|
||||
<string name="menu_update">Mise à jour</string>
|
||||
<string name="details_installed">Version %s installée</string>
|
||||
<string name="details_notinstalled">Pas installée (%d disponible)</string>
|
||||
<string name="inst">Installée</string>
|
||||
<string name="corrupt_download">Le fichier téléchargé est corrompu</string>
|
||||
</resources>
|
||||
|
@ -1,17 +1,19 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<resources>
|
||||
<string name="version">Versione Server:</string>
|
||||
<string name="n_versions_available">Aggiornamenti disponibili</string>
|
||||
<string name="n_version_available">Aggiornamenti disponibili</string>
|
||||
<string name="updates">Aggiornamenti</string>
|
||||
<string name="app_name">FDroid</string>
|
||||
<string name="about_title">Informazioni</string>
|
||||
<string name="about_desc">Basato su Aptoide.\nRilasciato sotto licenza GNU GPL v2.</string>
|
||||
<string name="about_site">Home:</string>
|
||||
<string name="about_mail">e-Mail:</string>
|
||||
<string name="about_version">Versione Server:</string>
|
||||
<string name="about_website">Sito Web</string>
|
||||
<string name="no_found">Nessuna applicazione trovata!</string>
|
||||
<string name="no_repo">Non hai configurato nessun repository!\n\nUn repository contiene un insieme di applicazioni. Per aggiungerne uno, premi MENU e inserisci un indirizzo URL.\n\nUn indirizzo URL di esempio e\': http://f-droid.org/repo</string>
|
||||
<string name="not_inst">Non installato</string>
|
||||
<string name="installed">Installato - Ver.:</string>
|
||||
<string name="installed_update">Aggiornamento: - Ver.:</string>
|
||||
<string name="error">Errore</string>
|
||||
<string name="ok">Ok</string>
|
||||
<string name="yes">Sì</string>
|
||||
<string name="no">No</string>
|
||||
@ -19,7 +21,6 @@
|
||||
<string name="repo_add_add">Aggiungi</string>
|
||||
<string name="cancel">Annulla</string>
|
||||
<string name="repo_delete_title">Rimuovi Repository</string>
|
||||
<string name="url_website">http://f-droid.org</string>
|
||||
<string name="server_connection_error">Impossibile connettersi al server!</string>
|
||||
<string name="repo_update_title">Aggiorna Repositories</string>
|
||||
<string name="tab_installed">Installato</string>
|
||||
@ -33,21 +34,8 @@
|
||||
<string name="connection_error_msg">Impossibile connettersi al server!</string>
|
||||
<string name="download">Download</string>
|
||||
<string name="download_server">Scaricamento applicazione da</string>
|
||||
<string name="apk_version_new">disponibile v</string>
|
||||
<string name="settings_sort_title">Elenca applicazioni per:</string>
|
||||
<string name="settings_sort_abc">ordine alfabetico</string>
|
||||
<string name="settings_sort_installed">Installato / Non installato</string>
|
||||
<string name="settings_sort_recent">Piu\' recente</string>
|
||||
<string name="settings_sort_rating">Voto</string>
|
||||
<string name="settings_filter_title">Mostra applicazioni:</string>
|
||||
<string name="settings_filter_category">Categoria</string>
|
||||
<string name="settings_filter_all">Tutte</string>
|
||||
<string name="settings_save">Salva</string>
|
||||
<string name="repo_add_url">Repository URL</string>
|
||||
<string name="up_server">Servers:</string>
|
||||
<string name="lstver">Versione Server:</string>
|
||||
<string name="isinst">Installato:</string>
|
||||
<string name="instver">Versione installata:</string>
|
||||
<string name="install">Installa</string>
|
||||
<string name="uninstall">Disinstalla</string>
|
||||
<string name="update">Aggiorna!</string>
|
||||
@ -67,4 +55,6 @@
|
||||
<string name="menu_source">Codice Sorgente</string>
|
||||
<string name="menu_market">Market</string>
|
||||
<string name="menu_update">Aggiornamento</string>
|
||||
<string name="details_installed">Non installato</string>
|
||||
<string name="inst">Installato</string>
|
||||
</resources>
|
||||
|
71
res/values-sv/strings.xml
Normal file
71
res/values-sv/strings.xml
Normal file
@ -0,0 +1,71 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<resources>
|
||||
<string name="version">Version</string>
|
||||
<string name="n_versions_available">%d versioner tillgängliga</string>
|
||||
<string name="n_version_available">%d version tillgänglig</string>
|
||||
<string name="notify">Meddela</string>
|
||||
<string name="storage">Lagring</string>
|
||||
<string name="cache_downloaded">Cacha nerladdade program</string>
|
||||
<string name="keep_downloaded">Behåll nerladdade apk-filer på SD-kortet</string>
|
||||
<string name="updates">Uppdateringar</string>
|
||||
<string name="clear_all_cached_data">Rensa all cachad data</string>
|
||||
<string name="reset">Återställ</string>
|
||||
<string name="maintenance">Underhåll</string>
|
||||
<string name="notify_updates_available">Meddela mig när nya uppdateringar finns</string>
|
||||
<string name="update_apps_list">Uppdatera programlistan från förråd automatiskt</string>
|
||||
<string name="automatic_repo_scan">Automatisk förrådsskanning</string>
|
||||
<string name="app_name">FDroid</string>
|
||||
<string name="about_title">Om FDroid</string>
|
||||
<string name="about_desc">Ursprungligen baserat på Aptoide.\nSläppt under GNU GPLv2-licensen.</string>
|
||||
<string name="about_site">Hem:</string>
|
||||
<string name="about_mail">E-post:</string>
|
||||
<string name="about_version">Version:</string>
|
||||
<string name="about_website">Webbsida</string>
|
||||
<string name="no_repo">Du har inga förråd konfigurerade!\n\nEtt förråd är en källa för program. Tryck på Meny-knappen och ange URL:en för att lägga till ett nu.\n\nEn förråds-URL ser ut ungefär så här: http://f-droid.org/repo</string>
|
||||
<string name="not_inst">Inte installerad</string>
|
||||
<string name="installed_update">Uppdatering möjlig - Ver.:</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="yes">Ja</string>
|
||||
<string name="no">Nej</string>
|
||||
<string name="repo_add_title">Lägg till nytt förråd</string>
|
||||
<string name="repo_add_add">Lägg till</string>
|
||||
<string name="cancel">Avbryt</string>
|
||||
<string name="repo_delete_title">Välj förråd att ta bort</string>
|
||||
<string name="server_connection_error">Kunde inte ansluta till servern!</string>
|
||||
<string name="repo_update_title">Uppdatera förråd</string>
|
||||
<string name="tab_installed">Installerade</string>
|
||||
<string name="tab_noninstalled">Tillgängliga</string>
|
||||
<string name="tab_updates">Uppdateringar</string>
|
||||
<string name="update_available">Uppdateringar tillgängliga</string>
|
||||
<string name="process_wait_title">Var vänlig vänta</string>
|
||||
<string name="process_update_msg">Uppdaterar programlistan...</string>
|
||||
<string name="connection_error">Kunde inte ansluta till nätverket.</string>
|
||||
<string name="connection_timeout">Timeout</string>
|
||||
<string name="connection_error_msg">Kunde inte ansluta till servern!</string>
|
||||
<string name="download">Ladda ner</string>
|
||||
<string name="download_server">Hämtar program från</string>
|
||||
<string name="repo_add_url">Förråds-URL</string>
|
||||
<string name="isinst">Installerad:</string>
|
||||
<string name="install">Installera</string>
|
||||
<string name="uninstall">Avinstallera</string>
|
||||
<string name="update_alrt">Det finns uppdateringar för vissa av de installerade programmen.\nVill du se dem?</string>
|
||||
<string name="repo_alrt">Listan över förråd har ändrats.\nVill du uppdatera dem?</string>
|
||||
<string name="error_download_alrt">Kunde inte ansluta till servern eller så är apk-filen är skadad!</string>
|
||||
<string name="download_alrt">Hämtar program från:\n</string>
|
||||
<string name="menu_update_repo">Uppdatera</string>
|
||||
<string name="menu_manage">Hantera förråd</string>
|
||||
<string name="menu_preferences">Inställningar</string>
|
||||
<string name="menu_about">Om</string>
|
||||
<string name="menu_add_repo">Nytt förråd</string>
|
||||
<string name="menu_rem_repo">Ta bort förråd</string>
|
||||
<string name="menu_install">Installera</string>
|
||||
<string name="menu_uninstall">Avinstallera</string>
|
||||
<string name="menu_website">Webbsida</string>
|
||||
<string name="menu_source">Källkod</string>
|
||||
<string name="menu_market">Market</string>
|
||||
<string name="menu_update">Uppdatera</string>
|
||||
<string name="details_installed">Version %s är installerad</string>
|
||||
<string name="details_notinstalled">Inte installerat (%d tillgängliga)</string>
|
||||
<string name="inst">Installerad</string>
|
||||
<string name="corrupt_download">Den nerladdade filen är skadad</string>
|
||||
</resources>
|
@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="SignatureMismatch">The new version is signed with a different key to the old one. To install the new version, the old one must be uninstalled first. Please do this and try again. (Note that uninstalling will erase any internal data stored by the application)</string>
|
||||
<string name="version">Version</string>
|
||||
<string name="n_versions_available">%d versions available</string>
|
||||
<string name="n_version_available">%d version available</string>
|
||||
@ -115,4 +116,7 @@
|
||||
<string name="antinonfreenet">Network Services</string>
|
||||
<string name="antinonfreenetlong">Show apps that promote non-free network services</string>
|
||||
|
||||
<string name="expert">Expert</string>
|
||||
<string name="expert_mode">Enabled expert mode</string>
|
||||
|
||||
</resources>
|
||||
|
@ -7,9 +7,9 @@
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/updates">
|
||||
<ListPreference android:title="@string/automatic_repo_scan"
|
||||
android:summary="@string/update_apps_list"
|
||||
android:key="updateInterval" android:defaultValue="0"
|
||||
android:entries="@array/updateIntervalNames" android:entryValues="@array/updateIntervalValues" />
|
||||
android:summary="@string/update_apps_list" android:key="updateInterval"
|
||||
android:defaultValue="0" android:entries="@array/updateIntervalNames"
|
||||
android:entryValues="@array/updateIntervalValues" />
|
||||
<CheckBoxPreference android:title="@string/notify"
|
||||
android:defaultValue="false" android:summary="@string/notify_updates_available"
|
||||
android:key="updateNotify" />
|
||||
@ -29,9 +29,10 @@
|
||||
android:key="antiNonFreeNet" />
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/maintenance">
|
||||
<Preference
|
||||
android:title="@string/reset"
|
||||
android:summary="@string/clear_all_cached_data"
|
||||
android:key="reset" />
|
||||
</PreferenceCategory>
|
||||
<Preference android:title="@string/reset" android:summary="@string/clear_all_cached_data"
|
||||
android:key="reset" />
|
||||
<CheckBoxPreference android:title="@string/expert"
|
||||
android:defaultValue="false" android:summary="@string/expert_mode"
|
||||
android:key="expert" />
|
||||
</PreferenceCategory>
|
||||
</PreferenceScreen>
|
||||
|
@ -22,7 +22,10 @@ import java.io.BufferedInputStream;
|
||||
import java.io.BufferedOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.math.BigInteger;
|
||||
import java.net.URL;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@ -43,6 +46,7 @@ import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.Signature;
|
||||
import android.content.pm.PackageManager.NameNotFoundException;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
@ -162,8 +166,13 @@ public class AppDetails extends ListActivity {
|
||||
}
|
||||
|
||||
private boolean pref_cacheDownloaded;
|
||||
private boolean pref_expert;
|
||||
private boolean viewResetRequired;
|
||||
|
||||
// The signature of the installed version.
|
||||
private Signature mInstalledSignature;
|
||||
private String mInstalledSigID;
|
||||
|
||||
@Override
|
||||
protected void onStart() {
|
||||
super.onStart();
|
||||
@ -174,6 +183,7 @@ public class AppDetails extends ListActivity {
|
||||
SharedPreferences prefs = PreferenceManager
|
||||
.getDefaultSharedPreferences(getBaseContext());
|
||||
pref_cacheDownloaded = prefs.getBoolean("cacheDownloaded", true);
|
||||
pref_expert = prefs.getBoolean("expert", false);
|
||||
viewResetRequired = true;
|
||||
|
||||
}
|
||||
@ -204,6 +214,32 @@ public class AppDetails extends ListActivity {
|
||||
DB.Apk curver = app.getCurrentVersion();
|
||||
app_currentvercode = curver == null ? 0 : curver.vercode;
|
||||
|
||||
// Get the signature of the installed package...
|
||||
mInstalledSignature = null;
|
||||
if (curver != null) {
|
||||
PackageManager pm = getBaseContext().getPackageManager();
|
||||
try {
|
||||
PackageInfo pi = pm.getPackageInfo(appid,
|
||||
PackageManager.GET_SIGNATURES);
|
||||
mInstalledSignature = pi.signatures[0];
|
||||
MessageDigest md;
|
||||
md = MessageDigest.getInstance("MD5");
|
||||
byte[] md5sum = new byte[32];
|
||||
md.update(mInstalledSignature.toCharsString().getBytes());
|
||||
md5sum = md.digest();
|
||||
BigInteger bigInt = new BigInteger(1, md5sum);
|
||||
String md5hash = bigInt.toString(16);
|
||||
while (md5hash.length() < 32)
|
||||
md5hash = "0" + md5hash;
|
||||
mInstalledSigID = md5hash;
|
||||
} catch (NameNotFoundException e) {
|
||||
Log.d("FDroid", "Failed to get installed signature");
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
Log.d("FDroid", "Failed to calculate signature MD5 sum");
|
||||
mInstalledSignature = null;
|
||||
}
|
||||
}
|
||||
|
||||
// Set the icon...
|
||||
ImageView iv = (ImageView) findViewById(R.id.icon);
|
||||
String icon_path = DB.getIconsPath() + app.icon;
|
||||
@ -229,6 +265,10 @@ public class AppDetails extends ListActivity {
|
||||
app.installedVersion));
|
||||
tv = (TextView) findViewById(R.id.description);
|
||||
tv.setText(app.description);
|
||||
if (pref_expert && mInstalledSignature != null) {
|
||||
tv = (TextView) findViewById(R.id.signature);
|
||||
tv.setText("Signed: " + mInstalledSigID);
|
||||
}
|
||||
|
||||
// Set up the list...
|
||||
ApkListAdapter la = new ApkListAdapter(this);
|
||||
@ -372,9 +412,23 @@ public class AppDetails extends ListActivity {
|
||||
// Install the version of this app denoted by 'curapk'.
|
||||
private void install() {
|
||||
|
||||
if (mInstalledSigID != null && !curapk.sig.equals(mInstalledSigID)) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||
builder.setMessage(R.string.SignatureMismatch).setPositiveButton(
|
||||
"Ok", new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int id) {
|
||||
dialog.cancel();
|
||||
}
|
||||
});
|
||||
AlertDialog alert = builder.create();
|
||||
alert.show();
|
||||
return;
|
||||
}
|
||||
|
||||
pd = new ProgressDialog(this);
|
||||
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
|
||||
pd.setMessage(getString(R.string.download_server));
|
||||
pd.show();
|
||||
|
||||
new Thread() {
|
||||
public void run() {
|
||||
@ -488,8 +542,6 @@ public class AppDetails extends ListActivity {
|
||||
}
|
||||
}.start();
|
||||
|
||||
pd.show();
|
||||
|
||||
}
|
||||
|
||||
// Handler used to update the progress dialog while downloading. The
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -60,423 +60,423 @@ import android.widget.TabHost.TabSpec;
|
||||
|
||||
public class FDroid extends TabActivity implements OnItemClickListener {
|
||||
|
||||
private class AppListAdapter extends BaseAdapter {
|
||||
|
||||
private List<DB.App> items = new ArrayList<DB.App>();
|
||||
|
||||
public AppListAdapter(Context context) {
|
||||
}
|
||||
|
||||
public void addItem(DB.App app) {
|
||||
items.add(app);
|
||||
}
|
||||
private class AppListAdapter extends BaseAdapter {
|
||||
|
||||
private List<DB.App> items = new ArrayList<DB.App>();
|
||||
|
||||
public AppListAdapter(Context context) {
|
||||
}
|
||||
|
||||
public void addItem(DB.App app) {
|
||||
items.add(app);
|
||||
}
|
||||
|
||||
public void clear() {
|
||||
items.clear();
|
||||
}
|
||||
public void clear() {
|
||||
items.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return items.size();
|
||||
}
|
||||
@Override
|
||||
public int getCount() {
|
||||
return items.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getItem(int position) {
|
||||
return items.get(position);
|
||||
}
|
||||
@Override
|
||||
public Object getItem(int position) {
|
||||
return items.get(position);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getItemId(int position) {
|
||||
return position;
|
||||
}
|
||||
@Override
|
||||
public long getItemId(int position) {
|
||||
return position;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getView(int position, View convertView, ViewGroup parent) {
|
||||
View v = convertView;
|
||||
if (v == null) {
|
||||
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
v = vi.inflate(R.layout.applistitem, null);
|
||||
}
|
||||
DB.App app = items.get(position);
|
||||
|
||||
TextView name = (TextView) v.findViewById(R.id.name);
|
||||
name.setText(app.name);
|
||||
|
||||
String vs;
|
||||
int numav = app.apks.size();
|
||||
if (numav == 1)
|
||||
vs = getString(R.string.n_version_available);
|
||||
else
|
||||
vs = getString(R.string.n_versions_available);
|
||||
TextView status = (TextView) v.findViewById(R.id.status);
|
||||
status.setText(String.format(vs, numav));
|
||||
|
||||
TextView license = (TextView) v.findViewById(R.id.license);
|
||||
license.setText(app.license);
|
||||
|
||||
TextView summary = (TextView) v.findViewById(R.id.summary);
|
||||
summary.setText(app.summary);
|
||||
|
||||
ImageView icon = (ImageView) v.findViewById(R.id.icon);
|
||||
String iconpath = new String(DB.getIconsPath() + app.icon);
|
||||
File icn = new File(iconpath);
|
||||
if (icn.exists() && icn.length() > 0) {
|
||||
new Uri.Builder().build();
|
||||
icon.setImageURI(Uri.parse(iconpath));
|
||||
} else {
|
||||
icon.setImageResource(android.R.drawable.sym_def_app_icon);
|
||||
}
|
||||
|
||||
return v;
|
||||
}
|
||||
}
|
||||
|
||||
private String LOCAL_PATH = "/sdcard/.fdroid";
|
||||
|
||||
private static final int REQUEST_APPDETAILS = 0;
|
||||
private static final int REQUEST_MANAGEREPOS = 1;
|
||||
private static final int REQUEST_PREFS = 2;
|
||||
|
||||
private static final int UPDATE_REPO = Menu.FIRST;
|
||||
private static final int MANAGE_REPO = Menu.FIRST + 1;
|
||||
private static final int PREFERENCES = Menu.FIRST + 2;
|
||||
private static final int ABOUT = Menu.FIRST + 3;
|
||||
|
||||
private DB db = null;
|
||||
|
||||
// Apps that are available to be installed
|
||||
private AppListAdapter apps_av = new AppListAdapter(this);
|
||||
|
||||
// Apps that are installed
|
||||
private AppListAdapter apps_in = new AppListAdapter(this);
|
||||
|
||||
// Apps that can be upgraded
|
||||
private AppListAdapter apps_up = new AppListAdapter(this);
|
||||
|
||||
private ProgressDialog pd;
|
||||
|
||||
private static final String TAB_IN = "INST";
|
||||
private static final String TAB_UN = "UNIN";
|
||||
private static final String TAB_UP = "UPDT";
|
||||
private TabHost tabHost;
|
||||
private TabSpec ts;
|
||||
private TabSpec ts1;
|
||||
private TabSpec tsUp;
|
||||
|
||||
private boolean triedEmptyUpdate;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
setContentView(R.layout.fdroid);
|
||||
|
||||
File local_path = new File(LOCAL_PATH);
|
||||
if (!local_path.exists())
|
||||
local_path.mkdir();
|
||||
|
||||
File icon_path = new File(DB.getIconsPath());
|
||||
if (!icon_path.exists())
|
||||
icon_path.mkdir();
|
||||
|
||||
tabHost = getTabHost();
|
||||
createTabs();
|
||||
|
||||
Intent i = getIntent();
|
||||
if (i.hasExtra("uri")) {
|
||||
Intent call = new Intent(this, ManageRepo.class);
|
||||
call.putExtra("uri", i.getStringExtra("uri"));
|
||||
startActivityForResult(call, REQUEST_MANAGEREPOS);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStart() {
|
||||
super.onStart();
|
||||
((FDroidApp) getApplication()).inActivity++;
|
||||
db = new DB(this);
|
||||
triedEmptyUpdate = false;
|
||||
populateLists(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStop() {
|
||||
db.close();
|
||||
((FDroidApp) getApplication()).inActivity--;
|
||||
super.onStop();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
|
||||
super.onCreateOptionsMenu(menu);
|
||||
menu.add(Menu.NONE, UPDATE_REPO, 1, R.string.menu_update_repo).setIcon(
|
||||
android.R.drawable.ic_menu_rotate);
|
||||
menu.add(Menu.NONE, MANAGE_REPO, 2, R.string.menu_manage).setIcon(
|
||||
android.R.drawable.ic_menu_agenda);
|
||||
menu.add(Menu.NONE, PREFERENCES, 3, R.string.menu_preferences).setIcon(
|
||||
android.R.drawable.ic_menu_preferences);
|
||||
menu.add(Menu.NONE, ABOUT, 4, R.string.menu_about).setIcon(
|
||||
android.R.drawable.ic_menu_help);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
|
||||
switch (item.getItemId()) {
|
||||
|
||||
case UPDATE_REPO:
|
||||
updateRepos();
|
||||
return true;
|
||||
|
||||
case MANAGE_REPO:
|
||||
Intent i = new Intent(this, ManageRepo.class);
|
||||
startActivityForResult(i, REQUEST_MANAGEREPOS);
|
||||
return true;
|
||||
|
||||
case PREFERENCES:
|
||||
Intent prefs = new Intent(getBaseContext(), Preferences.class);
|
||||
startActivityForResult(prefs, REQUEST_PREFS);
|
||||
return true;
|
||||
|
||||
case ABOUT:
|
||||
LayoutInflater li = LayoutInflater.from(this);
|
||||
View view = li.inflate(R.layout.about, null);
|
||||
|
||||
// Fill in the version...
|
||||
TextView tv = (TextView) view.findViewById(R.id.version);
|
||||
PackageManager pm = getPackageManager();
|
||||
PackageInfo pi;
|
||||
try {
|
||||
pi = pm.getPackageInfo(
|
||||
getApplicationContext().getPackageName(), 0);
|
||||
tv.setText(pi.versionName);
|
||||
} catch (Exception e) {
|
||||
}
|
||||
|
||||
Builder p = new AlertDialog.Builder(this).setView(view);
|
||||
final AlertDialog alrt = p.create();
|
||||
alrt.setIcon(R.drawable.icon);
|
||||
alrt.setTitle(getString(R.string.about_title));
|
||||
alrt.setButton(AlertDialog.BUTTON_NEUTRAL,
|
||||
getString(R.string.about_website),
|
||||
new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog,
|
||||
int whichButton) {
|
||||
Uri uri = Uri.parse("http://f-droid.org");
|
||||
startActivity(new Intent(Intent.ACTION_VIEW, uri));
|
||||
}
|
||||
});
|
||||
alrt.setButton(AlertDialog.BUTTON_NEGATIVE, getString(R.string.ok),
|
||||
new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog,
|
||||
int whichButton) {
|
||||
}
|
||||
});
|
||||
alrt.show();
|
||||
return true;
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
|
||||
switch (requestCode) {
|
||||
case REQUEST_APPDETAILS:
|
||||
break;
|
||||
case REQUEST_MANAGEREPOS:
|
||||
if (data.hasExtra("update")) {
|
||||
AlertDialog.Builder ask_alrt = new AlertDialog.Builder(this);
|
||||
ask_alrt.setTitle(getString(R.string.repo_update_title));
|
||||
ask_alrt.setIcon(android.R.drawable.ic_menu_rotate);
|
||||
ask_alrt.setMessage(getString(R.string.repo_alrt));
|
||||
ask_alrt.setPositiveButton(getString(R.string.yes),
|
||||
new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog,
|
||||
int whichButton) {
|
||||
updateRepos();
|
||||
}
|
||||
});
|
||||
ask_alrt.setNegativeButton(getString(R.string.no),
|
||||
new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog,
|
||||
int whichButton) {
|
||||
return;
|
||||
}
|
||||
});
|
||||
AlertDialog alert = ask_alrt.create();
|
||||
alert.show();
|
||||
}
|
||||
break;
|
||||
case REQUEST_PREFS:
|
||||
// The automatic update settings may have changed, so reschedule (or
|
||||
// unschedule) the
|
||||
// service accordingly. It's cheap, so no need to check if the
|
||||
// particular setting has
|
||||
// actually been changed.
|
||||
UpdateService.schedule(getBaseContext());
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private void createTabs() {
|
||||
tabHost.clearAllTabs();
|
||||
|
||||
// TabContentFactory that can generate the appropriate list for each
|
||||
// tab...
|
||||
TabHost.TabContentFactory tf = new TabHost.TabContentFactory() {
|
||||
@Override
|
||||
public View createTabContent(String tag) {
|
||||
|
||||
AppListAdapter ad;
|
||||
if (tag.equals(TAB_IN))
|
||||
ad = apps_in;
|
||||
else if (tag.equals(TAB_UP))
|
||||
ad = apps_up;
|
||||
else
|
||||
ad = apps_av;
|
||||
|
||||
ListView lst = new ListView(FDroid.this);
|
||||
lst.setOnItemClickListener(FDroid.this);
|
||||
lst.setAdapter(ad);
|
||||
return lst;
|
||||
}
|
||||
};
|
||||
|
||||
// Create the tab of installed apps...
|
||||
ts = tabHost.newTabSpec(TAB_IN);
|
||||
ts.setIndicator(getString(R.string.tab_installed), getResources()
|
||||
.getDrawable(drawable.star_off));
|
||||
ts.setContent(tf);
|
||||
|
||||
// Create the tab of apps with updates...
|
||||
tsUp = tabHost.newTabSpec(TAB_UP);
|
||||
tsUp.setIndicator(getString(R.string.tab_updates), getResources()
|
||||
.getDrawable(drawable.star_on));
|
||||
tsUp.setContent(tf);
|
||||
|
||||
// Create the tab of available apps...
|
||||
ts1 = tabHost.newTabSpec(TAB_UN);
|
||||
ts1.setIndicator(getString(R.string.tab_noninstalled), getResources()
|
||||
.getDrawable(drawable.ic_input_add));
|
||||
ts1.setContent(tf);
|
||||
|
||||
tabHost.addTab(ts1);
|
||||
tabHost.addTab(ts);
|
||||
tabHost.addTab(tsUp);
|
||||
|
||||
}
|
||||
|
||||
// Populate the lists.
|
||||
// 'update' - true to update the installed status of the applications
|
||||
// by asking the system.
|
||||
private void populateLists(boolean update) {
|
||||
|
||||
apps_in.clear();
|
||||
apps_av.clear();
|
||||
apps_up.clear();
|
||||
|
||||
Vector<DB.App> apps = db.getApps(null, null, update);
|
||||
if (apps.isEmpty()) {
|
||||
// Don't attempt this more than once - we may have invalid
|
||||
// repositories.
|
||||
if (triedEmptyUpdate)
|
||||
return;
|
||||
// If there are no apps, update from the repos - it must be a
|
||||
// new installation.
|
||||
Log.d("FDroid", "Empty app list forces repo update");
|
||||
updateRepos();
|
||||
triedEmptyUpdate = true;
|
||||
return;
|
||||
}
|
||||
Log.d("FDroid", "Updating lists - " + apps.size() + " apps in total");
|
||||
|
||||
for (DB.App app : apps) {
|
||||
if (app.installedVersion == null) {
|
||||
apps_av.addItem(app);
|
||||
} else {
|
||||
apps_in.addItem(app);
|
||||
if (app.hasUpdates)
|
||||
apps_up.addItem(app);
|
||||
}
|
||||
}
|
||||
|
||||
// Update the count on the 'Updates' tab to show the number available.
|
||||
// This is quite unpleasant, but seems to be the only way to do it.
|
||||
TextView uptext = (TextView) tabHost.getTabWidget().getChildAt(2)
|
||||
.findViewById(android.R.id.title);
|
||||
uptext.setText(getString(R.string.tab_updates) + " ("
|
||||
+ Integer.toString(apps_up.getCount()) + ")");
|
||||
|
||||
// Tell the lists that the data behind the adapter has changed, so
|
||||
// they can refresh...
|
||||
apps_av.notifyDataSetChanged();
|
||||
apps_in.notifyDataSetChanged();
|
||||
apps_up.notifyDataSetChanged();
|
||||
|
||||
}
|
||||
|
||||
public boolean updateRepos() {
|
||||
pd = ProgressDialog.show(this, getString(R.string.process_wait_title),
|
||||
getString(R.string.process_update_msg), true);
|
||||
pd.setIcon(android.R.drawable.ic_dialog_info);
|
||||
|
||||
// Check for connection first!
|
||||
ConnectivityManager netstate = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||
if (netstate.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED
|
||||
|| netstate.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED) {
|
||||
new Thread() {
|
||||
public void run() {
|
||||
RepoXMLHandler.doUpdates(FDroid.this, db);
|
||||
update_handler.sendEmptyMessage(0);
|
||||
}
|
||||
}.start();
|
||||
return true;
|
||||
} else {
|
||||
pd.dismiss();
|
||||
Toast.makeText(FDroid.this, getString(R.string.connection_error),
|
||||
Toast.LENGTH_LONG).show();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Handlers for thread functions that need to access GUI
|
||||
*/
|
||||
private Handler update_handler = new Handler() {
|
||||
@Override
|
||||
public void handleMessage(Message msg) {
|
||||
populateLists(true);
|
||||
if (pd.isShowing())
|
||||
pd.dismiss();
|
||||
}
|
||||
};
|
||||
|
||||
// Handler for a click on one of the items in an application list. Pops
|
||||
// up a dialog that shows the details of the application and all its
|
||||
// available versions, with buttons to allow installation etc.
|
||||
public void onItemClick(AdapterView<?> arg0, View arg1, final int arg2,
|
||||
long arg3) {
|
||||
|
||||
final DB.App app;
|
||||
String curtab = tabHost.getCurrentTabTag();
|
||||
if (curtab.equalsIgnoreCase(TAB_IN)) {
|
||||
app = (DB.App) apps_in.getItem(arg2);
|
||||
} else if (curtab.equalsIgnoreCase(TAB_UP)) {
|
||||
app = (DB.App) apps_up.getItem(arg2);
|
||||
} else {
|
||||
app = (DB.App) apps_av.getItem(arg2);
|
||||
}
|
||||
|
||||
Intent intent = new Intent(this, AppDetails.class);
|
||||
intent.putExtra("appid", app.id);
|
||||
startActivityForResult(intent, REQUEST_APPDETAILS);
|
||||
|
||||
}
|
||||
@Override
|
||||
public View getView(int position, View convertView, ViewGroup parent) {
|
||||
View v = convertView;
|
||||
if (v == null) {
|
||||
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
v = vi.inflate(R.layout.applistitem, null);
|
||||
}
|
||||
DB.App app = items.get(position);
|
||||
|
||||
TextView name = (TextView) v.findViewById(R.id.name);
|
||||
name.setText(app.name);
|
||||
|
||||
String vs;
|
||||
int numav = app.apks.size();
|
||||
if (numav == 1)
|
||||
vs = getString(R.string.n_version_available);
|
||||
else
|
||||
vs = getString(R.string.n_versions_available);
|
||||
TextView status = (TextView) v.findViewById(R.id.status);
|
||||
status.setText(String.format(vs, numav));
|
||||
|
||||
TextView license = (TextView) v.findViewById(R.id.license);
|
||||
license.setText(app.license);
|
||||
|
||||
TextView summary = (TextView) v.findViewById(R.id.summary);
|
||||
summary.setText(app.summary);
|
||||
|
||||
ImageView icon = (ImageView) v.findViewById(R.id.icon);
|
||||
String iconpath = new String(DB.getIconsPath() + app.icon);
|
||||
File icn = new File(iconpath);
|
||||
if (icn.exists() && icn.length() > 0) {
|
||||
new Uri.Builder().build();
|
||||
icon.setImageURI(Uri.parse(iconpath));
|
||||
} else {
|
||||
icon.setImageResource(android.R.drawable.sym_def_app_icon);
|
||||
}
|
||||
|
||||
return v;
|
||||
}
|
||||
}
|
||||
|
||||
private String LOCAL_PATH = "/sdcard/.fdroid";
|
||||
|
||||
private static final int REQUEST_APPDETAILS = 0;
|
||||
private static final int REQUEST_MANAGEREPOS = 1;
|
||||
private static final int REQUEST_PREFS = 2;
|
||||
|
||||
private static final int UPDATE_REPO = Menu.FIRST;
|
||||
private static final int MANAGE_REPO = Menu.FIRST + 1;
|
||||
private static final int PREFERENCES = Menu.FIRST + 2;
|
||||
private static final int ABOUT = Menu.FIRST + 3;
|
||||
|
||||
private DB db = null;
|
||||
|
||||
// Apps that are available to be installed
|
||||
private AppListAdapter apps_av = new AppListAdapter(this);
|
||||
|
||||
// Apps that are installed
|
||||
private AppListAdapter apps_in = new AppListAdapter(this);
|
||||
|
||||
// Apps that can be upgraded
|
||||
private AppListAdapter apps_up = new AppListAdapter(this);
|
||||
|
||||
private ProgressDialog pd;
|
||||
|
||||
private static final String TAB_IN = "INST";
|
||||
private static final String TAB_UN = "UNIN";
|
||||
private static final String TAB_UP = "UPDT";
|
||||
private TabHost tabHost;
|
||||
private TabSpec ts;
|
||||
private TabSpec ts1;
|
||||
private TabSpec tsUp;
|
||||
|
||||
private boolean triedEmptyUpdate;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
setContentView(R.layout.fdroid);
|
||||
|
||||
File local_path = new File(LOCAL_PATH);
|
||||
if (!local_path.exists())
|
||||
local_path.mkdir();
|
||||
|
||||
File icon_path = new File(DB.getIconsPath());
|
||||
if (!icon_path.exists())
|
||||
icon_path.mkdir();
|
||||
|
||||
tabHost = getTabHost();
|
||||
createTabs();
|
||||
|
||||
Intent i = getIntent();
|
||||
if (i.hasExtra("uri")) {
|
||||
Intent call = new Intent(this, ManageRepo.class);
|
||||
call.putExtra("uri", i.getStringExtra("uri"));
|
||||
startActivityForResult(call, REQUEST_MANAGEREPOS);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStart() {
|
||||
super.onStart();
|
||||
((FDroidApp) getApplication()).inActivity++;
|
||||
db = new DB(this);
|
||||
triedEmptyUpdate = false;
|
||||
populateLists(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStop() {
|
||||
db.close();
|
||||
((FDroidApp) getApplication()).inActivity--;
|
||||
super.onStop();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
|
||||
super.onCreateOptionsMenu(menu);
|
||||
menu.add(Menu.NONE, UPDATE_REPO, 1, R.string.menu_update_repo).setIcon(
|
||||
android.R.drawable.ic_menu_rotate);
|
||||
menu.add(Menu.NONE, MANAGE_REPO, 2, R.string.menu_manage).setIcon(
|
||||
android.R.drawable.ic_menu_agenda);
|
||||
menu.add(Menu.NONE, PREFERENCES, 3, R.string.menu_preferences).setIcon(
|
||||
android.R.drawable.ic_menu_preferences);
|
||||
menu.add(Menu.NONE, ABOUT, 4, R.string.menu_about).setIcon(
|
||||
android.R.drawable.ic_menu_help);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
|
||||
switch (item.getItemId()) {
|
||||
|
||||
case UPDATE_REPO:
|
||||
updateRepos();
|
||||
return true;
|
||||
|
||||
case MANAGE_REPO:
|
||||
Intent i = new Intent(this, ManageRepo.class);
|
||||
startActivityForResult(i, REQUEST_MANAGEREPOS);
|
||||
return true;
|
||||
|
||||
case PREFERENCES:
|
||||
Intent prefs = new Intent(getBaseContext(), Preferences.class);
|
||||
startActivityForResult(prefs, REQUEST_PREFS);
|
||||
return true;
|
||||
|
||||
case ABOUT:
|
||||
LayoutInflater li = LayoutInflater.from(this);
|
||||
View view = li.inflate(R.layout.about, null);
|
||||
|
||||
// Fill in the version...
|
||||
TextView tv = (TextView) view.findViewById(R.id.version);
|
||||
PackageManager pm = getPackageManager();
|
||||
PackageInfo pi;
|
||||
try {
|
||||
pi = pm.getPackageInfo(
|
||||
getApplicationContext().getPackageName(), 0);
|
||||
tv.setText(pi.versionName);
|
||||
} catch (Exception e) {
|
||||
}
|
||||
|
||||
Builder p = new AlertDialog.Builder(this).setView(view);
|
||||
final AlertDialog alrt = p.create();
|
||||
alrt.setIcon(R.drawable.icon);
|
||||
alrt.setTitle(getString(R.string.about_title));
|
||||
alrt.setButton(AlertDialog.BUTTON_NEUTRAL,
|
||||
getString(R.string.about_website),
|
||||
new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog,
|
||||
int whichButton) {
|
||||
Uri uri = Uri.parse("http://f-droid.org");
|
||||
startActivity(new Intent(Intent.ACTION_VIEW, uri));
|
||||
}
|
||||
});
|
||||
alrt.setButton(AlertDialog.BUTTON_NEGATIVE, getString(R.string.ok),
|
||||
new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog,
|
||||
int whichButton) {
|
||||
}
|
||||
});
|
||||
alrt.show();
|
||||
return true;
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
|
||||
switch (requestCode) {
|
||||
case REQUEST_APPDETAILS:
|
||||
break;
|
||||
case REQUEST_MANAGEREPOS:
|
||||
if (data.hasExtra("update")) {
|
||||
AlertDialog.Builder ask_alrt = new AlertDialog.Builder(this);
|
||||
ask_alrt.setTitle(getString(R.string.repo_update_title));
|
||||
ask_alrt.setIcon(android.R.drawable.ic_menu_rotate);
|
||||
ask_alrt.setMessage(getString(R.string.repo_alrt));
|
||||
ask_alrt.setPositiveButton(getString(R.string.yes),
|
||||
new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog,
|
||||
int whichButton) {
|
||||
updateRepos();
|
||||
}
|
||||
});
|
||||
ask_alrt.setNegativeButton(getString(R.string.no),
|
||||
new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog,
|
||||
int whichButton) {
|
||||
return;
|
||||
}
|
||||
});
|
||||
AlertDialog alert = ask_alrt.create();
|
||||
alert.show();
|
||||
}
|
||||
break;
|
||||
case REQUEST_PREFS:
|
||||
// The automatic update settings may have changed, so reschedule (or
|
||||
// unschedule) the
|
||||
// service accordingly. It's cheap, so no need to check if the
|
||||
// particular setting has
|
||||
// actually been changed.
|
||||
UpdateService.schedule(getBaseContext());
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private void createTabs() {
|
||||
tabHost.clearAllTabs();
|
||||
|
||||
// TabContentFactory that can generate the appropriate list for each
|
||||
// tab...
|
||||
TabHost.TabContentFactory tf = new TabHost.TabContentFactory() {
|
||||
@Override
|
||||
public View createTabContent(String tag) {
|
||||
|
||||
AppListAdapter ad;
|
||||
if (tag.equals(TAB_IN))
|
||||
ad = apps_in;
|
||||
else if (tag.equals(TAB_UP))
|
||||
ad = apps_up;
|
||||
else
|
||||
ad = apps_av;
|
||||
|
||||
ListView lst = new ListView(FDroid.this);
|
||||
lst.setOnItemClickListener(FDroid.this);
|
||||
lst.setAdapter(ad);
|
||||
return lst;
|
||||
}
|
||||
};
|
||||
|
||||
// Create the tab of installed apps...
|
||||
ts = tabHost.newTabSpec(TAB_IN);
|
||||
ts.setIndicator(getString(R.string.tab_installed), getResources()
|
||||
.getDrawable(drawable.star_off));
|
||||
ts.setContent(tf);
|
||||
|
||||
// Create the tab of apps with updates...
|
||||
tsUp = tabHost.newTabSpec(TAB_UP);
|
||||
tsUp.setIndicator(getString(R.string.tab_updates), getResources()
|
||||
.getDrawable(drawable.star_on));
|
||||
tsUp.setContent(tf);
|
||||
|
||||
// Create the tab of available apps...
|
||||
ts1 = tabHost.newTabSpec(TAB_UN);
|
||||
ts1.setIndicator(getString(R.string.tab_noninstalled), getResources()
|
||||
.getDrawable(drawable.ic_input_add));
|
||||
ts1.setContent(tf);
|
||||
|
||||
tabHost.addTab(ts1);
|
||||
tabHost.addTab(ts);
|
||||
tabHost.addTab(tsUp);
|
||||
|
||||
}
|
||||
|
||||
// Populate the lists.
|
||||
// 'update' - true to update the installed status of the applications
|
||||
// by asking the system.
|
||||
private void populateLists(boolean update) {
|
||||
|
||||
apps_in.clear();
|
||||
apps_av.clear();
|
||||
apps_up.clear();
|
||||
|
||||
Vector<DB.App> apps = db.getApps(null, null, update);
|
||||
if (apps.isEmpty()) {
|
||||
// Don't attempt this more than once - we may have invalid
|
||||
// repositories.
|
||||
if (triedEmptyUpdate)
|
||||
return;
|
||||
// If there are no apps, update from the repos - it must be a
|
||||
// new installation.
|
||||
Log.d("FDroid", "Empty app list forces repo update");
|
||||
updateRepos();
|
||||
triedEmptyUpdate = true;
|
||||
return;
|
||||
}
|
||||
Log.d("FDroid", "Updating lists - " + apps.size() + " apps in total");
|
||||
|
||||
for (DB.App app : apps) {
|
||||
if (app.installedVersion == null) {
|
||||
apps_av.addItem(app);
|
||||
} else {
|
||||
apps_in.addItem(app);
|
||||
if (app.hasUpdates)
|
||||
apps_up.addItem(app);
|
||||
}
|
||||
}
|
||||
|
||||
// Update the count on the 'Updates' tab to show the number available.
|
||||
// This is quite unpleasant, but seems to be the only way to do it.
|
||||
TextView uptext = (TextView) tabHost.getTabWidget().getChildAt(2)
|
||||
.findViewById(android.R.id.title);
|
||||
uptext.setText(getString(R.string.tab_updates) + " ("
|
||||
+ Integer.toString(apps_up.getCount()) + ")");
|
||||
|
||||
// Tell the lists that the data behind the adapter has changed, so
|
||||
// they can refresh...
|
||||
apps_av.notifyDataSetChanged();
|
||||
apps_in.notifyDataSetChanged();
|
||||
apps_up.notifyDataSetChanged();
|
||||
|
||||
}
|
||||
|
||||
public boolean updateRepos() {
|
||||
pd = ProgressDialog.show(this, getString(R.string.process_wait_title),
|
||||
getString(R.string.process_update_msg), true);
|
||||
pd.setIcon(android.R.drawable.ic_dialog_info);
|
||||
|
||||
// Check for connection first!
|
||||
ConnectivityManager netstate = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||
if (netstate.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED
|
||||
|| netstate.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED) {
|
||||
new Thread() {
|
||||
public void run() {
|
||||
RepoXMLHandler.doUpdates(FDroid.this, db);
|
||||
update_handler.sendEmptyMessage(0);
|
||||
}
|
||||
}.start();
|
||||
return true;
|
||||
} else {
|
||||
pd.dismiss();
|
||||
Toast.makeText(FDroid.this, getString(R.string.connection_error),
|
||||
Toast.LENGTH_LONG).show();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Handlers for thread functions that need to access GUI
|
||||
*/
|
||||
private Handler update_handler = new Handler() {
|
||||
@Override
|
||||
public void handleMessage(Message msg) {
|
||||
populateLists(true);
|
||||
if (pd.isShowing())
|
||||
pd.dismiss();
|
||||
}
|
||||
};
|
||||
|
||||
// Handler for a click on one of the items in an application list. Pops
|
||||
// up a dialog that shows the details of the application and all its
|
||||
// available versions, with buttons to allow installation etc.
|
||||
public void onItemClick(AdapterView<?> arg0, View arg1, final int arg2,
|
||||
long arg3) {
|
||||
|
||||
final DB.App app;
|
||||
String curtab = tabHost.getCurrentTabTag();
|
||||
if (curtab.equalsIgnoreCase(TAB_IN)) {
|
||||
app = (DB.App) apps_in.getItem(arg2);
|
||||
} else if (curtab.equalsIgnoreCase(TAB_UP)) {
|
||||
app = (DB.App) apps_up.getItem(arg2);
|
||||
} else {
|
||||
app = (DB.App) apps_av.getItem(arg2);
|
||||
}
|
||||
|
||||
Intent intent = new Intent(this, AppDetails.class);
|
||||
intent.putExtra("appid", app.id);
|
||||
startActivityForResult(intent, REQUEST_APPDETAILS);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -26,6 +26,6 @@ public class FDroidApp extends Application {
|
||||
// don't want a database update to run. Incremented when entering
|
||||
// one, and decremented when leaving, so if it's 0 it ought to be
|
||||
// ok!
|
||||
public int inActivity=0;
|
||||
public int inActivity = 0;
|
||||
|
||||
}
|
||||
|
@ -42,203 +42,205 @@ import android.util.Log;
|
||||
|
||||
public class RepoXMLHandler extends DefaultHandler {
|
||||
|
||||
String mserver;
|
||||
String mserver;
|
||||
|
||||
private DB db;
|
||||
private DB db;
|
||||
|
||||
private DB.App curapp = null;
|
||||
private DB.Apk curapk = null;
|
||||
private String curchars = null;
|
||||
private DB.App curapp = null;
|
||||
private DB.Apk curapk = null;
|
||||
private String curchars = null;
|
||||
|
||||
public RepoXMLHandler(String srv, DB db) {
|
||||
mserver = srv;
|
||||
this.db = db;
|
||||
}
|
||||
public RepoXMLHandler(String srv, DB db) {
|
||||
mserver = srv;
|
||||
this.db = db;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void characters(char[] ch, int start, int length)
|
||||
throws SAXException {
|
||||
@Override
|
||||
public void characters(char[] ch, int start, int length)
|
||||
throws SAXException {
|
||||
|
||||
super.characters(ch, start, length);
|
||||
super.characters(ch, start, length);
|
||||
|
||||
String str = new String(ch).substring(start, start + length);
|
||||
if (curchars == null)
|
||||
curchars = str;
|
||||
else
|
||||
curchars += str;
|
||||
}
|
||||
String str = new String(ch).substring(start, start + length);
|
||||
if (curchars == null)
|
||||
curchars = str;
|
||||
else
|
||||
curchars += str;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endElement(String uri, String localName, String qName)
|
||||
throws SAXException {
|
||||
@Override
|
||||
public void endElement(String uri, String localName, String qName)
|
||||
throws SAXException {
|
||||
|
||||
super.endElement(uri, localName, qName);
|
||||
String curel = localName;
|
||||
String str = curchars;
|
||||
super.endElement(uri, localName, qName);
|
||||
String curel = localName;
|
||||
String str = curchars;
|
||||
|
||||
if (curel == "application" && curapp != null) {
|
||||
Log.d("FDroid", "Repo: Updating application " + curapp.id);
|
||||
db.updateApplication(curapp);
|
||||
getIcon(curapp);
|
||||
curapp = null;
|
||||
} else if (curel == "package" && curapk != null && curapp != null) {
|
||||
Log.d("FDroid", "Repo: Package added (" + curapk.version + ")");
|
||||
curapp.apks.add(curapk);
|
||||
curapk = null;
|
||||
} else if (curapk != null && str != null) {
|
||||
if (curel == "version") {
|
||||
curapk.version = str;
|
||||
} else if (curel == "versioncode") {
|
||||
try {
|
||||
curapk.vercode = Integer.parseInt(str);
|
||||
} catch (NumberFormatException ex) {
|
||||
curapk.vercode = 0;
|
||||
}
|
||||
} else if (curel == "size") {
|
||||
try {
|
||||
curapk.size = Integer.parseInt(str);
|
||||
} catch (NumberFormatException ex) {
|
||||
curapk.size = 0;
|
||||
}
|
||||
} else if (curel == "hash") {
|
||||
curapk.hash = str;
|
||||
} else if (curel == "apkname") {
|
||||
curapk.apkName = str;
|
||||
} else if (curel == "apksource") {
|
||||
curapk.apkSource = str;
|
||||
}
|
||||
} else if (curapp != null && str != null) {
|
||||
if (curel == "id") {
|
||||
Log.d("FDroid", "App id is " + str);
|
||||
curapp.id = str;
|
||||
} else if (curel == "name") {
|
||||
curapp.name = str;
|
||||
} else if (curel == "icon") {
|
||||
curapp.icon = str;
|
||||
} else if (curel == "description") {
|
||||
curapp.description = str;
|
||||
} else if (curel == "summary") {
|
||||
curapp.summary = str;
|
||||
} else if (curel == "license") {
|
||||
curapp.license = str;
|
||||
} else if (curel == "source") {
|
||||
curapp.sourceURL = str;
|
||||
} else if (curel == "web") {
|
||||
curapp.webURL = str;
|
||||
} else if (curel == "tracker") {
|
||||
curapp.trackerURL = str;
|
||||
} else if (curel == "marketversion") {
|
||||
curapp.marketVersion = str;
|
||||
} else if (curel == "marketvercode") {
|
||||
try {
|
||||
curapp.marketVercode = Integer.parseInt(str);
|
||||
} catch (NumberFormatException ex) {
|
||||
curapp.marketVercode = 0;
|
||||
}
|
||||
} else if (curel == "antifeatures") {
|
||||
curapp.antiFeatures = str;
|
||||
}
|
||||
}
|
||||
if (curel == "application" && curapp != null) {
|
||||
Log.d("FDroid", "Repo: Updating application " + curapp.id);
|
||||
db.updateApplication(curapp);
|
||||
getIcon(curapp);
|
||||
curapp = null;
|
||||
} else if (curel == "package" && curapk != null && curapp != null) {
|
||||
Log.d("FDroid", "Repo: Package added (" + curapk.version + ")");
|
||||
curapp.apks.add(curapk);
|
||||
curapk = null;
|
||||
} else if (curapk != null && str != null) {
|
||||
if (curel == "version") {
|
||||
curapk.version = str;
|
||||
} else if (curel == "versioncode") {
|
||||
try {
|
||||
curapk.vercode = Integer.parseInt(str);
|
||||
} catch (NumberFormatException ex) {
|
||||
curapk.vercode = 0;
|
||||
}
|
||||
} else if (curel == "size") {
|
||||
try {
|
||||
curapk.size = Integer.parseInt(str);
|
||||
} catch (NumberFormatException ex) {
|
||||
curapk.size = 0;
|
||||
}
|
||||
} else if (curel == "hash") {
|
||||
curapk.hash = str;
|
||||
} else if (curel == "sig") {
|
||||
curapk.sig = str;
|
||||
} else if (curel == "apkname") {
|
||||
curapk.apkName = str;
|
||||
} else if (curel == "apksource") {
|
||||
curapk.apkSource = str;
|
||||
}
|
||||
} else if (curapp != null && str != null) {
|
||||
if (curel == "id") {
|
||||
Log.d("FDroid", "App id is " + str);
|
||||
curapp.id = str;
|
||||
} else if (curel == "name") {
|
||||
curapp.name = str;
|
||||
} else if (curel == "icon") {
|
||||
curapp.icon = str;
|
||||
} else if (curel == "description") {
|
||||
curapp.description = str;
|
||||
} else if (curel == "summary") {
|
||||
curapp.summary = str;
|
||||
} else if (curel == "license") {
|
||||
curapp.license = str;
|
||||
} else if (curel == "source") {
|
||||
curapp.sourceURL = str;
|
||||
} else if (curel == "web") {
|
||||
curapp.webURL = str;
|
||||
} else if (curel == "tracker") {
|
||||
curapp.trackerURL = str;
|
||||
} else if (curel == "marketversion") {
|
||||
curapp.marketVersion = str;
|
||||
} else if (curel == "marketvercode") {
|
||||
try {
|
||||
curapp.marketVercode = Integer.parseInt(str);
|
||||
} catch (NumberFormatException ex) {
|
||||
curapp.marketVercode = 0;
|
||||
}
|
||||
} else if (curel == "antifeatures") {
|
||||
curapp.antiFeatures = str;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startElement(String uri, String localName, String qName,
|
||||
Attributes attributes) throws SAXException {
|
||||
@Override
|
||||
public void startElement(String uri, String localName, String qName,
|
||||
Attributes attributes) throws SAXException {
|
||||
|
||||
super.startElement(uri, localName, qName, attributes);
|
||||
if (localName == "application" && curapp == null) {
|
||||
Log.d("FDroid", "Repo: Found application at " + mserver);
|
||||
curapp = new DB.App();
|
||||
} else if (localName == "package" && curapp != null && curapk == null) {
|
||||
Log.d("FDroid", "Repo: Found package for " + curapp.id);
|
||||
curapk = new DB.Apk();
|
||||
curapk.id = curapp.id;
|
||||
curapk.server = mserver;
|
||||
}
|
||||
curchars = null;
|
||||
}
|
||||
super.startElement(uri, localName, qName, attributes);
|
||||
if (localName == "application" && curapp == null) {
|
||||
Log.d("FDroid", "Repo: Found application at " + mserver);
|
||||
curapp = new DB.App();
|
||||
} else if (localName == "package" && curapp != null && curapk == null) {
|
||||
Log.d("FDroid", "Repo: Found package for " + curapp.id);
|
||||
curapk = new DB.Apk();
|
||||
curapk.id = curapp.id;
|
||||
curapk.server = mserver;
|
||||
}
|
||||
curchars = null;
|
||||
}
|
||||
|
||||
private void getIcon(DB.App app) {
|
||||
try {
|
||||
private void getIcon(DB.App app) {
|
||||
try {
|
||||
|
||||
String destpath = DB.getIconsPath() + app.icon;
|
||||
File f = new File(destpath);
|
||||
if (f.exists())
|
||||
return;
|
||||
String destpath = DB.getIconsPath() + app.icon;
|
||||
File f = new File(destpath);
|
||||
if (f.exists())
|
||||
return;
|
||||
|
||||
BufferedInputStream getit = new BufferedInputStream(new URL(mserver
|
||||
+ "/icons/" + app.icon).openStream());
|
||||
FileOutputStream saveit = new FileOutputStream(destpath);
|
||||
BufferedOutputStream bout = new BufferedOutputStream(saveit, 1024);
|
||||
byte data[] = new byte[1024];
|
||||
BufferedInputStream getit = new BufferedInputStream(new URL(mserver
|
||||
+ "/icons/" + app.icon).openStream());
|
||||
FileOutputStream saveit = new FileOutputStream(destpath);
|
||||
BufferedOutputStream bout = new BufferedOutputStream(saveit, 1024);
|
||||
byte data[] = new byte[1024];
|
||||
|
||||
int readed = getit.read(data, 0, 1024);
|
||||
while (readed != -1) {
|
||||
bout.write(data, 0, readed);
|
||||
readed = getit.read(data, 0, 1024);
|
||||
}
|
||||
bout.close();
|
||||
getit.close();
|
||||
saveit.close();
|
||||
} catch (Exception e) {
|
||||
int readed = getit.read(data, 0, 1024);
|
||||
while (readed != -1) {
|
||||
bout.write(data, 0, readed);
|
||||
readed = getit.read(data, 0, 1024);
|
||||
}
|
||||
bout.close();
|
||||
getit.close();
|
||||
saveit.close();
|
||||
} catch (Exception e) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void doUpdates(Context ctx, DB db) {
|
||||
db.beginUpdate();
|
||||
Vector<DB.Repo> repos = db.getRepos();
|
||||
for (DB.Repo repo : repos) {
|
||||
if (repo.inuse) {
|
||||
public static void doUpdates(Context ctx, DB db) {
|
||||
db.beginUpdate();
|
||||
Vector<DB.Repo> repos = db.getRepos();
|
||||
for (DB.Repo repo : repos) {
|
||||
if (repo.inuse) {
|
||||
|
||||
try {
|
||||
try {
|
||||
|
||||
FileOutputStream f = ctx.openFileOutput("tempindex.xml",
|
||||
Context.MODE_PRIVATE);
|
||||
FileOutputStream f = ctx.openFileOutput("tempindex.xml",
|
||||
Context.MODE_PRIVATE);
|
||||
|
||||
// Download the index file from the repo...
|
||||
BufferedInputStream getit = new BufferedInputStream(
|
||||
new URL(repo.address + "/index.xml").openStream());
|
||||
// Download the index file from the repo...
|
||||
BufferedInputStream getit = new BufferedInputStream(
|
||||
new URL(repo.address + "/index.xml").openStream());
|
||||
|
||||
BufferedOutputStream bout = new BufferedOutputStream(f,
|
||||
1024);
|
||||
byte data[] = new byte[1024];
|
||||
BufferedOutputStream bout = new BufferedOutputStream(f,
|
||||
1024);
|
||||
byte data[] = new byte[1024];
|
||||
|
||||
int readed = getit.read(data, 0, 1024);
|
||||
while (readed != -1) {
|
||||
bout.write(data, 0, readed);
|
||||
readed = getit.read(data, 0, 1024);
|
||||
}
|
||||
bout.close();
|
||||
getit.close();
|
||||
f.close();
|
||||
int readed = getit.read(data, 0, 1024);
|
||||
while (readed != -1) {
|
||||
bout.write(data, 0, readed);
|
||||
readed = getit.read(data, 0, 1024);
|
||||
}
|
||||
bout.close();
|
||||
getit.close();
|
||||
f.close();
|
||||
|
||||
// Process the index...
|
||||
SAXParserFactory spf = SAXParserFactory.newInstance();
|
||||
SAXParser sp = spf.newSAXParser();
|
||||
XMLReader xr = sp.getXMLReader();
|
||||
RepoXMLHandler handler = new RepoXMLHandler(repo.address,
|
||||
db);
|
||||
xr.setContentHandler(handler);
|
||||
// Process the index...
|
||||
SAXParserFactory spf = SAXParserFactory.newInstance();
|
||||
SAXParser sp = spf.newSAXParser();
|
||||
XMLReader xr = sp.getXMLReader();
|
||||
RepoXMLHandler handler = new RepoXMLHandler(repo.address,
|
||||
db);
|
||||
xr.setContentHandler(handler);
|
||||
|
||||
InputStreamReader isr = new FileReader(new File(ctx
|
||||
.getFilesDir()
|
||||
+ "/tempindex.xml"));
|
||||
InputSource is = new InputSource(isr);
|
||||
xr.parse(is);
|
||||
InputStreamReader isr = new FileReader(new File(ctx
|
||||
.getFilesDir()
|
||||
+ "/tempindex.xml"));
|
||||
InputSource is = new InputSource(isr);
|
||||
xr.parse(is);
|
||||
|
||||
} catch (Exception e) {
|
||||
Log.d("FDroid", "Exception updating from " + repo.address
|
||||
+ " - " + e.getMessage());
|
||||
} finally {
|
||||
ctx.deleteFile("tempindex.xml");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Log.d("FDroid", "Exception updating from " + repo.address
|
||||
+ " - " + e.getMessage());
|
||||
} finally {
|
||||
ctx.deleteFile("tempindex.xml");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
db.endUpdate();
|
||||
}
|
||||
}
|
||||
db.endUpdate();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -35,129 +35,129 @@ import android.util.Log;
|
||||
|
||||
public class UpdateService extends Service {
|
||||
|
||||
// Schedule (or cancel schedule for) this service, according to the
|
||||
// current preferences. Should be called a) at boot, or b) if the preference
|
||||
// is changed.
|
||||
// TODO: What if we get upgraded?
|
||||
public static void schedule(Context ctx) {
|
||||
// Schedule (or cancel schedule for) this service, according to the
|
||||
// current preferences. Should be called a) at boot, or b) if the preference
|
||||
// is changed.
|
||||
// TODO: What if we get upgraded?
|
||||
public static void schedule(Context ctx) {
|
||||
|
||||
SharedPreferences prefs = PreferenceManager
|
||||
.getDefaultSharedPreferences(ctx);
|
||||
String sint = prefs.getString("updateInterval", "0");
|
||||
int interval = Integer.parseInt(sint);
|
||||
SharedPreferences prefs = PreferenceManager
|
||||
.getDefaultSharedPreferences(ctx);
|
||||
String sint = prefs.getString("updateInterval", "0");
|
||||
int interval = Integer.parseInt(sint);
|
||||
|
||||
Intent intent = new Intent(ctx, UpdateService.class);
|
||||
PendingIntent pending = PendingIntent.getService(ctx, 0, intent, 0);
|
||||
Intent intent = new Intent(ctx, UpdateService.class);
|
||||
PendingIntent pending = PendingIntent.getService(ctx, 0, intent, 0);
|
||||
|
||||
AlarmManager alarm = (AlarmManager) ctx
|
||||
.getSystemService(Context.ALARM_SERVICE);
|
||||
alarm.cancel(pending);
|
||||
if (interval > 0) {
|
||||
alarm.setInexactRepeating(AlarmManager.ELAPSED_REALTIME,
|
||||
SystemClock.elapsedRealtime() + 5000,
|
||||
AlarmManager.INTERVAL_HOUR, pending);
|
||||
}
|
||||
AlarmManager alarm = (AlarmManager) ctx
|
||||
.getSystemService(Context.ALARM_SERVICE);
|
||||
alarm.cancel(pending);
|
||||
if (interval > 0) {
|
||||
alarm.setInexactRepeating(AlarmManager.ELAPSED_REALTIME,
|
||||
SystemClock.elapsedRealtime() + 5000,
|
||||
AlarmManager.INTERVAL_HOUR, pending);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// For API levels <5
|
||||
@Override
|
||||
public void onStart(Intent intent, int startId) {
|
||||
handleCommand();
|
||||
}
|
||||
// For API levels <5
|
||||
@Override
|
||||
public void onStart(Intent intent, int startId) {
|
||||
handleCommand();
|
||||
}
|
||||
|
||||
// For API levels >=5
|
||||
@Override
|
||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||
handleCommand();
|
||||
return START_REDELIVER_INTENT;
|
||||
}
|
||||
// For API levels >=5
|
||||
@Override
|
||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||
handleCommand();
|
||||
return START_REDELIVER_INTENT;
|
||||
}
|
||||
|
||||
private void handleCommand() {
|
||||
private void handleCommand() {
|
||||
|
||||
new Thread() {
|
||||
public void run() {
|
||||
new Thread() {
|
||||
public void run() {
|
||||
|
||||
// If we're in one of our list activities, we don't want
|
||||
// to run an update because the database will be out of
|
||||
// sync with the display.
|
||||
if (((FDroidApp) getApplication()).inActivity != 0)
|
||||
return;
|
||||
// If we're in one of our list activities, we don't want
|
||||
// to run an update because the database will be out of
|
||||
// sync with the display.
|
||||
if (((FDroidApp) getApplication()).inActivity != 0)
|
||||
return;
|
||||
|
||||
// See if it's time to actually do anything yet...
|
||||
SharedPreferences prefs = PreferenceManager
|
||||
.getDefaultSharedPreferences(getBaseContext());
|
||||
long lastUpdate = prefs.getLong("lastUpdateCheck", 0);
|
||||
String sint = prefs.getString("updateInterval", "0");
|
||||
int interval = Integer.parseInt(sint);
|
||||
if (interval == 0)
|
||||
return;
|
||||
if (lastUpdate + (interval * 60 * 60) > System
|
||||
.currentTimeMillis())
|
||||
return;
|
||||
// See if it's time to actually do anything yet...
|
||||
SharedPreferences prefs = PreferenceManager
|
||||
.getDefaultSharedPreferences(getBaseContext());
|
||||
long lastUpdate = prefs.getLong("lastUpdateCheck", 0);
|
||||
String sint = prefs.getString("updateInterval", "0");
|
||||
int interval = Integer.parseInt(sint);
|
||||
if (interval == 0)
|
||||
return;
|
||||
if (lastUpdate + (interval * 60 * 60) > System
|
||||
.currentTimeMillis())
|
||||
return;
|
||||
|
||||
// Make sure we have a connection...
|
||||
ConnectivityManager netstate = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||
if (netstate.getNetworkInfo(1).getState() != NetworkInfo.State.CONNECTED
|
||||
&& netstate.getNetworkInfo(0).getState() != NetworkInfo.State.CONNECTED)
|
||||
return;
|
||||
// Make sure we have a connection...
|
||||
ConnectivityManager netstate = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||
if (netstate.getNetworkInfo(1).getState() != NetworkInfo.State.CONNECTED
|
||||
&& netstate.getNetworkInfo(0).getState() != NetworkInfo.State.CONNECTED)
|
||||
return;
|
||||
|
||||
// Do the update...
|
||||
DB db = null;
|
||||
try {
|
||||
db = new DB(getBaseContext());
|
||||
boolean notify = prefs.getBoolean("updateNotify", false);
|
||||
// Do the update...
|
||||
DB db = null;
|
||||
try {
|
||||
db = new DB(getBaseContext());
|
||||
boolean notify = prefs.getBoolean("updateNotify", false);
|
||||
|
||||
// Get the number of updates available before we
|
||||
// start, so we can notify if there are new ones.
|
||||
// (But avoid doing it if the user doesn't want
|
||||
// notifications, since it may be time consuming)
|
||||
int prevUpdates = 0;
|
||||
if (notify)
|
||||
prevUpdates = db.getNumUpdates();
|
||||
// Get the number of updates available before we
|
||||
// start, so we can notify if there are new ones.
|
||||
// (But avoid doing it if the user doesn't want
|
||||
// notifications, since it may be time consuming)
|
||||
int prevUpdates = 0;
|
||||
if (notify)
|
||||
prevUpdates = db.getNumUpdates();
|
||||
|
||||
RepoXMLHandler.doUpdates(getBaseContext(), db);
|
||||
RepoXMLHandler.doUpdates(getBaseContext(), db);
|
||||
|
||||
if (notify) {
|
||||
if (db.getNumUpdates() > prevUpdates) {
|
||||
// And the user wants to know.
|
||||
NotificationManager n = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
Notification notification = new Notification(
|
||||
R.drawable.icon,
|
||||
"FDroid Updates Available", System
|
||||
.currentTimeMillis());
|
||||
Context context = getApplicationContext();
|
||||
CharSequence contentTitle = "FDroid";
|
||||
CharSequence contentText = "Updates are available.";
|
||||
Intent notificationIntent = new Intent(
|
||||
UpdateService.this, FDroid.class);
|
||||
PendingIntent contentIntent = PendingIntent
|
||||
.getActivity(UpdateService.this, 0,
|
||||
notificationIntent, 0);
|
||||
notification.setLatestEventInfo(context,
|
||||
contentTitle, contentText, contentIntent);
|
||||
notification.flags |= Notification.FLAG_AUTO_CANCEL;
|
||||
n.notify(1, notification);
|
||||
}
|
||||
}
|
||||
if (notify) {
|
||||
if (db.getNumUpdates() > prevUpdates) {
|
||||
// And the user wants to know.
|
||||
NotificationManager n = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
Notification notification = new Notification(
|
||||
R.drawable.icon,
|
||||
"FDroid Updates Available", System
|
||||
.currentTimeMillis());
|
||||
Context context = getApplicationContext();
|
||||
CharSequence contentTitle = "FDroid";
|
||||
CharSequence contentText = "Updates are available.";
|
||||
Intent notificationIntent = new Intent(
|
||||
UpdateService.this, FDroid.class);
|
||||
PendingIntent contentIntent = PendingIntent
|
||||
.getActivity(UpdateService.this, 0,
|
||||
notificationIntent, 0);
|
||||
notification.setLatestEventInfo(context,
|
||||
contentTitle, contentText, contentIntent);
|
||||
notification.flags |= Notification.FLAG_AUTO_CANCEL;
|
||||
n.notify(1, notification);
|
||||
}
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
Log.d("FDroid", "Exception during handleCommand() - "
|
||||
+ e.getMessage());
|
||||
} finally {
|
||||
if (db != null)
|
||||
db.close();
|
||||
stopSelf();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Log.d("FDroid", "Exception during handleCommand() - "
|
||||
+ e.getMessage());
|
||||
} finally {
|
||||
if (db != null)
|
||||
db.close();
|
||||
stopSelf();
|
||||
}
|
||||
|
||||
}
|
||||
}.start();
|
||||
}
|
||||
}.start();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public IBinder onBind(Intent intent) {
|
||||
return null;
|
||||
}
|
||||
@Override
|
||||
public IBinder onBind(Intent intent) {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user