Merge remote-tracking branch 'origin/master'

This commit is contained in:
Weblate 2014-04-02 00:37:27 +02:00
commit 353d9a20f4
4 changed files with 164 additions and 40 deletions

View file

@ -261,11 +261,14 @@
<string name="internet_not_available">Connexion Internet nécessaire pour cette opération non disponible</string>
<string name="install_more">Installer plus…</string>
<string name="tip_update_index">Mise à jour des cartes hors-ligne</string>
<string name="tip_update_index_t">Il est très important d\'avoir des données cartographiques à jour. OsmAnd a un gestionnaire de téléchargements qui permet de vérifier si les cartes locales peuvent être mises à jour.
\n\tPour vérifier les mises à jour, aller à \'Menu Principal\'-&gt;\'Paramètres\'-&gt;\'Données hors-ligne\'-&gt;\'Télécharger du contenu\'. Sélectionner l\'option \'Filtrer téléchargé\' dans le menu contextuel.
\nLà, seules les cartes déjà téléchargées sur votre système sont affichées, avec les couleurs ou polices suivantes :
\n\t\'Vert\' - pour les cartes à jour avec le serveur
\n\t\'Bleu\' - pour les cartes qui peuvent être mises à jour depuis le serveur\n\t\'Italique\' - pour les cartes désactivées sur l\'appareil</string>
<string name="tip_update_index_t">Il est très important d\'avoir des données cartographiques à jour, pour la visualisation des cartes hors-ligne, pour la recherche de points d\'intérêt ou d'adresses, et pour la navigation hors-ligne. OsmAnd fournit un gestionnaire de données qui permet de télécharger ces cartes hors-ligne (et d\'autres données), et de vérifier si des mises à jour sont disponibles.
\n\nPour télécharger ou vérifier les mises à jour, allez à \'Menu Principal\' → \'Paramètres\' → \'Données hors-ligne\' → \'Télécharger des données hors-ligne\'.
\n\nUne fois la liste des régions établie à partir d\'internet, sélectionnez le fichier à télécharger ou mettre à jour. Un menu en haut de l\'écran vous permet de sélectionner le type de données recherché (cartes standards, courbes de niveau, etc.).
\n\nL\'option \'Cartes téléchargées\' dans le menu contextuel à droite de l\'écran permet de n\'afficher que les cartes déjà téléchargées sur votre système, avec les couleurs ou polices suivantes :
\n\n\'Vert\' - pour les cartes à jour avec le serveur
\n\n\'Bleu\' - pour les cartes qui peuvent être mises à jour depuis le serveur
\n\t\'Italique\' - pour les cartes désactivées sur l\'appareil
</string>
<string name="level_to_switch_vector_raster_descr">Niveau de zoom maximum pour l\'utilisation des cartes vectorielles au lieu des tuiles de carte</string>
<string name="level_to_switch_vector_raster">Niveau de zoom vectoriel</string>
<string name="tip_location_sharing">Partage d\'emplacement</string>
@ -276,7 +279,7 @@
</string>
<string name="tip_favorites">Lieux favoris</string>
<string name="tip_favorites_t">"Les points utilisés fréquemment peuvent être enregistrés en tant que favoris.
\n\tPour créer un lieu Favori, aller dans le Menu contextuel de la carte, sélectionner l\'option \'Ajouter aux favoris\' et saisir un nom adapté. Après enregistrement, ce lieu est facilement accessible par le menu \'Menu principal\'-&gt;\'Favoris\'.
\n\tPour créer un lieu Favori, aller dans le menu contextuel de la carte, sélectionner l\'option \'Ajouter aux favoris\' et saisir un nom adapté. Après enregistrement, ce lieu est facilement accessible par le menu \'Menu principal\'-&gt;\'Favoris\'.
\n\tUn appui long sur un favori dans le menu \'Favoris\' permet de le modifier, le supprimer ou de créer un itinéraire pour s\'y rendre.
\n\tPour afficher tous les favoris sur la carte, activer le calque affichant tous les favoris directement sur la carte dans \'Menu contextuel de la carte\'-&gt;\'Couches\'. "</string>
<string name="create_poi_link_to_osm_doc"> <u>OSM en ligne</u> classification des cartes en images</string>
@ -291,7 +294,9 @@
<string name="tip_app_mode">Mode de fonctionnement</string>
<string name="tip_navigation">Navigation</string>
<string name="tip_navigation_t">Pour activer la navigation il faut d\'abord définir une destination. Puis aller dans \'Menu\'-&gt;\'Directions\' et sélectionner le mode de déplacement.</string>
<string name="tip_navigation_t">La navigation vers un point peut être lancée soit directement par un appui long à son emplacement sur la carte (un appui court sur la bulle apparue ouvre alors le menu contextuel avec le choix \'Aller vers le point\'), soit en choisissant \'Navigation\' après un appui court sur un favori ou un résultat de recherche.
\n\nLa destination est alors indiquée par un point orange et un drapeau à damier. OsmAnd affiche la distance qui vous en sépare, et sa direction (par une flèche orange).
</string>
<string name="tip_search">Recherche</string>
<string name="tip_search_t">Vous pouvez rechercher un lieu via l\'option \'Rechercher autour du point\' dans le menu contextuel de la carte, ou via \'Menu\' → \'Rechercher\'.
\n\nVous pouvez alors rechercher :
@ -781,7 +786,7 @@
<string name="map_settings_descr">Configurer l\'affichage des cartes</string>
<string name="osmand_rastermaps_plugin_description">Ce greffon permet d\'utiliser une grande gamme de cartes au format image en ligne, ou conservée en cache comme carte de base ou comme sur- ou sous-couche de carte. Les cartes peuvent également être préparées hors ligne et copiées dans le dossier OsmAnd.</string>
<string name="osmand_background_plugin_description">Ce greffon permet d\'utiliser l\'enregistrement des traces et la navigation en mode économie (écran éteint) en réveillant périodiquement le GPS pour enregistrer une position ou jouer une instruction vocale.</string>
<string name="osmand_accessibility_description">Ce greffon configure les fonctionnalités d\'accessibilité.</string>
<string name="osmand_accessibility_description">Ce greffon permet de configurer les fonctionnalités d\'accessibilité.</string>
<string name="extra_settings">Paramètres avancés</string>
<string name="osmand_monitoring_description">Ce greffon permet l\'enregistrement de vos itinéraires en fichiers GPX et le suivi en direct utilisant un service web.</string>
<string name="osmand_extra_settings_description">Ce greffon permet de gérer des paramètres de configuration avancés et propres à certains appareils.</string>
@ -818,7 +823,7 @@
<string name="accessibility_extensions_descr">Extensions d\'accessibilité pour les anciennes versions Android</string>
<string name="accessibility_extensions">Extensions d\'accessibilité</string>
<string name="accessibility_mode">Mode accessibilité</string>
<string name="accessibility_mode_descr">Activer les fonctionnalité d\'accessibilité</string>
<string name="accessibility_mode_descr">Activer les fonctionnalités d\'accessibilité</string>
<string name="accessibility_on">Oui</string>
<string name="accessibility_off">Non</string>
<string name="accessibility_default">Selon les paramètres globaux</string>
@ -868,7 +873,7 @@
<string name="zoom_by_trackball">Utiliser le trackball pour le contrôle du zoom</string>
<string name="use_short_object_names_descr">Utiliser les noms d\'objets courts</string>
<string name="use_short_object_names">Utiliser les noms d\'objets</string>
<string name="accessibility_preferences_descr">Préférences liées à l\'accessibilité</string>
<string name="accessibility_preferences_descr">Configurer les paramètres liés à l\'accessibilité</string>
<string name="accessibility_preferences">Accessibilité</string>
<string name="use_fluorescent_overlays">Sur-couche fluorescente</string>
<string name="use_fluorescent_overlays_descr">Utiliser les couleurs fluorescente pour les pistes et routes</string>
@ -1435,7 +1440,7 @@
<string name="osmodroid_seek">Chercher objet</string>
<string name="osmodroid_unseek">Ne plus chercher objet</string>
<string name="speech_rate_descr">Préciser la vitesse d\'élocution du TTS</string>
<string name="speech_rate">Vitesse d\'Élocution</string>
<string name="speech_rate">Vitesse d\'élocution</string>
<string name="complex_route_calculation_failed">Échec du calcul rapide de route (%s), essai avec la méthode lente..</string>
<string name="disable_complex_routing_descr">Désactiver le routage en 2 phases pour la navigation en voiture</string>
@ -1473,15 +1478,17 @@
<string name="route_info">Informations sur l\'itinéraire</string>
<string name="keep_and_add_destination_point">Ajouter comme destination</string>
<string name="use_displayed_track_for_navigation">Voulez-vous suivre la trace affichée à l\'écran ?</string>
<string name="tip_recent_changes_1_7_1_t">Changes in 1.7:
<string name="tip_recent_changes_1_7_1_t">Changements en version 1.7 :
\n\t* IMPORTANT : Les cartes doivent être postérieures à février 2014.
\n\t* Navigation entièrement mise à jour (rapide et précise).
\n\t* New screen with Route Planning (more intuitive and more powerful)
\n\t** Les itinéraires GPX sont disponibles via le bouton Paramètres d\'itinéraire
\n\t* Nouvel écran d\'élaboration de l\'itinéraire (plus intuitif et plus puissant)
\n\t** Possibilité d\'utiliser les itinéraires GPX via le bouton Paramètres d\'itinéraire
\n\t* Boutons se masquant automatiquement durant la navigation
\n\t* Calculate offline route to the first point of GPX route (\'pass the whole track\' option)
\n\t* Calcul d'un itinéraire hors-ligne jusqu\'au début de l\'itinéraire GPX (option \'Suivre la trace depuis le début\')
\n\t* Simulation active dans les tunnels
\n\t* Nombreuses petites améliorations de l\'expérience utilisateur et de l\'utilisabilité
\n\t* Speech rate accessibility setting
\n\t* Paramétrage de la vitesse d\'élocution
</string>
<string name="gpx_option_calculate_first_last_segment">Calculer un itinéraire OsmAnd pour le début et la fin de l\'itinéraire</string>
<string name="calculate_osmand_route_without_internet">Calculer un itinéraire OsmAnd hors-ligne</string>
</resources>

View file

@ -998,23 +998,115 @@ public class OsmandSettings {
public File getExternalStorageDirectory() {
String defaultLocation = ctx.getExternalServiceAPI().getExternalStorageDirectory();
if(Build.VERSION.SDK_INT >= VERSION_DEFAULTLOCATION_CHANGED && !new File(defaultLocation, IndexConstants.APP_DIR).exists()) {
defaultLocation += "/Android/data/" + ctx.getPackageName();
}
return new File(settingsAPI.getString(globalPreferences, EXTERNAL_STORAGE_DIR,
defaultLocation));
}
public static final int VERSION_DEFAULTLOCATION_CHANGED = Integer.MAX_VALUE;
public static final int VERSION_DEFAULTLOCATION_CHANGED = 19;
public String getDefaultExternalStorageLocation() {
String defaultLocation = ctx.getExternalServiceAPI().getExternalStorageDirectory();
if(Build.VERSION.SDK_INT >= VERSION_DEFAULTLOCATION_CHANGED) {
defaultLocation += "/Android/data/" + ctx.getPackageName();
}
return defaultLocation;
}
private static List<String> getWritableSecondaryStorages() {
List<String> writableSecondaryStorage = new ArrayList<String>();
try {
String rawSecondaryStorage = System.getenv("SECONDARY_STORAGE");
if (rawSecondaryStorage != null && rawSecondaryStorage.trim().length() > 0) {
for (String secondaryPath : rawSecondaryStorage.split(":")) {
File testFile = new File(secondaryPath);
if (isWritable(testFile)) {
writableSecondaryStorage.add(secondaryPath);
}
}
}
} catch (RuntimeException e) {
e.printStackTrace();
}
return writableSecondaryStorage;
}
public String getMatchingExternalFilesDir(String dir) {
// only API 19 !!
try {
File[] externalFilesDirs = ctx.getExternalFilesDirs(null);
String rawSecondaryStorage = System.getenv("SECONDARY_STORAGE");
if (rawSecondaryStorage != null && rawSecondaryStorage.trim().length() > 0 && externalFilesDirs != null) {
for (String secondaryPath : rawSecondaryStorage.split(":")) {
if (dir.startsWith(secondaryPath)) {
for (File externFileDir : externalFilesDirs) {
if (externFileDir != null && externFileDir.getAbsolutePath().startsWith(secondaryPath)) {
return externFileDir.getAbsolutePath();
}
}
}
}
}
return null;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public List<String> getWritableSecondaryStorageDirectorys() {
// only API 19 !!
// primary external storage directory
String primaryExternalStorageDirectory = getDefaultExternalStorageLocation();
// also creates directories, if they don't exist until now
File[] externalFilesDirs = ctx.getExternalFilesDirs(null);
List<String> writableSecondaryStorages = getWritableSecondaryStorages();
List<String> writableSecondaryStorageDirectory = new ArrayList<String>();
try {
boolean primaryExternalStorageFound = false;
if(externalFilesDirs != null) {
for (File externFileDir : externalFilesDirs) {
if (externFileDir != null) {
final String externalFilePath = externFileDir.getAbsolutePath();
if (externalFilePath.startsWith(primaryExternalStorageDirectory) && !primaryExternalStorageFound) {
// exclude primary external storage
// no special location is required
primaryExternalStorageFound = true;
} else {
// secondary storage
// check if special location is required
boolean specialPathRequired = true;
for (String writableSecondaryStorage : writableSecondaryStorages) {
if (externalFilePath.startsWith(writableSecondaryStorage)) {
// no special location required
writableSecondaryStorageDirectory.add(writableSecondaryStorage);
specialPathRequired = false;
break;
}
}
if (specialPathRequired == true) {
// special location required
writableSecondaryStorageDirectory.add(externalFilePath);
}
}
}
}
}
} catch (RuntimeException e) {
e.printStackTrace();
}
return writableSecondaryStorageDirectory;
}
public static boolean isWritable(File dirToTest) {
boolean isWriteable = false;
try {
File writeTestFile = File.createTempFile("osmand_", ".tmp", dirToTest);
isWriteable = writeTestFile.exists();
writeTestFile.delete();
} catch (IOException e) {
isWriteable = false;
}
return isWriteable;
}
public boolean setExternalStorageDirectory(String externalStorageDir) {
return settingsAPI.edit(globalPreferences).putString(EXTERNAL_STORAGE_DIR, externalStorageDir).commit();
}

View file

@ -190,14 +190,31 @@ public class DownloadIndexActivity extends OsmandExpandableListActivity {
return true;
}
});
if(Build.VERSION.SDK_INT >= OsmandSettings.VERSION_DEFAULTLOCATION_CHANGED) {
if(!settings.getExternalStorageDirectory().getAbsolutePath().equals(settings.getDefaultExternalStorageLocation())) {
if (Build.VERSION.SDK_INT >= OsmandSettings.VERSION_DEFAULTLOCATION_CHANGED) {
final String currentStorage = settings.getExternalStorageDirectory().getAbsolutePath();
String primaryStorage = settings.getDefaultExternalStorageLocation();
if (!currentStorage.startsWith(primaryStorage)) {
// secondary storage
boolean currentDirectoryNotWritable = true;
for (String writeableDirectory : settings.getWritableSecondaryStorageDirectorys()) {
if (currentStorage.startsWith(writeableDirectory)) {
currentDirectoryNotWritable = false;
break;
}
}
if (currentDirectoryNotWritable) {
currentDirectoryNotWritable = !OsmandSettings.isWritable(settings.getExternalStorageDirectory());
}
if (currentDirectoryNotWritable) {
final String newLoc = settings.getMatchingExternalFilesDir(currentStorage);
if (newLoc != null && newLoc.length() != 0) {
AccessibleAlertBuilder ab = new AccessibleAlertBuilder(this);
ab.setMessage(getString(R.string.android_19_location_disabled, settings.getExternalStorageDirectory()));
ab.setMessage(getString(R.string.android_19_location_disabled,
settings.getExternalStorageDirectory()));
ab.setPositiveButton(R.string.default_buttons_yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
copyFilesForAndroid19();
copyFilesForAndroid19(newLoc);
}
});
ab.setNegativeButton(R.string.default_buttons_cancel, null);
@ -205,9 +222,10 @@ public class DownloadIndexActivity extends OsmandExpandableListActivity {
}
}
}
}
}
private void copyFilesForAndroid19() {
final String newLoc = settings.getDefaultExternalStorageLocation();
private void copyFilesForAndroid19(final String newLoc) {
MoveFilesToDifferentDirectory task =
new MoveFilesToDifferentDirectory(DownloadIndexActivity.this,
new File(settings.getExternalStorageDirectory(), IndexConstants.APP_DIR),

View file

@ -6,6 +6,7 @@ import java.util.Locale;
import net.osmand.CallbackWithObject;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R;
import android.app.Activity;
@ -13,6 +14,7 @@ import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Build;
public class SuggestExternalDirectoryDialog {
@ -22,9 +24,14 @@ public class SuggestExternalDirectoryDialog {
final boolean showOther = otherListener != null;
final OsmandApplication app = (OsmandApplication) a.getApplication();
Builder bld = new AlertDialog.Builder(a);
HashSet<String> externalMounts = getExternalMounts();
HashSet<String> externalMounts;
if(Build.VERSION.SDK_INT < OsmandSettings.VERSION_DEFAULTLOCATION_CHANGED) {
externalMounts = getExternalMounts();
} else {
externalMounts = new HashSet<String>(app.getSettings().getWritableSecondaryStorageDirectorys());
}
String apath = app.getSettings().getExternalStorageDirectory().getAbsolutePath();
externalMounts.add(app.getExternalServiceAPI().getExternalStorageDirectory());
externalMounts.add(app.getSettings().getDefaultExternalStorageLocation());
externalMounts.add(apath);
final String[] extMounts = new String[showOther ? externalMounts.size()+1 : externalMounts.size()];
externalMounts.toArray(extMounts);