1
0
Fork 0
mirror of https://github.com/syncthing/syncthing-android.git synced 2024-11-29 15:51:17 +00:00

Allow specifying different sync conditions per folder (fixes #57) (#66)

* WIP - https://github.com/Catfriend1/syncthing-android/issues/57

* Add sync conditions activity

* Update folder edit layout

Implement SyncConditionsActivity stub

* Add dialog open logic

* Fix UI glitches

* Update APK version to 0.14.51.4 / 4167

* Revert "Update APK version to 0.14.51.4 / 4167"

This reverts commit 47bc4aa9ba219c134047765cc2fb49a9fa651fbe.

* Implement WiFi Ssid Whitelist UI

* Read per-folder sync conditions from prefs

* Implement onCheckedChange listeners

* Implement saving object sync conditions

* Remove early draft stuff

* Implement per folder master switch for custom sync conditions

* FolderActivity - More log

* Improve generation of object-specific constants

* Added onSyncPreconditionChanged to RunConditionMonitor

* Fix UI glitch

* Fix non-harming typos

* Refactor "on mobile data" sync condition

* Refactor "on wifi" sync condition

* Refactor "on whitelisted wifi" sync condition

* Refactor "on metered wifi" sync condition

* Refactor RunConditionMonitor#decideShouldRun

* RunConditionMonitor - Rename variables

* Pause/Unpause folders using RunConditionMonitor events

* Implement RunConditionMonitor#SyncConditionResult

* Fix lint - use editor.apply instead of editor.commit

* Updated translations

* Add null check in RestApi

* Fix missing explanation text

* Fix german translation

* Update APK version to 0.14.51.6 / 4169

* Update whatsnew
This commit is contained in:
Catfriend1 2018-10-15 00:29:52 +02:00 committed by GitHub
parent c5a436fb61
commit f6f90c9c2b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
80 changed files with 1142 additions and 1095 deletions

View file

@ -35,8 +35,8 @@ android {
applicationId "com.github.catfriend1.syncthingandroid"
minSdkVersion 16
targetSdkVersion 26
versionCode 4168
versionName "0.14.51.5"
versionCode 4169
versionName "0.14.51.6"
testApplicationId 'com.github.catfriend1.syncthingandroid.test'
testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner'
playAccountConfig = playAccountConfigs.defaultAccountConfig

View file

@ -90,6 +90,13 @@
android:name="android.support.UI_OPTIONS"
android:value="splitActionBarWhenNarrow" />
</activity>
<activity
android:name=".activities.SyncConditionsActivity"
android:label="@string/custom_sync_conditions_dialog">
<meta-data
android:name="android.support.UI_OPTIONS"
android:value="splitActionBarWhenNarrow" />
</activity>
<activity android:name=".activities.RestartActivity"
android:theme="@style/Theme.Syncthing.Translucent"
android:launchMode="singleTop"/>

View file

@ -1,9 +1,11 @@
package com.nutomic.syncthingandroid;
import com.nutomic.syncthingandroid.activities.FirstStartActivity;
import com.nutomic.syncthingandroid.activities.FolderActivity;
import com.nutomic.syncthingandroid.activities.FolderPickerActivity;
import com.nutomic.syncthingandroid.activities.MainActivity;
import com.nutomic.syncthingandroid.activities.SettingsActivity;
import com.nutomic.syncthingandroid.activities.SyncConditionsActivity;
import com.nutomic.syncthingandroid.receiver.AppConfigReceiver;
import com.nutomic.syncthingandroid.service.RunConditionMonitor;
import com.nutomic.syncthingandroid.service.EventProcessor;
@ -24,7 +26,9 @@ public interface DaggerComponent {
void inject(SyncthingApp app);
void inject(MainActivity activity);
void inject(FirstStartActivity activity);
void inject(FolderActivity activity);
void inject(FolderPickerActivity activity);
void inject(SyncConditionsActivity activity);
void inject(Languages languages);
void inject(SyncthingService service);
void inject(RunConditionMonitor runConditionMonitor);

View file

@ -1,11 +1,11 @@
package com.nutomic.syncthingandroid.activities;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
@ -19,6 +19,7 @@ import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.EditText;
@ -26,7 +27,6 @@ import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.google.common.base.Objects;
import com.google.gson.Gson;
import com.nutomic.syncthingandroid.R;
import com.nutomic.syncthingandroid.model.Device;
@ -35,17 +35,19 @@ import com.nutomic.syncthingandroid.model.FolderIgnoreList;
import com.nutomic.syncthingandroid.service.Constants;
import com.nutomic.syncthingandroid.service.RestApi;
import com.nutomic.syncthingandroid.service.SyncthingService;
import com.nutomic.syncthingandroid.SyncthingApp;
import com.nutomic.syncthingandroid.util.FileUtils;
import com.nutomic.syncthingandroid.util.TextWatcherAdapter;
import com.nutomic.syncthingandroid.util.Util;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Random;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import javax.inject.Inject;
import static android.support.v4.view.MarginLayoutParamsCompat.setMarginEnd;
import static android.support.v4.view.MarginLayoutParamsCompat.setMarginStart;
import static android.util.TypedValue.COMPLEX_UNIT_DIP;
@ -95,9 +97,12 @@ public class FolderActivity extends SyncthingActivity
private TextView mAccessExplanationView;
private TextView mFolderTypeView;
private TextView mFolderTypeDescriptionView;
private ViewGroup mDevicesContainer;
private SwitchCompat mFolderFileWatcher;
private SwitchCompat mFolderPaused;
private ViewGroup mDevicesContainer;
private SwitchCompat mCustomSyncConditionsSwitch;
private TextView mCustomSyncConditionsDescription;
private TextView mCustomSyncConditionsDialog;
private TextView mPullOrderTypeView;
private TextView mPullOrderDescriptionView;
private TextView mVersioningDescriptionView;
@ -105,6 +110,9 @@ public class FolderActivity extends SyncthingActivity
private TextView mEditIgnoreListTitle;
private EditText mEditIgnoreListContent;
@Inject
SharedPreferences mPreferences;
private boolean mIsCreateMode;
private boolean mFolderNeedsToUpdate = false;
@ -137,6 +145,12 @@ public class FolderActivity extends SyncthingActivity
mFolder.paused = isChecked;
mFolderNeedsToUpdate = true;
break;
case R.id.customSyncConditionsSwitch:
mCustomSyncConditionsDescription.setEnabled(isChecked);
mCustomSyncConditionsDialog.setEnabled(isChecked);
// This is needed to display the "discard changes dialog".
mFolderNeedsToUpdate = true;
break;
case R.id.device_toggle:
Device device = (Device) view.getTag();
if (isChecked) {
@ -153,6 +167,7 @@ public class FolderActivity extends SyncthingActivity
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((SyncthingApp) getApplication()).component().inject(this);
setContentView(R.layout.fragment_folder);
mIsCreateMode = getIntent().getBooleanExtra(EXTRA_IS_CREATE, false);
@ -167,6 +182,9 @@ public class FolderActivity extends SyncthingActivity
mFolderTypeDescriptionView = findViewById(R.id.folderTypeDescription);
mFolderFileWatcher = findViewById(R.id.fileWatcher);
mFolderPaused = findViewById(R.id.folderPause);
mCustomSyncConditionsSwitch = findViewById(R.id.customSyncConditionsSwitch);
mCustomSyncConditionsDescription = findViewById(R.id.customSyncConditionsDescription);
mCustomSyncConditionsDialog = findViewById(R.id.customSyncConditionsDialog);
mPullOrderTypeView = findViewById(R.id.pullOrderType);
mPullOrderDescriptionView = findViewById(R.id.pullOrderDescription);
mVersioningDescriptionView = findViewById(R.id.versioningDescription);
@ -176,6 +194,7 @@ public class FolderActivity extends SyncthingActivity
mEditIgnoreListContent = findViewById(R.id.edit_ignore_list_content);
mPathView.setOnClickListener(view -> onPathViewClick());
mCustomSyncConditionsDialog.setOnClickListener(view -> onCustomSyncConditionsDialogClick());
findViewById(R.id.folderTypeContainer).setOnClickListener(v -> showFolderTypeDialog());
findViewById(R.id.pullOrderContainer).setOnClickListener(v -> showPullOrderDialog());
@ -241,6 +260,20 @@ public class FolderActivity extends SyncthingActivity
startActivityForResult(intent, CHOOSE_FOLDER_REQUEST);
}
/**
* Invoked after user clicked on the {@link mCustomSyncConditionsDialog} label.
*/
@SuppressLint("InlinedAPI")
private void onCustomSyncConditionsDialogClick() {
startActivityForResult(
SyncConditionsActivity.createIntent(
this, Constants.PREF_OBJECT_PREFIX_FOLDER + mFolder.id, mFolder.label
),
0
);
return;
}
private void showFolderTypeDialog() {
if (TextUtils.isEmpty(mFolder.path)) {
Toast.makeText(this, R.string.folder_path_required, Toast.LENGTH_LONG)
@ -407,6 +440,7 @@ public class FolderActivity extends SyncthingActivity
mIdView.removeTextChangedListener(mTextWatcher);
mFolderFileWatcher.setOnCheckedChangeListener(null);
mFolderPaused.setOnCheckedChangeListener(null);
mCustomSyncConditionsSwitch.setOnCheckedChangeListener(null);
// Update views
mLabelView.setText(mFolder.label);
@ -416,8 +450,23 @@ public class FolderActivity extends SyncthingActivity
updateVersioningDescription();
mFolderFileWatcher.setChecked(mFolder.fsWatcherEnabled);
mFolderPaused.setChecked(mFolder.paused);
List<Device> devicesList = getApi().getDevices(false);
findViewById(R.id.editIgnoresContainer).setVisibility(mIsCreateMode ? View.GONE : View.VISIBLE);
// Update views - custom sync conditions.
mCustomSyncConditionsSwitch.setChecked(false);
if (mIsCreateMode) {
findViewById(R.id.customSyncConditionsContainer).setVisibility(View.GONE);
} else {
mCustomSyncConditionsSwitch.setChecked(mPreferences.getBoolean(
Constants.DYN_PREF_OBJECT_CUSTOM_SYNC_CONDITIONS(Constants.PREF_OBJECT_PREFIX_FOLDER + mFolder.id), false
));
}
mCustomSyncConditionsSwitch.setEnabled(!mIsCreateMode);
mCustomSyncConditionsDescription.setEnabled(mCustomSyncConditionsSwitch.isChecked());
mCustomSyncConditionsDialog.setEnabled(mCustomSyncConditionsSwitch.isChecked());
// Populate devicesList.
List<Device> devicesList = getApi().getDevices(false);
mDevicesContainer.removeAllViews();
if (devicesList.isEmpty()) {
addEmptyDeviceListView();
@ -432,6 +481,7 @@ public class FolderActivity extends SyncthingActivity
mIdView.addTextChangedListener(mTextWatcher);
mFolderFileWatcher.setOnCheckedChangeListener(mCheckedListener);
mFolderPaused.setOnCheckedChangeListener(mCheckedListener);
mCustomSyncConditionsSwitch.setOnCheckedChangeListener(mCheckedListener);
}
@Override
@ -652,25 +702,38 @@ public class FolderActivity extends SyncthingActivity
}
private void updateFolder() {
if (!mIsCreateMode) {
RestApi restApi = getApi();
/**
* RestApi is guaranteed not to be null as {@link onServiceStateChange}
* immediately finishes this activity if SyncthingService shuts down.
*/
/*
if (restApi == null) {
Log.e(TAG, "updateFolder: restApi == null");
return;
}
*/
// Update ignore list.
String[] ignore = mEditIgnoreListContent.getText().toString().split("\n");
restApi.postFolderIgnoreList(mFolder.id, ignore);
// Update model and send the config to REST endpoint.
restApi.updateFolder(mFolder);
if (mIsCreateMode) {
// If we are about to create this folder, we cannot update via restApi.
return;
}
// Save folder specific preferences.
Log.v(TAG, "updateFolder: mFolder.id = \'" + mFolder.id + "\'");
SharedPreferences.Editor editor = mPreferences.edit();
editor.putBoolean(
Constants.DYN_PREF_OBJECT_CUSTOM_SYNC_CONDITIONS(Constants.PREF_OBJECT_PREFIX_FOLDER + mFolder.id),
mCustomSyncConditionsSwitch.isChecked()
);
editor.apply();
// Update folder via restApi.
RestApi restApi = getApi();
/**
* RestApi is guaranteed not to be null as {@link onServiceStateChange}
* immediately finishes this activity if SyncthingService shuts down.
*/
/*
if (restApi == null) {
Log.e(TAG, "updateFolder: restApi == null");
return;
}
*/
// Update ignore list.
String[] ignore = mEditIgnoreListContent.getText().toString().split("\n");
restApi.postFolderIgnoreList(mFolder.id, ignore);
// Update model and send the config to REST endpoint.
restApi.updateFolder(mFolder);
}
@Override

View file

@ -132,7 +132,7 @@ public class SettingsActivity extends SyncthingActivity {
private Preference mSyncthingVersion;
private SyncthingService mSyncthingService;
private RestApi mApi;
private RestApi mRestApi;
private Options mOptions;
private Config.Gui mGui;
@ -312,21 +312,21 @@ public class SettingsActivity extends SyncthingActivity {
@Override
public void onServiceStateChange(SyncthingService.State currentState) {
mApi = mSyncthingService.getApi();
boolean isSyncthingRunning = (mApi != null) &&
mApi.isConfigLoaded() &&
mRestApi = mSyncthingService.getApi();
boolean isSyncthingRunning = (mRestApi != null) &&
mRestApi.isConfigLoaded() &&
(currentState == SyncthingService.State.ACTIVE);
mCategorySyncthingOptions.setEnabled(isSyncthingRunning);
if (!isSyncthingRunning)
return;
mSyncthingVersion.setSummary(mApi.getVersion());
mOptions = mApi.getOptions();
mGui = mApi.getGui();
mSyncthingVersion.setSummary(mRestApi.getVersion());
mOptions = mRestApi.getOptions();
mGui = mRestApi.getGui();
Joiner joiner = Joiner.on(", ");
mDeviceName.setText(mApi.getLocalDevice().name);
mDeviceName.setText(mRestApi.getLocalDevice().name);
mListenAddresses.setText(joiner.join(mOptions.listenAddresses));
mMaxRecvKbps.setText(Integer.toString(mOptions.maxRecvKbps));
mMaxSendKbps.setText(Integer.toString(mOptions.maxSendKbps));
@ -337,7 +337,7 @@ public class SettingsActivity extends SyncthingActivity {
mGlobalAnnounceServers.setText(joiner.join(mOptions.globalAnnounceServers));
mAddress.setText(mGui.address);
mRestartOnWakeup.setChecked(mOptions.restartOnWakeup);
mApi.getSystemStatus(systemStatus ->
mRestApi.getSystemStatus(systemStatus ->
mUrAccepted.setChecked(mOptions.isUsageReportingAccepted(systemStatus.urVersionMax)));
}
@ -384,9 +384,9 @@ public class SettingsActivity extends SyncthingActivity {
Splitter splitter = Splitter.on(",").trimResults().omitEmptyStrings();
switch (preference.getKey()) {
case "deviceName":
Device localDevice = mApi.getLocalDevice();
Device localDevice = mRestApi.getLocalDevice();
localDevice.name = (String) o;
mApi.editDevice(localDevice);
mRestApi.editDevice(localDevice);
break;
case "listenAddresses":
mOptions.listenAddresses = Iterables.toArray(splitter.split((String) o), String.class);
@ -435,7 +435,7 @@ public class SettingsActivity extends SyncthingActivity {
mOptions.restartOnWakeup = (boolean) o;
break;
case "urAccepted":
mApi.getSystemStatus(systemStatus -> {
mRestApi.getSystemStatus(systemStatus -> {
mOptions.urAccepted = ((boolean) o)
? systemStatus.urVersionMax
: Options.USAGE_REPORTING_DENIED;
@ -444,7 +444,7 @@ public class SettingsActivity extends SyncthingActivity {
default: throw new InvalidParameterException();
}
mApi.editSettings(mGui, mOptions);
mRestApi.editSettings(mGui, mOptions);
mPendingConfig = true;
return true;
}
@ -454,9 +454,9 @@ public class SettingsActivity extends SyncthingActivity {
if (mSyncthingService != null) {
mNotificationHandler.updatePersistentNotification(mSyncthingService);
if (mPendingConfig) {
if (mApi != null &&
if (mRestApi != null &&
mSyncthingService.getCurrentState() != SyncthingService.State.DISABLED) {
mApi.saveConfigAndRestart();
mRestApi.saveConfigAndRestart();
mPendingConfig = false;
}
}
@ -556,13 +556,13 @@ public class SettingsActivity extends SyncthingActivity {
new AlertDialog.Builder(getActivity())
.setMessage(R.string.undo_ignored_devices_folders_question)
.setPositiveButton(android.R.string.yes, (dialog, which) -> {
if (mApi == null) {
if (mRestApi == null) {
Toast.makeText(getActivity(),
getString(R.string.generic_error) + getString(R.string.syncthing_disabled_title),
Toast.LENGTH_SHORT).show();
return;
}
mApi.undoIgnoredDevicesAndFolders();
mRestApi.undoIgnoredDevicesAndFolders();
mPendingConfig = true;
Toast.makeText(getActivity(),
getString(R.string.undo_ignored_devices_folders_done),

View file

@ -0,0 +1,295 @@
package com.nutomic.syncthingandroid.activities;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.IBinder;
import android.support.v7.widget.SwitchCompat;
import android.util.Log;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.google.common.collect.Sets;
import com.nutomic.syncthingandroid.R;
import com.nutomic.syncthingandroid.SyncthingApp;
import com.nutomic.syncthingandroid.service.Constants;
import com.nutomic.syncthingandroid.service.SyncthingService;
import com.nutomic.syncthingandroid.service.SyncthingServiceBinder;
import com.nutomic.syncthingandroid.util.Util;
import java.util.HashSet;
import java.util.Set;
import javax.inject.Inject;
import static android.support.v4.view.MarginLayoutParamsCompat.setMarginEnd;
import static android.support.v4.view.MarginLayoutParamsCompat.setMarginStart;
import static android.util.TypedValue.COMPLEX_UNIT_DIP;
import static android.view.Gravity.CENTER_VERTICAL;
import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
/**
* Activity that allows selecting a directory in the local file system.
*/
public class SyncConditionsActivity extends SyncthingActivity
implements SyncthingService.OnServiceStateChangeListener {
private static final String TAG = "SyncConditionsActivity";
private static final String EXTRA_OBJECT_PREFIX_AND_ID =
"com.nutomic.syncthingandroid.activities.SyncConditionsActivity.OBJECT_PREFIX_AND_ID";
private static final String EXTRA_OBJECT_READABLE_NAME =
"com.nutomic.syncthingandroid.activities.SyncConditionsActivity.OBJECT_READABLE_NAME";
// UI elements
private SwitchCompat mSyncOnWifi;
private SwitchCompat mSyncOnWhitelistedWifi;
private ViewGroup mWifiSsidContainer;
private SwitchCompat mSyncOnMeteredWifi;
private SwitchCompat mSyncOnMobileData;
/**
* Shared preferences names for custom per-folder settings.
*/
private String mObjectPrefixAndId;
private String mPrefSyncOnWifi;
private String mPrefSyncOnWhitelistedWifi;
private String mPrefSelectedWhitelistSsid;
private String mPrefSyncOnMeteredWifi;
private String mPrefSyncOnMobileData;
// UI information and state.
private String mObjectReadableName;
private boolean mUnsavedChanges = false;
@Inject
SharedPreferences mPreferences;
public static Intent createIntent(Context context, String objectPrefixAndId, String objectReadableName) {
Intent intent = new Intent(context, SyncConditionsActivity.class);
intent.putExtra(EXTRA_OBJECT_PREFIX_AND_ID, objectPrefixAndId);
intent.putExtra(EXTRA_OBJECT_READABLE_NAME, objectReadableName);
return intent;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((SyncthingApp) getApplication()).component().inject(this);
Intent intent = getIntent();
if (!intent.hasExtra(EXTRA_OBJECT_PREFIX_AND_ID) ||
!intent.hasExtra(EXTRA_OBJECT_READABLE_NAME)) {
Log.e(TAG, "onCreate extra missing");
return;
}
mObjectReadableName = intent.getStringExtra(EXTRA_OBJECT_READABLE_NAME);
// Display content and get views.
setContentView(R.layout.activity_sync_conditions);
mSyncOnWifi = findViewById(R.id.sync_on_wifi_title);
mSyncOnWhitelistedWifi = findViewById(R.id.sync_on_whitelisted_wifi_title);
mWifiSsidContainer = findViewById(R.id.wifiSsidContainer);
mSyncOnMeteredWifi = findViewById(R.id.sync_on_metered_wifi_title);
mSyncOnMobileData = findViewById(R.id.sync_on_mobile_data_title);
// Generate shared preferences names.
mObjectPrefixAndId = intent.getStringExtra(EXTRA_OBJECT_PREFIX_AND_ID);
Log.v(TAG, "Prefix is \'" + mObjectPrefixAndId + "\' (" + mObjectReadableName + ")");
mPrefSyncOnWifi = Constants.DYN_PREF_OBJECT_SYNC_ON_WIFI(mObjectPrefixAndId);
mPrefSyncOnWhitelistedWifi = Constants.DYN_PREF_OBJECT_SYNC_ON_WHITELISTED_WIFI(mObjectPrefixAndId);
mPrefSelectedWhitelistSsid = Constants.DYN_PREF_OBJECT_SELECTED_WHITELIST_SSID(mObjectPrefixAndId);
mPrefSyncOnMeteredWifi = Constants.DYN_PREF_OBJECT_SYNC_ON_METERED_WIFI(mObjectPrefixAndId);
mPrefSyncOnMobileData = Constants.DYN_PREF_OBJECT_SYNC_ON_MOBILE_DATA(mObjectPrefixAndId);
/**
* Load global run conditions.
*/
Boolean globalRunOnWifiEnabled = mPreferences.getBoolean(Constants.PREF_RUN_ON_WIFI, false);
Boolean globalWhitelistEnabled = !mPreferences.getStringSet(Constants.PREF_WIFI_SSID_WHITELIST, new HashSet<>())
.isEmpty();
Set<String> globalWhitelistedSsid = mPreferences.getStringSet(Constants.PREF_WIFI_SSID_WHITELIST, new HashSet<>());
Boolean globalRunOnMeteredWifiEnabled = mPreferences.getBoolean(Constants.PREF_RUN_ON_METERED_WIFI, false);
Boolean globalRunOnMobileDataEnabled = mPreferences.getBoolean(Constants.PREF_RUN_ON_MOBILE_DATA, false);
/**
* Load custom folder preferences. If unset, use global setting as default.
*/
mSyncOnWifi.setChecked(globalRunOnWifiEnabled && mPreferences.getBoolean(mPrefSyncOnWifi, globalRunOnWifiEnabled));
mSyncOnWifi.setEnabled(globalRunOnWifiEnabled);
mSyncOnWifi.setOnCheckedChangeListener(mCheckedListener);
mSyncOnWhitelistedWifi.setChecked(globalWhitelistEnabled && mPreferences.getBoolean(mPrefSyncOnWhitelistedWifi, globalWhitelistEnabled));
mSyncOnWhitelistedWifi.setEnabled(globalWhitelistEnabled && mSyncOnWifi.isChecked());
mSyncOnWhitelistedWifi.setOnCheckedChangeListener(mCheckedListener);
mSyncOnMeteredWifi.setChecked(globalRunOnMeteredWifiEnabled && mPreferences.getBoolean(mPrefSyncOnMeteredWifi, globalRunOnMeteredWifiEnabled));
mSyncOnMeteredWifi.setEnabled(globalRunOnMeteredWifiEnabled);
mSyncOnMeteredWifi.setOnCheckedChangeListener(mCheckedListener);
mSyncOnMobileData.setChecked(globalRunOnMobileDataEnabled && mPreferences.getBoolean(mPrefSyncOnMobileData, globalRunOnMobileDataEnabled));
mSyncOnMobileData.setEnabled(globalRunOnMobileDataEnabled);
mSyncOnMobileData.setOnCheckedChangeListener(mCheckedListener);
// Read selected WiFi Ssid whitelist items.
Set<String> selectedWhitelistedSsid = mPreferences.getStringSet(mPrefSelectedWhitelistSsid, new HashSet<>());
// Removes any network that is no longer part of the global WiFi Ssid whitelist.
selectedWhitelistedSsid.retainAll(globalWhitelistedSsid);
// Populate WiFi Ssid whitelist.
mWifiSsidContainer.removeAllViews();
// from JavaDoc: Note that you must not modify the set instance returned by this call.
// therefore required to make a defensive copy of the elements
globalWhitelistedSsid = new HashSet<>(globalWhitelistedSsid);
if (!globalWhitelistEnabled) {
// Add empty WiFi Ssid ListView.
int height = (int) TypedValue.applyDimension(COMPLEX_UNIT_DIP, 48, getResources().getDisplayMetrics());
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(WRAP_CONTENT, height);
int dividerInset = getResources().getDimensionPixelOffset(R.dimen.material_divider_inset);
int contentInset = getResources().getDimensionPixelOffset(R.dimen.abc_action_bar_content_inset_material);
setMarginStart(params, dividerInset);
setMarginEnd(params, contentInset);
TextView emptyView = new TextView(mWifiSsidContainer.getContext());
emptyView.setGravity(CENTER_VERTICAL);
emptyView.setText(R.string.wifi_ssid_whitelist_empty);
mWifiSsidContainer.addView(emptyView, params);
mWifiSsidContainer.setEnabled(false);
} else {
for (String wifiSsid : globalWhitelistedSsid) {
// Strip quotes and add WiFi Ssid to view.
LayoutInflater layoutInflater = getLayoutInflater();
layoutInflater.inflate(R.layout.item_wifi_ssid_form, mWifiSsidContainer);
SwitchCompat wifiSsidView = (SwitchCompat) mWifiSsidContainer.getChildAt(mWifiSsidContainer.getChildCount()-1);
wifiSsidView.setOnCheckedChangeListener(null);
wifiSsidView.setChecked(selectedWhitelistedSsid.contains(wifiSsid));
wifiSsidView.setEnabled(mSyncOnWhitelistedWifi.isChecked());
wifiSsidView.setText(wifiSsid.replaceFirst("^\"", "").replaceFirst("\"$", ""));
wifiSsidView.setTag(wifiSsid);
wifiSsidView.setOnCheckedChangeListener(mCheckedListener);
}
}
}
private final CompoundButton.OnCheckedChangeListener mCheckedListener =
new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton view, boolean isChecked) {
switch (view.getId()) {
case R.id.sync_on_wifi_title:
mSyncOnWhitelistedWifi.setEnabled(isChecked);
// Fall-through to dependent options.
case R.id.sync_on_whitelisted_wifi_title:
// Enable or disable WiFi Ssid switches according to parent switch.
for (int i = 0; i < mWifiSsidContainer.getChildCount(); i++) {
mWifiSsidContainer.getChildAt(i).setEnabled(isChecked);
}
break;
default:
break;
}
mUnsavedChanges = true;
}
};
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
super.onServiceConnected(componentName, iBinder);
SyncthingServiceBinder syncthingServiceBinder = (SyncthingServiceBinder) iBinder;
syncthingServiceBinder.getService().registerOnServiceStateChangeListener(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
SyncthingService syncthingService = getService();
if (syncthingService != null) {
syncthingService.unregisterOnServiceStateChangeListener(this::onServiceStateChange);
}
}
@Override
public void onPause() {
super.onPause();
if (mUnsavedChanges) {
Log.v(TAG, "onPause: mUnsavedChanges == true. Saving prefs ...");
/**
* Save custom folder preferences.
*/
SharedPreferences.Editor editor = mPreferences.edit();
editor.putBoolean(mPrefSyncOnWifi, mSyncOnWifi.isChecked());
editor.putBoolean(mPrefSyncOnWhitelistedWifi, mSyncOnWhitelistedWifi.isChecked());
editor.putBoolean(mPrefSyncOnMeteredWifi, mSyncOnMeteredWifi.isChecked());
editor.putBoolean(mPrefSyncOnMobileData, mSyncOnMobileData.isChecked());
// Save Selected WiFi Ssid's to mPrefSelectedWhitelistSsid.
Set<String> selectedWhitelistedSsid = new HashSet<>();
if (mSyncOnWhitelistedWifi.isChecked()) {
for (int i = 0; i < mWifiSsidContainer.getChildCount(); i++) {
View view = mWifiSsidContainer.getChildAt(i);
if (view instanceof SwitchCompat) {
SwitchCompat wifiSsidSwitch = (SwitchCompat) view;
if (wifiSsidSwitch.isChecked()) {
selectedWhitelistedSsid.add((String) wifiSsidSwitch.getTag());
// Log.v(TAG, "onPause: +Ssid [" + (String) wifiSsidSwitch.getTag() + "]");
}
}
}
}
editor.putStringSet(mPrefSelectedWhitelistSsid, selectedWhitelistedSsid);
editor.apply();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.sync_conditions_settings, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.done).setVisible(true);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
case R.id.done:
onBackPressed();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
/**
* Cancel without saving changes.
*/
@Override
public void onBackPressed() {
setResult(Activity.RESULT_OK);
finish();
}
@Override
public void onServiceStateChange(SyncthingService.State currentState) {
if (!isFinishing() && currentState != SyncthingService.State.ACTIVE) {
setResult(Activity.RESULT_CANCELED);
finish();
}
}
}

View file

@ -31,6 +31,34 @@ public class Constants {
public static final String PREF_SOCKS_PROXY_ADDRESS = "socks_proxy_address";
public static final String PREF_HTTP_PROXY_ADDRESS = "http_proxy_address";
// Preferences - per Folder and Device Sync Conditions
public static final String PREF_OBJECT_PREFIX_FOLDER = "sc_folder_";
public static final String PREF_OBJECT_PREFIX_DEVICE = "sc_device_";
public static String DYN_PREF_OBJECT_CUSTOM_SYNC_CONDITIONS(String objectPrefixAndId) {
return objectPrefixAndId + "_" + "custom_sync_conditions";
}
public static String DYN_PREF_OBJECT_SYNC_ON_WIFI(String objectPrefixAndId) {
return objectPrefixAndId + "_" + PREF_RUN_ON_WIFI;
}
public static String DYN_PREF_OBJECT_SYNC_ON_WHITELISTED_WIFI(String objectPrefixAndId) {
return objectPrefixAndId + "_" + "use_wifi_whitelist";
}
public static String DYN_PREF_OBJECT_SELECTED_WHITELIST_SSID(String objectPrefixAndId) {
return objectPrefixAndId + "_" + PREF_WIFI_SSID_WHITELIST;
}
public static String DYN_PREF_OBJECT_SYNC_ON_METERED_WIFI(String objectPrefixAndId) {
return objectPrefixAndId + "_" + PREF_RUN_ON_METERED_WIFI;
}
public static String DYN_PREF_OBJECT_SYNC_ON_MOBILE_DATA(String objectPrefixAndId) {
return objectPrefixAndId + "_" + PREF_RUN_ON_MOBILE_DATA;
}
/**
* Cached information which is not available on SettingsActivity.
*/

View file

@ -53,14 +53,14 @@ public class EventProcessor implements Runnable, RestApi.OnReceiveEventListener
private volatile boolean mShutdown = true;
private final Context mContext;
private final RestApi mApi;
private final RestApi mRestApi;
@Inject SharedPreferences mPreferences;
@Inject NotificationHandler mNotificationHandler;
public EventProcessor(Context context, RestApi api) {
public EventProcessor(Context context, RestApi restApi) {
((SyncthingApp) context.getApplicationContext()).component().inject(this);
mContext = context;
mApi = api;
mRestApi = restApi;
}
@Override
@ -72,7 +72,7 @@ public class EventProcessor implements Runnable, RestApi.OnReceiveEventListener
// First check if the event number ran backwards.
// If that's the case we've to start at zero because syncthing was restarted.
mApi.getEvents(0, 1, new RestApi.OnReceiveEventListener() {
mRestApi.getEvents(0, 1, new RestApi.OnReceiveEventListener() {
@Override
public void onEvent(Event event) {
}
@ -83,7 +83,7 @@ public class EventProcessor implements Runnable, RestApi.OnReceiveEventListener
Log.d(TAG, "Reading events starting with id " + mLastEventId);
mApi.getEvents(mLastEventId, 0, EventProcessor.this);
mRestApi.getEvents(mLastEventId, 0, EventProcessor.this);
}
});
}
@ -95,9 +95,9 @@ public class EventProcessor implements Runnable, RestApi.OnReceiveEventListener
public void onEvent(Event event) {
switch (event.type) {
case "ConfigSaved":
if (mApi != null) {
if (mRestApi != null) {
Log.v(TAG, "Forwarding ConfigSaved event to RestApi to get the updated config.");
mApi.reloadConfig();
mRestApi.reloadConfig();
}
break;
case "DeviceRejected":
@ -109,7 +109,7 @@ public class EventProcessor implements Runnable, RestApi.OnReceiveEventListener
case "FolderCompletion":
CompletionInfo completionInfo = new CompletionInfo();
completionInfo.completion = (Double) event.data.get("completion");
mApi.setCompletionInfo(
mRestApi.setCompletionInfo(
(String) event.data.get("device"), // deviceId
(String) event.data.get("folder"), // folderId
completionInfo
@ -125,7 +125,7 @@ public class EventProcessor implements Runnable, RestApi.OnReceiveEventListener
case "ItemFinished":
String folder = (String) event.data.get("folder");
String folderPath = null;
for (Folder f : mApi.getFolders()) {
for (Folder f : mRestApi.getFolders()) {
if (f.id.equals(folder)) {
folderPath = f.path;
}
@ -249,7 +249,7 @@ public class EventProcessor implements Runnable, RestApi.OnReceiveEventListener
// Find the deviceName corresponding to the deviceId
String deviceName = null;
for (Device d : mApi.getDevices(false)) {
for (Device d : mRestApi.getDevices(false)) {
if (d.deviceID.equals(deviceId)) {
deviceName = d.getDisplayName();
break;
@ -260,7 +260,7 @@ public class EventProcessor implements Runnable, RestApi.OnReceiveEventListener
int notificationId = mNotificationHandler.getNotificationIdFromText(title);
// Prepare "accept" action.
boolean isNewFolder = Stream.of(mApi.getFolders())
boolean isNewFolder = Stream.of(mRestApi.getFolders())
.noneMatch(f -> f.id.equals(folderId));
Intent intentAccept = new Intent(mContext, FolderActivity.class)
.putExtra(FolderActivity.EXTRA_NOTIFICATION_ID, notificationId)

View file

@ -3,6 +3,7 @@ package com.nutomic.syncthingandroid.service;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.util.Log;
@ -773,4 +774,38 @@ public class RestApi {
mConfig.options = options;
}
}
/**
* Event triggered by {@link RunConditionMonitor} routed here through {@link SyncthingService}.
*/
public void onSyncPreconditionChanged(RunConditionMonitor runConditionMonitor) {
Log.v(TAG, "onSyncPreconditionChanged: Event fired.");
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);
synchronized (mConfigLock) {
if (mConfig == null || mConfig.folders == null) {
Log.d(TAG, "onSyncPreconditionChanged: mConfig.folders is not ready yet.");
return;
}
Boolean configChanged = false;
for (Folder folder : mConfig.folders) {
Boolean folderCustomSyncConditionsEnabled = sharedPreferences.getBoolean(
Constants.DYN_PREF_OBJECT_CUSTOM_SYNC_CONDITIONS(Constants.PREF_OBJECT_PREFIX_FOLDER + folder.id), false
);
if (folderCustomSyncConditionsEnabled) {
Boolean syncConditionsMet = runConditionMonitor.checkObjectSyncConditions(
Constants.PREF_OBJECT_PREFIX_FOLDER + folder.id
);
Log.v(TAG, "onSyncPreconditionChanged: syncFolder(" + folder.id + ")=" + (syncConditionsMet ? "1" : "0"));
if (folder.paused != !syncConditionsMet) {
folder.paused = !syncConditionsMet;
configChanged = true;
}
}
}
if (configChanged) {
Log.v(TAG, "onSyncPreconditionChanged: Sending changed config ...");
sendConfig();
}
}
}
}

View file

@ -53,30 +53,60 @@ public class RunConditionMonitor {
}
};
public interface OnRunConditionChangedListener {
void onRunConditionChanged(boolean shouldRun);
public interface OnShouldRunChangedListener {
void onShouldRunDecisionChanged(boolean shouldRun);
}
public interface OnSyncPreconditionChangedListener {
void onSyncPreconditionChanged();
}
private class SyncConditionResult {
public Boolean conditionMet = false;
public String explanation = "";
SyncConditionResult(Boolean conditionMet) {
this.conditionMet = conditionMet;
}
SyncConditionResult(Boolean conditionMet, String explanation) {
this.conditionMet = conditionMet;
this.explanation = explanation;
}
}
private final Context mContext;
@Inject SharedPreferences mPreferences;
private ReceiverManager mReceiverManager;
private Resources res;
private String mRunDecisionExplanation = "";
@Inject
SharedPreferences mPreferences;
/**
* Sending callback notifications through {@link OnDeviceStateChangedListener} is enabled if not null.
* Sending callback notifications through {@link #OnShouldRunChangedListener} is enabled if not null.
*/
private @Nullable OnRunConditionChangedListener mOnRunConditionChangedListener = null;
private @Nullable OnShouldRunChangedListener mOnShouldRunChangedListener = null;
/**
* Sending callback notifications through {@link #OnSyncPreconditionChangedListener} is enabled if not null.
*/
private @Nullable OnSyncPreconditionChangedListener mOnSyncPreconditionChangedListener = null;
/**
* Stores the result of the last call to {@link decideShouldRun}.
*/
private boolean lastDeterminedShouldRun = false;
public RunConditionMonitor(Context context, OnRunConditionChangedListener listener) {
public RunConditionMonitor(Context context,
OnShouldRunChangedListener onShouldRunChangedListener,
OnSyncPreconditionChangedListener onSyncPreconditionChangedListener) {
Log.v(TAG, "Created new instance");
((SyncthingApp) context.getApplicationContext()).component().inject(this);
mContext = context;
mOnRunConditionChangedListener = listener;
res = mContext.getResources();
mOnShouldRunChangedListener = onShouldRunChangedListener;
mOnSyncPreconditionChangedListener = onSyncPreconditionChangedListener;
/**
* Register broadcast receivers.
@ -142,40 +172,122 @@ public class RunConditionMonitor {
}
}
/**
* Event handler that is fired after preconditions changed.
* We then need to decide if syncthing should run.
*/
public void updateShouldRunDecision() {
// Check if the current conditions changed the result of decideShouldRun()
// compared to the last determined result.
boolean newShouldRun = decideShouldRun();
if (newShouldRun != lastDeterminedShouldRun) {
if (mOnRunConditionChangedListener != null) {
mOnRunConditionChangedListener.onRunConditionChanged(newShouldRun);
if (mOnShouldRunChangedListener != null) {
mOnShouldRunChangedListener.onShouldRunDecisionChanged(newShouldRun);
}
lastDeterminedShouldRun = newShouldRun;
}
// Notify about changed preconditions.
if (mOnSyncPreconditionChangedListener != null) {
mOnSyncPreconditionChangedListener.onSyncPreconditionChanged();
}
}
public String getRunDecisionExplanation() {
return mRunDecisionExplanation;
}
/**
* Each sync condition has its own evaluator function which
* determines if the condition is met.
*/
/**
* Constants.PREF_RUN_ON_WIFI
*/
private SyncConditionResult checkConditionSyncOnWifi(String prefNameSyncOnWifi) {
boolean prefSyncOnWifi = mPreferences.getBoolean(prefNameSyncOnWifi, true);
if (!prefSyncOnWifi) {
return new SyncConditionResult(false, "\n" + res.getString(R.string.reason_wifi_disallowed));
}
if (isWifiOrEthernetConnection()) {
return new SyncConditionResult(true, "\n" + res.getString(R.string.reason_on_wifi));
}
/**
* if (prefRunOnWifi && !isWifiOrEthernetConnection()) { return false; }
* This is intentionally not returning "false" as the flight mode workaround
* relevant for some phone models needs to be done by the code below.
* ConnectivityManager.getActiveNetworkInfo() returns "null" on those phones which
* results in assuming !isWifiOrEthernetConnection even if the phone is connected
* to wifi during flight mode, see {@link isWifiOrEthernetConnection}.
*/
return new SyncConditionResult(false, "\n" + res.getString(R.string.reason_not_on_wifi));
}
/**
* Constants.PREF_WIFI_SSID_WHITELIST
*/
private SyncConditionResult checkConditionSyncOnWhitelistedWifi(String prefNameSyncOnWhitelistedWifi) {
Set<String> whitelistedWifiSsids = mPreferences.getStringSet(prefNameSyncOnWhitelistedWifi, new HashSet<>());
boolean prefWifiWhitelistEnabled = !whitelistedWifiSsids.isEmpty();
try {
if (wifiWhitelistConditionMet(prefWifiWhitelistEnabled, whitelistedWifiSsids)) {
return new SyncConditionResult(true, "\n" + res.getString(R.string.reason_on_whitelisted_wifi));
}
return new SyncConditionResult(false, "\n" + res.getString(R.string.reason_not_on_whitelisted_wifi));
} catch (LocationUnavailableException e) {
return new SyncConditionResult(false, "\n" + res.getString(R.string.reason_location_unavailable));
}
}
/**
* Constants.PREF_RUN_ON_METERED_WIFI
*/
private SyncConditionResult checkConditionSyncOnMeteredWifi(String prefNameSyncOnMeteredWifi) {
boolean prefSyncOnMeteredWifi = mPreferences.getBoolean(prefNameSyncOnMeteredWifi, false);
if (prefSyncOnMeteredWifi) {
// Condition is always met as we allow both types of wifi - metered and non-metered.
return new SyncConditionResult(true, "\n" + res.getString(R.string.reason_on_metered_nonmetered_wifi));
}
// Check if we are on a non-metered wifi.
if (!isMeteredNetworkConnection()) {
return new SyncConditionResult(true, "\n" + res.getString(R.string.reason_on_nonmetered_wifi));
}
// We disallowed non-metered wifi and are connected to metered wifi.
return new SyncConditionResult(false, "\n" + res.getString(R.string.reason_not_nonmetered_wifi));
}
/**
* Constants.PREF_RUN_ON_MOBILE_DATA
*/
private SyncConditionResult checkConditionSyncOnMobileData(String prefNameSyncOnMobileData) {
boolean prefSyncOnMobileData = mPreferences.getBoolean(prefNameSyncOnMobileData, false);
if (!prefSyncOnMobileData) {
return new SyncConditionResult(false, res.getString(R.string.reason_mobile_data_disallowed));
}
if (isMobileDataConnection()) {
return new SyncConditionResult(true, res.getString(R.string.reason_on_mobile_data));
}
return new SyncConditionResult(false, res.getString(R.string.reason_not_on_mobile_data));
}
/**
* Determines if Syncthing should currently run.
* Updates mRunDecisionExplanation.
*/
private boolean decideShouldRun() {
Resources res = mContext.getResources();
mRunDecisionExplanation = "";
// Get run conditions preferences.
boolean prefRunOnMobileData= mPreferences.getBoolean(Constants.PREF_RUN_ON_MOBILE_DATA, false);
boolean prefRunOnWifi= mPreferences.getBoolean(Constants.PREF_RUN_ON_WIFI, true);
boolean prefRunOnMeteredWifi= mPreferences.getBoolean(Constants.PREF_RUN_ON_METERED_WIFI, false);
Set<String> whitelistedWifiSsids = mPreferences.getStringSet(Constants.PREF_WIFI_SSID_WHITELIST, new HashSet<>());
boolean prefWifiWhitelistEnabled = !whitelistedWifiSsids.isEmpty();
boolean prefRunInFlightMode = mPreferences.getBoolean(Constants.PREF_RUN_IN_FLIGHT_MODE, false);
// Get sync condition preferences.
String prefPowerSource = mPreferences.getString(Constants.PREF_POWER_SOURCE, POWER_SOURCE_CHARGER_BATTERY);
boolean prefRespectPowerSaving = mPreferences.getBoolean(Constants.PREF_RESPECT_BATTERY_SAVING, true);
boolean prefRespectMasterSync = mPreferences.getBoolean(Constants.PREF_RESPECT_MASTER_SYNC, false);
boolean prefRunInFlightMode = mPreferences.getBoolean(Constants.PREF_RUN_IN_FLIGHT_MODE, false);
// PREF_POWER_SOURCE
switch (prefPowerSource) {
@ -214,58 +326,35 @@ public class RunConditionMonitor {
return false;
}
// Run on mobile data.
if (prefRunOnMobileData) {
if (isMobileDataConnection()) {
Log.v(TAG, "decideShouldRun: prefRunOnMobileData && isMobileDataConnection");
mRunDecisionExplanation = res.getString(R.string.reason_on_mobile_data);
return true;
}
mRunDecisionExplanation = res.getString(R.string.reason_not_on_mobile_data);
// Run on mobile data?
SyncConditionResult scr = checkConditionSyncOnMobileData(Constants.PREF_RUN_ON_MOBILE_DATA);
mRunDecisionExplanation += scr.explanation;
if (scr.conditionMet) {
// Mobile data is connected.
Log.v(TAG, "decideShouldRun: checkConditionSyncOnMobileData");
return true;
}
// Run on wifi.
if (prefRunOnWifi) {
if (isWifiOrEthernetConnection()) {
try {
mRunDecisionExplanation += "\n" + res.getString(R.string.reason_on_wifi);
if (prefRunOnMeteredWifi) {
mRunDecisionExplanation += "\n" + res.getString(R.string.reason_on_metered_nonmetered_wifi);
// We are on non-metered or metered wifi. Check if wifi whitelist run condition is met.
if (wifiWhitelistConditionMet(prefWifiWhitelistEnabled, whitelistedWifiSsids)) {
Log.v(TAG, "decideShouldRun: prefRunOnWifi && isWifiOrEthernetConnection && prefRunOnMeteredWifi && wifiWhitelistConditionMet");
mRunDecisionExplanation += "\n" + res.getString(R.string.reason_on_whitelisted_wifi);
return true;
}
mRunDecisionExplanation += "\n" + res.getString(R.string.reason_not_on_whitelisted_wifi);
} else {
// Check if we are on a non-metered wifi.
if (!isMeteredNetworkConnection()) {
mRunDecisionExplanation += "\n" + res.getString(R.string.reason_on_nonmetered_wifi);
// Check if wifi whitelist run condition is met.
if (wifiWhitelistConditionMet(prefWifiWhitelistEnabled, whitelistedWifiSsids)) {
Log.v(TAG, "decideShouldRun: prefRunOnWifi && isWifiOrEthernetConnection && !prefRunOnMeteredWifi && !isMeteredNetworkConnection && wifiWhitelistConditionMet");
mRunDecisionExplanation += "\n" + res.getString(R.string.reason_on_whitelisted_wifi);
return true;
}
mRunDecisionExplanation += "\n" + res.getString(R.string.reason_not_on_whitelisted_wifi);
} else {
mRunDecisionExplanation += "\n" + res.getString(R.string.reason_not_nonmetered_wifi);
}
}
} catch (LocationUnavailableException e) {
mRunDecisionExplanation += "\n" + res.getString(R.string.reason_location_unavailable);
// Run on WiFi?
scr = checkConditionSyncOnWifi(Constants.PREF_RUN_ON_WIFI);
mRunDecisionExplanation += scr.explanation;
if (scr.conditionMet) {
// Wifi is connected.
Log.v(TAG, "decideShouldRun: checkConditionSyncOnWifi");
scr = checkConditionSyncOnMeteredWifi(Constants.PREF_RUN_ON_METERED_WIFI);
mRunDecisionExplanation += scr.explanation;
if (scr.conditionMet) {
// Wifi type is allowed.
Log.v(TAG, "decideShouldRun: checkConditionSyncOnWifi && checkConditionSyncOnMeteredWifi");
scr = checkConditionSyncOnWhitelistedWifi(Constants.PREF_WIFI_SSID_WHITELIST);
mRunDecisionExplanation += scr.explanation;
if (scr.conditionMet) {
// Wifi is whitelisted.
Log.v(TAG, "decideShouldRun: checkConditionSyncOnWifi && checkConditionSyncOnMeteredWifi && checkConditionSyncOnWhitelistedWifi");
return true;
}
} else {
mRunDecisionExplanation += "\n" + res.getString(R.string.reason_not_on_wifi);
/**
* if (prefRunOnWifi && !isWifiOrEthernetConnection()) { return false; }
* This is intentionally not returning "false" as the flight mode workaround
* relevant for some phone models needs to be done by the code below.
* ConnectivityManager.getActiveNetworkInfo() returns "null" on those phones which
* results in assuming !isWifiOrEthernetConnection even if the phone is connected
* to wifi during flight mode, see {@link isWifiOrEthernetConnection}.
*/
}
}
@ -283,6 +372,40 @@ public class RunConditionMonitor {
return false;
}
/**
* Check if an object's individual sync conditions are met.
*/
public Boolean checkObjectSyncConditions(String objectPrefixAndId) {
// Sync on mobile data?
SyncConditionResult scr = checkConditionSyncOnMobileData(Constants.DYN_PREF_OBJECT_SYNC_ON_MOBILE_DATA(objectPrefixAndId));
if (scr.conditionMet) {
// Mobile data is connected.
Log.v(TAG, "checkObjectSyncConditions: checkConditionSyncOnMobileData");
return true;
}
// Sync on WiFi?
scr = checkConditionSyncOnWifi(Constants.DYN_PREF_OBJECT_SYNC_ON_WIFI(objectPrefixAndId));
if (scr.conditionMet) {
// Wifi is connected.
Log.v(TAG, "checkObjectSyncConditions: checkConditionSyncOnWifi");
scr = checkConditionSyncOnMeteredWifi(Constants.DYN_PREF_OBJECT_SYNC_ON_METERED_WIFI(objectPrefixAndId));
if (scr.conditionMet) {
// Wifi type is allowed.
Log.v(TAG, "checkObjectSyncConditions: checkConditionSyncOnWifi && checkConditionSyncOnMeteredWifi");
scr = checkConditionSyncOnWhitelistedWifi(Constants.DYN_PREF_OBJECT_SELECTED_WHITELIST_SSID(objectPrefixAndId));
if (scr.conditionMet) {
// Wifi is whitelisted.
Log.v(TAG, "checkObjectSyncConditions: checkConditionSyncOnWifi && checkConditionSyncOnMeteredWifi && checkConditionSyncOnWhitelistedWifi");
return true;
}
}
}
return false;
}
/**
* Return whether the wifi whitelist run condition is met.
* Precondition: An active wifi connection has been detected.

View file

@ -166,7 +166,7 @@ public class SyncthingService extends Service {
PollWebGuiAvailableTask mPollWebGuiAvailableTask = null;
private @Nullable
RestApi mApi = null;
RestApi mRestApi = null;
private @Nullable
EventProcessor mEventProcessor = null;
@ -189,7 +189,7 @@ public class SyncthingService extends Service {
private final Object mStateLock = new Object();
/**
* Stores the result of the last should run decision received by OnDeviceStateChangedListener.
* Stores the result of the last should run decision received by OnShouldRunChangedListener.
*/
private boolean mLastDeterminedShouldRun = false;
@ -261,9 +261,12 @@ public class SyncthingService extends Service {
* Instantiate the run condition monitor on first onStartCommand and
* enable callback on run condition change affecting the final decision to
* run/terminate syncthing. After initial run conditions are collected
* the first decision is sent to {@link onUpdatedShouldRunDecision}.
* the first decision is sent to {@link onShouldRunDecisionChanged}.
*/
mRunConditionMonitor = new RunConditionMonitor(SyncthingService.this, this::onUpdatedShouldRunDecision);
mRunConditionMonitor = new RunConditionMonitor(SyncthingService.this,
this::onShouldRunDecisionChanged,
this::onSyncPreconditionChanged
);
}
mNotificationHandler.updatePersistentNotification(this);
@ -290,15 +293,15 @@ public class SyncthingService extends Service {
} else if (ACTION_REFRESH_NETWORK_INFO.equals(intent.getAction())) {
mRunConditionMonitor.updateShouldRunDecision();
} else if (ACTION_IGNORE_DEVICE.equals(intent.getAction()) && mCurrentState == State.ACTIVE) {
// mApi is not null due to State.ACTIVE
mApi.ignoreDevice(intent.getStringExtra(EXTRA_DEVICE_ID));
// mRestApi is not null due to State.ACTIVE
mRestApi.ignoreDevice(intent.getStringExtra(EXTRA_DEVICE_ID));
mNotificationHandler.cancelConsentNotification(intent.getIntExtra(EXTRA_NOTIFICATION_ID, 0));
} else if (ACTION_IGNORE_FOLDER.equals(intent.getAction()) && mCurrentState == State.ACTIVE) {
// mApi is not null due to State.ACTIVE
mApi.ignoreFolder(intent.getStringExtra(EXTRA_DEVICE_ID), intent.getStringExtra(EXTRA_FOLDER_ID));
// mRestApi is not null due to State.ACTIVE
mRestApi.ignoreFolder(intent.getStringExtra(EXTRA_DEVICE_ID), intent.getStringExtra(EXTRA_FOLDER_ID));
mNotificationHandler.cancelConsentNotification(intent.getIntExtra(EXTRA_NOTIFICATION_ID, 0));
} else if (ACTION_OVERRIDE_CHANGES.equals(intent.getAction()) && mCurrentState == State.ACTIVE) {
mApi.overrideChanges(intent.getStringExtra(EXTRA_FOLDER_ID));
mRestApi.overrideChanges(intent.getStringExtra(EXTRA_FOLDER_ID));
}
return START_STICKY;
}
@ -309,7 +312,7 @@ public class SyncthingService extends Service {
* function is called to notify this class to run/terminate the syncthing binary.
* {@link #onServiceStateChange} is called while applying the decision change.
*/
private void onUpdatedShouldRunDecision(boolean newShouldRunDecision) {
private void onShouldRunDecisionChanged(boolean newShouldRunDecision) {
if (newShouldRunDecision != mLastDeterminedShouldRun) {
Log.i(TAG, "shouldRun decision changed to " + newShouldRunDecision + " according to configured run conditions.");
mLastDeterminedShouldRun = newShouldRunDecision;
@ -341,6 +344,17 @@ public class SyncthingService extends Service {
}
}
/**
* After sync preconditions changed, we need to inform {@link RestApi} to pause or
* unpause devices and folders as defined in per-object sync preferences.
*/
private void onSyncPreconditionChanged() {
if (mRestApi != null) {
// Forward event.
mRestApi.onSyncPreconditionChanged(mRunConditionMonitor);
}
}
/**
* Prepares to launch the syncthing binary.
*/
@ -416,8 +430,8 @@ public class SyncthingService extends Service {
* Callback on {@link StartupTask#onPostExecute}.
*/
private void onStartupTaskCompleteListener(SyncthingRunnable.Command srCommand) {
if (mApi == null) {
mApi = new RestApi(this, mConfig.getWebGuiUrl(), mConfig.getApiKey(),
if (mRestApi == null) {
mRestApi = new RestApi(this, mConfig.getWebGuiUrl(), mConfig.getApiKey(),
this::onApiAvailable, () -> onServiceStateChange(mCurrentState));
Log.i(TAG, "Web GUI will be available at " + mConfig.getWebGuiUrl());
}
@ -450,8 +464,8 @@ public class SyncthingService extends Service {
mPollWebGuiAvailableTask = new PollWebGuiAvailableTask(
this, getWebGuiUrl(), mConfig.getApiKey(), result -> {
Log.i(TAG, "Web GUI has come online at " + mConfig.getWebGuiUrl());
if (mApi != null) {
mApi.readConfigFromRestApi();
if (mRestApi != null) {
mRestApi.readConfigFromRestApi();
}
}
);
@ -461,12 +475,12 @@ public class SyncthingService extends Service {
/**
* Called when {@link RestApi#checkReadConfigFromRestApiCompleted} detects
* the RestApi class has been fully initialized.
* UI stressing results in mApi getting null on simultaneous shutdown, so
* UI stressing results in mRestApi getting null on simultaneous shutdown, so
* we check it for safety.
*/
private void onApiAvailable() {
if (mApi == null) {
Log.e(TAG, "onApiAvailable: Did we stop the binary during startup? mApi == null");
if (mRestApi == null) {
Log.e(TAG, "onApiAvailable: Did we stop the binary during startup? mRestApi == null");
return;
}
synchronized (mStateLock) {
@ -476,6 +490,9 @@ public class SyncthingService extends Service {
}
onServiceStateChange(State.ACTIVE);
}
if (mRestApi != null && mRunConditionMonitor != null) {
mRestApi.onSyncPreconditionChanged(mRunConditionMonitor);
}
/**
* If the service instance got an onDestroy() event while being in
@ -489,7 +506,7 @@ public class SyncthingService extends Service {
}
if (mEventProcessor == null) {
mEventProcessor = new EventProcessor(SyncthingService.this, mApi);
mEventProcessor = new EventProcessor(SyncthingService.this, mRestApi);
mEventProcessor.start();
}
}
@ -508,7 +525,7 @@ public class SyncthingService extends Service {
Log.v(TAG, "onDestroy");
if (mRunConditionMonitor != null) {
/**
* Shut down the OnDeviceStateChangedListener so we won't get interrupted by run
* Shut down the OnShouldRunChangedListener so we won't get interrupted by run
* condition events that occur during shutdown.
*/
mRunConditionMonitor.shutdown();
@ -565,9 +582,9 @@ public class SyncthingService extends Service {
mEventProcessor = null;
}
if (mApi != null) {
mApi.shutdown();
mApi = null;
if (mRestApi != null) {
mRestApi.shutdown();
mRestApi = null;
}
if (mSyncthingRunnable != null) {
@ -589,7 +606,7 @@ public class SyncthingService extends Service {
public @Nullable
RestApi getApi() {
return mApi;
return mRestApi;
}
/**

View file

@ -115,10 +115,11 @@ public class WifiSsidPreference extends MultiSelectListPreference {
// See #620: there may be null-SSIDs
String ssid = configs[i].SSID != null ? configs[i].SSID : "";
// WiFi SSIDs can either be UTF-8 (encapsulated in '"') or hex-strings
if (stripQuotes)
if (stripQuotes) {
result[i] = ssid.replaceFirst("^\"", "").replaceFirst("\"$", "");
else
} else {
result[i] = ssid;
}
}
return result;
}

View file

@ -1,14 +1,13 @@
Fixes
* Fixed xml encoding when parsing, saving the config (#89)
* Fixed override changes button not showing
* Fixed the "battery eater"
* Added detection for wireless charging
* Fixed phone plugged to charger detection
* Lots of bug fixes and better Android 8+ support (#52, #54, #56, #59)
Enhancements
* Specify sync conditions differently for each folder [NEW]
* UI explains why syncthing is running (or not)
* Support in-app editing of folder's ignore list items
* Better default prefs and crash detection
Fixes
* Fixed the "battery eater"
* Fixed xml encoding when parsing, saving the config (#89)
* Fixed override changes button not showing
* Fixed phone plugged to charger detection
* Lots of bug fixes and better Android 8+ support (#52, #54, #56, #59)
Maintenance
* Updated syncthing to v0.14.51
* Added support for "receive only" folders

Binary file not shown.

After

Width:  |  Height:  |  Size: 454 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 387 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 667 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 209 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 269 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 419 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 594 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 338 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 483 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 873 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 848 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 487 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 695 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 602 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 883 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -0,0 +1,189 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include layout="@layout/widget_toolbar" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="?android:listDivider"
android:orientation="vertical"
android:paddingBottom="8dp"
android:paddingTop="8dp"
android:showDividers="middle"
android:focusableInTouchMode="true">
<!-- Static Sync Condition Title -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?selectableItemBackground"
android:orientation="vertical"
android:gravity="center_vertical">
<TextView
android:id="@+id/static_sync_conditions_title"
style="@style/Widget.Syncthing.TextView.Label.Details"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="@null"
android:checked="false"
android:drawableLeft="@drawable/ic_autorenew_black_24dp"
android:drawableStart="@drawable/ic_autorenew_black_24dp"
android:text="@string/run_conditions_title" />
<TextView
android:id="@+id/static_sync_conditions_summary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="75dp"
android:layout_marginStart="75dp"
android:layout_marginTop="-20dp"
android:text="@string/run_conditions_summary"
android:textAppearance="@style/TextAppearance.AppCompat.Caption" />
</LinearLayout>
<!-- Sync on WiFi -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?selectableItemBackground"
android:orientation="vertical"
android:gravity="center_vertical">
<android.support.v7.widget.SwitchCompat
android:id="@+id/sync_on_wifi_title"
style="@style/Widget.Syncthing.TextView.Label.Details"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="false"
android:drawableLeft="@drawable/ic_wifi_black_24dp"
android:drawableStart="@drawable/ic_wifi_black_24dp"
android:text="@string/run_on_wifi_title" />
<TextView
android:id="@+id/sync_on_wifi_summary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="75dp"
android:layout_marginStart="75dp"
android:layout_marginTop="-20dp"
android:textAppearance="@style/TextAppearance.AppCompat.Caption"
android:text="@string/run_on_wifi_summary"
android:focusable="false"/>
</LinearLayout>
<!-- Sync on whitelisted WiFi -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?selectableItemBackground"
android:orientation="vertical"
android:gravity="center_vertical">
<android.support.v7.widget.SwitchCompat
android:id="@+id/sync_on_whitelisted_wifi_title"
style="@style/Widget.Syncthing.TextView.Label.Details"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="false"
android:drawableLeft="@drawable/ic_signal_wifi_0_bar_black_24dp"
android:drawableStart="@drawable/ic_signal_wifi_0_bar_black_24dp"
android:text="@string/run_on_whitelisted_wifi_title" />
<TextView
android:id="@+id/sync_on_whitelisted_wifi_summary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="75dp"
android:layout_marginStart="75dp"
android:layout_marginTop="-20dp"
android:textAppearance="@style/TextAppearance.AppCompat.Caption"
android:text="@string/run_on_whitelisted_wifi_summary"
android:focusable="false"/>
<LinearLayout
android:id="@+id/wifiSsidContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
</LinearLayout>
<!-- Sync on metered WiFi -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?selectableItemBackground"
android:orientation="vertical"
android:gravity="center_vertical">
<android.support.v7.widget.SwitchCompat
android:id="@+id/sync_on_metered_wifi_title"
style="@style/Widget.Syncthing.TextView.Label.Details"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="false"
android:drawableLeft="@drawable/ic_wifi_tethering_black_24dp"
android:drawableStart="@drawable/ic_wifi_tethering_black_24dp"
android:text="@string/run_on_metered_wifi_title" />
<TextView
android:id="@+id/sync_on_metered_wifi_summary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="75dp"
android:layout_marginStart="75dp"
android:layout_marginTop="-20dp"
android:textAppearance="@style/TextAppearance.AppCompat.Caption"
android:text="@string/run_on_metered_wifi_summary"
android:focusable="false"/>
</LinearLayout>
<!-- Sync on mobile data -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?selectableItemBackground"
android:orientation="vertical"
android:gravity="center_vertical">
<android.support.v7.widget.SwitchCompat
android:id="@+id/sync_on_mobile_data_title"
style="@style/Widget.Syncthing.TextView.Label.Details"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="false"
android:drawableLeft="@drawable/ic_signal_cellular_connected_no_internet_4_bar_black_24dp"
android:drawableStart="@drawable/ic_signal_cellular_connected_no_internet_4_bar_black_24dp"
android:text="@string/run_on_mobile_data_title" />
<TextView
android:id="@+id/sync_on_mobile_data_summary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="75dp"
android:layout_marginStart="75dp"
android:layout_marginTop="-20dp"
android:textAppearance="@style/TextAppearance.AppCompat.Caption"
android:text="@string/run_on_mobile_data_summary"
android:focusable="false"/>
</LinearLayout>
</LinearLayout>
</ScrollView>
</LinearLayout>

View file

@ -118,8 +118,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="false"
android:drawableLeft="@drawable/ic_settings_black_24dp"
android:drawableStart="@drawable/ic_settings_black_24dp"
android:drawableLeft="@drawable/ic_pause_circle_outline_black_24dp"
android:drawableStart="@drawable/ic_pause_circle_outline_black_24dp"
android:text="@string/pause_device" />
<TextView

View file

@ -54,20 +54,19 @@
android:focusable="true"
android:hint="@string/directory"/>
<TextView
style="@style/Widget.Syncthing.TextView.Label.Details"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/ic_device_hub_black_24dp_active"
android:drawableStart="@drawable/ic_device_hub_black_24dp_active"
android:text="@string/devices" />
<LinearLayout
android:id="@+id/devicesContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
style="@style/Widget.Syncthing.TextView.Label.Details"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/ic_device_hub_black_24dp_active"
android:drawableStart="@drawable/ic_device_hub_black_24dp_active"
android:text="@string/devices" />
</LinearLayout>
<LinearLayout
@ -143,10 +142,63 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="false"
android:drawableLeft="@drawable/ic_folder_black_24dp"
android:drawableStart="@drawable/ic_folder_black_24dp"
android:drawableLeft="@drawable/ic_pause_circle_outline_black_24dp"
android:drawableStart="@drawable/ic_pause_circle_outline_black_24dp"
android:text="@string/folder_pause" />
<!-- Custom sync conditions -->
<LinearLayout
android:id="@+id/customSyncConditionsContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?selectableItemBackground"
android:orientation="vertical"
android:gravity="center_vertical">
<android.support.v7.widget.SwitchCompat
android:id="@+id/customSyncConditionsSwitch"
style="@style/Widget.Syncthing.TextView.Label.Details"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="false"
android:drawableLeft="@drawable/ic_autorenew_black_24dp"
android:drawableStart="@drawable/ic_autorenew_black_24dp"
android:text="@string/custom_sync_conditions_title" />
<TextView
android:id="@+id/customSyncConditionsDescription"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="75dp"
android:layout_marginStart="75dp"
android:layout_marginTop="-20dp"
android:textAppearance="@style/TextAppearance.AppCompat.Caption"
android:text="@string/custom_sync_conditions_description"
android:focusable="false"/>
<TextView
android:id="@+id/customSyncConditionsDialog"
style="@style/Widget.Syncthing.TextView.Label.Details"
android:layout_marginLeft="56dp"
android:layout_marginStart="56dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="true"
android:text="@string/custom_sync_conditions_dialog"/>
<TextView
android:id="@+id/customSyncConditionsCurrent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="75dp"
android:layout_marginStart="75dp"
android:layout_marginTop="-20dp"
android:textAppearance="@style/TextAppearance.AppCompat.Caption"
android:text="@null"
android:focusable="false"/>
</LinearLayout>
<LinearLayout
android:id="@+id/pullOrderContainer"
android:layout_width="match_parent"
@ -221,6 +273,16 @@
android:layout_marginStart="75dp"
android:textAppearance="@style/TextAppearance.AppCompat.Caption" />
</LinearLayout>
<LinearLayout
android:id="@+id/editIgnoresContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?selectableItemBackground"
android:orientation="vertical"
android:gravity="center_vertical">
<TextView
android:id="@+id/edit_ignore_list_title"
style="@style/Widget.Syncthing.TextView.Label.Details"
@ -235,7 +297,7 @@
<EditText
android:id="@+id/edit_ignore_list_content"
style="@style/Widget.Syncthing.TextView.Label.Details"
android:inputType="textMultiLine"
android:inputType="textMultiLine|textNoSuggestions"
android:gravity="top|start"
android:hint="@string/ignore_patterns"
android:layout_width="match_parent"

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.SwitchCompat xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
style="@style/Widget.Syncthing.TextView.Label.Details.WifiSsidList"
android:id="@+id/wifi_ssid_toggle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/material_divider_inset"
android:layout_marginStart="@dimen/material_divider_inset"
android:textAppearance="@style/TextAppearance.AppCompat.Caption"
tools:ignore="RtlHardcoded,RtlSymmetry" />

View file

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/done"
android:title="@string/add"
android:icon="@drawable/ic_done_white_24dp"
app:showAsAction="always|withText" />
</menu>

View file

@ -5,10 +5,6 @@
<string name="cont">استمرار</string>
<string name="generic_error">خطأ</string>
<!-- MainActivity -->
<!-- Title of the "add folder" menu action -->
<string name="add_folder">إضافة مجلد</string>

View file

@ -19,10 +19,6 @@
<string name="generic_error">Грешка</string>
<string name="ignore">Игнориране</string>
<!-- MainActivity -->
<!-- Title of the "add folder" menu action -->
<string name="add_folder">Добави папка</string>
@ -216,7 +212,6 @@
<string name="category_run_conditions">Условия на работа</string>
<string name="category_behaviour">Поведение</string>
<string name="category_syncthing_options">Настройки на Syncthing</string>
<string name="category_backup">Резервно копие</string>
<string name="category_debug">Дебъг</string>
<string name="category_experimental">Експериментални</string>
@ -225,24 +220,10 @@
<string name="sync_only_wifi_ssids_wifi_turn_on_wifi">За да изберете мрежа, моля включете WiFi</string>
<!-- Preferences - Behaviour -->
<string name="advanced_folder_picker">Избор на папка, за напреднали</string>
<string name="advanced_folder_picker_summary">Изберете папка, от устройството, за синхронизиране</string>
<string name="use_root_title">Стартира Syncthing с права на Superuser</string>
<string name="use_root_summary">Може да предизвика разнообразни проблеми със Syncthing и като цяло с устройството. При възникване на проблем може да се наложи преинсталиране на Syncthing.</string>
<string name="notification_type_title">Известия</string>
<string name="notification_type_summary">Изберете тип известия</string>
<string-array name="notification_type_entries">
<item>Нормални</item>
<item>С нисък приоритет</item>
<item>Без известия</item>
</string-array>
<string name="device_name">Име на устройството</string>
<string name="listen_address">Адрес за слушане на синхронизиращия протокол</string>
@ -275,15 +256,12 @@
<!-- Dialog shown before config import -->
<string name="dialog_confirm_import">Наистина ли желаете внасянето на нови настройки? Съществуващите файлове ще бъдат презаписани.</string>
<!-- Toast shown after config was successfully exported -->
<!-- Toast shown after config was exported -->
<string name="config_export_successful">Настройките са изнесени в %1$s</string>
<string name="import_config">Внасяне на настройки</string>
<!-- Toast shown after config was successfully imported -->
<!-- Toast shown after config was imported -->
<string name="config_imported_successful">Настройките са внесени</string>
<!-- Toast shown after config was successfully imported -->
<string name="config_import_failed">Внасянето на настройките се провали. Уверете се, че файловете са в %1$s</string>
<!-- Title for the preference to reset Syncthing indexes -->

View file

@ -19,10 +19,6 @@ Ens podeu informar dels problemes que trobeu a través de Github.</string>
<string name="finish">Finalitza</string>
<string name="generic_example">Exemple</string>
<string name="generic_error">Error</string>
<!-- MainActivity -->
<!-- Title of the "add folder" menu action -->
<string name="add_folder">Afegeix una carpeta</string>
@ -243,7 +239,6 @@ Ens podeu informar dels problemes que trobeu a través de Github.</string>
<string name="category_run_conditions">Condicions d\'execució</string>
<string name="category_behaviour">Comportament</string>
<string name="category_syncthing_options">Opcions del Syncthing</string>
<string name="category_backup">Còpia de seguretat</string>
<string name="category_debug">Depuració</string>
<string name="category_experimental">Experimental</string>
@ -258,24 +253,10 @@ Ens podeu informar dels problemes que trobeu a través de Github.</string>
<string name="respect_battery_saving_title">Respecta la configuració d\'estalvi de bateria de l\'Android</string>
<!-- Preferences - Behaviour -->
<string name="advanced_folder_picker">Utilitza el selector de carpetes avançat</string>
<string name="advanced_folder_picker_summary">Seleccioneu qualsevol carpeta del dispositiu per sincronitzar-la</string>
<string name="use_root_title">Executa el Syncthing com a Superusuari</string>
<string name="use_root_summary">Aquesta característica és inestable i podria causar problemes amb el Syncthing i amb el vostre dispositiu. Si us trobeu amb problemes, potser haureu de reinstal·lar el Syncthing.</string>
<string name="notification_type_title">Notificació</string>
<string name="notification_type_summary">Seleccioneu el tipus de notificació</string>
<string-array name="notification_type_entries">
<item>Normal</item>
<item>Baixa Prioritat</item>
<item>Cap</item>
</string-array>
<string name="preference_language_title">Idioma</string>
<string name="preference_language_summary">Canvieu l\'idioma de l\'aplicació</string>
@ -327,8 +308,6 @@ Ens podeu informar dels problemes que trobeu a través de Github.</string>
<string name="keep_wakelock_while_binary_running">Mantingues activa la CPU mentre s\'executi el Syncthing</string>
<string name="keep_wakelock_while_binary_running_summary">Activeu-ho si experimenteu desconnexions inesperades quan treballeu amb bateria. S\'incrementarà el consum de la bateria.</string>
<string name="use_tor_title">Utilitza Tor</string>
<string name="use_tor_summary">Força la connexió a través de Tor per millorar la privacitat. Requereix Orbot. Desactiva les opcions del proxy.</string>
@ -359,15 +338,12 @@ Ens podeu informar dels problemes que trobeu a través de Github.</string>
<!-- Dialog shown before config import -->
<string name="dialog_confirm_import">Realment voleu importar una nova configuració? Es sobreescriuran els fitxers existents.</string>
<!-- Toast shown after config was successfully exported -->
<!-- Toast shown after config was exported -->
<string name="config_export_successful">S\'ha exportat la configuració a %1$s</string>
<string name="import_config">Importa la configuració</string>
<!-- Toast shown after config was successfully imported -->
<!-- Toast shown after config was imported -->
<string name="config_imported_successful">S\'ha importat la configuració</string>
<!-- Toast shown after config was successfully imported -->
<string name="config_import_failed">Ha fallat la importació de la configuració, verifiqueu que els fitxers siguin a %1$s</string>
<!-- Title for the preference to set STTRACE parameters -->
@ -519,7 +495,6 @@ Ens podeu informar dels problemes que trobeu a través de Github.</string>
<string name="syncthing_terminated">El Syncthing s\'ha aturat</string>
<!-- Toast shown if syncthing failed to create or read the config -->
<string name="config_create_failed">No s\'ha pogut crear el fitxer de configuració</string>
<!-- Label of the default folder created of first start (camera folder). -->
<string name="default_folder_label">Càmera</string>
@ -619,5 +594,4 @@ Ens podeu informar dels problemes que trobeu a través de Github.</string>
<string name="browse">Navega</string>
<string name="no_sub_folder_is_selected">No s\'ha triat cap subcarpeta</string>
<string name="share_device_id_chooser">Comparteix la ID del dispositiu amb</string>
</resources>
</resources>

View file

@ -20,10 +20,6 @@ Všechny zaznamenané chyby prosím hlašte přes Github.</string>
<string name="generic_error">Chyba</string>
<string name="ignore">Ignorovat</string>
<!-- MainActivity -->
<!-- Title of the "add folder" menu action -->
<string name="add_folder">Přidat adresář</string>
@ -231,7 +227,6 @@ Všechny zaznamenané chyby prosím hlašte přes Github.</string>
<string name="category_run_conditions">Podmínky spuštění</string>
<string name="category_behaviour">Chování</string>
<string name="category_syncthing_options">Nastavení Syncthing</string>
<string name="category_backup">Záloha</string>
<string name="category_debug">Ladění</string>
<string name="category_experimental">Experimentální</string>
@ -241,24 +236,10 @@ Všechny zaznamenané chyby prosím hlašte přes Github.</string>
<string name="respect_battery_saving_title">Dodržovat nastavení úspory baterie z Androidu</string>
<!-- Preferences - Behaviour -->
<string name="advanced_folder_picker">Použít rozšířený výběr adresáře</string>
<string name="advanced_folder_picker_summary">Vyberte jakýkoliv adresář v přístroji pro synchronizaci</string>
<string name="use_root_title">Spustit syncthing jako superuživatel</string>
<string name="use_root_summary">Toto je nestabilní funkce, které může způsobit problémy se Syncthing a s vaším zařízením. Pokud narazíte na problémy, může být třeba přeinstalovat Syncthing.</string>
<string name="notification_type_title">Upozornění</string>
<string name="notification_type_summary">Vybrat typ upozornění</string>
<string-array name="notification_type_entries">
<item>Normální</item>
<item>Nízká priorita</item>
<item>Źádné</item>
</string-array>
<string name="preference_language_title">Jazyk</string>
<string name="preference_language_summary">Změnit jazyk aplikace</string>
@ -303,8 +284,6 @@ Všechny zaznamenané chyby prosím hlašte přes Github.</string>
<string name="keep_wakelock_while_binary_running">Udržovat CPU aktivní pokud běží Syncthing</string>
<string name="keep_wakelock_while_binary_running_summary">Použijte toto nastavení pokud zaznamenáváte neočekávaná ukončení spojení při běhu na baterii. Toto bude mít za následek vyšší spotřebu energie.</string>
<string name="use_tor_title">Použít Tor</string>
<string name="use_legacy_hashing_title">Používat standardní kontrolní součet</string>
@ -317,15 +296,12 @@ Všechny zaznamenané chyby prosím hlašte přes Github.</string>
<!-- Dialog shown before config import -->
<string name="dialog_confirm_import">Opravud chcete importovat novou konfiguraci? Existující soubory budou přepsány.</string>
<!-- Toast shown after config was successfully exported -->
<!-- Toast shown after config was exported -->
<string name="config_export_successful">Nastavení bylo zálohováno do %1$s</string>
<string name="import_config">Nahrát nastavení</string>
<!-- Toast shown after config was successfully imported -->
<!-- Toast shown after config was imported -->
<string name="config_imported_successful">Nastavení bylo nahráno</string>
<!-- Toast shown after config was successfully imported -->
<string name="config_import_failed">Nahrání nastavení selhalo, ujistěte se, že soubory jsou v %1$s</string>
<!-- Title for the preference to set STTRACE parameters -->
@ -465,7 +441,6 @@ Všechny zaznamenané chyby prosím hlašte přes Github.</string>
<string name="syncthing_disabled">Syncthing je vypnutý</string>
<!-- Toast shown if syncthing failed to create or read the config -->
<string name="config_create_failed">Vytváření konfiguračního souboru selhalo</string>
<!-- Label of the default folder created of first start (camera folder). -->
<string name="default_folder_label">Kamera</string>
@ -562,5 +537,4 @@ Všechny zaznamenané chyby prosím hlašte přes Github.</string>
<string name="browse">Procházet</string>
<string name="no_sub_folder_is_selected">Není vybrána žádná podsložka</string>
<string name="share_device_id_chooser">Sdílet ID zařízení s</string>
</resources>
</resources>

View file

@ -18,10 +18,6 @@ Vær venlig at rapportere ethvert problem, du støder på, via Github. </string>
<string name="cont">Fortsæt</string>
<string name="finish">Færdiggør</string>
<string name="generic_error">Fejl</string>
<!-- MainActivity -->
<!-- Title of the "add folder" menu action -->
<string name="add_folder">Tilføj mappe</string>
@ -227,7 +223,6 @@ Vær venlig at rapportere ethvert problem, du støder på, via Github. </string>
<string name="category_run_conditions">Kør betingelser</string>
<string name="category_behaviour">Adfærd</string>
<string name="category_syncthing_options">Syncthing Muligheder</string>
<string name="category_backup">Backup</string>
<string name="category_debug">Debug</string>
<string name="category_experimental">Eksperimentalt</string>
@ -237,24 +232,10 @@ Vær venlig at rapportere ethvert problem, du støder på, via Github. </string>
<string name="respect_battery_saving_title">Respekter Android battery saving indstillinger</string>
<!-- Preferences - Behaviour -->
<string name="advanced_folder_picker">Brug avanceret Mappe Vælger</string>
<string name="advanced_folder_picker_summary">Vælg en valgfri mappe på enheden for synkronisering</string>
<string name="use_root_title">Kør Syncthing som Superuser</string>
<string name="use_root_summary">Dette er en ustabil feature som kan forudsage problemer med Syncthing og din enhed. Hvis du støder på problemer, kan det være du er nødt til at geninstallere Syncthing.</string>
<string name="notification_type_title">Notifikation</string>
<string name="notification_type_summary">Vælg notifikationstype</string>
<string-array name="notification_type_entries">
<item>Normal</item>
<item>Lav prioritet</item>
<item>Ingen</item>
</string-array>
<string name="preference_language_title">Sprog</string>
<string name="preference_language_summary">Ændr app sproget</string>
@ -299,8 +280,6 @@ Vær venlig at rapportere ethvert problem, du støder på, via Github. </string>
<string name="keep_wakelock_while_binary_running">Lad CPU\'en køre imens Syncthing kører</string>
<string name="keep_wakelock_while_binary_running_summary">Brug denne indstilling hvis du oplever uventede forbindelsesbrud imens batteriet bruges. Dette vil resultere i forøget batteriforbrug.</string>
<string name="use_tor_title">Brug Tor</string>
<string name="use_legacy_hashing_title">Brug legacy hashing</string>
@ -313,15 +292,12 @@ Vær venlig at rapportere ethvert problem, du støder på, via Github. </string>
<!-- Dialog shown before config import -->
<string name="dialog_confirm_import">Er du sikker på du vil importere en ny konfiguration? Eksisterende filer vil gå tabt.</string>
<!-- Toast shown after config was successfully exported -->
<!-- Toast shown after config was exported -->
<string name="config_export_successful">Konfigurationen blev eksporteret til %1$s</string>
<string name="import_config">Importer Konfiguration</string>
<!-- Toast shown after config was successfully imported -->
<!-- Toast shown after config was imported -->
<string name="config_imported_successful">Konfigurationen blev importeret</string>
<!-- Toast shown after config was successfully imported -->
<string name="config_import_failed">Import af konfigurationen slog fjel, vær sikker på at filer er i %1$s</string>
<!-- Title for the preference to set STTRACE parameters -->

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
</resources>

View file

@ -48,6 +48,10 @@ Bitte melden Sie auftretende Probleme via GitHub.</string>
<!-- Title of the exit app when running as a service confirmation dialog -->
<string name="dialog_exit_while_running_as_service_title">Beenden der App bestätigen</string>
<string name="dialog_exit_while_running_as_service_message">Zu Deiner Erinnerung: Du hast Syncthing eingerichtet, automatisch beim Hochfahren zu starten. Deshalb überwacht es die Laufkonditionen und synchronisiert, wenn die Bedingungen zutreffen. Du solltest nur manuell beenden, wenn Du größere Probleme feststellst. Andernfalls schalte \"Automatisch beim Hochfahren starten\" in den Einstellungen aus. Möchtest Du jetzt beenden, bis das Gerät neu gestartet wurde?</string>
<!-- Title of the "add folder" menu action -->
<string name="add_folder">Verzeichnis hinzufügen</string>
@ -294,7 +298,7 @@ Bitte melden Sie auftretende Probleme via GitHub.</string>
<string name="category_run_conditions">Laufkonditionen</string>
<string name="category_behaviour">Verhalten</string>
<string name="category_syncthing_options">Syncthing-Optionen</string>
<string name="category_backup">Datensicherung</string>
<string name="category_backup">Import und Export</string>
<string name="category_debug">Fehleranalyse</string>
<string name="category_experimental">Experimentell</string>
@ -311,8 +315,8 @@ Bitte melden Sie auftretende Probleme via GitHub.</string>
<string name="run_on_metered_wifi_title">Starte bei getakteter WLAN-Verbindung</string>
<string name="run_on_metered_wifi_summary">Starte, wenn das Gerät mit einem getakteten WLAN-Netzwerk wie z. B. einem Hotspot- oder Tethering-Netzwerk verbunden ist. Achtung: Dies kann einen großen Anteil des mobilen Datenvolumens verbrauchen, wenn Du viele Dateien synchronisierst.</string>
<string name="run_on_whitelisted_wifi_title">Starte in festgelegten WLAN-Netzwerken</string>
<string name="run_on_whitelisted_wifi_networks">Starte nur in ausgewählten WLAN-Netzwerken: %1$s</string>
<string name="run_on_whitelisted_wifi_title">Starte bei ausgewählten WLAN\'s</string>
<string name="run_on_whitelisted_wifi_networks">Starte in ausgewählten WLAN\'s: %1$s</string>
<string name="run_on_all_wifi_networks">Starte in allen WLAN-Netzwerken.</string>
<string name="sync_only_wifi_ssids_wifi_turn_on_wifi">Bitte WLAN aktivieren, um eines zu wählen.</string>
@ -345,24 +349,10 @@ Bitte melden Sie auftretende Probleme via GitHub.</string>
<string name="run_as_background_service">Starte den Dienst automatisch beim Hochfahren</string>
<!-- Preferences - Behaviour -->
<string name="advanced_folder_picker">Erweiterte Verzeichnisauswahl benutzen</string>
<string name="advanced_folder_picker_summary">Alle Verzeichnisse auf dem Gerät für Synchronisation auswählbar</string>
<string name="use_root_title">Syncthing mit Superuser Rechten ausführen</string>
<string name="use_root_summary">Wenn Syncthing unter dem Root-Benutzer ausgeführt wird, hat es Schreibzugriff auf Ordner, die Android normalerweise auf schreibgeschützten Zugriff beschränkt. Verwende diese Funktion mit Bedacht.</string>
<string name="notification_type_title">Permanente Benachrichtigung</string>
<string name="notification_type_summary">Wähle die Art der Benachrichtigung</string>
<string-array name="notification_type_entries">
<item>Normale Priorität</item>
<item>Geringe Priorität</item>
<item>Keine Priorität</item>
</string-array>
<string name="preference_language_title">Sprache</string>
<string name="preference_language_summary">Anwendungssprache ändern</string>
@ -434,7 +424,7 @@ Bitte melden Sie auftretende Probleme via GitHub.</string>
<string name="keep_wakelock_while_binary_running">Prozessor wach halten während Syncthing läuft.</string>
<string name="keep_wakelock_while_binary_running_summary">Nur für Android 5 oder niedriger. Nutze diese Einstellung, wenn du unerwartete Verbindungsabbrüche hast, während du im Batteriebetrieb arbeitest. Das wird zu einem erhöhten Energieverbrauch führen.</string>
<string name="keep_wakelock_while_binary_running_summary">Nur für Android 5 oder niedriger. Benutze diese Einstellung, wenn Du unerwartete Verbindungsabbrüche hast, während Du im Batteriebetrieb arbeitest. Das wird zu einem erhöhten Energieverbrauch führen.</string>
<string name="use_tor_title">Tor benutzen</string>
@ -466,15 +456,14 @@ Bitte melden Sie auftretende Probleme via GitHub.</string>
<!-- Dialog shown before config import -->
<string name="dialog_confirm_import">Soll wirklich eine neue Konfiguration importiert werden? Die vorhandene Konfiguration wird überschrieben.</string>
<!-- Toast shown after config was successfully exported -->
<!-- Toast shown after config was exported -->
<string name="config_export_successful">Konfiguration exportiert nach %1$s</string>
<string name="config_export_failed">Konfigurations-Export fehlgeschlagen, prüfe die Logcat-Ausgabe.</string>
<string name="import_config">Konfiguration importieren</string>
<!-- Toast shown after config was successfully imported -->
<!-- Toast shown after config was imported -->
<string name="config_imported_successful">Konfiguration importiert</string>
<!-- Toast shown after config was successfully imported -->
<string name="config_import_failed">Import fehlgeschlagen, Dateien werden in %1$s erwartet</string>
<!-- Title for the preference to set STTRACE parameters -->
@ -614,8 +603,10 @@ Bitte melden Sie auftretende Probleme via GitHub.</string>
<string name="reason_not_on_battery_power">Telefon wird nicht batteriebetrieben</string>
<string name="reason_not_while_power_saving">Syncthing läuft nicht, weil das Telefon im Energiesparmodus ist.</string>
<string name="reason_not_while_auto_sync_data_disabled">Syncthing läuft nicht, weil die Android-Kachel \"Automatische Datensynchronisation\" ausgeschaltet ist.</string>
<string name="reason_mobile_data_disallowed">Syncthing wurde verboten, die mobile Datenverbindung zu nutzen.</string>
<string name="reason_on_mobile_data">Syncthing läuft, weil die mobile Datenverbindung aufgebaut ist.</string>
<string name="reason_not_on_mobile_data">Syncthing darf bei mobiler Datenverbindung laufen, jedoch sind mobile Daten nicht verbunden.</string>
<string name="reason_wifi_disallowed">Syncthing wurde verboten, die WLAN-Verbindung zu nutzen.</string>
<string name="reason_on_wifi">Syncthing darf bei WLAN-Verbindung laufen und WLAN ist gerade verbunden.</string>
<string name="reason_not_on_wifi">Syncthing darf bei WLAN-Verbindung laufen, jedoch ist WLAN gerade nicht verbunden oder das Telefon befindet sich im Flugzeugmodus.</string>
<string name="reason_on_metered_nonmetered_wifi">Syncthing darf bei getakteter und nicht-getakteter WLAN-Verbindung laufen.</string>
@ -623,8 +614,13 @@ Bitte melden Sie auftretende Probleme via GitHub.</string>
<string name="reason_not_on_whitelisted_wifi">Syncthing läuft nicht, weil der Name des aktuellen WLAN-Netzwerks nicht auf der weißen Liste steht.</string>
<string name="reason_on_nonmetered_wifi">Syncthing darf bei nicht-getakteter WLAN-Verbindung laufen. Die aktive WLAN-Verbindung ist nicht-getaktet.</string>
<string name="reason_not_nonmetered_wifi">Syncthing läuft nicht, weil Du verboten hast, dass es bei getakteten WLAN-Verbindungen läuft.</string>
<string name="reason_location_unavailable">Du hast \'Starte in ausgewählten WLAN-Netzwerken\' in den Einstellungen aktiviert. Die Android-tandorterfassung ist derzeit ausgeschaltet. Aufgrund von Android-Beschränkungen kann Syncthing den aktuellen WLAN-Netzwerknamen nicht ermitteln, um zu entscheiden, ob es starten soll. Lösung: Schalte den Standort ein und verbinde WLAN erneut.</string>
<string name="reason_on_flight_mode">Syncthing läuft, weil Du erlaubt hast, dass es bei eingeschaltetem Flugzeugmodus läuft.</string>
<!-- Sync Conditions Dialog -->
<string name="wifi_ssid_whitelist_empty">Es sind keine WLAN-Netzwerknamen auf der Erlaubt-Liste. Bitte lege welche in den Einstellungen fest.</string>
<!-- SyncthingService -->
@ -641,6 +637,7 @@ Bitte melden Sie auftretende Probleme via GitHub.</string>
<string name="syncthing_terminated">Syncthing wurde beendet</string>
<!-- Toast shown if syncthing failed to create or read the config -->
<string name="executable_not_found">Ausführbarer Kernbestandteil der App \"%s\" fehlt. Bitte prüfe den Build und die Logcat-Ausgabe.</string>
<string name="config_create_failed">Erstellen der Konfiguration fehlgeschlagen. Pruefe die logcat-Ausgabe!</string>
<string name="config_read_failed">Fehler beim Lesen der Konfiguration. Sichere gegebenenfalls Daten aus deinen Sync-Ordnern zu sichern, lösche über die Android-Einstellungen die App-Daten und starte von vorn.</string>
@ -776,5 +773,9 @@ Bitte melden Sie auftretende Probleme via GitHub.</string>
<string name="browse">Durchsuchen</string>
<string name="no_sub_folder_is_selected">Kein Verzeichnis ausgewählt</string>
<string name="share_device_id_chooser">Teile Geräte ID mit</string>
<string name="run_on_whitelisted_wifi_summary">Schalte die Erlaubt-Liste ein, um die Synchronisation auf die ausgewählten WLAN-Netzwerke zu beschränken.</string>
<string name="custom_sync_conditions_title">Individuelle Sync-Bedingungen</string>
<string name="custom_sync_conditions_description">Du kannst Ausnahmen zu den übergeordneten Laufkonditionen festlegen.</string>
<string name="custom_sync_conditions_dialog">Lege Sync-Bedingungen fest</string>
</resources>

View file

@ -18,10 +18,6 @@
<string name="cont">Συνέχεια</string>
<string name="finish">Τέλος</string>
<string name="generic_error">Σφάλμα</string>
<!-- MainActivity -->
<!-- Title of the "add folder" menu action -->
<string name="add_folder">Προσθήκη φακέλου</string>
@ -227,7 +223,6 @@
<string name="category_run_conditions">Συνθήκες εκτέλεσης</string>
<string name="category_behaviour">Συμπεριφορά</string>
<string name="category_syncthing_options">Επιλογές Syncthing</string>
<string name="category_backup">Αντίγραφο ασφαλείας</string>
<string name="category_debug">Αποσφαλμάτωση</string>
<string name="category_experimental">Πειραματικά</string>
@ -237,24 +232,10 @@
<string name="respect_battery_saving_title">Υπακοή στη ρύθμιση εξοικονόμησης ενέργειας του Android</string>
<!-- Preferences - Behaviour -->
<string name="advanced_folder_picker">Χρήση προχωρημένου επιλογέα φακέλων</string>
<string name="advanced_folder_picker_summary">Επιλογή οποιουδήποτε φακέλου στη συσκευή για συγχρονισμό</string>
<string name="use_root_title">Εκτέλεση του Syncthing ως υπερχρήστης</string>
<string name="use_root_summary">Πρόκειται για μια πειραματική λειτουργία η οποία ενδέχεται να προκαλέσει προβλήματα στο Syncthing και τη συσκευή σας. Σε αυτή την περίπτωση, ίσως χρειαστεί να επανεγκαταστήσετε το Syncthing.</string>
<string name="notification_type_title">Ειδοποίηση</string>
<string name="notification_type_summary">Επιλέξτε τον τύπο ειδοποίησης</string>
<string-array name="notification_type_entries">
<item>Κανονική</item>
<item>Χαμηλής προτεραιότητας</item>
<item>Καμία</item>
</string-array>
<string name="preference_language_title">Γλώσσα</string>
<string name="preference_language_summary">Αλλαγή γλώσσας της εφαρμογής</string>
@ -299,8 +280,6 @@
<string name="keep_wakelock_while_binary_running">Διατήρηση της CPU σε ενεργό κατάσταση όσο εκτελείται το Syncthing</string>
<string name="keep_wakelock_while_binary_running_summary">Χρησιμοποιήστε αυτή την επιλογή αν παρατηρείτε απρόσμενες αποσυνδέσεις κατά τη λειτουργία με μπαταρία. Θα έχει ως συνέπεια την υψηλότερη κατανάλωση ενέργειας.</string>
<string name="use_tor_title">Χρήση του Tor</string>
<string name="use_legacy_hashing_title">Χρήση κατακερματισμού παλαιού τύπου</string>
@ -313,15 +292,12 @@
<!-- Dialog shown before config import -->
<string name="dialog_confirm_import">Σίγουρα επιθυμείτε να εισάγετε τις νέες ρυθμίσεις; Τυχόν υπάρχοντα αρχεία θα διαγραφούν.</string>
<!-- Toast shown after config was successfully exported -->
<!-- Toast shown after config was exported -->
<string name="config_export_successful">Οι ρυθμίσεις εξήχθησαν στο %1$s</string>
<string name="import_config">Εισαγωγή ρυθμίσεων</string>
<!-- Toast shown after config was successfully imported -->
<!-- Toast shown after config was imported -->
<string name="config_imported_successful">Οι ρυθμίσεις εισήχθησαν</string>
<!-- Toast shown after config was successfully imported -->
<string name="config_import_failed">Η εισαγωγή ρυθμίσεων απέτυχε, σιγουρευτείτε ότι τα αρχεία βρίσκονται στο %1$s</string>
<!-- Title for the preference to set STTRACE parameters -->
@ -455,7 +431,6 @@
<string name="syncthing_disabled">Το Syncthing είναι απενεργοποιημένο</string>
<!-- Toast shown if syncthing failed to create or read the config -->
<string name="config_create_failed">Αδυναμία δημιουργίας αρχείου ρυθμίσεων</string>
<!-- Label of the default folder created of first start (camera folder). -->
<string name="default_folder_label">Φωτογραφική μηχανή</string>
@ -552,5 +527,4 @@
<string name="browse">Περιήγηση</string>
<string name="no_sub_folder_is_selected">Δεν έχει επιλεγεί υποφάκελος</string>
<string name="share_device_id_chooser">Διαμοιρασμός ID συσκευής με</string>
</resources>
</resources>

View file

@ -14,10 +14,6 @@
<string name="generic_error">Error</string>
<string name="ignore">Ignorar</string>
<!-- MainActivity -->
<!-- Title of the "add folder" menu action -->
<string name="add_folder">Añadir carpeta</string>
@ -206,22 +202,8 @@
<string name="sync_only_wifi_ssids_wifi_turn_on_wifi">Por favor encienda el WiFi para seleccionar redes.</string>
<!-- Preferences - Behaviour -->
<string name="advanced_folder_picker">Usar el avanzado Seleccionador de Carpetas</string>
<string name="advanced_folder_picker_summary">Seleccionar cualquier carpeta en el dispositivo para sincronizar</string>
<string name="use_root_title">Ejecutar Syncthing como Superusuario</string>
<string name="notification_type_title">Notificación</string>
<string name="notification_type_summary">Escoger el tipo de notificación</string>
<string-array name="notification_type_entries">
<item>Normal</item>
<item>Baja Prioridad</item>
<item>Ninguna</item>
</string-array>
<string name="device_name">Nombre del dispositivo</string>
<string name="listen_address">Direcciones de escucha del Protocolo de Sincronización</string>
@ -242,23 +224,18 @@
<string name="keep_wakelock_while_binary_running">Mantener el CPU encendido mientras Syncthing está en ejecución</string>
<string name="keep_wakelock_while_binary_running_summary">Use estos ajustes si experimenta desconexiones inesperadas mientras opera con la batería. Esto resultará en un consumo elevado de batería.</string>
<!-- Dialog shown before config export -->
<string name="dialog_confirm_export">¿Realmente quiere exportar su configuración? Los archivos existentes se sobreescribirán.\n\n¡ADVERTENCIA! Otras aplicaciones pudieran leer la llave privada desde la ubicación del respaldo y usarla para descargar/modificar los archivos sincronizados.</string>
<!-- Dialog shown before config import -->
<string name="dialog_confirm_import">¿Realmente quiere importar una nueva configuración? Los archivos existentes se sobreescribirán.</string>
<!-- Toast shown after config was successfully exported -->
<!-- Toast shown after config was exported -->
<string name="config_export_successful">Configuración exportada a %1$s</string>
<string name="import_config">Importar Configuración</string>
<!-- Toast shown after config was successfully imported -->
<!-- Toast shown after config was imported -->
<string name="config_imported_successful">Configuración importada</string>
<!-- Toast shown after config was successfully imported -->
<string name="config_import_failed">Importar la configuración falló, asegúrese que los archivos están en %1$s</string>
<!-- Title for the preference to reset Syncthing indexes -->

View file

@ -16,10 +16,6 @@
<string name="cont">Continuar</string>
<string name="finish">Finalizar</string>
<string name="generic_error">Error</string>
<!-- MainActivity -->
<!-- Title of the "add folder" menu action -->
<string name="add_folder">Añadir carpeta</string>
@ -216,7 +212,6 @@
<string name="category_run_conditions">Condiciones de ejecución</string>
<string name="category_behaviour">Comportamiento</string>
<string name="category_syncthing_options">Opciones de Syncthing</string>
<string name="category_backup">Copia de seguridad</string>
<string name="category_debug">Depuración</string>
<string name="category_experimental">Experimental</string>
@ -226,24 +221,10 @@
<string name="respect_battery_saving_title">Respeta la configuración de ahorro de batería de Android</string>
<!-- Preferences - Behaviour -->
<string name="advanced_folder_picker">Usar selección avanzada de carpeta</string>
<string name="advanced_folder_picker_summary">Escoja alguna carpeta del dispositivo para sincronizar</string>
<string name="use_root_title">Ejecutar Syncthing como superusuario</string>
<string name="use_root_summary">Esta es una característica inestable que podría causar problemas con Syncthing y con tu dispositivo. Si aparecieran problemas podrías tener que reinstalar Syncthing.</string>
<string name="notification_type_title">Notificación</string>
<string name="notification_type_summary">Elige el tipo de notificación</string>
<string-array name="notification_type_entries">
<item>Normal</item>
<item>Baja prioridad</item>
<item>Ninguna</item>
</string-array>
<string name="preference_language_title">Idioma</string>
<string name="preference_language_summary">Cambiar el idioma de la aplicación</string>
@ -276,8 +257,6 @@
<string name="keep_wakelock_while_binary_running">Mantener la CPU activa mientras se ejecuta Syncthing</string>
<string name="keep_wakelock_while_binary_running_summary">Usa este ajuste si experimentas desconexiones inesperadas mientras funcionas con la batería. Esto resultará en un incremento del consumo de batería.</string>
<string name="use_tor_title">Usar Tor</string>
<string name="use_legacy_hashing_title">Utilizar método antiguo para generar los hash</string>
@ -290,15 +269,12 @@
<!-- Dialog shown before config import -->
<string name="dialog_confirm_import">¿Realmente deseas importar una nueva configuración? Se sobrescribirán los archivos existentes.</string>
<!-- Toast shown after config was successfully exported -->
<!-- Toast shown after config was exported -->
<string name="config_export_successful">La configuración fue exportada a %1$s</string>
<string name="import_config">Importar configuración</string>
<!-- Toast shown after config was successfully imported -->
<!-- Toast shown after config was imported -->
<string name="config_imported_successful">Configuración importada</string>
<!-- Toast shown after config was successfully imported -->
<string name="config_import_failed">Importación de la configuración fallida, comprueba que los ficheros están en %1$s</string>
<!-- Title for the preference to reset Syncthing indexes -->

View file

@ -19,10 +19,6 @@ Ilmoitathan ystävällisesti kaikista havaitsemistasi ongelmista Githubin kautta
<string name="finish">Valmis</string>
<string name="generic_example">Esimerkki</string>
<string name="generic_error">Virhe</string>
<!-- MainActivity -->
<!-- Title of the "add folder" menu action -->
<string name="add_folder">Lisää kansio</string>
@ -232,7 +228,6 @@ Ilmoitathan ystävällisesti kaikista havaitsemistasi ongelmista Githubin kautta
<string name="category_run_conditions">Käyntiehdot</string>
<string name="category_behaviour">Käyttäytyminen</string>
<string name="category_syncthing_options">Syncthing asetukset</string>
<string name="category_backup">Varmuuskopio</string>
<string name="category_debug">Vianhaku</string>
<string name="category_experimental">Kokeellinen</string>
@ -242,18 +237,10 @@ Ilmoitathan ystävällisesti kaikista havaitsemistasi ongelmista Githubin kautta
<string name="respect_battery_saving_title">Noudata Androidin virransäästöasetusta</string>
<!-- Preferences - Behaviour -->
<string name="advanced_folder_picker">Käytä edistynyttä Kansionvalitsinta</string>
<string name="advanced_folder_picker_summary">Valitse mikä tahansa laitteen kansio synkronointiin.</string>
<string name="use_root_title">Käynnistä Syncthing pääkäyttäjän oikeuksin.</string>
<string name="use_root_summary">Tämä on epävakaa ominaisuus joka voi aiheuttaa ongelmia Synthingin ja laitteesi kanssa. Jos sinulle tulee vastaan ongelmia, voit joutua asentamaan Syncthingin uudelleen.</string>
<string name="notification_type_title">Ilmoitus</string>
<string name="notification_type_summary">Valitse ilmoituksen tyyppi</string>
<string name="preference_language_title">Kieli</string>
<string name="preference_language_summary">Muuta sovelluksen kieli</string>
@ -286,8 +273,6 @@ Ilmoitathan ystävällisesti kaikista havaitsemistasi ongelmista Githubin kautta
<string name="keep_wakelock_while_binary_running">Pidä suoritin hereillä kun Syncthing on käynnissä</string>
<string name="keep_wakelock_while_binary_running_summary">Käytä tätä asetusta, jos yhteydet katkeilevat odottamattomasti laitteen käydessä akkuvirralla. Tämä lisää virran kulutusta.</string>
<string name="use_tor_title">Käytä Tor-verkkoa</string>
<string name="use_legacy_hashing_title">Käytä vanhaa tarkistussumman laskentaa</string>
@ -300,15 +285,12 @@ Ilmoitathan ystävällisesti kaikista havaitsemistasi ongelmista Githubin kautta
<!-- Dialog shown before config import -->
<string name="dialog_confirm_import">Haluatko varmasti tuoda uudet asetukset? Vanhat tiedostot ylikirjoitetaan.</string>
<!-- Toast shown after config was successfully exported -->
<!-- Toast shown after config was exported -->
<string name="config_export_successful">Asetukset vietiin kansioon %1$s</string>
<string name="import_config">Tuo asetukset</string>
<!-- Toast shown after config was successfully imported -->
<!-- Toast shown after config was imported -->
<string name="config_imported_successful">Asetukset tuotiin</string>
<!-- Toast shown after config was successfully imported -->
<string name="config_import_failed">Asetusten tuonti epäonnistui. Varmista, että tiedostot ovat kansiossa %1$s</string>
<!-- Title for the preference to reset Syncthing indexes -->

View file

@ -21,10 +21,6 @@ S\'il vous plaît, soumettez les problèmes que vous rencontrez via Github.</str
<string name="generic_error">Erreur</string>
<string name="ignore">Ignorer</string>
<!-- MainActivity -->
<!-- Title of the "add folder" menu action -->
<string name="add_folder">Ajouter un partage</string>
@ -245,7 +241,6 @@ S\'il vous plaît, soumettez les problèmes que vous rencontrez via Github.</str
<string name="category_run_conditions">Conditions d\'exécution</string>
<string name="category_behaviour">Comportement</string>
<string name="category_syncthing_options">Options Syncthing</string>
<string name="category_backup">Sauvegarde</string>
<string name="category_debug">Debug</string>
<string name="category_experimental">Expérimental</string>
@ -260,24 +255,10 @@ S\'il vous plaît, soumettez les problèmes que vous rencontrez via Github.</str
<string name="respect_battery_saving_title">Sauvegarde batterie selon les réglages Android</string>
<!-- Preferences - Behaviour -->
<string name="advanced_folder_picker">Choix étendu des répertoires</string>
<string name="advanced_folder_picker_summary">Permettre la sélection de n\'importe quel répertoire de cet appareil pour créer les partages</string>
<string name="use_root_title">Faire fonctionner syncthing en super-utilisateur</string>
<string name="use_root_summary">Ceci est une fonction instable qui peut causer des problèmes entre Syncthing et votre appareil. Si vous rencontrez des problèmes, vous devrez réinstaller Syncthing.</string>
<string name="notification_type_title">Notification</string>
<string name="notification_type_summary">Choisissez le mode de notification</string>
<string-array name="notification_type_entries">
<item>Permanente</item>
<item>Discrète</item>
<item>Aucune</item>
</string-array>
<string name="preference_language_title">Langue</string>
<string name="preference_language_summary">Changer la langue de l\'application</string>
@ -329,8 +310,6 @@ S\'il vous plaît, soumettez les problèmes que vous rencontrez via Github.</str
<string name="keep_wakelock_while_binary_running">Garder le CPU en éveil quand Syncthing fonctionne.</string>
<string name="keep_wakelock_while_binary_running_summary">Utilisez ce paramètre si vous rencontrez des déconnexions inattendues en fonctionnant sur batterie. Il en résultera une augmentation de la consommation de la batterie.</string>
<string name="use_tor_title">Utiliser Tor</string>
<string name="use_tor_summary">Forcer tout le trafic à travers Tor mieux préserver sa vie privée. Nécessite Orbot. Désactive les options de proxy.</string>
@ -361,15 +340,12 @@ S\'il vous plaît, soumettez les problèmes que vous rencontrez via Github.</str
<!-- Dialog shown before config import -->
<string name="dialog_confirm_import">Voulez-vous vraiment importer la nouvelle configuration ? Les paramètres existants seront écrasés.</string>
<!-- Toast shown after config was successfully exported -->
<!-- Toast shown after config was exported -->
<string name="config_export_successful">La configuration a été exportée dans %1$s</string>
<string name="import_config">Importer la configuration</string>
<!-- Toast shown after config was successfully imported -->
<!-- Toast shown after config was imported -->
<string name="config_imported_successful">La configuration a été importée</string>
<!-- Toast shown after config was successfully imported -->
<string name="config_import_failed">Echec de l\'import de la configuration, assurez-vous que les fichiers sont dans %1$s</string>
<!-- Title for the preference to set STTRACE parameters -->
@ -521,7 +497,6 @@ S\'il vous plaît, soumettez les problèmes que vous rencontrez via Github.</str
<string name="syncthing_terminated">Syncthing va s\'arrêter</string>
<!-- Toast shown if syncthing failed to create or read the config -->
<string name="config_create_failed">Echec de création du fichier de configuration</string>
<!-- Label of the default folder created of first start (camera folder). -->
<string name="default_folder_label">Caméra</string>
@ -621,5 +596,4 @@ S\'il vous plaît, soumettez les problèmes que vous rencontrez via Github.</str
<string name="browse">Parcourir</string>
<string name="no_sub_folder_is_selected">Aucun sous-répertoire sélectionné</string>
<string name="share_device_id_chooser">Partager ID de l\'appareil avec</string>
</resources>
</resources>

View file

@ -21,10 +21,6 @@ Kérlek, hogy az esetlegesen felmerülő hibákat jelentsd be a GitHub-on.</stri
<string name="finish">Befejezés</string>
<string name="generic_example">Példa</string>
<string name="generic_error">Hiba</string>
<!-- MainActivity -->
<!-- Title of the "add folder" menu action -->
<string name="add_folder">Mappa hozzáadása</string>
@ -249,7 +245,6 @@ Néhány eszközön extra alkalmazás-leállító alkalmazást telepített fel a
<string name="category_run_conditions">Futás feltételei</string>
<string name="category_behaviour">Viselkedés</string>
<string name="category_syncthing_options">Syncthing opciók</string>
<string name="category_backup">Biztonsági mentés</string>
<string name="category_debug">Hibakeresés</string>
<string name="category_experimental">Kísérleti</string>
@ -264,24 +259,10 @@ Néhány eszközön extra alkalmazás-leállító alkalmazást telepített fel a
<string name="respect_battery_saving_title">Az Android akkumulátor-optimalizáció beállításainak tiszteletben tartása</string>
<!-- Preferences - Behaviour -->
<string name="advanced_folder_picker">Advanced mappaválasztó használata</string>
<string name="advanced_folder_picker_summary">Bármely mappa kiválasztható szinkronizáláshoz</string>
<string name="use_root_title">Syncthing futtatása Superuser-ként</string>
<string name="use_root_summary">Ez egy kísérleti funkció, amely problémákat okozhat mind a Syncthing, mind az eszközöd számára. Ha ilyenbe ütközöl, előfordulhat, hogy újra kell telepítened az alkalmazást.</string>
<string name="notification_type_title">Értesítés</string>
<string name="notification_type_summary">Értesítés típusának kiválasztása</string>
<string-array name="notification_type_entries">
<item>Normál</item>
<item>Alacsony prioritású</item>
<item>Semmilyen</item>
</string-array>
<string name="preference_language_title">Nyelv</string>
<string name="preference_language_summary">Alkalmazás nyelvének megváltoztatása</string>
@ -328,8 +309,6 @@ Néhány eszközön extra alkalmazás-leállító alkalmazást telepített fel a
<string name="use_proxy">Kapcsolódás porxyn keresztül</string>
<string name="keep_wakelock_while_binary_running">CPU ébren tartása a Syncthing futása során</string>
<string name="keep_wakelock_while_binary_running_summary">Ezt a beállítást akkor használd, ha váratlan szakadásokat tapasztalsz akkumulátoros üzemben. Ennek hatására megnő az alkalmazás energiafelhasználása.</string>
<string name="use_tor_title">Tor használata</string>
<string name="use_tor_summary">A megnövelt biztonság érdekében minden forgalom a TOR-on keresztül. Orbot szükséges. Letiltja a proxy beállításokat.</string>
@ -362,15 +341,12 @@ VIGYÁZAT! Más alkalmazások kiolvashatják a backupból a titkos kulcsot, és
<!-- Dialog shown before config import -->
<string name="dialog_confirm_import">Biztosan importálod a konfigurációt? A meglévő fájlok felül lesznek írva.</string>
<!-- Toast shown after config was successfully exported -->
<!-- Toast shown after config was exported -->
<string name="config_export_successful">A konfiguráció exportálása megtörtént: %1$s</string>
<string name="import_config">Konfiguráció importálása</string>
<!-- Toast shown after config was successfully imported -->
<!-- Toast shown after config was imported -->
<string name="config_imported_successful">A konfiguráció importálása megtörtént.</string>
<!-- Toast shown after config was successfully imported -->
<string name="config_import_failed">Nem sikerült a konfiguráció importálása. Győzödj meg róla, hogy a fájlok itt találhatóak: %1$s</string>
<!-- Title for the preference to set STTRACE parameters -->
@ -518,7 +494,6 @@ VIGYÁZAT! Más alkalmazások kiolvashatják a backupból a titkos kulcsot, és
<string name="syncthing_disabled">A Syncthing le van tiltva</string>
<!-- Toast shown if syncthing failed to create or read the config -->
<string name="config_create_failed">Nem sikerült létrehozni a konfigurációs fájlt</string>
<!-- Label of the default folder created of first start (camera folder). -->
<string name="default_folder_label">Kamera</string>
@ -618,5 +593,4 @@ VIGYÁZAT! Más alkalmazások kiolvashatják a backupból a titkos kulcsot, és
<string name="browse">Tallóz</string>
<string name="no_sub_folder_is_selected">Nincs kiválasztott almappa</string>
<string name="share_device_id_chooser">Eszközazonosító megosztása ezzel</string>
</resources>
</resources>

View file

@ -16,10 +16,6 @@ Untuk berbagi data dengan perangkat lain, anda perlu menambah ID masing-masing p
Jika ada masalah silakan laporkan lewat Github.</string>
<string name="cont">Lanjutkan</string>
<!-- MainActivity -->
<!-- Title of the "add folder" menu action -->
<string name="add_folder">Tambah Folder</string>
@ -221,7 +217,6 @@ Jika ada masalah silakan laporkan lewat Github.</string>
<string name="category_run_conditions">Syarat Operasi</string>
<string name="category_behaviour">Perilaku</string>
<string name="category_syncthing_options">Opsi Syncthing</string>
<string name="category_backup">Backup</string>
<string name="category_debug">Debug</string>
<string name="category_experimental">Ujicoba</string>
@ -231,24 +226,10 @@ Jika ada masalah silakan laporkan lewat Github.</string>
<string name="respect_battery_saving_title">Ikuti pengaturan penghematan baterai Android</string>
<!-- Preferences - Behaviour -->
<string name="advanced_folder_picker">Gunakan Pemilihan Folder tahap lanjut</string>
<string name="advanced_folder_picker_summary">Pilih sembarang folder dalam perangkat untuk penyelarasan</string>
<string name="use_root_title">Jalankan Syncthing sebagai Superuser</string>
<string name="use_root_summary">Ini merupakan fitur belum stabik yang mungkin menyebabkan masalah pada Syncthing dan perangkat anda. Jika menemui masalah, anda mungkin harus memasang ulang Syncthing.</string>
<string name="notification_type_title">Notifikasi</string>
<string name="notification_type_summary">Pilih jenis notifikasi</string>
<string-array name="notification_type_entries">
<item>Normal</item>
<item>Prioritas Rendah</item>
<item>Tidak Ada</item>
</string-array>
<string name="preference_language_title">Bahasa</string>
<string name="preference_language_summary">Ganti bahasa dalam aplikasi</string>
@ -285,8 +266,6 @@ Jika ada masalah silakan laporkan lewat Github.</string>
<string name="keep_wakelock_while_binary_running">Buat CPU tetap aktif saat Syncthing berjalan</string>
<string name="keep_wakelock_while_binary_running_summary">Gunakan pengaturan ini jika anda mengalami pemutusan sambungan saat beroperasi dengan baterai. Ini akan menghasilkan peningkatan konsumsi baterai.</string>
<string name="use_tor_title">Gunakan Tor</string>
<string name="use_legacy_hashing_title">Gunakan hashing lawas</string>
@ -299,15 +278,12 @@ Jika ada masalah silakan laporkan lewat Github.</string>
<!-- Dialog shown before config import -->
<string name="dialog_confirm_import">Anda yakin ingin mengimpor konfigurasi baru? Berkas yang ada akan ditimpa.</string>
<!-- Toast shown after config was successfully exported -->
<!-- Toast shown after config was exported -->
<string name="config_export_successful">Konfig sudah diekspor ke %1$s</string>
<string name="import_config">Impor Konfigurasi</string>
<!-- Toast shown after config was successfully imported -->
<!-- Toast shown after config was imported -->
<string name="config_imported_successful">Konfig sudah diimpor</string>
<!-- Toast shown after config was successfully imported -->
<string name="config_import_failed">Impor konfig gagal, pastikan berkasnya dalam %1$s</string>
<!-- Title for the preference to set STTRACE parameters -->

View file

@ -21,10 +21,6 @@ Si prega di segnalare eventuali problemi che si incontrano via Github.</string>
<string name="generic_error">Errore</string>
<string name="ignore">Ignora</string>
<!-- MainActivity -->
<!-- Title of the "add folder" menu action -->
<string name="add_folder">Nuova Cartella</string>
@ -245,7 +241,6 @@ Si prega di segnalare eventuali problemi che si incontrano via Github.</string>
<string name="category_run_conditions">Condizioni di funzionamento</string>
<string name="category_behaviour">Comportamento</string>
<string name="category_syncthing_options">Opzioni di Syncthing</string>
<string name="category_backup">Backup</string>
<string name="category_debug">Debug</string>
<string name="category_experimental">Sperimentale</string>
@ -260,24 +255,10 @@ Si prega di segnalare eventuali problemi che si incontrano via Github.</string>
<string name="respect_battery_saving_title">Rispetta l\'impostazione di risparmio batteria di Android</string>
<!-- Preferences - Behaviour -->
<string name="advanced_folder_picker">Utilizza Selettore Cartella avanzato</string>
<string name="advanced_folder_picker_summary">Selezionare una cartella sul dispositivo per la sincronizzazione</string>
<string name="use_root_title">Esegui Syncthing come Superutente</string>
<string name="use_root_summary">Questa è una caratteristica instabile che può causare problemi con Syncthing e con il dispositivo. In caso di problemi, potrebbe essere necessario reinstallare Syncthing.</string>
<string name="notification_type_title">Notifica</string>
<string name="notification_type_summary">Scegli tipo di notifica</string>
<string-array name="notification_type_entries">
<item>Normale</item>
<item>Bassa priorità</item>
<item>Nessuno</item>
</string-array>
<string name="preference_language_title">Lingua</string>
<string name="preference_language_summary">Cambia la lingua dell\'app</string>
@ -329,8 +310,6 @@ Si prega di segnalare eventuali problemi che si incontrano via Github.</string>
<string name="keep_wakelock_while_binary_running">Mantieni attiva la CPU quando syncthing è in esecuzione</string>
<string name="keep_wakelock_while_binary_running_summary">Usa questa impostazione se rilevi disconnessioni inaspettate durante il funzionamento a batteria. Questo aumenterà il consumo della batteria.</string>
<string name="use_tor_title">Utilizza Tor</string>
<string name="use_tor_summary">Forza tutto il traffico attraverso Tor per una maggiore privacy. Richiede Orbot. Disabilita le opzioni proxy.</string>
@ -361,15 +340,12 @@ Si prega di segnalare eventuali problemi che si incontrano via Github.</string>
<!-- Dialog shown before config import -->
<string name="dialog_confirm_import">Vuoi realmente importare una nuova configurazione? I files esistenti verranno sovrascritti.</string>
<!-- Toast shown after config was successfully exported -->
<!-- Toast shown after config was exported -->
<string name="config_export_successful">Config è stata esportata in %1$s</string>
<string name="import_config">Importa Configurazione</string>
<!-- Toast shown after config was successfully imported -->
<!-- Toast shown after config was imported -->
<string name="config_imported_successful">Configurazione importata</string>
<!-- Toast shown after config was successfully imported -->
<string name="config_import_failed">Importazione della configurazione fallita. Assicurarsi che i file siano in %1$s</string>
<!-- Title for the preference to set STTRACE parameters -->
@ -521,7 +497,6 @@ Si prega di segnalare eventuali problemi che si incontrano via Github.</string>
<string name="syncthing_terminated">Syncthing è stato terminato</string>
<!-- Toast shown if syncthing failed to create or read the config -->
<string name="config_create_failed">Impossibile creare il file di configurazione</string>
<!-- Label of the default folder created of first start (camera folder). -->
<string name="default_folder_label">Camera</string>
@ -621,5 +596,4 @@ Si prega di segnalare eventuali problemi che si incontrano via Github.</string>
<string name="browse">Sfoglia</string>
<string name="no_sub_folder_is_selected">Nessuna sottocartella selezionata </string>
<string name="share_device_id_chooser">Condividi ID dispositivo con</string>
</resources>
</resources>

View file

@ -20,10 +20,6 @@
<string name="generic_error">エラー</string>
<string name="ignore">無視</string>
<!-- MainActivity -->
<!-- Title of the "add folder" menu action -->
<string name="add_folder">フォルダーを追加</string>
@ -228,7 +224,6 @@
<string name="category_run_conditions">実行条件</string>
<string name="category_behaviour">動作</string>
<string name="category_syncthing_options">同期オプション</string>
<string name="category_backup">バックアップ</string>
<string name="category_debug">デバッグ</string>
<string name="category_experimental">実験的</string>
@ -238,24 +233,10 @@
<string name="respect_battery_saving_title">Android の節電設定に従う</string>
<!-- Preferences - Behaviour -->
<string name="advanced_folder_picker">高度なフォルダー選択を使用</string>
<string name="advanced_folder_picker_summary">デバイス上の任意のフォルダーを選択できます</string>
<string name="use_root_title">スーパーユーザーとして実行</string>
<string name="use_root_summary">これは Syncthing とお使いのデバイスに問題が生じる可能性のある、安定していない機能です。問題が発生した場合は、Syncthing の再インストールが必要な場合があります。</string>
<string name="notification_type_title">通知</string>
<string name="notification_type_summary">通知のタイプを選択します</string>
<string-array name="notification_type_entries">
<item>通常</item>
<item>優先度低</item>
<item>なし</item>
</string-array>
<string name="preference_language_title">言語</string>
<string name="preference_language_summary">アプリの言語を変更します</string>
@ -300,8 +281,6 @@
<string name="keep_wakelock_while_binary_running">実行中は CPU をオンのままにする</string>
<string name="keep_wakelock_while_binary_running_summary">バッテリーでの動作中に予期しない切断が発生する場合オンにしてください。バッテリー消費量が増える場合があります。</string>
<string name="use_tor_title">Tor を使用する</string>
<string name="use_legacy_hashing_title">レガシーハッシュを使用する</string>
@ -314,15 +293,12 @@
<!-- Dialog shown before config import -->
<string name="dialog_confirm_import">新しい設定をインポートしてもよろしいですか? 既存のファイルは上書きされます。</string>
<!-- Toast shown after config was successfully exported -->
<!-- Toast shown after config was exported -->
<string name="config_export_successful">設定を %1$s にエクスポートしました</string>
<string name="import_config">設定のインポート</string>
<!-- Toast shown after config was successfully imported -->
<!-- Toast shown after config was imported -->
<string name="config_imported_successful">設定をインポートしました</string>
<!-- Toast shown after config was successfully imported -->
<string name="config_import_failed">設定のインポートに失敗しました。%1$s にファイルがあるか確認してください</string>
<!-- Title for the preference to set STTRACE parameters -->
@ -453,7 +429,6 @@
<string name="syncthing_disabled">Syncthing は無効になりました</string>
<!-- Toast shown if syncthing failed to create or read the config -->
<string name="config_create_failed">設定ファイルの作成に失敗しました</string>
<!-- Label of the default folder created of first start (camera folder). -->
<string name="default_folder_label">カメラ</string>
@ -550,5 +525,4 @@
<string name="browse">閲覧</string>
<string name="no_sub_folder_is_selected">サブフォルダーが選択されていません</string>
<string name="share_device_id_chooser">次とデバイス ID を共有</string>
</resources>
</resources>

View file

@ -18,10 +18,6 @@
<string name="cont">계속</string>
<string name="finish">완료</string>
<string name="generic_error">오류</string>
<!-- MainActivity -->
<!-- Title of the "add folder" menu action -->
<string name="add_folder">폴더 추가</string>
@ -226,7 +222,6 @@
<string name="category_run_conditions">작동 상태</string>
<string name="category_behaviour">동작</string>
<string name="category_syncthing_options">Syncthing 옵션 </string>
<string name="category_backup">백업</string>
<string name="category_debug">디버그</string>
<string name="category_experimental">실험적인 기능</string>
@ -236,24 +231,10 @@
<string name="respect_battery_saving_title">안드로이드 배터리 절약 설정 우선</string>
<!-- Preferences - Behaviour -->
<string name="advanced_folder_picker">고급 폴더 선택기 사용</string>
<string name="advanced_folder_picker_summary">기기에서 동기화에 사용할 폴더를 골라 주세요</string>
<string name="use_root_title">Syncthing을 Superuser로 실행</string>
<string name="use_root_summary">이 기능은 불안정하며 Syncthing과 기기에 문제를 일으킬 수 있습니다. 문제가 발생한 경우 Syncthing을 재설치 해야 할 수도 있습니다.</string>
<string name="notification_type_title">알림</string>
<string name="notification_type_summary">알림 종류를 선택하세요</string>
<string-array name="notification_type_entries">
<item>일반</item>
<item>우선 순위 낮음</item>
<item>사용 안 함</item>
</string-array>
<string name="preference_language_title">언어</string>
<string name="preference_language_summary">언어 변경하기</string>
@ -298,8 +279,6 @@
<string name="keep_wakelock_while_binary_running">Syncthing이 실행 중일 때 CPU를 깨어 있는 상태로 두기</string>
<string name="keep_wakelock_while_binary_running_summary">만약 배터리로 사용중 예상하지 못한 접속 끊김이 발생 했다면 이 설정을 사용합니다. 이 기능은 배터리 소비를 늘립니다.</string>
<string name="use_tor_title">Tor 사용</string>
<string name="use_legacy_hashing_title">레가시 해싱 쓰기</string>
@ -312,15 +291,12 @@
<!-- Dialog shown before config import -->
<string name="dialog_confirm_import">새로운 설정을 불러오시겠습니까? 현재 존재하는 파일이 덮어쓰기됩니다.`</string>
<!-- Toast shown after config was successfully exported -->
<!-- Toast shown after config was exported -->
<string name="config_export_successful">설정을 %1$s 로 내보내기했습니다</string>
<string name="import_config">설정 불러오기</string>
<!-- Toast shown after config was successfully imported -->
<!-- Toast shown after config was imported -->
<string name="config_imported_successful">설정을 불러왔습니다</string>
<!-- Toast shown after config was successfully imported -->
<string name="config_import_failed">설정을 불러오지 못했습니다, 파일이 %1$s에 있는지 확인해 주세요</string>
<!-- Title for the preference to set STTRACE parameters -->
@ -451,7 +427,6 @@
<string name="syncthing_disabled">Syncthing이 비활성화되었습니다</string>
<!-- Toast shown if syncthing failed to create or read the config -->
<string name="config_create_failed">구성 파일을 만드는데 실패 했습니다.</string>
<!-- Label of the default folder created of first start (camera folder). -->
<string name="default_folder_label">카메라</string>
@ -548,5 +523,4 @@
<string name="browse">탐색</string>
<string name="no_sub_folder_is_selected">하위 폴더가 선택되지 않았습니다</string>
<string name="share_device_id_chooser">기기 ID 공유</string>
</resources>
</resources>

View file

@ -12,10 +12,6 @@
<string name="welcome_title">Velkommen til Syncthing for Android</string>
<string name="generic_error">Feil</string>
<!-- MainActivity -->
<!-- Title of the "add folder" menu action -->
<string name="add_folder">Legg til Mappe</string>
@ -209,24 +205,10 @@
<string name="sync_only_wifi_ssids_wifi_turn_on_wifi">Vennligst skru på WiFi for å velge nettverk.</string>
<!-- Preferences - Behaviour -->
<string name="advanced_folder_picker">Bruk avansert mappevelger</string>
<string name="advanced_folder_picker_summary">Velg en mappe på enheten for synkronisering</string>
<string name="use_root_title">Kjør Syncthing som superbruker</string>
<string name="use_root_summary">Dette er en ustabil funksjon som kan forårsake problemer med Syncthing og med din enhet. Hvis det oppstår problemer kan du bli nødt til å reinstallere Syncthing.</string>
<string name="notification_type_title">Varsler</string>
<string name="notification_type_summary">Velg varslingstype</string>
<string-array name="notification_type_entries">
<item>Normal</item>
<item>Lav prioritet</item>
<item>Ingen</item>
</string-array>
<string name="device_name">Enhetsnavn</string>
<string name="listen_address">Lytteadresser for synkeprotokoll</string>
@ -251,23 +233,18 @@
<string name="keep_wakelock_while_binary_running">Hold prosessoren våken mens Syncthing kjører</string>
<string name="keep_wakelock_while_binary_running_summary">Bruk denne innstillingen dersom du opplever uventede frakoblinger mens enheten går på batteri. Dette vil medføre økt batteriforbruk.</string>
<!-- Dialog shown before config export -->
<string name="dialog_confirm_export">Ønsker du virkelig å eksportere innstillingene? Eksisterende filer vil bli overskrevet.\n\nADVARSEL! Andre applikasjoner kan være i stand til å lese den private nøkkelen fra sikkerhetskopien og bruke den til å laste ned eller endre synkroniserte filer.</string>
<!-- Dialog shown before config import -->
<string name="dialog_confirm_import">Er du sikker på at du vil importere innstillinger? Eksisterende filer vil bli skrevet over.</string>
<!-- Toast shown after config was successfully exported -->
<!-- Toast shown after config was exported -->
<string name="config_export_successful">Innstillingene ble eksportert til %1$s</string>
<string name="import_config">Importer instillinger</string>
<!-- Toast shown after config was successfully imported -->
<!-- Toast shown after config was imported -->
<string name="config_imported_successful">Instillingene ble importert</string>
<!-- Toast shown after config was successfully imported -->
<string name="config_import_failed">Import av innstillinger mislyktes, sørg for at filene er i %1$s</string>
<!-- Title for the preference to reset Syncthing indexes -->

View file

@ -21,10 +21,6 @@ Als je problemen tegenkomt, meld ze dan via GitHub.</string>
<string name="generic_error">Fout</string>
<string name="ignore">Negeren</string>
<!-- MainActivity -->
<!-- Title of the "add folder" menu action -->
<string name="add_folder">Map toevoegen</string>
@ -245,7 +241,6 @@ Als je problemen tegenkomt, meld ze dan via GitHub.</string>
<string name="category_run_conditions">Uitvoervoorwaarden</string>
<string name="category_behaviour">Gedrag</string>
<string name="category_syncthing_options">Syncthing-opties</string>
<string name="category_backup">Back-up</string>
<string name="category_debug">Debug</string>
<string name="category_experimental">Experimenteel</string>
@ -260,24 +255,10 @@ Als je problemen tegenkomt, meld ze dan via GitHub.</string>
<string name="respect_battery_saving_title">Eerbiedig de batterijbesparingsinstellingen van Android</string>
<!-- Preferences - Behaviour -->
<string name="advanced_folder_picker">Gebruik geavanceerde mapkiezer</string>
<string name="advanced_folder_picker_summary">Selecteer een map op het toestel om te synchroniseren</string>
<string name="use_root_title">Syncthing uitvoeren als superuser</string>
<string name="use_root_summary">Dit is een onstabiele functie die problemen kan veroorzaken met Syncthing en je apparaat. Als je problemen zou tegenkomen is het mogelijk dat je Syncthing opnieuw moet installeren.</string>
<string name="notification_type_title">Melding</string>
<string name="notification_type_summary">Kies het meldingstype</string>
<string-array name="notification_type_entries">
<item>Normaal</item>
<item>Lage prioriteit</item>
<item>Geen</item>
</string-array>
<string name="preference_language_title">Taal</string>
<string name="preference_language_summary">Wijzig de taal van de app</string>
@ -329,8 +310,6 @@ Als je problemen tegenkomt, meld ze dan via GitHub.</string>
<string name="keep_wakelock_while_binary_running">Laat de CPU niet slapen wanneer Syncthing wordt uitgevoerd</string>
<string name="keep_wakelock_while_binary_running_summary">Gebruik deze instelling als je onverwacht losgekoppeld wordt wanneer je op batterij werkt. Dit zal leiden tot verhoogd batterijverbruik.</string>
<string name="use_tor_title">Gebruik Tor</string>
<string name="use_tor_summary">Dwing alle verkeer door Tor voor verhoogde privacy. Schakelt proxyopties uit.</string>
@ -361,15 +340,12 @@ Als je problemen tegenkomt, meld ze dan via GitHub.</string>
<!-- Dialog shown before config import -->
<string name="dialog_confirm_import">Wil je een nieuwe configuratie echt importeren? Bestaande bestanden zullen worden overschreven.</string>
<!-- Toast shown after config was successfully exported -->
<!-- Toast shown after config was exported -->
<string name="config_export_successful">Configuratie is geëxporteerd naar %1$s</string>
<string name="import_config">Configuratie importeren</string>
<!-- Toast shown after config was successfully imported -->
<!-- Toast shown after config was imported -->
<string name="config_imported_successful">Configuratie geïmporteerd</string>
<!-- Toast shown after config was successfully imported -->
<string name="config_import_failed">Importeren van configuratie mislukt, zorg dat de bestanden zich in %1$s bevinden</string>
<!-- Title for the preference to set STTRACE parameters -->
@ -521,7 +497,6 @@ Als je problemen tegenkomt, meld ze dan via GitHub.</string>
<string name="syncthing_terminated">Syncthing is beëindigd</string>
<!-- Toast shown if syncthing failed to create or read the config -->
<string name="config_create_failed">Aanmaken van configuratiebestand mislukt</string>
<!-- Label of the default folder created of first start (camera folder). -->
<string name="default_folder_label">Camera</string>
@ -621,5 +596,4 @@ Als je problemen tegenkomt, meld ze dan via GitHub.</string>
<string name="browse">Bladeren</string>
<string name="no_sub_folder_is_selected">Geen onderliggende map geselecteerd</string>
<string name="share_device_id_chooser">Apparaat-ID delen met</string>
</resources>
</resources>

View file

@ -12,10 +12,6 @@
<string name="welcome_title">Velkommen til Synchting for Android</string>
<string name="generic_error">Feil</string>
<!-- MainActivity -->
<!-- Title of the "add folder" menu action -->
<string name="add_folder">Legg til mappe</string>
@ -209,24 +205,10 @@
<string name="sync_only_wifi_ssids_wifi_turn_on_wifi">Skru på WiFi for å velje nettverk.</string>
<!-- Preferences - Behaviour -->
<string name="advanced_folder_picker">Bruk avansert mappeveljar</string>
<string name="advanced_folder_picker_summary">Vel kva mappe som helst for synkronisering</string>
<string name="use_root_title">Køyr Syncthing som superbrukar</string>
<string name="use_root_summary">Dette er ein ustabil funksjon som kan forårsake problem med Syncthing og med din eining. Hvis det oppstår problem kan du bli nøydd til å installere Syncthing på nytt.</string>
<string name="notification_type_title">Varsling</string>
<string name="notification_type_summary">Vel varslingstype</string>
<string-array name="notification_type_entries">
<item>Normal</item>
<item>Låg prioritet</item>
<item>Ingen</item>
</string-array>
<string name="device_name">Einingsnamn</string>
<string name="listen_address">Lytteadresse for synkroniseringsprotokoll</string>
@ -251,23 +233,18 @@
<string name="keep_wakelock_while_binary_running">Hald prosessoren vaken medan Syncthing køyrer</string>
<string name="keep_wakelock_while_binary_running_summary">Bruk denne innstillinga om du opplever uventa avkoplingar medan du køyrer på batteri. Dette vil føre til auka batteriforbruk.</string>
<!-- Dialog shown before config export -->
<string name="dialog_confirm_export">Vil du verkeleg eksportere innstillingane? Eksisterande filer vil verte skrivne over. \n\nÅTVARING: Andre appar kan vere i stand til å lese den private nøkkelen frå tryggingskopien, og bruke den til å laste ned eller endre synkroniserte filer.</string>
<!-- Dialog shown before config import -->
<string name="dialog_confirm_import">Vil du verkeleg importere ei ny innstillingsfil? Eksisterande filer vil verte skrivne over.</string>
<!-- Toast shown after config was successfully exported -->
<!-- Toast shown after config was exported -->
<string name="config_export_successful">Innstillingar vart eksportert til %1$s</string>
<string name="import_config">Importer innstillingar</string>
<!-- Toast shown after config was successfully imported -->
<!-- Toast shown after config was imported -->
<string name="config_imported_successful">Innstillingar vart importerte</string>
<!-- Toast shown after config was successfully imported -->
<string name="config_import_failed">Import av innstillingar mislukkast. Pass på at filene er i %1$s</string>
<!-- Title for the preference to reset Syncthing indexes -->

View file

@ -1,114 +1,4 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<!--MainActivity-->
<!--Title of the "add folder" menu action-->
<!--Title of the "share device id" menu action-->
<!--Shown in the chooser dialog when sharing a Device ID-->
<!--Text for FoldersFragment and DevicesFragment loading view-->
<!--FoldersFragment-->
<!--Format string for folder progress. First parameter is status string, second is sync percentage-->
<!--Shown if no folders exist-->
<!--Format string for folder file count-->
<!--DevicesFragment-->
<!--Shown if no devices exist-->
<!--Indicates that a folder is fully synced to the local device-->
<!--Indicates that the device is currently syncing. Parameter is sync percentage-->
<!--Indicates that there is no connection to the device-->
<!--Title for current download rate-->
<!--Title for current upload rate-->
<!--DrawerFragment-->
<!--Placeholder for device ID field, to avoid layout changes. This is never visible to users.-->
<!--Same as download_title with a colon and space appended-->
<!--Same as upload_title with a colon and space appended-->
<!--Title for current CPU usage-->
<!--Title for current RAM usage-->
<!--Title for announce server status-->
<!--Menu item to donate-->
<!--FolderSettingsFragment-->
<!--Setting title-->
<!--Setting title-->
<!--Setting title-->
<!--Setting title-->
<!--Setting title-->
<!--Setting title-->
<!--Title for FolderSettingsFragment in create mode-->
<!--Title for FolderSettingsFragment in edit mode-->
<!--Menu item to confirm folder creation-->
<!--Dialog shown when attempting to delete a folder-->
<!--Toast shown when trying to create a folder with an invalid ID-->
<!--Toast shown when trying to create a folder with an empty path-->
<!--Dialog shown before config export-->
<!--Dialog shown before config import-->
<!--DeviceSettingsFragment-->
<!--Setting title-->
<!--Setting title-->
<!--Setting title-->
<!--Setting title-->
<!--Setting title-->
<!--Strings representing compression options-->
<!--Setting title-->
<!--ActionBar item-->
<!--Title for DeviceSettingsFragment in create mode-->
<!--Menu item to confirm adding a device-->
<!--Title for DeviceSettingsFragment in edit mode-->
<!--Dialog shown when attempting to delete a device-->
<!--Toast shown when trying to create a device with an empty ID-->
<!--Toast shown when trying to create a device with an empty name-->
<!--Content description for device ID qr code icon-->
<!--Toast show if we could not get root permissions-->
<!--WebGuiActivity-->
<!--Title of the web gui activity-->
<!--Text for WebGuiActivity loading view-->
<!--Shown instead of web_gui_loading if the key does not exist and has to be created-->
<!--Title for dialog displayed on first start-->
<!--Text for dialog displayed on first start-->
<!--SettingsFragment-->
<!--Activity title-->
<!--Preference title-->
<!--Preference summary in case it is enabled-->
<!--Preference summary in case it is disabled-->
<!--Toast shown after config was successfully exported-->
<!--Toast shown after config was successfully imported-->
<!--Toast shown after config was successfully imported-->
<!--Title for the preference to set STTRACE parameters-->
<!--Toast after entering invalid STTRACE params-->
<!--Toast after entering invalid username-->
<!--Toast after entering invalid password-->
<!--Title for the preference to reset Syncthing indexes-->
<!--Syncthing was reset-->
<!--Syncthing was reset-->
<!--Settings item that opens the log activity-->
<!--Summary for the log activity-->
<!--Settings item that opens issue tracker-->
<!--Summary for the issue tracker settings item-->
<!--URL of the issue tracker-->
<!--Title of the preference showing upstream version name-->
<!--Title of the preference showing this app's version name-->
<!--FolderPickerAcitivity-->
<!--Activity title-->
<!--Toast shown on devices with kitkat or higher-->
<!--ListView empty text-->
<!--Menu item to create folder on the file system-->
<!--Menu item to select the current folder-->
<!--LogActivity-->
<!--Title of the "log" activity-->
<!--Title of the "log android" menu button-->
<!--Title of the "log Syncthing" menu button-->
<!--Title of the "share log" menu button-->
<!--SyncthingService-->
<!--Title of the "syncthing disabled" dialog-->
<!--Button text on the "syncthing disabled" dialog, used as menu item to stop syncthing service if "always_run_in_background" is true-->
<!--Title of the notification shown while syncthing is running and enabled-->
<!--Toast shown if folder observer fails to traverse a folder-->
<!--Toast shown if syncthing failed to create a config-->
<!--ID of the default folder created on first start (camera folder). Must only contain 'a-z0-9_-'. Parameter is the device name-->
<!--RestApi-->
<!--Title of the notification shown when a restart is needed-->
<!--Text for positive button in restart dialog-->
<!--Text for the dismiss button of the restart Activity-->
<!--Text of the notification shown when a restart is needed-->
<!--Shown when a device ID is copied to the clipboard-->
<!--Strings representing units for file sizes, from smallest to largest-->
<!--Strings representing units for transfer rates, from smallest to largest-->
<!--Possible folder states-->
</resources>
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
</resources>

View file

@ -20,10 +20,6 @@ Proszę zgłaszać napotkane błędy programu za pośrednictwem serwisu Github.<
<string name="generic_error">Błąd</string>
<string name="ignore">Ignoru</string>
<!-- MainActivity -->
<!-- Title of the "add folder" menu action -->
<string name="add_folder">Dodaj katalog</string>
@ -231,7 +227,6 @@ Proszę zgłaszać napotkane błędy programu za pośrednictwem serwisu Github.<
<string name="category_run_conditions">Warunki działania</string>
<string name="category_behaviour">Zachowanie</string>
<string name="category_syncthing_options">Ustawienia Syncthing</string>
<string name="category_backup">Kopia zapasowa</string>
<string name="category_debug">Diagnozowanie błędów</string>
<string name="category_experimental">Eksperymentalne</string>
@ -241,18 +236,10 @@ Proszę zgłaszać napotkane błędy programu za pośrednictwem serwisu Github.<
<string name="respect_battery_saving_title">Respektuj ustawienia oszczędzania energii Androida</string>
<!-- Preferences - Behaviour -->
<string name="advanced_folder_picker">Zaawansowane wybieranie katalogów</string>
<string name="advanced_folder_picker_summary">Wskazuje dowolny katalog na urządzeniu do zsynchronizowania</string>
<string name="use_root_title">Synchronizuje zawartość z uprawnieniami użytkownika Superuser</string>
<string name="use_root_summary">To jest niestabilna funkcja, która może sprawiać problemy z Syncthing i urządzeniami. W przypadku napotkania błędów możliwe, że niezbędne będzie przeinstalowanie programu. </string>
<string name="notification_type_title">Powiadomienie</string>
<string name="notification_type_summary">Wybiera rodzaj powiadomienia</string>
<string name="preference_language_title">Język</string>
<string name="preference_language_summary">Zmień język aplikacji</string>
@ -297,8 +284,6 @@ Proszę zgłaszać napotkane błędy programu za pośrednictwem serwisu Github.<
<string name="keep_wakelock_while_binary_running">Utrzymywanie wybudzonego CPU podczas działania</string>
<string name="keep_wakelock_while_binary_running_summary">Używaj, jeśli doświadczasz nieoczekiwanych rozłączeń w trakcie działania na baterii. Spowoduje to zwiększone jej zużycie.</string>
<string name="use_tor_title">Korzystanie z Tor</string>
<string name="use_legacy_hashing_title">Użyj starego mechanizmu haszowania</string>
@ -311,15 +296,12 @@ Proszę zgłaszać napotkane błędy programu za pośrednictwem serwisu Github.<
<!-- Dialog shown before config import -->
<string name="dialog_confirm_import">Zaimportować nowe ustawienia? Istniejące pliki zostaną zastąpione.</string>
<!-- Toast shown after config was successfully exported -->
<!-- Toast shown after config was exported -->
<string name="config_export_successful">Wyeksportowano ustawienia do %1$s</string>
<string name="import_config">Importuj ustawienia</string>
<!-- Toast shown after config was successfully imported -->
<!-- Toast shown after config was imported -->
<string name="config_imported_successful">Zaimportowano ustawienia</string>
<!-- Toast shown after config was successfully imported -->
<string name="config_import_failed">Nie udało się zaimportować ustawień. Proszę upewnić się, że pliki znajdują się w położeniu %1$s.</string>
<!-- Title for the preference to set STTRACE parameters -->
@ -459,7 +441,6 @@ Proszę zgłaszać napotkane błędy programu za pośrednictwem serwisu Github.<
<string name="syncthing_disabled">Syncthing jest wyłączony</string>
<!-- Toast shown if syncthing failed to create or read the config -->
<string name="config_create_failed">Nie udało się stworzyć pliku konfiguracyjnego</string>
<!-- Label of the default folder created of first start (camera folder). -->
<string name="default_folder_label">Kamera</string>
@ -556,5 +537,4 @@ Proszę zgłaszać napotkane błędy programu za pośrednictwem serwisu Github.<
<string name="browse">Przeglądaj</string>
<string name="no_sub_folder_is_selected">Żaden podfolder nie został wybrany</string>
<string name="share_device_id_chooser">Udostępnij ID urządzenia</string>
</resources>
</resources>

View file

@ -21,10 +21,6 @@ Por favor, nos avise sobre quaisquer problemas que você encontrar via Github.</
<string name="generic_error">Erro</string>
<string name="ignore">Ignorar</string>
<!-- MainActivity -->
<!-- Title of the "add folder" menu action -->
<string name="add_folder">Adicionar pasta</string>
@ -245,7 +241,6 @@ Por favor, nos avise sobre quaisquer problemas que você encontrar via Github.</
<string name="category_run_conditions">Condições de execução</string>
<string name="category_behaviour">Comportamento</string>
<string name="category_syncthing_options">Opções do Syncthing</string>
<string name="category_backup">Backup</string>
<string name="category_debug">Depuração</string>
<string name="category_experimental">Configurações experimentais</string>
@ -260,24 +255,10 @@ Por favor, nos avise sobre quaisquer problemas que você encontrar via Github.</
<string name="respect_battery_saving_title">Honrar a configuração de economia de bateria do Android</string>
<!-- Preferences - Behaviour -->
<string name="advanced_folder_picker">Usar seletor de pasta avançado</string>
<string name="advanced_folder_picker_summary">Selecione qualquer pasta do dispositivo para sincronização</string>
<string name="use_root_title">Executar como Superusuário</string>
<string name="use_root_summary">Este é um recurso instável que pode causar problemas com o Syncthing e seu dispositivo. Caso você encontre problemas, pode ser necessária a reinstalação do Syncthing.</string>
<string name="notification_type_title">Notificação</string>
<string name="notification_type_summary">Escolha o tipo da notificação</string>
<string-array name="notification_type_entries">
<item>Normal</item>
<item>Baixa prioridade</item>
<item>Nenhuma</item>
</string-array>
<string name="preference_language_title">Idioma</string>
<string name="preference_language_summary">Alterar o idioma do aplicativo</string>
@ -324,8 +305,6 @@ Por favor, nos avise sobre quaisquer problemas que você encontrar via Github.</
<string name="use_proxy">Conecte por um proxy</string>
<string name="keep_wakelock_while_binary_running">Manter a CPU acordada</string>
<string name="keep_wakelock_while_binary_running_summary">Marque esta opção se você observar desconexões inesperadas enquanto a bateria do dispositivo não está sendo carregada. Isto resultará em maior uso da bateria.</string>
<string name="use_tor_title">Usar Tor</string>
<string name="use_tor_summary">Force todo o tráfego através do Tor para aumentar privacidade. Orbot é necessário. Desabilita opções de proxy.</string>
@ -356,15 +335,12 @@ Por favor, nos avise sobre quaisquer problemas que você encontrar via Github.</
<!-- Dialog shown before config import -->
<string name="dialog_confirm_import">Quer mesmo importar uma nova configuração? Arquivos existentes serão sobrescritos.</string>
<!-- Toast shown after config was successfully exported -->
<!-- Toast shown after config was exported -->
<string name="config_export_successful">A configuração foi salva em %1$s</string>
<string name="import_config">Importar configuração</string>
<!-- Toast shown after config was successfully imported -->
<!-- Toast shown after config was imported -->
<string name="config_imported_successful">A configuração foi importada</string>
<!-- Toast shown after config was successfully imported -->
<string name="config_import_failed">A importação falhou. Verifique se os arquivos estão em %1$s</string>
<!-- Title for the preference to set STTRACE parameters -->
@ -501,7 +477,6 @@ Por favor, nos avise sobre quaisquer problemas que você encontrar via Github.</
<string name="syncthing_disabled">O Syncthing está desabilitado</string>
<!-- Toast shown if syncthing failed to create or read the config -->
<string name="config_create_failed">Não foi possível criar o arquivo de configuração</string>
<!-- Label of the default folder created of first start (camera folder). -->
<string name="default_folder_label">Câmera</string>
@ -600,5 +575,4 @@ Por favor, nos avise sobre quaisquer problemas que você encontrar via Github.</
<string name="browse">Navegar</string>
<string name="no_sub_folder_is_selected">Nenhuma subpasta selecionada</string>
<string name="share_device_id_chooser">Compartilhe ID do dispositivo com</string>
</resources>
</resources>

View file

@ -18,10 +18,6 @@ Reporte, através do Github, quaisquer problemas que encontre, por favor.</strin
<string name="cont">Continuar</string>
<string name="generic_example">Exemplo</string>
<string name="generic_error">Erro</string>
<!-- MainActivity -->
<!-- Title of the "add folder" menu action -->
<string name="add_folder">Adicionar pasta</string>
@ -221,7 +217,6 @@ Reporte, através do Github, quaisquer problemas que encontre, por favor.</strin
<string name="category_run_conditions">Condições de execução</string>
<string name="category_behaviour">Comportamento</string>
<string name="category_syncthing_options">Opções do Syncthing</string>
<string name="category_backup">Cópia de segurança</string>
<string name="category_debug">Depuração</string>
<string name="category_experimental">Experimental</string>
@ -230,24 +225,10 @@ Reporte, através do Github, quaisquer problemas que encontre, por favor.</strin
<string name="sync_only_wifi_ssids_wifi_turn_on_wifi">Ligue o WiFi para seleccionar redes.</string>
<!-- Preferences - Behaviour -->
<string name="advanced_folder_picker">Usar selector de pasta avançado</string>
<string name="advanced_folder_picker_summary">Seleccione qualquer pasta no dispositivo para sincronizar</string>
<string name="use_root_title">Correr o Syncthing como superutilizador</string>
<string name="use_root_summary">Esta é uma funcionalidade instável que pode causar problemas com o Syncthing e com o seu dispositivo. Se encontrar problemas, pode ter de reinstalar o Syncthing.</string>
<string name="notification_type_title">Notificação</string>
<string name="notification_type_summary">Escolha o tipo de notificação</string>
<string-array name="notification_type_entries">
<item>Normal</item>
<item>Baixa prioridade</item>
<item>Nenhuma</item>
</string-array>
<string name="device_name">Nome do dispositivo</string>
<string name="listen_address">Endereços de escuta do protocolo de sincronização</string>
@ -274,8 +255,6 @@ Reporte, através do Github, quaisquer problemas que encontre, por favor.</strin
<string name="keep_wakelock_while_binary_running">Manter a CPU acordada enquanto o Syncthing está a correr</string>
<string name="keep_wakelock_while_binary_running_summary">Use esta definição se experimentar desconectações inesperadas enquanto estiver a trabalhar com a bateria. Isto irá resultar num aumento do consumo da carga da bateria.</string>
<string name="use_tor_title">Utilizar o Tor</string>
<string name="use_legacy_hashing_title">Usar verificação antiga</string>
@ -288,15 +267,12 @@ Reporte, através do Github, quaisquer problemas que encontre, por favor.</strin
<!-- Dialog shown before config import -->
<string name="dialog_confirm_import">Quer mesmo importar a sua configuração? Os ficheiros existentes vão ser sobrepostos.</string>
<!-- Toast shown after config was successfully exported -->
<!-- Toast shown after config was exported -->
<string name="config_export_successful">A configuração foi exportada para %1$s</string>
<string name="import_config">Importar configuração</string>
<!-- Toast shown after config was successfully imported -->
<!-- Toast shown after config was imported -->
<string name="config_imported_successful">A configuração foi importada</string>
<!-- Toast shown after config was successfully imported -->
<string name="config_import_failed">A importação da configuração falhou, assegure-se que os ficheiros estão em %1$s</string>
<!-- Title for the preference to reset Syncthing indexes -->

View file

@ -23,10 +23,6 @@ Vă rugăm să raportați orice problemă întâlniți, prin intermediul GitHub.
<string name="ignore">Ignoră</string>
<!-- MainActivity -->
<!-- Title of the "add folder" menu action -->
<string name="add_folder">Adăugare director</string>
@ -263,7 +259,6 @@ Vă rugăm să raportați orice problemă întâlniți, prin intermediul GitHub.
<string name="category_run_conditions">Condiții de rulare</string>
<string name="category_behaviour">Comportament</string>
<string name="category_syncthing_options">Opțiuni Syncthing</string>
<string name="category_backup">Copie de rezervă</string>
<string name="category_debug">Depanare</string>
<string name="category_experimental">Experimental</string>
@ -278,24 +273,10 @@ Vă rugăm să raportați orice problemă întâlniți, prin intermediul GitHub.
<string name="respect_battery_saving_title">Se va respecta setarea de economisire a bateriei din Android</string>
<!-- Preferences - Behaviour -->
<string name="advanced_folder_picker">Folosește selectorul avansat de directoare</string>
<string name="advanced_folder_picker_summary">Alegeți orice director de pe dispozitiv pentru sincronizare</string>
<string name="use_root_title">Rulează ca root</string>
<string name="use_root_summary">Aceasta este o funcție instabilă care ar putea cauza probleme atăt Syncthing cât și dispozitivului dumneavoastră. Dacă vă confruntați cu probleme, v-a trebui să reinstalați Syncthing.</string>
<string name="notification_type_title">Notificare</string>
<string name="notification_type_summary">Alegeți tipul de notificare</string>
<string-array name="notification_type_entries">
<item>Normal</item>
<item>Prioritate mică</item>
<item>Nici una</item>
</string-array>
<string name="preference_language_title">Limbă</string>
<string name="preference_language_summary">Alegeți limba de afișat în aplicație</string>
@ -361,8 +342,6 @@ Vă rugăm să raportați orice problemă întâlniți, prin intermediul GitHub.
<string name="keep_wakelock_while_binary_running">Ține procesorul activ când rulează</string>
<string name="keep_wakelock_while_binary_running_summary">Folosiți această setare dacă vă confruntați cu deconectări neașteptate atunci când dispozitivul se alimentează de la baterie. Această opțiune poate duce la o creștere a consumului bateriei.</string>
<string name="use_tor_title">Folosește Tor</string>
<string name="use_tor_summary">Forțează tot traficul prin rețeaua Tor pentru a spori confidențialitatea. Necesită aplicația Orbot. Dezactivează opțiunile proxy.</string>
@ -393,15 +372,12 @@ Vă rugăm să raportați orice problemă întâlniți, prin intermediul GitHub.
<!-- Dialog shown before config import -->
<string name="dialog_confirm_import">Chiar doriți să importați o configurație nouă? Fișierele existente vor fi suprascrise.</string>
<!-- Toast shown after config was successfully exported -->
<!-- Toast shown after config was exported -->
<string name="config_export_successful">Configurația a fost exportată în %1$s</string>
<string name="import_config">Importă configurația</string>
<!-- Toast shown after config was successfully imported -->
<!-- Toast shown after config was imported -->
<string name="config_imported_successful">Configurația a fost importată</string>
<!-- Toast shown after config was successfully imported -->
<string name="config_import_failed">Importarea configurației a eșuat, asigurați-vă că fișierele sunt în %1$s</string>
<!-- Title for the preference to set STTRACE parameters -->
@ -556,7 +532,6 @@ Vă rugăm să raportați orice problemă întâlniți, prin intermediul GitHub.
<string name="syncthing_terminated">Syncthing a fost închis</string>
<!-- Toast shown if syncthing failed to create or read the config -->
<string name="config_create_failed">Creerea fișierului de configurare a eșuat</string>
<!-- Toast shown if a config file crucial to operation is missing -->
<string name="config_file_missing">Un fișier de configurare esențial pentru această operație lipsește</string>
@ -679,5 +654,4 @@ atunci când sunt înlocuite sau șterse de către Syncthing. Versiunile sunt ș
<string name="browse">Navighează</string>
<string name="no_sub_folder_is_selected">Nu este selectat nici un subdirector</string>
<string name="share_device_id_chooser">Partajează ID dispozitiv cu</string>
</resources>
</resources>

View file

@ -21,10 +21,6 @@
<string name="generic_error">Ошибка</string>
<string name="ignore">Игнорировать</string>
<!-- MainActivity -->
<!-- Title of the "add folder" menu action -->
<string name="add_folder">Добавить папку</string>
@ -247,7 +243,6 @@
<string name="category_run_conditions">Условия выполнения</string>
<string name="category_behaviour">Поведение</string>
<string name="category_syncthing_options">Настройки устройства</string>
<string name="category_backup">Резервная копия</string>
<string name="category_debug">Отладка</string>
<string name="category_experimental">Экспериментальное</string>
@ -262,24 +257,10 @@
<string name="respect_battery_saving_title">Учитывать настройки энергосбережения Android</string>
<!-- Preferences - Behaviour -->
<string name="advanced_folder_picker">Использовать продвинутый выбор папок</string>
<string name="advanced_folder_picker_summary">Выберите любую папку на устройстве для синхронизации</string>
<string name="use_root_title">Запуск Syncthing с рут-правами</string>
<string name="use_root_summary">Это нестабильная опция, которая может вызвать проблемы как с Syncthing так и с вашим устройством. Если вы столкнетесь с проблемами, переустановите Syncthing.</string>
<string name="notification_type_title">Уведомление</string>
<string name="notification_type_summary">Выбор метода уведомления</string>
<string-array name="notification_type_entries">
<item>Нормально</item>
<item>Низкий</item>
<item>Никогда</item>
</string-array>
<string name="preference_language_title">Язык</string>
<string name="preference_language_summary">Изменить язык приложения</string>
@ -326,8 +307,6 @@
<string name="use_proxy">Подсоединиться через прокси</string>
<string name="keep_wakelock_while_binary_running">Поддерживать CPU включенным, пока Syncthing работает</string>
<string name="keep_wakelock_while_binary_running_summary">Используйте эту опцию, если у вас происходят потери соединения при работе от батареи. Эта опция увеличит расход заряда батареи.</string>
<string name="use_tor_title">Использовать Tor</string>
<string name="use_tor_summary">Для дополнительной приватности перенаправлять весь трафик через Tor. Требует наличия Orbot. Отключает опции прокси.</string>
@ -358,15 +337,12 @@
<!-- Dialog shown before config import -->
<string name="dialog_confirm_import">Действительно хотите импортировать новую конфигурацию? Существующие файлы будут перезаписаны.</string>
<!-- Toast shown after config was successfully exported -->
<!-- Toast shown after config was exported -->
<string name="config_export_successful">Настройки экспортированы в %1$s</string>
<string name="import_config">Импорт настроек</string>
<!-- Toast shown after config was successfully imported -->
<!-- Toast shown after config was imported -->
<string name="config_imported_successful">Настройки импортированы</string>
<!-- Toast shown after config was successfully imported -->
<string name="config_import_failed">Неудачное импортирование настроек, убедитесь что файлы находятся в %1$s</string>
<!-- Title for the preference to set STTRACE parameters -->
@ -522,7 +498,6 @@
<string name="syncthing_disabled">Syncthing выключен</string>
<!-- Toast shown if syncthing failed to create or read the config -->
<string name="config_create_failed">Ошибка при создании файла конфигурации</string>
<!-- Label of the default folder created of first start (camera folder). -->
<string name="default_folder_label">Камера</string>
@ -622,5 +597,4 @@
<string name="browse">Обзор</string>
<string name="no_sub_folder_is_selected">Подпапка не выбрана</string>
<string name="share_device_id_chooser">Поделиться ID устройства</string>
</resources>
</resources>

View file

@ -12,10 +12,6 @@
<string name="welcome_title">Víta Vás Syncthing pre Android</string>
<string name="generic_error">Chyba</string>
<!-- MainActivity -->
<!-- Title of the "add folder" menu action -->
<string name="add_folder">Pridať Adresár</string>
@ -189,22 +185,8 @@
<string name="category_syncthing_options">Nastavenia Syncthing</string>
<!-- Preferences - Behaviour -->
<string name="advanced_folder_picker">Použiť rozšírený dialóg pre volbu adresára</string>
<string name="advanced_folder_picker_summary">Vyberte ľubovolný adresár pre synchronizáciu</string>
<string name="use_root_title">Spúšťať Syncthing s root oprávneniami</string>
<string name="notification_type_title">Notifikácie</string>
<string name="notification_type_summary">Zvolte si druh notifikácií</string>
<string-array name="notification_type_entries">
<item>Normálne</item>
<item>S nízkou prioritou</item>
<item>Žiadne</item>
</string-array>
<string name="device_name">Názov Zariadenia</string>
<string name="listen_address">Adresa pre Sync Protokol</string>
@ -226,15 +208,12 @@
<!-- Dialog shown before config import -->
<string name="dialog_confirm_import">Naozaj chcete importova konfiguráciu? Existujúce súbory budú prepísané.</string>
<!-- Toast shown after config was successfully exported -->
<!-- Toast shown after config was exported -->
<string name="config_export_successful">Konfigurácia bola exportovaná do %1$s</string>
<string name="import_config">Importovať Konfiguráciu</string>
<!-- Toast shown after config was successfully imported -->
<!-- Toast shown after config was imported -->
<string name="config_imported_successful">Konfigurácia bola importovaná</string>
<!-- Toast shown after config was successfully imported -->
<string name="config_import_failed">Import konfigurácie zlyhal. Prosím, overte, že sú súbory dostupné v %1$s</string>
<!-- Title for the preference to reset Syncthing indexes -->

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
</resources>

View file

@ -23,10 +23,6 @@ Vänligen rapportera eventuella problem du stöter på via Github.</string>
<string name="ignore">Ignorera</string>
<!-- MainActivity -->
<!-- Title of the "add folder" menu action -->
<string name="add_folder">Lägg till mapp</string>
@ -262,7 +258,6 @@ Vänligen rapportera eventuella problem du stöter på via Github.</string>
<string name="category_run_conditions">Körvillkor</string>
<string name="category_behaviour">Beteende</string>
<string name="category_syncthing_options">Syncthing alternativ</string>
<string name="category_backup">Säkerhetskopiera</string>
<string name="category_debug">Felsök</string>
<string name="category_experimental">Experimentell</string>
@ -277,24 +272,10 @@ Vänligen rapportera eventuella problem du stöter på via Github.</string>
<string name="respect_battery_saving_title">Respektera Android-batterisparinställning</string>
<!-- Preferences - Behaviour -->
<string name="advanced_folder_picker">Använd avancerad mappväljare</string>
<string name="advanced_folder_picker_summary">Välj någon mapp på enheten för synkronisering</string>
<string name="use_root_title">Kör som superanvändare</string>
<string name="use_root_summary">Detta är en instabil funktion som kan orsaka problem med Syncthing och med din enhet enhet. Om du stöter på problem, kan du behöva installera om Syncthing.</string>
<string name="notification_type_title">Avisering</string>
<string name="notification_type_summary">Välj aviseringstypen</string>
<string-array name="notification_type_entries">
<item>Normal</item>
<item>Låg prioritet</item>
<item>Ingen</item>
</string-array>
<string name="preference_language_title">Språk</string>
<string name="preference_language_summary">Ändra appens språk</string>
@ -358,8 +339,6 @@ Vänligen rapportera eventuella problem du stöter på via Github.</string>
<string name="keep_wakelock_while_binary_running">Håll CPU:n vaken medan Syncthing körs</string>
<string name="keep_wakelock_while_binary_running_summary">Använd den här inställningen om du får oväntade frånkopplingar under batteridrift. Detta kommer att resultera i ökad batteriförbrukning.</string>
<string name="use_tor_title">Använd Tor</string>
<string name="use_tor_summary">Tvinga all trafik genom Tor för ökad integritet. Kräver Orbot. Inaktiverar proxyalternativ.</string>
@ -390,15 +369,12 @@ Vänligen rapportera eventuella problem du stöter på via Github.</string>
<!-- Dialog shown before config import -->
<string name="dialog_confirm_import">Vill du verkligen importera en ny konfiguration? Befintliga filer kommer att skrivas över.</string>
<!-- Toast shown after config was successfully exported -->
<!-- Toast shown after config was exported -->
<string name="config_export_successful">Konfiguration exporterades till %1$s</string>
<string name="import_config">Importera konfiguration</string>
<!-- Toast shown after config was successfully imported -->
<!-- Toast shown after config was imported -->
<string name="config_imported_successful">Konfigurationen importerades</string>
<!-- Toast shown after config was successfully imported -->
<string name="config_import_failed">Konfigurations importering misslyckades, se till att filerna finns i %1$s</string>
<!-- Title for the preference to set STTRACE parameters -->
@ -550,7 +526,6 @@ Vänligen rapportera eventuella problem du stöter på via Github.</string>
<string name="syncthing_terminated">Syncthing avslutades</string>
<!-- Toast shown if syncthing failed to create or read the config -->
<string name="config_create_failed">Misslyckades med att skapa konfigurationsfil</string>
<!-- Toast shown if a config file crucial to operation is missing -->
<string name="config_file_missing">En konfigurationsfil avgörande för drift saknas</string>
@ -661,5 +636,4 @@ Vänligen rapportera eventuella problem du stöter på via Github.</string>
<string name="browse">Bläddra</string>
<string name="no_sub_folder_is_selected">Ingen undermapp är vald</string>
<string name="share_device_id_chooser">Dela enhetens ID med</string>
</resources>
</resources>

View file

@ -18,10 +18,6 @@ Eğer herhangi bir sorunla karşılaşırsan Github aracılığıyla bildir.</st
<string name="cont">Devam et</string>
<string name="generic_error">Hata</string>
<!-- MainActivity -->
<!-- Title of the "add folder" menu action -->
<string name="add_folder">Klasör Ekleme</string>
@ -218,7 +214,6 @@ Eğer herhangi bir sorunla karşılaşırsan Github aracılığıyla bildir.</st
<string name="category_run_conditions">Çalışma Koşulları</string>
<string name="category_behaviour">Davranış</string>
<string name="category_syncthing_options">Syncthing Seçenekleri</string>
<string name="category_backup">Yedekleme</string>
<string name="category_debug">Hata ayıklama</string>
<string name="category_experimental">Deneysel</string>
@ -227,24 +222,10 @@ Eğer herhangi bir sorunla karşılaşırsan Github aracılığıyla bildir.</st
<string name="sync_only_wifi_ssids_wifi_turn_on_wifi">Ağ seçmek için lütfen kablosuz bağlantınızıın.</string>
<!-- Preferences - Behaviour -->
<string name="advanced_folder_picker">Gelişmiş Klasör Seçici kullan</string>
<string name="advanced_folder_picker_summary">Eşzamanlama yapmak için aygıttan herhangi bir klasör seçin</string>
<string name="use_root_title">Syncthing\'i Superuser/Ayrıcalıklı Kullanıcı olarak Çalıştır</string>
<string name="use_root_summary">Bu, Syncting ve aygıtınız ile sorunlara neden olabilecek kararsız bir özelliktir. Eğer sorun yaşarsanız, Syncthing\'i yeniden yüklemeniz gerekebilir.</string>
<string name="notification_type_title">Bildirimler</string>
<string name="notification_type_summary">Bildirim türünü seç</string>
<string-array name="notification_type_entries">
<item>Olağan</item>
<item>Düşük Öncelikli</item>
<item>Hiçbiri</item>
</string-array>
<string name="device_name">Aygıt Adı</string>
<string name="listen_address">Eşzamanlama Protokolü Dinleme/Bağlanma Adresleri</string>
@ -269,8 +250,6 @@ Eğer herhangi bir sorunla karşılaşırsan Github aracılığıyla bildir.</st
<string name="keep_wakelock_while_binary_running">Syncthing çalışırken CPU\'yu uyanık tut</string>
<string name="keep_wakelock_while_binary_running_summary">Eğer batarya üzerinde çalışırken beklenmedik kopmalar yaşıyorsanız bu ayarı kullanın. Bu artırılmış batarya tüketimiyle sonuçlanacak.</string>
<string name="use_tor_title">Tor kullan</string>
<!-- Dialog shown before config export -->
@ -279,15 +258,12 @@ Eğer herhangi bir sorunla karşılaşırsan Github aracılığıyla bildir.</st
<!-- Dialog shown before config import -->
<string name="dialog_confirm_import">Yeni yapılandırmayı gerçekten içe aktarmak istiyor musun? Var olan dosyaların üzerine yazılacak.</string>
<!-- Toast shown after config was successfully exported -->
<!-- Toast shown after config was exported -->
<string name="config_export_successful">Yapılandırma şurada dışa aktarıldı: %1$s</string>
<string name="import_config">Yapılandırmayı İçe Aktar</string>
<!-- Toast shown after config was successfully imported -->
<!-- Toast shown after config was imported -->
<string name="config_imported_successful">Yapılandırma içe aktarıldı</string>
<!-- Toast shown after config was successfully imported -->
<string name="config_import_failed">Yapılandırma içe aktarılamadı, dosyaların %1$s içinde olduğundan emin olun</string>
<!-- Title for the preference to reset Syncthing indexes -->

View file

@ -10,10 +10,6 @@
<string name="cont">Продовжити</string>
<string name="finish">Завершити</string>
<string name="generic_error">Помилка</string>
<!-- MainActivity -->
<!-- Title of the "add folder" menu action -->
<string name="add_folder">Додати каталог</string>
@ -184,16 +180,6 @@
<string name="sync_only_wifi_ssids_wifi_turn_on_wifi">Будь-ласка, увімкніть Wi-Fi, щоби вибрати мережі</string>
<string name="respect_battery_saving_title">Відповідно до налаштувань енергозбереження пристрою в системі</string>
<string name="notification_type_title">Сповіщення</string>
<string name="notification_type_summary">Вибрати тип сповіщення</string>
<string-array name="notification_type_entries">
<item>Нормальне</item>
<item>Низький пріоритет</item>
<item>Немає</item>
</string-array>
<string name="preference_language_title">Мова</string>
<string name="preference_language_summary">Змінити мову пристрою</string>
@ -233,14 +219,12 @@
<!-- Dialog shown before config import -->
<string name="dialog_confirm_import">Дійсно бажаєте імпортувати нову конфігурацію? Існуючі файли будуть перезаписані</string>
<!-- Toast shown after config was successfully exported -->
<!-- Toast shown after config was exported -->
<string name="config_export_successful">Налаштування експортовано в %1$s</string>
<string name="import_config">Імпортувати налаштування</string>
<!-- Toast shown after config was successfully imported -->
<!-- Toast shown after config was imported -->
<string name="config_imported_successful">Налаштування імпортовано</string>
<string name="environment_variables">Змінні оточення</string>
<!-- Toast after entering invalid STTRACE params -->

View file

@ -14,10 +14,6 @@
<string name="generic_error">Lỗi</string>
<string name="ignore">Bỏ qua</string>
<!-- MainActivity -->
<!-- Title of the "add folder" menu action -->
<string name="add_folder">Thêm th.mục</string>
@ -206,22 +202,8 @@
<string name="sync_only_wifi_ssids_wifi_turn_on_wifi">Hãy bật WiFi để lựa chọn mạng.</string>
<!-- Preferences - Behaviour -->
<string name="advanced_folder_picker">S.dụng trình chọn th.mục nâng cao</string>
<string name="advanced_folder_picker_summary">Chọn bất kỳ th.mục nào trên th.bị để đồng bộ</string>
<string name="use_root_title">Chạy Syncthing với quyền Superuser</string>
<string name="notification_type_title">Thông báo</string>
<string name="notification_type_summary">Chọn dạng thông báo</string>
<string-array name="notification_type_entries">
<item>Thông thường</item>
<item>Ưu tiên thấp</item>
<item>Không thông báo</item>
</string-array>
<string name="device_name">Tên thiết bị</string>
<string name="listen_address">Đồng bộ các đ.chỉ lắng nghe giao thức</string>
@ -242,23 +224,18 @@
<string name="keep_wakelock_while_binary_running">Giữ CPU thức khi Syncthing đang chạy</string>
<string name="keep_wakelock_while_binary_running_summary">Dùng tuỳ chỉnh này nếu bạn bị mất kết nối bất ngờ khi đang dùng pin. Nó sẽ tiêu thụ nhiều pin hơn.</string>
<!-- Dialog shown before config export -->
<string name="dialog_confirm_export">Có chắc là bạn muốn xuất cấu hình? Các tập tin hiện thời sẽ bị ghi đè.\n\nCẢNH BÁO! Các ứng dụng khác có thể đọc được khoá riêng tư từ vị trí sao lưu và dùng nó để tải về/chỉnh sửa các tập tin đã đồng bộ.</string>
<!-- Dialog shown before config import -->
<string name="dialog_confirm_import">Có chắc là bạn muốn nhập cấu hình mới? Các tập tin hiện tại sẽ bị chép đè lên.</string>
<!-- Toast shown after config was successfully exported -->
<!-- Toast shown after config was exported -->
<string name="config_export_successful">Cấu hình đã được xuất vào %1$s</string>
<string name="import_config">Nhập cấu hình</string>
<!-- Toast shown after config was successfully imported -->
<!-- Toast shown after config was imported -->
<string name="config_imported_successful">Cấu hình đã được nhập</string>
<!-- Toast shown after config was successfully imported -->
<string name="config_import_failed">Nhập c.hình th.bại, hãy chắc rằng các t.tin nằm trong %1$s</string>
<!-- Title for the preference to reset Syncthing indexes -->

View file

@ -20,10 +20,6 @@
<string name="generic_error">错误</string>
<string name="ignore">忽略</string>
<!-- MainActivity -->
<!-- Title of the "add folder" menu action -->
<string name="add_folder">添加文件夹</string>
@ -230,7 +226,6 @@
<string name="category_run_conditions">运行条件</string>
<string name="category_behaviour">行为</string>
<string name="category_syncthing_options">同步设置</string>
<string name="category_backup">备份</string>
<string name="category_debug">调试</string>
<string name="category_experimental">实验性</string>
@ -240,24 +235,10 @@
<string name="respect_battery_saving_title">遵循 Android 电池省电模式设置</string>
<!-- Preferences - Behaviour -->
<string name="advanced_folder_picker">使用高级文件夹选择器</string>
<string name="advanced_folder_picker_summary">可以选择设备上任何文件夹</string>
<string name="use_root_title">Syncthing 运行于超级用户</string>
<string name="use_root_summary">该项功能不稳定,可能导致您的设备和 Syncthing 出问题。如果遇到了问题,您可能要重新安装 Syncthing。</string>
<string name="notification_type_title">通知</string>
<string name="notification_type_summary">选择通知类型</string>
<string-array name="notification_type_entries">
<item>常规</item>
<item>低优先级</item>
<item>隐藏</item>
</string-array>
<string name="preference_language_title">语言</string>
<string name="preference_language_summary">更改应用语言</string>
@ -302,8 +283,6 @@
<string name="keep_wakelock_while_binary_running">当 Syncthing 正在运行时保持 CPU 唤醒</string>
<string name="keep_wakelock_while_binary_running_summary">使用此设置如果您在电池上运行时遇到意外的断开连接。这将会导致电量消耗的增加。</string>
<string name="use_tor_title">使用 Tor</string>
<string name="use_legacy_hashing_title">使用传统哈希</string>
@ -316,15 +295,12 @@
<!-- Dialog shown before config import -->
<string name="dialog_confirm_import">您确定要导入新配置?会覆盖现有配置。</string>
<!-- Toast shown after config was successfully exported -->
<!-- Toast shown after config was exported -->
<string name="config_export_successful">设置已导出至 %1$s</string>
<string name="import_config">导入设置</string>
<!-- Toast shown after config was successfully imported -->
<!-- Toast shown after config was imported -->
<string name="config_imported_successful">设置已导入</string>
<!-- Toast shown after config was successfully imported -->
<string name="config_import_failed">设置导入失败,请确保文件位于 %1$s</string>
<!-- Title for the preference to set STTRACE parameters -->
@ -455,7 +431,6 @@
<string name="syncthing_disabled">Syncthing 已禁用</string>
<!-- Toast shown if syncthing failed to create or read the config -->
<string name="config_create_failed">创建配置文件失败</string>
<!-- Label of the default folder created of first start (camera folder). -->
<string name="default_folder_label">摄像机</string>
@ -554,5 +529,4 @@
<string name="browse">浏览</string>
<string name="no_sub_folder_is_selected">未选中子文件夹</string>
<string name="share_device_id_chooser">共享设备 ID 与</string>
</resources>
</resources>

View file

@ -18,10 +18,6 @@
<string name="cont">繼續</string>
<string name="finish">完成</string>
<string name="generic_error">錯誤</string>
<!-- MainActivity -->
<!-- Title of the "add folder" menu action -->
<string name="add_folder">增加資料夾</string>
@ -226,7 +222,6 @@
<string name="category_run_conditions">執行條件</string>
<string name="category_behaviour">行為</string>
<string name="category_syncthing_options">Syncthing 選項</string>
<string name="category_backup">備份</string>
<string name="category_debug">除錯</string>
<string name="category_experimental">實驗性</string>
@ -236,24 +231,10 @@
<string name="respect_battery_saving_title">遵守 Android 節省電池設定</string>
<!-- Preferences - Behaviour -->
<string name="advanced_folder_picker">使用進階的資料夾選擇器</string>
<string name="advanced_folder_picker_summary">選擇在裝置上的同步資料夾</string>
<string name="use_root_title">以超級使用者執行 Syncthing</string>
<string name="use_root_summary">這是不穩定的功能,可能會對 Syncthing 與你的裝置造成問題。如果你遇到問題,你也許需要重新安裝 Syncthing。</string>
<string name="notification_type_title">通知</string>
<string name="notification_type_summary">選擇通知類型</string>
<string-array name="notification_type_entries">
<item>一般</item>
<item>低優先權</item>
<item></item>
</string-array>
<string name="preference_language_title">語言</string>
<string name="preference_language_summary">選擇應用程式語言</string>
@ -298,8 +279,6 @@
<string name="keep_wakelock_while_binary_running">當 Syncthing 正在執行時,保持 CPU 清醒</string>
<string name="keep_wakelock_while_binary_running_summary">如果在電池操作上遇到斷線,使用這個設定。這可能會造成增加電池消耗量。</string>
<string name="use_tor_title">使用 Tor</string>
<string name="use_legacy_hashing_title">使用過時的雜湊</string>
@ -312,15 +291,12 @@
<!-- Dialog shown before config import -->
<string name="dialog_confirm_import">你確認要匯入新的設定?已存在的檔案將會被覆蓋。</string>
<!-- Toast shown after config was successfully exported -->
<!-- Toast shown after config was exported -->
<string name="config_export_successful">設定匯出到 %1$s</string>
<string name="import_config">匯入設定</string>
<!-- Toast shown after config was successfully imported -->
<!-- Toast shown after config was imported -->
<string name="config_imported_successful">設定已匯入</string>
<!-- Toast shown after config was successfully imported -->
<string name="config_import_failed">設定匯入失敗,請確認檔案在 %1$s</string>
<!-- Title for the preference to set STTRACE parameters -->
@ -451,7 +427,6 @@
<string name="syncthing_disabled">Syncthing 已經停用</string>
<!-- Toast shown if syncthing failed to create or read the config -->
<string name="config_create_failed">無法建立設定檔</string>
<!-- Label of the default folder created of first start (camera folder). -->
<string name="default_folder_label">相機</string>
@ -548,5 +523,4 @@
<string name="browse">瀏覽</string>
<string name="no_sub_folder_is_selected">無子資料夾被選擇</string>
<string name="share_device_id_chooser">分享裝置識別代碼</string>
</resources>
</resources>

View file

@ -49,8 +49,8 @@ Please report any problems you encounter via Github.</string>
<!-- Title of the exit app when running as a service confirmation dialog -->
<string name="dialog_exit_while_running_as_service_title">Confirm to stop service</string>
<string name="dialog_exit_while_running_as_service_message">For your consideration: You configured Syncthing to run as a service. Therefore it monitors run conditions and syncs at any time in the background when conditions match. You should only stop the service manually if you ran into severe problems. Otherwise, uncheck running as a service in the settings. Would you like to stop the service now until the next device reboot?</string>
<string name="dialog_exit_while_running_as_service_title">Confirm to quit app</string>
<string name="dialog_exit_while_running_as_service_message">For your consideration: You configured the app to start automatically on boot. Therefore it monitors run conditions and syncs at any time in the background when conditions match. You should only quit manually if you run into severe problems. Otherwise, disable \'Start automatically on boot \' in the settings. Would you like to quit now until the device rebooted?</string>
<!-- Title of the "add folder" menu action -->
<string name="add_folder">Add Folder</string>
@ -349,24 +349,10 @@ Please report any problems you encounter via Github.</string>
<string name="run_as_background_service">Start service automatically on boot</string>
<!-- Preferences - Behaviour -->
<string name="advanced_folder_picker">Use advanced Folder Picker</string>
<string name="advanced_folder_picker_summary">Select any folder on the device for syncing</string>
<string name="use_root_title">Run Syncthing as Superuser</string>
<string name="use_root_summary">Running Syncthing as root allows it to write to folders Android normally restricts to be readonly accessed. Use this feature cautious.</string>
<string name="notification_type_title">Notification</string>
<string name="notification_type_summary">Choose the notification type</string>
<string-array name="notification_type_entries">
<item>Normal</item>
<item>Low Priority</item>
<item>None</item>
</string-array>
<string name="preference_language_title">Language</string>
<string name="preference_language_summary">Change the app language</string>
@ -625,8 +611,10 @@ Please report any problems you encounter via Github.</string>
<string name="reason_not_on_battery_power">Phone is not running on battery power.</string>
<string name="reason_not_while_power_saving">Syncthing is not running as the phone is currently power saving.</string>
<string name="reason_not_while_auto_sync_data_disabled">Syncthing is not running as Android currently has \'Auto-sync data\' disabled.</string>
<string name="reason_mobile_data_disallowed">Syncthing is not allowed to run on mobile data connection.</string>
<string name="reason_on_mobile_data">Syncthing is running as mobile data is currently connected.</string>
<string name="reason_not_on_mobile_data">Syncthing is allowed to run on mobile data connection but mobile data isn\'t connected.</string>
<string name="reason_wifi_disallowed">Syncthing is not allowed to run on WiFi.</string>
<string name="reason_on_wifi">Syncthing is allowed to run on WiFi and WiFi is currently connected.</string>
<string name="reason_not_on_wifi">Syncthing is allowed to run on WiFi but WiFi isn\'t connected or the phone is in flight mode.</string>
<string name="reason_on_metered_nonmetered_wifi">Syncthing is allowed to run on metered and non-metered WiFi connections.</string>
@ -637,6 +625,10 @@ Please report any problems you encounter via Github.</string>
<string name="reason_location_unavailable">You enabled \'Run on selected WiFi networks\' in the settings. Android location services are currently turned off. According to Android restrictions, Syncthing cannot determine the current WiFi network name to decide if it should run. Solution: Turn location on and reconnect WiFi.</string>
<string name="reason_on_flight_mode">Syncthing is running as you allowed it to run when flight mode is active.</string>
<!-- Sync Conditions Dialog -->
<string name="wifi_ssid_whitelist_empty">No WiFi SSID\'s whitelisted. Please specify some in the settings.</string>
<!-- SyncthingService -->
@ -789,5 +781,9 @@ Please report any problems you encounter via Github.</string>
<string name="browse">Browse</string>
<string name="no_sub_folder_is_selected">No sub folder is selected</string>
<string name="share_device_id_chooser">Share device ID with</string>
<string name="run_on_whitelisted_wifi_summary">Turn the whitelist on to restrict sync happening only on specified WiFi networks.</string>
<string name="custom_sync_conditions_title">Custom sync conditions</string>
<string name="custom_sync_conditions_description">Allows you to specify exceptions to the global run conditions.</string>
<string name="custom_sync_conditions_dialog">Specify sync conditions</string>
</resources>

View file

@ -32,6 +32,11 @@
<item name="android:paddingBottom">8dp</item>
</style>
<style name="Widget.Syncthing.TextView.Label.Details.WifiSsidList">
<item name="android:paddingLeft">4dp</item>
<item name="android:minHeight">48dp</item>
</style>
<style name="Widget.Syncthing.TextView.Label.Details.DeviceList">
<item name="android:paddingLeft">4dp</item>
<item name="android:minHeight">48dp</item>