forked from upstream-mirrors/OpenTracks
Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d76131a34f | |||
| 3bae0869c4 | |||
| a164876615 | |||
| 5bbb5f789f | |||
| 6e42857023 | |||
| b883bb3862 | |||
| 9b5ef0707e | |||
| 9c1a44abb4 | |||
| f75ed13e52 | |||
| 5483065d4d | |||
| c1ecebccaa | |||
| 8f130c50ff | |||
| 1da04398f8 | |||
| 8c05be048a | |||
| 77d040d08b | |||
| 07124ad702 | |||
| 9257abb9ec |
+2
-2
@@ -46,8 +46,8 @@ android {
|
||||
|
||||
defaultConfig {
|
||||
applicationId 'de.dennisguse.opentracks'
|
||||
versionCode 6170
|
||||
versionName "v4.19.4"
|
||||
versionCode 6187
|
||||
versionName "v4.19.6"
|
||||
|
||||
buildConfigField "String", "VERSION_NAME_FULL", "\"${getVersionName()}\""
|
||||
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
v4.19.4: OpenTracks
|
||||
|
||||
Oprava chyb:
|
||||
- Edge-to-edge (SDK35): použito na všechny verze Androidu (určitý pokrok, ale stále se na tom pracuje)
|
||||
- KMZ s obrázky nebylo možné exportovat (záhlaví nebylo možné vypočítat; funkce odstraněna)
|
||||
@@ -0,0 +1,5 @@
|
||||
v4.19.5: OpenTracks
|
||||
|
||||
Bugfix:
|
||||
- Launcher icon was sometimes shown too small
|
||||
- Track icon on detail page using localized activity type
|
||||
@@ -0,0 +1,4 @@
|
||||
v4.19.6: OpenTracks
|
||||
|
||||
Changes:
|
||||
- Edge-2-edge should now be working on all Android versions
|
||||
@@ -0,0 +1,5 @@
|
||||
v4.19.4: OpenTracks
|
||||
|
||||
Ceartú fabht:
|
||||
- Imeall go himeall (SDK35): curtha i bhfeidhm ar gach leagan de Android (roinnt dul chun cinn, ach obair ar siúl fós)
|
||||
- Níorbh fhéidir KMZ le pictiúir a easpórtáil (níorbh fhéidir an ceannteideal a ríomh; baineadh an ghné)
|
||||
@@ -0,0 +1,4 @@
|
||||
V4.17.8: Opentracks
|
||||
|
||||
மாற்றங்கள்:
|
||||
- விளக்கப்படங்கள்: காட்டப்பட்ட தரவை உள்ளமைக்க முடியும்
|
||||
@@ -0,0 +1,11 @@
|
||||
v4.18.0: ஓபன்ட்ராக்ச்
|
||||
|
||||
மாற்றங்கள்:
|
||||
- சி.பி.எச் முடக்கப்பட்ட எச்சரிக்கையை முடக்கலாம்
|
||||
|
||||
பிழைத்திருத்த:
|
||||
- பாட்டம்அப்ப்பார் உள்ளடக்கத்தை ஒன்றுடன் ஒன்று
|
||||
|
||||
டெவலப்பர்:
|
||||
- ஆண்ட்ராய்டு இருப்பிடத்திற்கு பதிலாக பதிவு நிலையைப் பயன்படுத்தவும்
|
||||
- மறுசீரமைக்கப்பட்ட சென்சார் திரட்டிகள்
|
||||
@@ -0,0 +1,7 @@
|
||||
V4.19.0: Opentracks
|
||||
|
||||
மாற்றங்கள்:
|
||||
- சிபிஎக்ச் ஏற்றுமதி இணக்கமாக இல்லை (டிராக் பாயிண்ட் எக்ச்டென்சன் ஆர்டர் மற்றும் உள்ளடக்கம்)
|
||||
|
||||
பிழைத்திருத்த:
|
||||
- முன்-V4.18.0 படங்கள் இல்லாத குறிப்பான்களை நீக்க முடியவில்லை
|
||||
@@ -0,0 +1,4 @@
|
||||
V4.19.1: Opentracks
|
||||
|
||||
பிழைத்திருத்த:
|
||||
- ஏற்றுமதி செய்யப்பட்ட சிபிஎக்ச் கோப்புகள் ஒரு திட்டத்தை தவறவிட்டன
|
||||
@@ -0,0 +1,4 @@
|
||||
V4.19.2: Opentracks
|
||||
|
||||
பிழைத்திருத்த:
|
||||
- தவறான மொழிபெயர்ப்புகள் காரணமாக விபத்தை சரிசெய்யவும்
|
||||
@@ -0,0 +1,4 @@
|
||||
V4.19.3: Opentracks
|
||||
|
||||
பிழைத்திருத்த:
|
||||
- உயரத்திற்கு காபிம ஏற்றுமதியை சரிசெய்யவும் (1000 மீ.
|
||||
@@ -0,0 +1,5 @@
|
||||
V4.19.4: Opentracks
|
||||
|
||||
பிழைத்திருத்த:
|
||||
-எட்ச்-டு-எட்ச் (SDK35): ஆண்ட்ராய்டு இன் அனைத்து பதிப்பிற்கும் பயன்படுத்தப்பட்டது (சில முன்னேற்றம், ஆனால் இன்னும் முன்னேற்றத்தில் உள்ளது)
|
||||
- படங்களுடன் KMZ ஏற்றுமதி செய்ய முடியவில்லை (தலைப்பு கணக்கிட முடியாதது; நற்பொருத்தம் அகற்றப்பட்டது)
|
||||
@@ -3,6 +3,7 @@ package de.dennisguse.opentracks;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import de.dennisguse.opentracks.databinding.AboutBinding;
|
||||
@@ -29,7 +30,8 @@ public class AboutActivity extends AbstractActivity {
|
||||
ViewUtils.makeClickableLinks(findViewById(android.R.id.content));
|
||||
}
|
||||
|
||||
protected View getRootView() {
|
||||
@NonNull
|
||||
protected View createRootView() {
|
||||
viewBinding = AboutBinding.inflate(getLayoutInflater());
|
||||
return viewBinding.getRoot();
|
||||
}
|
||||
|
||||
@@ -16,16 +16,17 @@
|
||||
|
||||
package de.dennisguse.opentracks;
|
||||
|
||||
import android.content.res.TypedArray;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.activity.EdgeToEdge;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.core.graphics.Insets;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import android.view.ViewGroup.LayoutParams;
|
||||
import androidx.core.view.ViewGroupCompat;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
|
||||
import de.dennisguse.opentracks.services.announcement.TTSManager;
|
||||
import de.dennisguse.opentracks.settings.PreferencesUtils;
|
||||
|
||||
@@ -40,51 +41,27 @@ public abstract class AbstractActivity extends AppCompatActivity {
|
||||
setTheme(R.style.OpenTracksThemeOled);
|
||||
}
|
||||
|
||||
// Enable edge-to-edge rendering
|
||||
EdgeToEdge.enable(this);
|
||||
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
// Set volume control stream for text to speech
|
||||
setVolumeControlStream(TTSManager.AUDIO_STREAM);
|
||||
|
||||
View rootView = getRootView();
|
||||
View rootView = createRootView();
|
||||
setContentView(rootView);
|
||||
|
||||
apply_insets(rootView);
|
||||
edge2edgeApplyInsets(rootView);
|
||||
}
|
||||
|
||||
private void apply_insets(View rootView) {
|
||||
View bottom_app_bar = findViewById(R.id.bottom_app_bar);
|
||||
if (rootView != null) {
|
||||
// Apply navbar insets to the whole content
|
||||
ViewCompat.setOnApplyWindowInsetsListener(rootView, (view, windowInsets) -> {
|
||||
Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||
// Apply the insets as a padding to the view.
|
||||
// Don't need to set the top inset for some reason (?)
|
||||
view.setPadding(insets.left, 0, insets.right, 0);
|
||||
// Return the insets to apply to the next view (BottomAppBar)
|
||||
return windowInsets;
|
||||
});
|
||||
}
|
||||
if (bottom_app_bar != null) {
|
||||
// Apply status and navbar insets to BottomAppBar
|
||||
// WARNING: this is called twice for bottomappbar.xml
|
||||
ViewCompat.setOnApplyWindowInsetsListener(bottom_app_bar, (view, windowInsets) -> {
|
||||
Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||
// Apply the insets as a padding to the view.
|
||||
view.setPadding(0, 0, 0, insets.bottom);
|
||||
// Set new height to account for the inset
|
||||
LayoutParams layout = view.getLayoutParams();
|
||||
// Get actionBar height attribute
|
||||
final TypedArray arr = obtainStyledAttributes(new int[] { com.google.android.material.R.attr.actionBarSize });
|
||||
int actionBarHeight = (int) arr.getDimension(0, 0f);
|
||||
arr.recycle();
|
||||
layout.height = insets.bottom + actionBarHeight;
|
||||
view.setLayoutParams(layout);
|
||||
// Return CONSUMED if you don't want the window insets to keep passing down to descendant views.
|
||||
return WindowInsetsCompat.CONSUMED;
|
||||
});
|
||||
}
|
||||
private void edge2edgeApplyInsets(View rootView) {
|
||||
ViewCompat.setOnApplyWindowInsetsListener(rootView, (view, windowInsets) -> {
|
||||
Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.displayCutout());
|
||||
view.setPadding(insets.left, insets.top, insets.right, insets.bottom);
|
||||
return WindowInsetsCompat.CONSUMED;
|
||||
});
|
||||
// For Android 10 and below.
|
||||
ViewGroupCompat.installCompatInsetsDispatch(rootView);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -93,5 +70,6 @@ public abstract class AbstractActivity extends AppCompatActivity {
|
||||
return true;
|
||||
}
|
||||
|
||||
protected abstract View getRootView();
|
||||
@NonNull
|
||||
protected abstract View createRootView();
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package de.dennisguse.opentracks;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import de.dennisguse.opentracks.databinding.HelpBinding;
|
||||
@@ -19,8 +20,9 @@ public class HelpActivity extends AbstractActivity {
|
||||
ViewUtils.makeClickableLinks(findViewById(android.R.id.content));
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
protected View getRootView() {
|
||||
protected View createRootView() {
|
||||
helpBinding = HelpBinding.inflate(getLayoutInflater());
|
||||
return helpBinding.getRoot();
|
||||
}
|
||||
|
||||
@@ -7,6 +7,8 @@ import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
@@ -28,8 +30,9 @@ public class ShowErrorActivity extends AbstractActivity {
|
||||
setSupportActionBar(viewBinding.bottomAppBarLayout.bottomAppBar);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
protected View getRootView() {
|
||||
protected View createRootView() {
|
||||
viewBinding = ActivityShowErrorBinding.inflate(getLayoutInflater());
|
||||
return viewBinding.getRoot();
|
||||
}
|
||||
|
||||
@@ -115,8 +115,9 @@ public class TrackEditActivity extends AbstractActivity implements ChooseActivit
|
||||
outState.putSerializable(ICON_VALUE_KEY, activityType);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
protected View getRootView() {
|
||||
protected View createRootView() {
|
||||
viewBinding = TrackEditBinding.inflate(getLayoutInflater());
|
||||
return viewBinding.getRoot();
|
||||
}
|
||||
|
||||
@@ -30,6 +30,7 @@ import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.content.res.AppCompatResources;
|
||||
import androidx.core.content.ContextCompat;
|
||||
@@ -242,8 +243,9 @@ public class TrackListActivity extends AbstractTrackDeleteActivity implements Co
|
||||
adapter = null;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
protected View getRootView() {
|
||||
protected View createRootView() {
|
||||
viewBinding = TrackListBinding.inflate(getLayoutInflater());
|
||||
|
||||
viewBinding.trackListSearchView.getEditText().setOnEditorActionListener((v, actionId, event) -> {
|
||||
|
||||
@@ -34,7 +34,6 @@ import com.google.android.material.tabs.TabLayoutMediator;
|
||||
|
||||
import de.dennisguse.opentracks.chart.ChartFragment;
|
||||
import de.dennisguse.opentracks.chart.TrackDataHubInterface;
|
||||
import de.dennisguse.opentracks.data.ContentProviderUtils;
|
||||
import de.dennisguse.opentracks.data.TrackDataHub;
|
||||
import de.dennisguse.opentracks.data.models.Track;
|
||||
import de.dennisguse.opentracks.databinding.TrackRecordedBinding;
|
||||
@@ -67,8 +66,6 @@ public class TrackRecordedActivity extends AbstractTrackDeleteActivity implement
|
||||
|
||||
private static final String CURRENT_TAB_TAG_KEY = "current_tab_tag_key";
|
||||
|
||||
// The following are setFrequency in onCreate.
|
||||
private ContentProviderUtils contentProviderUtils;
|
||||
private TrackDataHub trackDataHub;
|
||||
|
||||
private TrackRecordedBinding viewBinding;
|
||||
@@ -85,8 +82,6 @@ public class TrackRecordedActivity extends AbstractTrackDeleteActivity implement
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
contentProviderUtils = new ContentProviderUtils(this);
|
||||
|
||||
handleIntent(getIntent());
|
||||
|
||||
trackDataHub = new TrackDataHub(this);
|
||||
@@ -101,7 +96,6 @@ public class TrackRecordedActivity extends AbstractTrackDeleteActivity implement
|
||||
|
||||
trackRecordingServiceConnection = new TrackRecordingServiceConnection(bindCallback);
|
||||
|
||||
Track track = contentProviderUtils.getTrack(trackId);
|
||||
viewBinding.bottomAppBarLayout.bottomAppBar.replaceMenu(R.menu.track_detail);
|
||||
setSupportActionBar(viewBinding.bottomAppBarLayout.bottomAppBar);
|
||||
|
||||
@@ -142,8 +136,9 @@ public class TrackRecordedActivity extends AbstractTrackDeleteActivity implement
|
||||
outState.putInt(CURRENT_TAB_TAG_KEY, viewBinding.trackDetailActivityViewPager.getCurrentItem());
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
protected View getRootView() {
|
||||
protected View createRootView() {
|
||||
viewBinding = TrackRecordedBinding.inflate(getLayoutInflater());
|
||||
return viewBinding.getRoot();
|
||||
}
|
||||
|
||||
@@ -250,8 +250,9 @@ public class TrackRecordingActivity extends AbstractActivity implements ChooseAc
|
||||
trackRecordingServiceConnection = null;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
protected View getRootView() {
|
||||
protected View createRootView() {
|
||||
viewBinding = TrackRecordingBinding.inflate(getLayoutInflater());
|
||||
return viewBinding.getRoot();
|
||||
}
|
||||
|
||||
@@ -7,6 +7,8 @@ import android.util.Pair;
|
||||
import android.view.View;
|
||||
import android.widget.ArrayAdapter;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import de.dennisguse.opentracks.data.ContentProviderUtils;
|
||||
import de.dennisguse.opentracks.data.models.ActivityType;
|
||||
import de.dennisguse.opentracks.data.models.DistanceFormatter;
|
||||
@@ -110,8 +112,9 @@ public class TrackStoppedActivity extends AbstractTrackDeleteActivity implements
|
||||
contentProviderUtils);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
protected View getRootView() {
|
||||
protected View createRootView() {
|
||||
viewBinding = TrackStoppedBinding.inflate(getLayoutInflater());
|
||||
return viewBinding.getRoot();
|
||||
}
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
|
||||
package de.dennisguse.opentracks.fragments;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
@@ -33,7 +32,6 @@ import androidx.fragment.app.Fragment;
|
||||
import de.dennisguse.opentracks.R;
|
||||
import de.dennisguse.opentracks.TrackRecordedActivity;
|
||||
import de.dennisguse.opentracks.data.ContentProviderUtils;
|
||||
import de.dennisguse.opentracks.data.models.ActivityType;
|
||||
import de.dennisguse.opentracks.data.models.DistanceFormatter;
|
||||
import de.dennisguse.opentracks.data.models.SpeedFormatter;
|
||||
import de.dennisguse.opentracks.data.models.Track;
|
||||
@@ -185,13 +183,7 @@ public class StatisticsRecordedFragment extends Fragment {
|
||||
}
|
||||
|
||||
// Set activity type
|
||||
{
|
||||
Context context = getContext();
|
||||
String localizedActivityType = track.getActivityTypeLocalized();
|
||||
int iconDrawableId = ActivityType.findByLocalizedString(context, localizedActivityType)
|
||||
.getIconDrawableId();
|
||||
viewBinding.statsActivityTypeIcon.setImageDrawable(ContextCompat.getDrawable(getContext(), iconDrawableId));
|
||||
}
|
||||
viewBinding.statsActivityTypeIcon.setImageDrawable(ContextCompat.getDrawable(getContext(), track.getActivityType().getIconDrawableId()));
|
||||
|
||||
// Set time and start datetime
|
||||
{
|
||||
|
||||
@@ -47,8 +47,9 @@ public class IntroductionActivity extends AbstractActivity {
|
||||
viewBinding.introductionViewPager.setUserInputEnabled(false);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
protected View getRootView() {
|
||||
protected View createRootView() {
|
||||
viewBinding = IntroductionBinding.inflate(getLayoutInflater());
|
||||
return viewBinding.getRoot();
|
||||
}
|
||||
|
||||
@@ -72,8 +72,9 @@ public class SettingsActivity extends AbstractActivity implements ChooseActivity
|
||||
}
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
protected View getRootView() {
|
||||
protected View createRootView() {
|
||||
viewBinding = SettingsBinding.inflate(getLayoutInflater());
|
||||
return viewBinding.getRoot();
|
||||
}
|
||||
|
||||
+2
-1
@@ -116,8 +116,9 @@ public class SettingsCustomLayoutEditActivity extends AbstractActivity implement
|
||||
recordingLayoutFieldsVisible = null;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
protected View getRootView() {
|
||||
protected View createRootView() {
|
||||
viewBinding = ActivitySettingsCustomLayoutBinding.inflate(getLayoutInflater());
|
||||
return viewBinding.getRoot();
|
||||
}
|
||||
|
||||
+2
-1
@@ -108,8 +108,9 @@ public class SettingsCustomLayoutListActivity extends AbstractActivity implement
|
||||
adapter.reloadLayouts();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
protected View getRootView() {
|
||||
protected View createRootView() {
|
||||
PreferencesUtils.getCustomLayout();
|
||||
viewBinding = ActivitySettingsCustomLayoutListBinding.inflate(getLayoutInflater());
|
||||
return viewBinding.getRoot();
|
||||
|
||||
@@ -35,7 +35,6 @@ import de.dennisguse.opentracks.settings.UnitSystem;
|
||||
import de.dennisguse.opentracks.ui.util.ActivityUtils;
|
||||
import de.dennisguse.opentracks.ui.util.ListItemUtils;
|
||||
import de.dennisguse.opentracks.util.IntentUtils;
|
||||
import de.dennisguse.opentracks.util.StringUtils;
|
||||
|
||||
public class TrackListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements ActionMode.Callback {
|
||||
|
||||
@@ -229,12 +228,6 @@ public class TrackListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
|
||||
viewBinding.trackListItemTime.setText(null);
|
||||
}
|
||||
|
||||
//TODO Check if this is needed or a leftover from the MarkerList migration
|
||||
String category = activityType == null ? activityTypeLocalized : null;
|
||||
String categoryDescription = StringUtils.getCategoryDescription(category, description);
|
||||
viewBinding.trackListItemCategoryDescription.setText(categoryDescription);
|
||||
viewBinding.trackListItemCategoryDescription.setVisibility("".equals(categoryDescription) ? View.GONE : View.VISIBLE);
|
||||
|
||||
setSelected(selection.get((int) getId()));
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -83,8 +83,9 @@ public class AggregatedStatisticsActivity extends AbstractActivity implements Fi
|
||||
outState.putBoolean(STATE_ARE_FILTERS_APPLIED, areFiltersApplied);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
protected View getRootView() {
|
||||
protected View createRootView() {
|
||||
viewBinding = AggregatedStatsBinding.inflate(getLayoutInflater());
|
||||
return viewBinding.getRoot();
|
||||
}
|
||||
|
||||
@@ -110,8 +110,9 @@ public class MarkerDetailActivity extends AbstractActivity implements DeleteMark
|
||||
setSupportActionBar(viewBinding.bottomAppBarLayout.bottomAppBar);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
protected View getRootView() {
|
||||
protected View createRootView() {
|
||||
viewBinding = MarkerDetailActivityBinding.inflate(getLayoutInflater());
|
||||
return viewBinding.getRoot();
|
||||
}
|
||||
|
||||
@@ -85,8 +85,9 @@ public class MarkerEditActivity extends AbstractActivity {
|
||||
// UI elements
|
||||
private MarkerEditBinding viewBinding;
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
protected View getRootView() {
|
||||
protected View createRootView() {
|
||||
viewBinding = MarkerEditBinding.inflate(getLayoutInflater());
|
||||
return viewBinding.getRoot();
|
||||
}
|
||||
|
||||
@@ -145,8 +145,9 @@ public class MarkerListActivity extends AbstractActivity implements DeleteMarker
|
||||
contentProviderUtils = null;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
protected View getRootView() {
|
||||
protected View createRootView() {
|
||||
viewBinding = MarkerListBinding.inflate(getLayoutInflater());
|
||||
|
||||
viewBinding.markerListSearchView.getEditText().setOnEditorActionListener((v, actionId, event) -> {
|
||||
|
||||
@@ -1,14 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background" />
|
||||
<foreground>
|
||||
<inset
|
||||
android:inset="20dp"
|
||||
android:drawable="@drawable/ic_logo_color_24dp" />
|
||||
</foreground>
|
||||
<monochrome>
|
||||
<inset
|
||||
android:inset="20dp"
|
||||
android:drawable="@drawable/ic_logo_24dp" />
|
||||
</monochrome>
|
||||
<foreground android:drawable="@drawable/ic_logo_color_108dp" />
|
||||
<monochrome android:drawable="@drawable/ic_logo_color_108dp" />
|
||||
</adaptive-icon>
|
||||
@@ -0,0 +1,16 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:tint="?attr/colorControlNormal"
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
<group
|
||||
android:scaleX="0.56"
|
||||
android:scaleY="0.56"
|
||||
android:translateX="22"
|
||||
android:translateY="24">
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:pathData="M82.489,12.834C83.196,10.418 82.043,9.556 79.926,10.917L10.087,55.828c-2.117,1.361 -1.795,2.628 0.714,2.815L39.806,60.807c2.51,0.188 5.291,2.267 6.18,4.621l10.282,27.208c0.89,2.354 2.195,2.304 2.902,-0.111z" />
|
||||
</group>
|
||||
</vector>
|
||||
@@ -0,0 +1,33 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:aapt="http://schemas.android.com/aapt"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
<group
|
||||
android:scaleX="0.56"
|
||||
android:scaleY="0.56"
|
||||
android:translateX="22"
|
||||
android:translateY="24">
|
||||
<path
|
||||
android:pathData="M85.133,20.59C85.731,18.546 84.756,17.817 82.965,18.968L23.874,56.967c-1.791,1.152 -1.519,2.224 0.604,2.382L49.019,61.18c2.124,0.159 4.477,1.918 5.229,3.91l8.7,23.021c0.753,1.992 1.857,1.949 2.455,-0.094z"
|
||||
android:strokeWidth="1"
|
||||
android:strokeColor="#f69123">
|
||||
<aapt:attr name="android:fillColor">
|
||||
<gradient
|
||||
android:endX="84.4913"
|
||||
android:endY="19.211866"
|
||||
android:startX="38.773293"
|
||||
android:startY="80.33152"
|
||||
android:type="linear">
|
||||
<item
|
||||
android:color="#FFFBB22F"
|
||||
android:offset="0" />
|
||||
<item
|
||||
android:color="#FFF58820"
|
||||
android:offset="1" />
|
||||
</gradient>
|
||||
</aapt:attr>
|
||||
</path>
|
||||
</group>
|
||||
</vector>
|
||||
@@ -1,33 +0,0 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:aapt="http://schemas.android.com/aapt"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="100"
|
||||
android:viewportHeight="100">
|
||||
|
||||
<group
|
||||
android:name="rotationGroup"
|
||||
android:pivotX="50"
|
||||
android:pivotY="50"
|
||||
android:scaleX="0.6"
|
||||
android:scaleY="0.6"
|
||||
>
|
||||
<path android:pathData="M82.489,12.834C83.196,10.418 82.043,9.556 79.926,10.917L10.087,55.828c-2.117,1.361 -1.795,2.628 0.714,2.815L39.806,60.807c2.51,0.188 5.291,2.267 6.18,4.621l10.282,27.208c0.89,2.354 2.195,2.304 2.902,-0.111z">
|
||||
<aapt:attr name="android:fillColor">
|
||||
<gradient
|
||||
android:endX="70.0"
|
||||
android:endY="30.0"
|
||||
android:startX="7.0"
|
||||
android:startY="83.0"
|
||||
android:type="linear">
|
||||
<item
|
||||
android:color="#FFFBB22F"
|
||||
android:offset="0" />
|
||||
<item
|
||||
android:color="#FFFF6D00"
|
||||
android:offset="1" />
|
||||
</gradient>
|
||||
</aapt:attr>
|
||||
</path>
|
||||
</group>
|
||||
</vector>
|
||||
@@ -11,9 +11,10 @@
|
||||
<!-- Icon -->
|
||||
<ImageView
|
||||
android:id="@+id/track_list_item_icon"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="24dp"
|
||||
android:layout_height="24dp"
|
||||
android:contentDescription="@string/image_track"
|
||||
android:scaleType="centerInside"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:src="@drawable/ic_activity_bike_24dp" />
|
||||
@@ -94,19 +95,6 @@
|
||||
app:barrierDirection="bottom"
|
||||
app:constraint_referenced_ids="track_list_item_time_distance,track_list_item_marker_count_icon,track_list_item_marker_count,track_list_item_time" />
|
||||
|
||||
<!-- Category and description -->
|
||||
<TextView
|
||||
android:id="@+id/track_list_item_category_description"
|
||||
style="?attr/textAppearanceBodySmall"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="2"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="@id/track_list_item_name"
|
||||
app:layout_constraintTop_toBottomOf="@id/track_list_item_barrier"
|
||||
tools:text="Description" />
|
||||
|
||||
<!-- Bottom Line -->
|
||||
<View
|
||||
android:id="@+id/marker_list_item_bottom_line"
|
||||
@@ -114,6 +102,6 @@
|
||||
android:layout_marginBottom="0dp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/track_list_item_category_description" />
|
||||
app:layout_constraintTop_toBottomOf="@+id/track_list_item_barrier" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -673,4 +673,5 @@ Si le dispositif GPS signale des données inexactes (par exemple, la localisatio
|
||||
<string name="lap_heart_rate">Fréquence cardiaque au tour</string>
|
||||
<string name="settings_recording_show_gps_disabled_warning_title">Alerte GPS désactivée</string>
|
||||
<string name="settings_recording_show_gps_disabled_warning_summary">Pendant l\'enregistrement, afficher un avertissement si le GPS est désactivé.</string>
|
||||
<string name="empty">vide</string>
|
||||
</resources>
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
<style name="SplashTheme" parent="Theme.SplashScreen">
|
||||
<item name="windowSplashScreenBackground">@color/splashscreen_background</item>
|
||||
|
||||
<item name="windowSplashScreenAnimatedIcon">@drawable/ic_logo_color_splashscreen</item>
|
||||
<item name="windowSplashScreenAnimatedIcon">@drawable/ic_logo_color_108dp</item>
|
||||
<item name="postSplashScreenTheme">@style/OpenTracksTheme</item>
|
||||
</style>
|
||||
|
||||
|
||||
@@ -175,7 +175,7 @@ limitations under the License.
|
||||
<string name="settings_chart_by_distance">По расстоянию</string>
|
||||
<string name="settings_chart_by_time">По времени</string>
|
||||
<string name="settings_recording_default_activity_title">Вид активности по умолчанию</string>
|
||||
<string name="settings_recording_location_frequency_summary">%1$s между записанными точками местоположения</string>
|
||||
<string name="settings_recording_location_frequency_summary">%1$s между проверками местоположения</string>
|
||||
<string name="settings_recording_max_recording_distance_summary">Новый сегмент создается, если расстояние между двумя точками больше %1$s</string>
|
||||
<string name="settings_recording_max_recording_distance_title">Макс. расстояние</string>
|
||||
<string name="settings_recording_min_recording_distance_title">Интервал записи расстояния</string>
|
||||
@@ -184,9 +184,9 @@ limitations under the License.
|
||||
<string name="settings_recording_track_name_date_iso_8601_option">Дата (ISO 8601)</string>
|
||||
<string name="settings_recording_track_name_date_local_option">Дата (местный формат)</string>
|
||||
<string name="settings_recording_track_name_number_option">Номер</string>
|
||||
<string name="settings_recording_track_name_title">Название трека по умолчанию</string>
|
||||
<string name="settings_recording_track_name_title">Название пути по умолчанию</string>
|
||||
<!-- Settings Reset -->
|
||||
<string name="settings_reset_confirm_message">Все настройки будут сброшены к значениям по умолчанию. Это не удалит треки на устройстве.</string>
|
||||
<string name="settings_reset_confirm_message">Все настройки будут сброшены к значениям по умолчанию. Это не удалит пути на устройстве.</string>
|
||||
<string name="settings_reset_confirm_title">Сбросить настройки?</string>
|
||||
<string name="settings_reset_done">Все настройки сброшены к значениям по умолчанию</string>
|
||||
<!-- Settings Sensor -->
|
||||
@@ -199,7 +199,7 @@ limitations under the License.
|
||||
<string name="share_track_share_file_body">Я думаю этот маршрут покажется вам интересным.
|
||||
\n
|
||||
\n%1$s</string>
|
||||
<string name="share_track_subject">Хочу поделиться с вами треком</string>
|
||||
<string name="share_track_subject">Хочу поделиться с вами путём</string>
|
||||
<!-- Stats -->
|
||||
<string name="stats_average_moving_pace">Средний темп движения</string>
|
||||
<string name="stats_average_moving_speed">Средняя скорость движения</string>
|
||||
@@ -217,12 +217,12 @@ limitations under the License.
|
||||
<string name="stats_distance">Расстояние</string>
|
||||
<string name="stats_total_time">Общее время</string>
|
||||
<!-- Track -->
|
||||
<string name="track_name_format">Трек %1$d</string>
|
||||
<string name="track_name_format">Путь %1$d</string>
|
||||
<string name="track_markers">%1$s маркеры</string>
|
||||
<!-- Track Delete -->
|
||||
<string name="track_delete_one_confirm_message">Трек и связанные с ним маркеры будут удалены с устройства без возможности восстановления.</string>
|
||||
<string name="track_delete_one_confirm_title">Удалить трек?</string>
|
||||
<string name="track_delete_multiple_confirm_message">Выбранные треки и связанные с ними маркеры будут удалены с устройства без возможности восстановления.</string>
|
||||
<string name="track_delete_one_confirm_message">Путь и связанные с ним маркеры будут удалены с устройства без возможности восстановления.</string>
|
||||
<string name="track_delete_one_confirm_title">Удалить путь?</string>
|
||||
<string name="track_delete_multiple_confirm_message">Выбранные пути и связанные с ними маркеры будут удалены с устройства без возможности восстановления.</string>
|
||||
<string name="track_delete_progress_message">Удаление…</string>
|
||||
<!-- Track Detail -->
|
||||
<string name="track_detail_stats_tab">Статистика</string>
|
||||
@@ -312,7 +312,7 @@ limitations under the License.
|
||||
\nНа самом деле, OSMDashboard — это отдельное приложение, которое может получить (временный) доступ только к данным трека(-ов), которые будут просмотрены.
|
||||
\nб) Через обычное картографическое приложение (например, <a href="http://osmand.net/">OsmAnd</a> и <a href="https://maps.me/">MAPS.ME</a>). Такие приложения должны поддерживать формат файлов KMZ (только точки местоположения и метки времени). Фактически, приложение должно поддерживать <i>ACTION_VIEW</i> с MIME <i>application/vnd.google-earth.kmz</i>. </string>
|
||||
<string name="help_storage_pictures_title">Как OpenTracks хранит изображения, используемые в качестве маркеров?</string>
|
||||
<string name="about_preference_title">Об OpenTracks</string>
|
||||
<string name="about_preference_title">О приложении</string>
|
||||
<string name="about_description"><i>OpenTracks</i> — это приложение для отслеживания спортивных тренировок, которое полностью уважает вашу конфиденциальность.</string>
|
||||
<string name="about_url">Веб-страница проекта: <a href="%1$s">%1$s</a></string>
|
||||
<string name="about_version_name">Название версии: %1$s</string>
|
||||
@@ -362,14 +362,14 @@ limitations under the License.
|
||||
<string name="marker_add_photo_canceled">Отменено, фотомаркер не добавлен</string>
|
||||
<string name="import_progress_summary_exists_msg">Уже существует</string>
|
||||
<string name="import_progress_summary_ok_msg">Файлы импортированы</string>
|
||||
<string name="menu_resume_track">Возобновить трек</string>
|
||||
<string name="menu_resume_track">Продолжить путь</string>
|
||||
<string name="settings_night_mode_title">Тема интерфейса</string>
|
||||
<string name="open_track_as_trackfileformat">Открыть как %1$s</string>
|
||||
<string name="help_support_title">Как я могу поддержать OpenTracks?</string>
|
||||
<string name="help_gps_troubleshooting_title">OpenTracks не записывает точки местоположения?</string>
|
||||
<string name="activity_type_escooter">электросамокат</string>
|
||||
<string name="permission_gps_failed">OpenTracks требуется разрешение на использование GPS.</string>
|
||||
<string name="settings_prevent_reimport_tracks_title">Предотвращение повторного импорта треков</string>
|
||||
<string name="settings_prevent_reimport_tracks_title">Предотвращение повторного импорта путей</string>
|
||||
<string name="sensor_state_cadence_max">Макс. каденс</string>
|
||||
<string name="sensor_state_cadence_avg">Средний каденс</string>
|
||||
<string name="settings_recording_fullscreen_on_while_recording_title">Полный экран</string>
|
||||
@@ -390,8 +390,8 @@ limitations under the License.
|
||||
<string name="export_track_errors">Файлы не экспортированы</string>
|
||||
<string name="export_error_post_workout">Сбой экспорта после тренировки, пожалуйста, проверьте папку экспорта.</string>
|
||||
<string name="description_altitude_loss">Потеря высоты: %1$d м (%2$d футов)</string>
|
||||
<string name="settings_default_export_uri_title">Папка для экспорта треков</string>
|
||||
<string name="instant_export_enabled_summary">Экспортировать трек в хранилище после завершения записи</string>
|
||||
<string name="settings_default_export_uri_title">Папка для экспорта путей</string>
|
||||
<string name="instant_export_enabled_summary">Экспортировать путь в хранилище после завершения записи</string>
|
||||
<string name="share_image_subject">Я хотел бы поделиться с вами изображением</string>
|
||||
<string name="track_detail_intervals_tab">Интервалы</string>
|
||||
<string name="help_data_storage_content"> Данные датчиков сохраняются для каждого записанного местоположения. Для пульсометра это означает, что на каждую точку местоположения сохраняется только <i>одно</i> значение пульса. Если вы стоите на месте или находитесь в помещении, данные датчика не будут записываться (но будут отображаться). </string>
|
||||
@@ -406,7 +406,7 @@ limitations under the License.
|
||||
<string name="track_speed_notification">Скорость: %1$s</string>
|
||||
<string name="track_distance_notification">Расстояние: %1$s</string>
|
||||
<string name="interval_list_empty_message">Интервалов пока нет</string>
|
||||
<string name="aggregated_stats_empty_message">Запишите свой первый трек, чтобы увидеть статистику</string>
|
||||
<string name="aggregated_stats_empty_message">Запишите свой первый путь, чтобы увидеть статистику</string>
|
||||
<string name="instant_export_enabled_title">Мгновенный экспорт после тренировки</string>
|
||||
<string name="hold_to_stop">Удерживайте для остановки</string>
|
||||
<string name="share_image_body">Я думаю, вас может заинтересовать это изображение.</string>
|
||||
@@ -428,7 +428,7 @@ limitations under the License.
|
||||
<string name="import_prevent_reimport">Вы запретили повторный импорт трека</string>
|
||||
<string name="about_third_party_data">Сторонние данные</string>
|
||||
<string name="menu_voice_rate">Скорость голоса</string>
|
||||
<string name="track_delete_not_recording">Этот трек нельзя удалить, так как он записывается в данный момент.</string>
|
||||
<string name="track_delete_not_recording">Этот путь нельзя удалить, так как он записывается в данный момент.</string>
|
||||
<plurals name="generic_completed_with_errors">
|
||||
<item quantity="one">Завершено, %1$d ошибка</item>
|
||||
<item quantity="few">Завершено, %1$d ошибки</item>
|
||||
@@ -454,11 +454,11 @@ limitations under the License.
|
||||
<string name="settings_sensors_title">датчики</string>
|
||||
<string name="settings_sensors_summary">Велосипедные датчики, окружность колеса, датчики для бега</string>
|
||||
<string name="settings_announcements_statistics_title">Голосовые подсказки статистические</string>
|
||||
<string name="settings_import_export_title">Импорт/экспорт</string>
|
||||
<string name="settings_import_export_title">Импорт и экспорт</string>
|
||||
<string name="settings_import_export_summary">Импорт, экспорт, автоэкспорт</string>
|
||||
<string name="settings_units_category">Единицы измерения</string>
|
||||
<string name="settings_announcements_totaltime_frequency">Интервал времени</string>
|
||||
<string name="settings_announcements_distance_frequency">Интервал расстояния</string>
|
||||
<string name="settings_announcements_distance_frequency">Длина окружности</string>
|
||||
<string name="custom_layout_list_layout_removed">Раскладка удалена</string>
|
||||
<string name="settings_cycling_sensor">Велосипед</string>
|
||||
<string name="settings_public_api_enabled_title">Публичный API</string>
|
||||
@@ -466,7 +466,7 @@ limitations under the License.
|
||||
<string name="settings_public_api_enabled_summary_off">Только OpenTracks может запускать и останавливать запись.</string>
|
||||
<string name="value_float_mile_hour_recommended">%1$.1f миль/ч (рекомендуется)</string>
|
||||
<string name="export_cannot_write_to_dir">Невозможно записать в папку экспорта.</string>
|
||||
<string name="settings_defaults_summary">Предпочитаемые единицы, вид активности и название трека по умолчанию</string>
|
||||
<string name="settings_defaults_summary">Предпочитаемые единицы, вид активности и название пути по умолчанию</string>
|
||||
<string name="settings_recording_customize_layout_title">Изменить раскладку записи</string>
|
||||
<string name="settings_recording_customize_layout_select_columns">Ячеек с данными в строке</string>
|
||||
<string name="custom_layout_list_title">Раскладки</string>
|
||||
@@ -486,7 +486,7 @@ limitations under the License.
|
||||
<string name="custom_layout_select_layout">Выбрать раскладку</string>
|
||||
<string name="stats_custom_layout_default_layout">Раскладка по умолчанию</string>
|
||||
<string name="settings_layout_reset_confirm_title">Сбросить ваши раскладки?</string>
|
||||
<string name="settings_layout_reset_confirm_message">Настройки всех раскладок будут сброшены к значениям по умолчанию. Это не удалит треки на устройстве.</string>
|
||||
<string name="settings_layout_reset_confirm_message">Настройки всех раскладок будут сброшены к значениям по умолчанию. Это не удалит пути на устройстве.</string>
|
||||
<string name="stats_sensors_heart_rate">Пульс</string>
|
||||
<string name="stats_sensors_power">Мощность</string>
|
||||
<string name="value_float_mile_hour">%1$.1f миль/ч</string>
|
||||
@@ -536,7 +536,7 @@ limitations under the License.
|
||||
<string name="value_integer_knots">%1$d узлов</string>
|
||||
<string name="value_float_knots">%1$.1f узлов</string>
|
||||
<string name="image_discard">Отменить</string>
|
||||
<string name="track_discarding">Отмена записи трека</string>
|
||||
<string name="track_discarding">Отмена записи пути</string>
|
||||
<string name="settings_announcements_lap_heart_rate">Значение пульса за круг</string>
|
||||
<string name="settings_announcements_lap_speed_pace">Скорость/темп за круг</string>
|
||||
<string name="settings_public_api_package_title">Название пакета для публичного API</string>
|
||||
@@ -549,18 +549,18 @@ limitations under the License.
|
||||
<string name="settings_announcements_average_speed_pace">Средняя скорость/темп</string>
|
||||
<string name="unit_minute_per_nautical_mile">минут на морскую милю</string>
|
||||
<string name="sensor_state_heart_rate_unit">уд/мин</string>
|
||||
<string name="voiceDistanceNauticalMilesPlural">{n, plural, =1 {1 nautical mile} other {{n,number,#.0} nautical miles} }</string>
|
||||
<string name="voiceMinutesPlural">{n, plural, =1 {1 minute} other {{n,number} minutes} }</string>
|
||||
<string name="voiceDistanceNauticalMilesPlural">{n, plural, =1 {1 морская миля} few {{n,number,#.0} морских миля} other {{n,number,#.0} морских миль} }</string>
|
||||
<string name="voiceMinutesPlural">{n, plural, =1 {1 минута} few {{n,number} минуты} other {{n,number} минут} }</string>
|
||||
<string name="help_data_google_play_services_content">Не использует</string>
|
||||
<string name="menu_export_all_one_file">Экспортировать все треки в один файл</string>
|
||||
<string name="track_delete_number_of_tracks">%1$d треки</string>
|
||||
<string name="track_delete_number_of_tracks">%1$d пути</string>
|
||||
<string name="show_on_dashboard">OpenTracks Dashboard API</string>
|
||||
<string name="settings_announcements_idle_category_title">Голосовые подсказки без движения</string>
|
||||
<string name="sensor_state_power_unit">Вт</string>
|
||||
<string name="settings_stats_units_imperial_meter">Британская система (мили, метры)</string>
|
||||
<string name="voiceSpeedMilesPerHourPlural">{n, plural, =1 {1 mile per hour} other {{n,number,#.0} miles per hour} }</string>
|
||||
<string name="voiceDistanceMilesPlural">{n, plural, =1 {1 mile} other {{n,number,#.0} miles} }</string>
|
||||
<string name="voiceSpeedKilometersPerHourPlural">{n, plural, =1 {1 kilometer per hour} other {{n,number,#.0} kilometers per hour} }</string>
|
||||
<string name="voiceSpeedMilesPerHourPlural">{n, plural, =1 {1 миля в час} few {{n,number} мили в час} other {{n,number} миль в час} }</string>
|
||||
<string name="voiceDistanceMilesPlural">{n, plural, =1 {1 миля} few {{n,number,#.0} миль} other {{n,number,#.0} мили} }</string>
|
||||
<string name="voiceSpeedKilometersPerHourPlural">{n, plural, =1 {1 километр в час} few {{n,number} километра в час} other {{n,number} километров в час} }</string>
|
||||
<string name="voice_on_device_speaker_title">Использовать динамик устройства</string>
|
||||
<string name="settings_ui_dynamic_colors_title">Динамические цвета</string>
|
||||
<string name="settings_sensor_heart_rate_max">Зоны: макс. пульс (уд/мин)</string>
|
||||
@@ -570,7 +570,7 @@ limitations under the License.
|
||||
<string name="sensor_state_power_max">Макс. мощность</string>
|
||||
<string name="activity_type_kickscooter">самокат</string>
|
||||
<string name="no_compatible_camera_installed">Не установлено совместимое приложение камеры</string>
|
||||
<string name="voiceSecondsPlural">{n, plural, =1 {1 second} other {{n,number} seconds} }</string>
|
||||
<string name="voiceSecondsPlural">{n, plural, =1 {1 секунда} few {{n,number} секунды} other {{n,number} секунд} }</string>
|
||||
<string name="settings_api_summary">API для удаленного управления и статистики для сторонних приложений</string>
|
||||
<string name="no_compatible_gallery_installed">Не установлено совместимое приложение для просмотра изображений</string>
|
||||
<string name="show_on_dashboard_not_installed">Не установлено приложение, поддерживающее OpenTracks Dashboard API.</string>
|
||||
@@ -580,12 +580,38 @@ limitations under the License.
|
||||
<string name="sensor_state_cadence_unit">об/мин</string>
|
||||
<string name="voiceIdle">Переход в режим без движения.</string>
|
||||
<string name="introduction_osm_dashboard">В OpenTracks не предусмотрена карта. Пожалуйста, установите OSMDashboard для просмотра ваших записей на карте.</string>
|
||||
<string name="voiceHoursPlural">{n, plural, =1 {1 hour} other {{n,number} hours} }</string>
|
||||
<string name="voiceHoursPlural">{n, plural, =1 {1 час} few {{n,number} часа} other {{n,number} часов} }</string>
|
||||
<string name="settings_announcements_idle_title">Без движения</string>
|
||||
<string name="settings_recording_idle_timeout_title">Предел периода без движения</string>
|
||||
<string name="settings_recording_min_required_accuracy_summary">Информация о местоположении игнорируется, если показатель точности превышает %1$s</string>
|
||||
<string name="voiceSpeedMKnotsPlural">{n, plural, =1 {1 knot} other {{n,number,#.0} knots} }</string>
|
||||
<string name="voiceSpeedMKnotsPlural">{n, plural, =1 {1 узел} few {{n,number,#.0} узла} other {{n,number,#.0} узлов} }</string>
|
||||
<string name="value_int_seconds">%1$d сек (рекомендуется)</string>
|
||||
<string name="settings_sensor_bluetooth_service_filter_title">Фильтровать устройства Bluetooth</string>
|
||||
<string name="voiceDistanceKilometersPlural">{n, plural, =1 {1 kilometer} other {{n,number,#.0} kilometers} }</string>
|
||||
</resources>
|
||||
<string name="voiceDistanceKilometersPlural">{n, plural, =1 {1 километр} few {{n,number,#.0} километра} other {{n,number,#.0} километров} }</string>
|
||||
<string name="settings_recording_show_gps_disabled_warning_title">Предупреждение о нерабочем GPS положении</string>
|
||||
<string name="settings_recording_show_gps_disabled_warning_summary">Во время записи, показать предупреждение, если GPS отключён.</string>
|
||||
<string name="stats_gain_loss">Подъём и спуск</string>
|
||||
<string name="lap_heart_rate">Пульс на круге</string>
|
||||
<string name="settings_charts_title">Графики</string>
|
||||
<string name="settings_chart_display_elevation_title">Показать высоту</string>
|
||||
<string name="settings_chart_display_pace_or_speed_title">Показать темп или скорость</string>
|
||||
<string name="settings_chart_display_heart_rate_title">Показать пульс</string>
|
||||
<string name="settings_recording_location_distance_summary">%1$s между записанными местоположениями</string>
|
||||
<string name="empty">пусто</string>
|
||||
<string name="sensor_state_pressure">Барометр</string>
|
||||
<string name="bluetooth_sensor_summary">%1$s (%2$s)</string>
|
||||
<string name="voiceSpeed">{n, plural, =1 {1} few {{n,number,#.0}} other {{n,number,#.0}} }</string>
|
||||
<string name="value_internal_sensor">Внутренний датчик</string>
|
||||
<string name="settings_locale_title">Язык</string>
|
||||
<string name="settings_locale_system_default">Как в системе</string>
|
||||
<string name="settings_night_mode_option_night_oled">Ночной (полностью чёрный)</string>
|
||||
<string name="settings_announcements_unit">Единицы расстояния/скорости</string>
|
||||
<string name="voice_announce_lap_power_key">voiceAnnounceLapPower</string>
|
||||
<string name="power_x_watt">Мощность {x, plural, =1 {1 Ватт} few {# Ватта} other {# Ваттов} }</string>
|
||||
<string name="settings_recording_min_sampling_interval_title">Интервал выборки</string>
|
||||
<string name="settings_announcements_lap_power">Мощность на круге</string>
|
||||
<string name="create_marker_error">Невозможно создать маркер. Попробуйте ещё раз.</string>
|
||||
<string name="settings_theme_switch_restart">При изменении темы может потребоваться ручной перезапуск.</string>
|
||||
<string name="power">Мощность</string>
|
||||
<string name="voiceDistance">{n, plural, =1 {1 } few {{n,number,#.0}} other {{n,number,#.0}} }</string>
|
||||
</resources>
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
<string name="unit_mile_per_hour">எம்.பி.எச்</string>
|
||||
<string name="unit_nautical_mile">என்.எம்</string>
|
||||
<string name="unit_knots">kn</string>
|
||||
<string name="unit_minute_per_kilometer">எனது/கி.மீ.</string>
|
||||
<string name="unit_minute_per_kilometer">நிமையம்/கி.மீ</string>
|
||||
<string name="unit_minute_per_mile">min/mi</string>
|
||||
<string name="value_integer_feet_excellent_gps">%1$d அடி (சிறந்த சி.பி.எச்)</string>
|
||||
<string name="value_float_kilometer_hour_recommended">%1 $ .1f கிமீ/மணி (பரிந்துரைக்கப்படுகிறது)</string>
|
||||
@@ -535,4 +535,11 @@
|
||||
<string name="activity_type_ice_sailing">பனி படகோட்டம்</string>
|
||||
<string name="activity_type_inline_skating">இன்லைன் ச்கேட்டிங்</string>
|
||||
<string name="activity_type_kayaking">கயாக்கிங்</string>
|
||||
<string name="settings_recording_show_gps_disabled_warning_title">சி.பி.எச் முடக்கப்பட்ட முன்னறிவிப்பு</string>
|
||||
<string name="settings_recording_show_gps_disabled_warning_summary">பதிவு செய்யும் போது, சி.பி.எச் முடக்கப்பட்டிருந்தால் ஒரு எச்சரிக்கையைக் காட்டுங்கள்.</string>
|
||||
<string name="empty">காலி</string>
|
||||
<string name="settings_charts_title">விளக்கப்படங்கள்</string>
|
||||
<string name="settings_chart_display_elevation_title">றிந்த உயரத்தைக் காண்பி</string>
|
||||
<string name="settings_chart_display_pace_or_speed_title">விரைவு அல்லது வேகத்தைக் காண்பி</string>
|
||||
<string name="settings_chart_display_heart_rate_title">இதய துடிப்பைக் காண்பி</string>
|
||||
</resources>
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
</style>
|
||||
|
||||
<style name="SplashTheme" parent="Theme.SplashScreen">
|
||||
<item name="windowSplashScreenAnimatedIcon">@drawable/ic_logo_color_splashscreen</item>
|
||||
<item name="windowSplashScreenAnimatedIcon">@drawable/ic_logo_color_108dp</item>
|
||||
<item name="postSplashScreenTheme">@style/OpenTracksTheme</item>
|
||||
</style>
|
||||
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<inset xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:drawable="@drawable/ic_logo_24dp" />
|
||||
android:drawable="@drawable/ic_logo_108dp" />
|
||||
Reference in New Issue
Block a user