mirror of
https://codeberg.org/OpenTracksApp/OpenTracks.git
synced 2026-10-02 17:43:06 +02:00
Cleanup R.strings.
This commit is contained in:
@@ -105,7 +105,7 @@ limitations under the License.
|
||||
android:allowBackup="true"
|
||||
android:hardwareAccelerated="true"
|
||||
android:icon="@drawable/ic_launcher"
|
||||
android:label="@string/my_tracks_app_name"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/ThemeCustom"
|
||||
tools:replace="android:label" >
|
||||
<!-- Activities -->
|
||||
@@ -182,7 +182,7 @@ limitations under the License.
|
||||
android:enabled="true"
|
||||
android:exported="false"
|
||||
android:icon="@drawable/ic_arrow_320"
|
||||
android:label="@string/my_tracks_recording_service"
|
||||
android:label="@string/recording_service"
|
||||
android:name="com.google.android.apps.mytracks.services.TrackRecordingService"
|
||||
android:permission="com.google.android.apps.mytracks.WRITE_TRACK_DATA" />
|
||||
<!-- Receivers -->
|
||||
|
||||
+6
-7
@@ -45,18 +45,17 @@ public class DescriptionGeneratorImpl implements DescriptionGenerator {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String generateTrackDescription(
|
||||
Track track, Vector<Double> distances, Vector<Double> elevations, boolean html) {
|
||||
public String generateTrackDescription(Track track, Vector<Double> distances, Vector<Double> elevations, boolean html) {
|
||||
String paragraphSeparator = html ? HTML_PARAGRAPH_SEPARATOR : TEXT_PARAGRAPH_SEPARATOR;
|
||||
String lineBreak = html ? HTML_LINE_BREAK : TEXT_LINE_BREAK;
|
||||
StringBuilder builder = new StringBuilder();
|
||||
|
||||
// Created by
|
||||
String beginAnchor = html
|
||||
? "<a href='http://" + context.getString(R.string.my_tracks_web_url) + "'>"
|
||||
: "";
|
||||
String endAnchor = html ? "</a>" : "";
|
||||
builder.append(context.getString(R.string.send_google_by_my_tracks, beginAnchor, endAnchor));
|
||||
String creator = html
|
||||
? "<a href='http://" + context.getString(R.string.app_web_url) + "'>" + context.getString(R.string.app_name) + "</a>"
|
||||
: context.getString(R.string.app_name);
|
||||
builder.append(creator);
|
||||
|
||||
builder.append(paragraphSeparator);
|
||||
|
||||
writeString(track.getName(), builder, R.string.generic_name_line, lineBreak);
|
||||
|
||||
-268
@@ -1,268 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012 Google Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||||
* use this file except in compliance with the License. You may obtain a copy of
|
||||
* the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*/
|
||||
|
||||
package com.google.android.apps.mytracks.fragments;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.ActivityInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.core.app.ShareCompat;
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
|
||||
import com.google.android.apps.mytracks.util.IntentUtils;
|
||||
import com.google.android.maps.mytracks.R;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* A DialogFragment to choose an activity.
|
||||
*
|
||||
* @author Jimmy Shih
|
||||
*/
|
||||
public class ChooseActivityDialogFragment extends AbstractMyTracksDialogFragment {
|
||||
|
||||
/**
|
||||
* Interface for caller of this dialog fragment.
|
||||
*
|
||||
* @author Jimmy Shih
|
||||
*/
|
||||
public interface ChooseActivityCaller {
|
||||
|
||||
/**
|
||||
* Called when choose activity is done.
|
||||
*/
|
||||
void onChooseActivityDone(String packageName, String className);
|
||||
}
|
||||
|
||||
private static class ViewHolder {
|
||||
TextView text1;
|
||||
TextView text2;
|
||||
ImageView icon;
|
||||
}
|
||||
|
||||
private ChooseActivityCaller caller;
|
||||
private PackageManager packageManager;
|
||||
|
||||
@Override
|
||||
public void onAttach(Context context) {
|
||||
super.onAttach(context);
|
||||
try {
|
||||
caller = (ChooseActivityCaller) context;
|
||||
} catch (ClassCastException e) {
|
||||
throw new ClassCastException(context + " must implement " + ChooseActivityCaller.class.getSimpleName());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Dialog createDialog() {
|
||||
FragmentActivity fragmentActivity = getActivity();
|
||||
packageManager = fragmentActivity.getPackageManager();
|
||||
List<DisplayInfo> displayInfos = getDisplayInfos(fragmentActivity);
|
||||
|
||||
ArrayAdapter<DisplayInfo> arrayAdapter = new ArrayAdapter<DisplayInfo>(fragmentActivity,
|
||||
R.layout.choose_activity_list_item, R.id.choose_activity_list_item_text1, displayInfos) {
|
||||
@NonNull
|
||||
@Override
|
||||
public View getView(int position, View convertView, @NonNull ViewGroup parent) {
|
||||
View view;
|
||||
ViewHolder viewHolder;
|
||||
if (convertView == null) {
|
||||
view = getActivity().getLayoutInflater()
|
||||
.inflate(R.layout.choose_activity_list_item, parent, false);
|
||||
viewHolder = new ViewHolder();
|
||||
viewHolder.text1 = view.findViewById(R.id.choose_activity_list_item_text1);
|
||||
viewHolder.text2 = view.findViewById(R.id.choose_activity_list_item_text2);
|
||||
viewHolder.icon = view.findViewById(R.id.choose_activity_list_item_icon);
|
||||
view.setTag(viewHolder);
|
||||
} else {
|
||||
view = convertView;
|
||||
viewHolder = (ViewHolder) view.getTag();
|
||||
}
|
||||
DisplayInfo displayInfo = getItem(position);
|
||||
|
||||
viewHolder.text1.setText(displayInfo.primaryLabel);
|
||||
|
||||
boolean hasSecondaryLabel = displayInfo.secondaryLabel != null;
|
||||
viewHolder.text2.setVisibility(hasSecondaryLabel ? View.VISIBLE : View.GONE);
|
||||
if (hasSecondaryLabel) {
|
||||
viewHolder.text2.setText(displayInfo.secondaryLabel);
|
||||
}
|
||||
viewHolder.icon.setImageDrawable(displayInfo.icon);
|
||||
return view;
|
||||
}
|
||||
};
|
||||
return new AlertDialog.Builder(fragmentActivity).setSingleChoiceItems(
|
||||
arrayAdapter, 0, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
AlertDialog alertDialog = (AlertDialog) dialog;
|
||||
DisplayInfo displayInfo = (DisplayInfo) alertDialog.getListView()
|
||||
.getItemAtPosition(which);
|
||||
ActivityInfo activityInfo = displayInfo.resolveInfo.activityInfo;
|
||||
dismiss();
|
||||
caller.onChooseActivityDone(
|
||||
activityInfo.applicationInfo.packageName, activityInfo.name);
|
||||
}
|
||||
}).setTitle(R.string.share_track_share_url_title).create();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCancel(DialogInterface dialog) {
|
||||
super.onCancel(dialog);
|
||||
caller.onChooseActivityDone(null, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the display info.
|
||||
*/
|
||||
private List<DisplayInfo> getDisplayInfos(FragmentActivity fragmentActivity) {
|
||||
List<DisplayInfo> displayInfos = new ArrayList<>();
|
||||
Intent intent = ShareCompat.IntentBuilder.from(fragmentActivity)
|
||||
.setType(IntentUtils.TEXT_PLAIN_TYPE).getIntent();
|
||||
List<ResolveInfo> resolveInfos = packageManager.queryIntentActivities(
|
||||
intent, PackageManager.MATCH_DEFAULT_ONLY);
|
||||
if (resolveInfos != null && resolveInfos.size() > 0) {
|
||||
int size = resolveInfos.size();
|
||||
ResolveInfo firstResolveInfo = resolveInfos.get(0);
|
||||
for (int i = 1; i < size; i++) {
|
||||
ResolveInfo resolveInfo = resolveInfos.get(i);
|
||||
if (firstResolveInfo.priority != resolveInfo.priority
|
||||
|| firstResolveInfo.isDefault != resolveInfo.isDefault) {
|
||||
while (i < size) {
|
||||
resolveInfos.remove(i);
|
||||
size--;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (size > 1) {
|
||||
ResolveInfo.DisplayNameComparator displayNameComparator = new ResolveInfo.DisplayNameComparator(
|
||||
packageManager);
|
||||
Collections.sort(resolveInfos, displayNameComparator);
|
||||
}
|
||||
|
||||
firstResolveInfo = resolveInfos.get(0);
|
||||
int start = 0;
|
||||
CharSequence firstLabel = firstResolveInfo.loadLabel(packageManager);
|
||||
for (int i = 1; i < size; i++) {
|
||||
if (firstLabel == null) {
|
||||
firstLabel = firstResolveInfo.activityInfo.packageName;
|
||||
}
|
||||
ResolveInfo resolveInfo = resolveInfos.get(i);
|
||||
CharSequence label = resolveInfo.loadLabel(packageManager);
|
||||
if (label == null) {
|
||||
label = resolveInfo.activityInfo.packageName;
|
||||
}
|
||||
if (label.equals(firstLabel)) {
|
||||
continue;
|
||||
}
|
||||
processGroup(resolveInfos, displayInfos, start, i - 1);
|
||||
firstResolveInfo = resolveInfo;
|
||||
firstLabel = label;
|
||||
start = i;
|
||||
}
|
||||
// Process last group
|
||||
processGroup(resolveInfos, displayInfos, start, size - 1);
|
||||
}
|
||||
return displayInfos;
|
||||
}
|
||||
|
||||
/**
|
||||
* Contains display info.
|
||||
*
|
||||
* @author Jimmy Shih
|
||||
*/
|
||||
private final class DisplayInfo {
|
||||
private ResolveInfo resolveInfo;
|
||||
private CharSequence primaryLabel;
|
||||
private CharSequence secondaryLabel;
|
||||
private Drawable icon;
|
||||
|
||||
public DisplayInfo(ResolveInfo resolveInfo, CharSequence primaryLabel,
|
||||
CharSequence secondaryLabel, Drawable icon) {
|
||||
this.resolveInfo = resolveInfo;
|
||||
this.primaryLabel = primaryLabel;
|
||||
this.secondaryLabel = secondaryLabel;
|
||||
this.icon = icon;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Processes a group of items with the same label.
|
||||
*
|
||||
* @param resolveInfos list of resolve infos
|
||||
* @param displayInfos list of display infos
|
||||
* @param start start index
|
||||
* @param end end index
|
||||
*/
|
||||
private void processGroup(
|
||||
List<ResolveInfo> resolveInfos, List<DisplayInfo> displayInfos, int start, int end) {
|
||||
ResolveInfo startResolveInfo = resolveInfos.get(start);
|
||||
CharSequence primaryLabel = startResolveInfo.loadLabel(packageManager);
|
||||
Drawable icon = startResolveInfo.loadIcon(packageManager);
|
||||
|
||||
int num = end - start + 1;
|
||||
if (num == 1) {
|
||||
// Only one, set the secondary label to null
|
||||
displayInfos.add(new DisplayInfo(startResolveInfo, primaryLabel, null, icon));
|
||||
} else {
|
||||
// Decide package name or application name for the secondary label
|
||||
boolean usePackageName = false;
|
||||
CharSequence appName = startResolveInfo.activityInfo.applicationInfo.loadLabel(
|
||||
packageManager);
|
||||
if (appName == null) {
|
||||
usePackageName = true;
|
||||
} else {
|
||||
// Use HashSet to track duplicates
|
||||
HashSet<CharSequence> duplicates = new HashSet<>();
|
||||
duplicates.add(appName);
|
||||
for (int i = start + 1; i <= end; i++) {
|
||||
ResolveInfo resolveInfo = resolveInfos.get(i);
|
||||
CharSequence name = resolveInfo.activityInfo.applicationInfo.loadLabel(packageManager);
|
||||
if ((name == null) || (duplicates.contains(name))) {
|
||||
usePackageName = true;
|
||||
break;
|
||||
} else {
|
||||
duplicates.add(name);
|
||||
}
|
||||
}
|
||||
// Clear HashSet for later use
|
||||
duplicates.clear();
|
||||
}
|
||||
for (int i = start; i <= end; i++) {
|
||||
ResolveInfo resolveInfo = resolveInfos.get(i);
|
||||
CharSequence secondaryLabel = usePackageName ? resolveInfo.activityInfo.packageName
|
||||
: resolveInfo.activityInfo.applicationInfo.loadLabel(packageManager);
|
||||
displayInfos.add(new DisplayInfo(resolveInfo, primaryLabel, secondaryLabel, icon));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -24,7 +24,7 @@ public enum TrackFileFormat implements Parcelable {
|
||||
GPX {
|
||||
@Override
|
||||
public TrackWriter newTrackWriter(Context context, boolean multiple, boolean playTrack) {
|
||||
return new GpxTrackWriter(context.getString(R.string.send_google_by_my_tracks, "", ""));
|
||||
return new GpxTrackWriter(context.getString(R.string.app_name));
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -125,7 +125,7 @@ public class KmlTrackWriter implements TrackWriter {
|
||||
Track track = tracks[0];
|
||||
printWriter.println("<name>" + StringUtils.formatCData(track.getName()) + "</name>");
|
||||
printWriter.println("<atom:author><atom:name>"
|
||||
+ StringUtils.formatCData(context.getString(R.string.send_google_by_my_tracks, "", ""))
|
||||
+ StringUtils.formatCData(context.getString(R.string.app_name))
|
||||
+ "</atom:name></atom:author>");
|
||||
writeTrackStyle();
|
||||
writePlacemarkerStyle(START_STYLE, START_ICON, 32, 1);
|
||||
|
||||
@@ -453,15 +453,15 @@ public class TrackRecordingService extends Service {
|
||||
@VisibleForTesting
|
||||
protected void startForegroundService(PendingIntent pendingIntent, int messageId) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
NotificationChannel notificationChannel = new NotificationChannel(getString(R.string.my_tracks_app_name), getString(R.string.my_tracks_app_name), NotificationManager.IMPORTANCE_DEFAULT);
|
||||
NotificationChannel notificationChannel = new NotificationChannel(getString(R.string.app_name), getString(R.string.app_name), NotificationManager.IMPORTANCE_DEFAULT);
|
||||
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
assert manager != null;
|
||||
manager.createNotificationChannel(notificationChannel);
|
||||
}
|
||||
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, getString(R.string.my_tracks_app_name))
|
||||
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, getString(R.string.app_name))
|
||||
.setContentIntent(pendingIntent)
|
||||
.setContentText(getString(messageId))
|
||||
.setContentTitle(getString(R.string.my_tracks_app_name))
|
||||
.setContentTitle(getString(R.string.app_name))
|
||||
.setOngoing(true)
|
||||
.setSmallIcon(R.drawable.ic_stat_notify_recording)
|
||||
.setCategory(Notification.CATEGORY_SERVICE)
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -187,16 +187,6 @@ limitations under the License.
|
||||
<item>@string/stats_units_metric</item>
|
||||
<item>@string/stats_units_imperial</item>
|
||||
</string-array>
|
||||
<string-array name="track_color_mode_options">
|
||||
<item>@string/settings_map_track_color_mode_single</item>
|
||||
<item>@string/settings_map_track_color_mode_fixed</item>
|
||||
<item>@string/settings_map_track_color_mode_dynamic</item>
|
||||
</string-array>
|
||||
<string-array name="track_color_mode_summary">
|
||||
<item>@string/settings_map_track_color_mode_single</item>
|
||||
<item>@string/settings_map_track_color_mode_fixed_summary</item>
|
||||
<item>@string/settings_map_track_color_mode_dynamic_summary</item>
|
||||
</string-array>
|
||||
<string-array name="track_name_options">
|
||||
<item>@string/settings_recording_track_name_location_option</item>
|
||||
<item>@string/settings_recording_track_name_date_local_option</item>
|
||||
|
||||
@@ -20,8 +20,7 @@ limitations under the License.
|
||||
<string name="chart_x_axis_time">TIME</string>
|
||||
<string name="marker_statistics_icon_url">http://maps.google.com/mapfiles/ms/micons/ylw-pushpin.png</string>
|
||||
<string name="marker_waypoint_icon_url">http://maps.google.com/mapfiles/ms/micons/blue-pushpin.png</string>
|
||||
<string name="my_tracks_recording_service_name">My Tracks Recording Service</string>
|
||||
<string name="my_tracks_web_url">TODO</string>
|
||||
<string name="app_web_url">TODO</string>
|
||||
<string name="permission_notification_value">com.google.android.apps.mytracks.MYTRACKS_NOTIFICATIONS</string>
|
||||
<string name="sensor_type_value_none">NONE</string>
|
||||
<string name="sensor_unit_rounds_per_minute">RPM</string>
|
||||
|
||||
@@ -35,10 +35,6 @@ limitations under the License.
|
||||
<string name="stats_show_coordinate_key">statsShowCoordinate</string>
|
||||
<string name="stats_show_grade_elevation_key">statsShowGradeElevation</string>
|
||||
<string name="stats_units_key">statsUnits</string>
|
||||
<string name="track_color_mode_medium_key">trackColorModeMedium</string>
|
||||
<string name="track_color_mode_percentage_key">trackColorModePercentage</string>
|
||||
<string name="track_color_mode_slow_key">trackColorModeSlow</string>
|
||||
<string name="track_color_mode_key">trackColorMode</string>
|
||||
<string name="track_name_key">trackName</string>
|
||||
<string name="track_widget_item1">trackWidgetItem1</string>
|
||||
<string name="track_widget_item2">trackWidgetItem2</string>
|
||||
@@ -50,7 +46,6 @@ limitations under the License.
|
||||
<string name="bluetooth_sensor_key">bluetoothSensor</string>
|
||||
<string name="recording_track_id_key">recordingTrackId</string>
|
||||
<string name="recording_track_paused_key">recordingTrackPaused</string>
|
||||
<string name="share_track_account_key">shareTrackAccountKey</string>
|
||||
<!-- Keys for non-persisted preferences. Sorted alphabetically. DO NOT TRANSLATE. -->
|
||||
<string name="settings_advanced_key">settingsAdvanced</string>
|
||||
<string name="settings_chart_key">settingsChart</string>
|
||||
|
||||
@@ -531,42 +531,6 @@ limitations under the License.
|
||||
</string>
|
||||
|
||||
<!-- Eula -->
|
||||
<string name="eula_accept"
|
||||
translation_description="In the 'Terms of Service' dialog, the button to accept.">
|
||||
Accept
|
||||
</string>
|
||||
<string name="eula_body"
|
||||
translation_description="The body in the 'Terms of Service. See http://m.google.com/toscountry.
|
||||
|
||||
%1$s host name, 'm.google.com'">
|
||||
By using Google\'s mobile products and services (“Services”), you agree to be bound
|
||||
by a) the YouTube Terms of Use (%1$s/tos_youtube) for YouTube-related Services, b) the Google
|
||||
Maps Terms and Conditions (%1$s/tos_maps) for mapping, local and location-based Services, c) the
|
||||
Google Books Terms of Service (%1$s/tos_books) for Books-related Services, and d) the Google
|
||||
Terms of Service (%1$s/utos) for all other Services, as updated from time to time.
|
||||
</string>
|
||||
<string name="eula_copyright_year"
|
||||
translation_description="The copyright year in the 'Terms of Service'. See
|
||||
http://m.google.com/toscountry. \u00A9 is the unicode value for the copyright symbol.">
|
||||
\u00A92014
|
||||
</string>
|
||||
<string name="eula_date"
|
||||
translation_description="The date in the 'Terms of Service'. See
|
||||
http://m.google.com/toscountry.">
|
||||
March 1, 2012
|
||||
</string>
|
||||
<string name="eula_decline"
|
||||
translation_description="In the 'Terms of Service' dialog, the button to decline.">
|
||||
Decline
|
||||
</string>
|
||||
<string name="eula_footer"
|
||||
translation_description="The footer in the 'Terms of Service'. See
|
||||
http://m.google.com/toscountry.
|
||||
|
||||
%1$s host name, 'm.google.com'">
|
||||
Any required attribution or notice for the third party content may be found at
|
||||
%1$s/legalnotices.
|
||||
</string>
|
||||
|
||||
<!-- Export -->
|
||||
<string name="export_all_option"
|
||||
@@ -753,11 +717,6 @@ limitations under the License.
|
||||
</string>
|
||||
|
||||
<!-- Gps -->
|
||||
<string name="gps_google_location_settings"
|
||||
translation_description="In Android, the Google location settings to modify location settings
|
||||
for all Google applications. See Settings -> Google -> Location settings.">
|
||||
‘Google location settings’
|
||||
</string>
|
||||
<string name="gps_location_access"
|
||||
translation_description="In Android, the location access settings to modify location settings
|
||||
for all applications. See Settings -> Location access.">
|
||||
@@ -1062,12 +1021,6 @@ limitations under the License.
|
||||
Character limit: ~20 (1 line)">
|
||||
Help
|
||||
</string>
|
||||
<string name="menu_help_eula"
|
||||
translation_description="In the menu, to go to the terms of service page.
|
||||
|
||||
Character limit: ~20 (1 line)">
|
||||
Terms of service
|
||||
</string>
|
||||
<string name="menu_help_feedback"
|
||||
translation_description="In the menu, to go to the help and feedback page.
|
||||
|
||||
@@ -1080,12 +1033,6 @@ limitations under the License.
|
||||
Character limit: ~20 (1 line)">
|
||||
Help forum
|
||||
</string>
|
||||
<string name="menu_help_play_store"
|
||||
translation_description="In the menu, to go to the My Tracks Google Play Store page.
|
||||
|
||||
Character limit: ~20 (1 line)">
|
||||
View in Google Play Store
|
||||
</string>
|
||||
<string name="menu_import_all"
|
||||
translation_description="In the menu, to import all the tracks from the external storage.
|
||||
|
||||
@@ -1111,12 +1058,6 @@ limitations under the License.
|
||||
Character limit: ~20 (1 line)">
|
||||
Map
|
||||
</string>
|
||||
<string name="menu_map_layer"
|
||||
translation_description="In the menu, to change the map layer.
|
||||
|
||||
Character limit: ~20 (1 line)">
|
||||
Map layer
|
||||
</string>
|
||||
<string name="menu_markers"
|
||||
translation_description="In the menu, to show a list of markers for the current track.
|
||||
|
||||
@@ -1129,20 +1070,6 @@ limitations under the License.
|
||||
Character limit: ~20 (1 line)">
|
||||
Play
|
||||
</string>
|
||||
<string name="menu_satellite"
|
||||
translation_description="In the menu, under the map layer option, the submenu to display
|
||||
satellite.
|
||||
|
||||
Character limit: ~20 (1 line)">
|
||||
Satellite
|
||||
</string>
|
||||
<string name="menu_satellite_with_streets"
|
||||
translation_description="In the menu, under the map layer option, the submenu to display
|
||||
satellite with major streets.
|
||||
|
||||
Character limit: ~20 (1 line)">
|
||||
Satellite with streets
|
||||
</string>
|
||||
<string name="menu_search"
|
||||
translation_description="In the menu, to start a textual search for tracks or markers.
|
||||
|
||||
@@ -1198,13 +1125,6 @@ limitations under the License.
|
||||
Character limit: ~20 (1 line)">
|
||||
Stop GPS
|
||||
</string>
|
||||
<string name="menu_terrain"
|
||||
translation_description="In the menu, under the map layer option, the submenu to display
|
||||
terrain.
|
||||
|
||||
Character limit: ~20 (1 line)">
|
||||
Terrain
|
||||
</string>
|
||||
<string name="menu_view_photo"
|
||||
translation_description="In the menu, to view a photo.
|
||||
|
||||
@@ -1220,11 +1140,11 @@ limitations under the License.
|
||||
</string>
|
||||
|
||||
<!-- My Tracks -->
|
||||
<string name="my_tracks_app_name"
|
||||
<string name="app_name"
|
||||
translation_description="The My Tracks application name.">
|
||||
My Tracks
|
||||
</string>
|
||||
<string name="my_tracks_recording_service"
|
||||
<string name="recording_service"
|
||||
translation_description="When viewing the 'Running services' on Android, the name of the My
|
||||
Tracks service that is recording a track in the background.
|
||||
|
||||
@@ -1300,54 +1220,6 @@ limitations under the License.
|
||||
what will be searched for.">
|
||||
Speak the name of a track or marker
|
||||
</string>
|
||||
|
||||
|
||||
|
||||
<!-- Send Google -->
|
||||
<string name="send_google_by_my_tracks"
|
||||
translation_description="When sending a track to Google, a note indicating it is created by
|
||||
Google My Tracks on Android.
|
||||
|
||||
%1$s the html anchor opening tag. Place this placeholder before the app name,
|
||||
'Google My Tracks'.
|
||||
%2$s the html anchor closing tag. Place this placeholder after the app name,
|
||||
'Google My Tracks'.">
|
||||
Created by %1$sGoogle My Tracks%2$s on Android
|
||||
</string>
|
||||
<string name="send_google_choose_account_title"
|
||||
translation_description="When sending to Google, the dialog title to choose a Google account.">
|
||||
Choose account
|
||||
</string>
|
||||
<string name="send_google_no_account_message"
|
||||
translation_description="When sending to Google, the dialog message when no Google account is
|
||||
found.">
|
||||
Add account at ‘Settings’ -> ‘Add account’
|
||||
</string>
|
||||
<string name="send_google_no_account_title"
|
||||
translation_description="When sending to Google, the dialog title when no Google account is
|
||||
found.">
|
||||
No account found
|
||||
</string>
|
||||
<string name="send_google_no_account_permission"
|
||||
translation_description="When sending to Google, the message when not able to get account
|
||||
permission.">
|
||||
Not able to get account permission. Make sure network is available.
|
||||
</string>
|
||||
<string name="send_google_progress_message"
|
||||
translation_description="When sending a track to a Google service, the progress message.
|
||||
|
||||
%1$s service name. 'Google Maps', 'Google Fusion Tables', or 'Google Spreadsheets'.">
|
||||
Sending to %1$s…
|
||||
</string>
|
||||
<string name="send_google_track_part_label"
|
||||
translation_description="When sending a track to Google, the label to name segments of a large
|
||||
track. E.g., 'track_name (Part 1)'.
|
||||
|
||||
%1$s track name. E.g., 'Grand Canyon trail'.
|
||||
%2$d part number. E.g., '1'.">
|
||||
%1$s (Part %2$d)
|
||||
</string>
|
||||
|
||||
<!-- Sensor State -->
|
||||
<string name="sensor_state_battery"
|
||||
translation_description="In the 'Sensor state' page, the label for the battery level on the bike
|
||||
@@ -1477,74 +1349,6 @@ limitations under the License.
|
||||
</string>
|
||||
|
||||
<!-- Settings Map -->
|
||||
<string name="settings_map_medium"
|
||||
translation_description="In the 'Map' settings, under the 'Fixed thresholds' section, the option
|
||||
to configure the top medium speed.
|
||||
|
||||
Character limit: ~23 (1 line)">
|
||||
Top medium speed
|
||||
</string>
|
||||
<string name="settings_map_percentage"
|
||||
translation_description="In the 'Map' settings, under the 'Dynamic thresholds' section, the
|
||||
option to configure the medium speed range as a percentage from the average speed.
|
||||
|
||||
Character limit: ~23 (1 line)">
|
||||
Percentage from average
|
||||
</string>
|
||||
<string name="settings_map_percentage_summary"
|
||||
translation_description="In the 'Map' settings, under the 'Dynamic thresholds' section, the
|
||||
summary for the 'Percentage from average' option explaining that the medium speed range is set
|
||||
as a percentage from the average speed.
|
||||
|
||||
%1$d an integer value. E.g., '15'.">
|
||||
The medium speed range is %1$d %% from the average speed
|
||||
</string>
|
||||
<string name="settings_map_slow"
|
||||
translation_description="In the 'Map' settings, under the 'Fixed thresholds' section, the option
|
||||
to configure the top slow speed.
|
||||
|
||||
Character limit: ~23 (1 line)">
|
||||
Top slow speed
|
||||
</string>
|
||||
<string name="settings_map_track_color_mode"
|
||||
translation_description="In the 'Map' settings, the picker to select how track color is
|
||||
configured.
|
||||
|
||||
Character limit: ~23 (1 line)">
|
||||
Track color
|
||||
</string><string name="settings_map_track_color_mode_dynamic"
|
||||
translation_description="In the 'Map' settings, for the 'Track color' picker, the option to use
|
||||
dynamic thresholds to set slow, medium, and fast speed when coloring a track based on speed.
|
||||
|
||||
Character limit: ~20 (1 line)">
|
||||
Dynamic thresholds
|
||||
</string>
|
||||
<string name="settings_map_track_color_mode_dynamic_summary"
|
||||
translation_description="In the 'Map' settings, the summary for the 'Track color' picker when
|
||||
the 'Dynamic thresholds' is selected explaining that it uses dynamic thresholds to set slow,
|
||||
medium, and fast speed when coloring a track based on speed.">
|
||||
Use dynamic thresholds to set slow, medium, and fast speed when coloring a track based on speed
|
||||
</string>
|
||||
<string name="settings_map_track_color_mode_fixed"
|
||||
translation_description="In the 'Map' settings, for the 'Track color' picker, the option to use
|
||||
fixed thresholds to set slow, medium, and fast speed when coloring a track based on speed.
|
||||
|
||||
Character limit: ~20 (1 line)">
|
||||
Fixed thresholds
|
||||
</string>
|
||||
<string name="settings_map_track_color_mode_fixed_summary"
|
||||
translation_description="In the 'Map' settings, the summary for the 'Track color' picker when
|
||||
the 'Fixed thresholds' is selected explaining that it uses fixed thresholds to set slow,
|
||||
medium, and fast speed when coloring a track based on speed.">
|
||||
Use fixed thresholds to set slow, medium, and fast speed when coloring a track based on speed
|
||||
</string>
|
||||
<string name="settings_map_track_color_mode_single"
|
||||
translation_description="In the 'Map' settings, for the 'Track color' picker, the option to use
|
||||
a single color to color a track.
|
||||
|
||||
Character limit: ~20 (1 line)">
|
||||
Single color
|
||||
</string>
|
||||
|
||||
<!-- Settings Recording -->
|
||||
<string name="settings_recording"
|
||||
@@ -1710,18 +1514,6 @@ limitations under the License.
|
||||
Character limit: ~26 (1 line)">
|
||||
Sensor
|
||||
</string>
|
||||
<string name="settings_sensor_ant_not_connected"
|
||||
translation_description="In the 'Sensor' settings, the summary to indicate that an ANT+ sensor
|
||||
is not connected.">
|
||||
Not connected
|
||||
</string>
|
||||
<string name="settings_sensor_ant_paired"
|
||||
translation_description="In the 'Sensor' settings, the summary to indicate that an ANT+ sensor
|
||||
is paired. Note that ANT+ is a radio standard.
|
||||
|
||||
%1$d device id number. E.g., '1'.">
|
||||
Paired with %1$d
|
||||
</string>
|
||||
<string name="settings_sensor_ant_reset_bike_cadence_sensor"
|
||||
translation_description="In the 'Sensor' settings, under the 'ANT+' section, the option to reset
|
||||
an ANT+ bike cadence sensor. Note that ANT+ is a radio standard.
|
||||
@@ -1784,55 +1576,6 @@ limitations under the License.
|
||||
%1$s sensor name. E.g., 'Polar Bluetooth'.">
|
||||
Connected to %1$s
|
||||
</string>
|
||||
<string name="settings_sensor_type"
|
||||
translation_description="In the 'Sensor' settings, the picker to choose a sensor type.
|
||||
|
||||
Character limit: ~23 (1 line)">
|
||||
Sensor type
|
||||
</string>
|
||||
<string name="settings_sensor_type_polar"
|
||||
translation_description="In the 'Sensor' settings, the option in the 'Sensor type' picker to
|
||||
choose a Polar bluetooth sensor. Do not translate Polar, the company name, but can translate
|
||||
Bluetooth, the radio standard.
|
||||
|
||||
Character limit: ~20 (1 line)">
|
||||
Polar Bluetooth
|
||||
</string>
|
||||
<string name="settings_sensor_type_zephyr"
|
||||
translation_description="In the 'Sensor' settings, the option in the 'Sensor type' picker to
|
||||
choose a Zephyr bluetooth sensor. Do not translate Zephyr, the company name, but can translate
|
||||
Bluetooth, the radio standard.
|
||||
|
||||
Character limit: ~20 (1 line)">
|
||||
Zephyr Bluetooth
|
||||
</string>
|
||||
|
||||
<!-- Settings Sharing -->
|
||||
<string name="settings_sharing_allow_access"
|
||||
translation_description="In the 'Sharing' settings, the checkbox option to allow third party
|
||||
apps access to the My Tracks data.
|
||||
|
||||
Character limit: ~23 (1 line)">
|
||||
Allow access
|
||||
</string>
|
||||
<string name="settings_sharing_allow_access_confirm_message"
|
||||
translation_description="In the 'Sharing' settings, after checking the 'Allow access' checkbox,
|
||||
the confirmation dialog message informing the user that other apps, including apps installed
|
||||
in the future, will be able to control and access My Tracks data. In addition, no further
|
||||
notification of third party app access will be shown.">
|
||||
Other apps, including future apps, will be able to control and access My Tracks data. There will
|
||||
be no further notification.
|
||||
</string>
|
||||
<string name="settings_sharing_allow_access_confirm_title"
|
||||
translation_description="In the 'Sharing' settings, after checking the 'Allow access' checkbox,
|
||||
the title of the confirmation dialog.">
|
||||
Allow access?
|
||||
</string>
|
||||
<string name="settings_sharing_allow_access_summary"
|
||||
translation_description="In the 'Sharing' settings, the summary for the 'Allow access' checkbox
|
||||
option.">
|
||||
Let other apps read, write, start/stop recording My Tracks data
|
||||
</string>
|
||||
|
||||
<!-- Settings Stats -->
|
||||
<string name="settings_stats_coordinate"
|
||||
@@ -1878,39 +1621,16 @@ limitations under the License.
|
||||
translation_description="The hint for the auto complete text box for entering email addresses.">
|
||||
Email addresses
|
||||
</string>
|
||||
<string name="share_track_invite"
|
||||
translation_description="The checkbox to invite people to view a track.">
|
||||
Invite people to view
|
||||
</string>
|
||||
<string name="share_track_no_emails"
|
||||
translation_description="When sharing a track, error message indicating that no email addresses
|
||||
is entered.">
|
||||
No email addresses entered
|
||||
</string>
|
||||
<string name="share_track_no_selection"
|
||||
translation_description="When sharing a track, error message indicating that no option is
|
||||
selected.">
|
||||
No option selected
|
||||
</string>
|
||||
<string name="share_track_picker_title"
|
||||
translation_description="When sharing a track with friends, the title on the picker to ask the
|
||||
user to select an application.">
|
||||
Select an application
|
||||
</string>
|
||||
<string name="share_track_public"
|
||||
translation_description="The checkbox to make a track public and share its url.">
|
||||
Make public & share URL
|
||||
</string>
|
||||
<string name="share_track_share_file"
|
||||
translation_description="After saving a track to the external storage, the button on the result
|
||||
dialog to share the saved track file with friends.">
|
||||
Share track file
|
||||
</string>
|
||||
<string name="share_track_share_url_title"
|
||||
translation_description="The dialog title asking the user to select an application for sharing
|
||||
an URL.">
|
||||
Share URL using:
|
||||
</string>
|
||||
<string name="share_track_share_file_body"
|
||||
translation_description="When sharing a track file with friends, the body of the message. Note
|
||||
that \n is the new line character.
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
android:hint="@string/menu_search"
|
||||
android:imeOptions="actionSearch"
|
||||
android:includeInGlobalSearch="true"
|
||||
android:label="@string/my_tracks_app_name"
|
||||
android:label="@string/app_name"
|
||||
android:queryAfterZeroResults="true"
|
||||
android:searchSettingsDescription="@string/search_global_description"
|
||||
android:searchSuggestAuthority="com.google.android.maps.mytracks.search"
|
||||
|
||||
Reference in New Issue
Block a user