1
0
Fork 0
mirror of https://github.com/syncthing/syncthing-android.git synced 2024-11-26 14:21:16 +00:00

Add pause support for folders and devices (fixes #856)

This commit is contained in:
Catfriend1 2018-04-30 00:17:27 +02:00 committed by Audrius Butkevicius
parent 030ef4ee7b
commit b7f0c02238
40 changed files with 141 additions and 82 deletions

View file

@ -78,6 +78,8 @@ public class DeviceActivity extends SyncthingActivity implements View.OnClickLis
private SwitchCompat mIntroducerView;
private SwitchCompat mDevicePaused;
private TextView mSyncthingVersionView;
private View mCompressionContainer;
@ -110,7 +112,6 @@ public class DeviceActivity extends SyncthingActivity implements View.OnClickLis
public void afterTextChanged(Editable s) {
if (!s.toString().equals(mDevice.deviceID)) {
mDeviceNeedsToUpdate = true;
mDevice.deviceID = s.toString();
}
}
@ -121,7 +122,6 @@ public class DeviceActivity extends SyncthingActivity implements View.OnClickLis
public void afterTextChanged(Editable s) {
if (!s.toString().equals(mDevice.name)) {
mDeviceNeedsToUpdate = true;
mDevice.name = s.toString();
}
}
@ -132,19 +132,24 @@ public class DeviceActivity extends SyncthingActivity implements View.OnClickLis
public void afterTextChanged(Editable s) {
if (!s.toString().equals(displayableAddresses())) {
mDeviceNeedsToUpdate = true;
mDevice.addresses = persistableAddresses(s);
}
}
};
private final CompoundButton.OnCheckedChangeListener mIntroducerCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() {
private final CompoundButton.OnCheckedChangeListener mCheckedListener =
new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (mDevice.introducer != isChecked) {
mDeviceNeedsToUpdate = true;
public void onCheckedChanged(CompoundButton view, boolean isChecked) {
switch (view.getId()) {
case R.id.introducer:
mDevice.introducer = isChecked;
mDeviceNeedsToUpdate = true;
break;
case R.id.devicePause:
mDevice.paused = isChecked;
mDeviceNeedsToUpdate = true;
break;
}
}
};
@ -167,6 +172,7 @@ public class DeviceActivity extends SyncthingActivity implements View.OnClickLis
mCompressionContainer = findViewById(R.id.compressionContainer);
mCompressionValueView = findViewById(R.id.compressionValue);
mIntroducerView = findViewById(R.id.introducer);
mDevicePaused = findViewById(R.id.devicePause);
mSyncthingVersionView = findViewById(R.id.syncthingVersion);
mQrButton.setOnClickListener(this);
@ -293,18 +299,26 @@ public class DeviceActivity extends SyncthingActivity implements View.OnClickLis
}
private void updateViewsAndSetListeners() {
mIdView.removeTextChangedListener(mIdTextWatcher);
mNameView.removeTextChangedListener(mNameTextWatcher);
mAddressesView.removeTextChangedListener(mAddressesTextWatcher);
mIntroducerView.setOnCheckedChangeListener(null);
mDevicePaused.setOnCheckedChangeListener(null);
// Update views
mIdView.setText(mDevice.deviceID);
mNameView.setText(mDevice.name);
mAddressesView.setText(displayableAddresses());
mCompressionValueView.setText(Compression.fromValue(this, mDevice.compression).getTitle(this));
mIntroducerView.setChecked(mDevice.introducer);
mDevicePaused.setChecked(mDevice.paused);
// Keep state updated
mIdView.addTextChangedListener(mIdTextWatcher);
mNameView.addTextChangedListener(mNameTextWatcher);
mAddressesView.addTextChangedListener(mAddressesTextWatcher);
mIntroducerView.setOnCheckedChangeListener(mIntroducerCheckedChangeListener);
mIntroducerView.setOnCheckedChangeListener(mCheckedListener);
mDevicePaused.setOnCheckedChangeListener(mCheckedListener);
}
@Override
@ -384,6 +398,7 @@ public class DeviceActivity extends SyncthingActivity implements View.OnClickLis
mDevice.addresses = DYNAMIC_ADDRESS;
mDevice.compression = METADATA.getValue(this);
mDevice.introducer = false;
mDevice.paused = false;
}
private void prepareEditMode() {

View file

@ -78,6 +78,7 @@ public class FolderActivity extends SyncthingActivity
private TextView mPathView;
private SwitchCompat mFolderMasterView;
private SwitchCompat mFolderFileWatcher;
private SwitchCompat mFolderPaused;
private ViewGroup mDevicesContainer;
private TextView mVersioningDescriptionView;
private TextView mVersioningTypeView;
@ -114,6 +115,10 @@ public class FolderActivity extends SyncthingActivity
mFolder.fsWatcherEnabled = isChecked;
mFolderNeedsToUpdate = true;
break;
case R.id.folderPause:
mFolder.paused = isChecked;
mFolderNeedsToUpdate = true;
break;
case R.id.device_toggle:
Device device = (Device) view.getTag();
if (isChecked) {
@ -141,6 +146,7 @@ public class FolderActivity extends SyncthingActivity
mPathView = findViewById(R.id.directoryTextView);
mFolderMasterView = findViewById(R.id.master);
mFolderFileWatcher = findViewById(R.id.fileWatcher);
mFolderPaused = findViewById(R.id.folderPause);
mVersioningDescriptionView = findViewById(R.id.versioningDescription);
mVersioningTypeView = findViewById(R.id.versioningType);
mDevicesContainer = findViewById(R.id.devicesContainer);
@ -316,6 +322,7 @@ public class FolderActivity extends SyncthingActivity
mPathView.removeTextChangedListener(mTextWatcher);
mFolderMasterView.setOnCheckedChangeListener(null);
mFolderFileWatcher.setOnCheckedChangeListener(null);
mFolderPaused.setOnCheckedChangeListener(null);
// Update views
mLabelView.setText(mFolder.label);
@ -324,6 +331,7 @@ public class FolderActivity extends SyncthingActivity
updateVersioningDescription();
mFolderMasterView.setChecked(Objects.equal(mFolder.type, "readonly"));
mFolderFileWatcher.setChecked(mFolder.fsWatcherEnabled);
mFolderPaused.setChecked(mFolder.paused);
List<Device> devicesList = getApi().getDevices(false);
mDevicesContainer.removeAllViews();
@ -341,6 +349,7 @@ public class FolderActivity extends SyncthingActivity
mPathView.addTextChangedListener(mTextWatcher);
mFolderMasterView.setOnCheckedChangeListener(mCheckedListener);
mFolderFileWatcher.setOnCheckedChangeListener(mCheckedListener);
mFolderPaused.setOnCheckedChangeListener(mCheckedListener);
}
@Override
@ -438,6 +447,7 @@ public class FolderActivity extends SyncthingActivity
* syncthing when the file watcher is enabled and a new folder is created.
*/
mFolder.rescanIntervalS = 3600;
mFolder.paused = false;
mFolder.versioning = new Folder.Versioning();
}

View file

@ -11,6 +11,7 @@ public class Device {
public String compression;
public String certName;
public boolean introducer;
public boolean paused;
/**
* Returns the device name, or the first characters of the ID if the name is empty.

View file

@ -13,6 +13,7 @@ public class Folder {
public String id;
public String label;
public String filesystemType = "basic";
public String path;
public String type;
public boolean fsWatcherEnabled = true;
@ -24,18 +25,19 @@ public class Folder {
public MinDiskFree minDiskFree;
public Versioning versioning;
public int copiers;
public int pullers;
public int pullerMaxPendingKiB;
public int hashers;
public String order;
public boolean ignoreDelete;
public int scanProgressIntervalS;
public int pullerSleepS;
public int pullerPauseS;
public int maxConflicts = 10;
public boolean disableSparseFiles;
public boolean disableTempIndexes;
public boolean paused;
public int weakHashThresholdPct = 25;
public String markerName = ".stfolder";
public String invalid;
public boolean fsync = true;
public static class Versioning implements Serializable {
public String type;

View file

@ -3,17 +3,27 @@ package com.nutomic.syncthingandroid.model;
public class Model {
public long globalBytes;
public long globalDeleted;
public long globalDirectories;
public long globalFiles;
public long globalSymlinks;
public boolean ignorePatterns;
public String invalid;
public long localBytes;
public long localDeleted;
public long localDirectories;
public long localSymlinks;
public long localFiles;
public long inSyncBytes;
public long inSyncFiles;
public long needBytes;
public long needFiles;
public long needDeletes;
public long needDirectories;
public long needFiles;
public long needSymlinks;
public long pullErrors;
public long sequence;
public String state;
public String invalid;
public String stateChanged;
public long version;
public String watchError;
}

View file

@ -45,28 +45,46 @@ public class DevicesAdapter extends ArrayAdapter<Device> {
name.setText(getItem(position).getDisplayName());
Resources r = getContext().getResources();
boolean haveInfo = mConnections != null && mConnections.connections.containsKey(deviceId) &&
mConnections.connections.get(deviceId).connected;
if (haveInfo) {
Connections.Connection conn = mConnections.connections.get(deviceId);
Connections.Connection conn = null;
if (mConnections != null || mConnections.connections.containsKey(deviceId)) {
conn = mConnections.connections.get(deviceId);
}
if (conn == null) {
download.setText(Util.readableTransferRate(getContext(), 0));
upload.setText(Util.readableTransferRate(getContext(), 0));
status.setText(r.getString(R.string.device_state_unknown));
status.setTextColor(ContextCompat.getColor(getContext(), R.color.text_red));
return convertView;
}
if (conn.paused) {
download.setText(Util.readableTransferRate(getContext(), 0));
upload.setText(Util.readableTransferRate(getContext(), 0));
status.setText(r.getString(R.string.device_paused));
status.setTextColor(ContextCompat.getColor(getContext(), R.color.text_black));
return convertView;
}
if (conn.connected) {
download.setText(Util.readableTransferRate(getContext(), conn.inBits));
upload.setText(Util.readableTransferRate(getContext(), conn.outBits));
if (conn.completion == 100) {
status.setText(r.getString(R.string.device_up_to_date));
status.setTextColor(ContextCompat.getColor(getContext(), R.color.text_green));
}
else {
} else {
status.setText(r.getString(R.string.device_syncing, conn.completion));
status.setTextColor(ContextCompat.getColor(getContext(), R.color.text_blue));
}
download.setText(Util.readableTransferRate(getContext(), conn.inBits));
upload.setText(Util.readableTransferRate(getContext(), conn.outBits));
return convertView;
}
else {
// !conn.connected
download.setText(Util.readableTransferRate(getContext(), 0));
upload.setText(Util.readableTransferRate(getContext(), 0));
status.setText(r.getString(R.string.device_disconnected));
status.setTextColor(ContextCompat.getColor(getContext(), R.color.text_red));
}
return convertView;
}

View file

@ -81,6 +81,10 @@ public class FoldersAdapter extends ArrayAdapter<Folder> {
if (model.state.equals("idle") && neededItems > 0) {
binding.state.setText(getContext().getString(R.string.status_outofsync));
binding.state.setTextColor(ContextCompat.getColor(getContext(), R.color.text_red));
} else {
if (folder.paused) {
binding.state.setText(getContext().getString(R.string.state_paused));
binding.state.setTextColor(ContextCompat.getColor(getContext(), R.color.text_black));
} else {
binding.state.setText(getLocalizedState(getContext(), model.state, percentage));
switch(model.state) {
@ -88,7 +92,6 @@ public class FoldersAdapter extends ArrayAdapter<Folder> {
binding.state.setTextColor(ContextCompat.getColor(getContext(), R.color.text_green));
break;
case "scanning":
case "cleaning":
case "syncing":
binding.state.setTextColor(ContextCompat.getColor(getContext(), R.color.text_blue));
break;
@ -96,6 +99,7 @@ public class FoldersAdapter extends ArrayAdapter<Folder> {
binding.state.setTextColor(ContextCompat.getColor(getContext(), R.color.text_red));
}
}
}
binding.items.setVisibility(VISIBLE);
binding.items.setText(getContext().getResources()
.getQuantityString(R.plurals.files, (int) model.inSyncFiles, model.inSyncFiles, model.globalFiles));
@ -120,16 +124,11 @@ public class FoldersAdapter extends ArrayAdapter<Folder> {
switch (state) {
case "idle": return c.getString(R.string.state_idle);
case "scanning": return c.getString(R.string.state_scanning);
case "cleaning": return c.getString(R.string.state_cleaning);
case "syncing": return c.getString(R.string.state_syncing, percentage);
case "error": return c.getString(R.string.state_error);
case "unknown": // Fallthrough
case "": return c.getString(R.string.state_unknown);
case "unknown": return c.getString(R.string.state_unknown);
default: return state;
}
if (BuildConfig.DEBUG) {
throw new AssertionError("Unexpected folder state " + state);
}
return "";
}
/**

View file

@ -112,6 +112,16 @@
android:drawableStart="@drawable/ic_phonelink_black_24dp_active"
android:text="@string/introducer" />
<android.support.v7.widget.SwitchCompat
android:id="@+id/devicePause"
style="@style/Widget.Syncthing.TextView.Label.Details"
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:text="@string/pause_device" />
<TextView
android:id="@+id/currentAddress"
style="@style/Widget.Syncthing.TextView.Label.Details"

View file

@ -90,6 +90,16 @@
android:drawableStart="@drawable/ic_autorenew_black_24dp"
android:text="@string/folder_fileWatcher" />
<android.support.v7.widget.SwitchCompat
android:id="@+id/folderPause"
style="@style/Widget.Syncthing.TextView.Label.Details"
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:text="@string/folder_pause" />
<LinearLayout
android:id="@+id/versioningContainer"
android:layout_width="match_parent"

View file

@ -291,7 +291,6 @@
<!--Possible folder states-->
<string name="state_idle">Бездействие</string>
<string name="state_scanning">Сканиране</string>
<string name="state_cleaning">Почистване</string>
<string name="state_syncing">Синхронизиране (%1$d%%)</string>
<string name="state_error">Грешка</string>
<string name="state_unknown">Неясно</string>

View file

@ -358,7 +358,6 @@ Ens podeu informar dels problemes que trobeu a través de Github.</string>
<!--Possible folder states-->
<string name="state_idle">Inactiu</string>
<string name="state_scanning">Escanejant</string>
<string name="state_cleaning">Netejant</string>
<string name="state_syncing">Sincronitzant (%1$d%%)</string>
<string name="state_error">Error</string>
<string name="state_unknown">Desconegut</string>

View file

@ -361,7 +361,6 @@ Všechny zaznamenané chyby prosím hlašte přes Github.</string>
<!--Possible folder states-->
<string name="state_idle">Aktuální</string>
<string name="state_scanning">Skenování</string>
<string name="state_cleaning">Čištění</string>
<string name="state_syncing">Synchronizuje se (%1$d%%)</string>
<string name="state_error">Chyba</string>
<string name="state_unknown">Neznámý</string>

View file

@ -350,7 +350,6 @@ Vær venlig at rapportere ethvert problem, du støder på, via Github. </string>
<!--Possible folder states-->
<string name="state_idle">Ledig</string>
<string name="state_scanning">Scanner</string>
<string name="state_cleaning">Gør rent</string>
<string name="state_syncing">Synkroniserer (%1$d%%)</string>
<string name="state_error">Fejl</string>
<string name="state_unknown">Ukendt</string>

View file

@ -355,7 +355,6 @@ Bitte melden Sie auftretende Probleme via Github.</string>
<!--Possible folder states-->
<string name="state_idle">Untätig</string>
<string name="state_scanning">Scannen</string>
<string name="state_cleaning">Aufräumen</string>
<string name="state_syncing">Synchronisiere (%1$d%%)</string>
<string name="state_error">Fehler</string>
<string name="state_unknown">Unbekannt</string>

View file

@ -358,7 +358,6 @@
<!--Possible folder states-->
<string name="state_idle">Αδρανής</string>
<string name="state_scanning">Σάρωση</string>
<string name="state_cleaning">Εκκαθάριση</string>
<string name="state_syncing">Συγχρονισμός (%1$d%%)</string>
<string name="state_error">Σφάλμα</string>
<string name="state_unknown">Άγνωστο</string>

View file

@ -270,7 +270,6 @@
<!--Possible folder states-->
<string name="state_idle">Sin utilizar</string>
<string name="state_scanning">Escaneando</string>
<string name="state_cleaning">Limpiando</string>
<string name="state_syncing">Sincronizando (%1$d%%)</string>
<string name="state_error">Error</string>
<string name="state_unknown">Desconocido</string>

View file

@ -326,7 +326,6 @@
<!--Possible folder states-->
<string name="state_idle">Inactivo</string>
<string name="state_scanning">Escaneando</string>
<string name="state_cleaning">Limpiando</string>
<string name="state_syncing">Sincronizando (%1$d%%)</string>
<string name="state_error">Error</string>
<string name="state_unknown">Desconocido</string>

View file

@ -314,7 +314,6 @@ Ilmoitathan ystävällisesti kaikista havaitsemistasi ongelmista Githubin kautta
<!--Possible folder states-->
<string name="state_idle">toimeton</string>
<string name="state_scanning">Skannataan</string>
<string name="state_cleaning">Puhdistetaan</string>
<string name="state_syncing">Synkronoidaan (%1$d%%)</string>
<string name="state_error">Virhe</string>
<string name="state_unknown">Tuntematon</string>

View file

@ -358,7 +358,6 @@ S\'il vous plaît, soumettez les problèmes que vous rencontrez via Github.</str
<!--Possible folder states-->
<string name="state_idle">En veille</string>
<string name="state_scanning">Analyse en cours</string>
<string name="state_cleaning">Effacement en cours</string>
<string name="state_syncing">Synchronisation (%1$d%%)</string>
<string name="state_error">Erreur</string>
<string name="state_unknown">Inconnu</string>

View file

@ -366,7 +366,6 @@ Biztosan törölni szeretnéd a Syncthing index adatbázisát?</string>
<!--Possible folder states-->
<string name="state_idle">Tétlen</string>
<string name="state_scanning">Vizsgálat</string>
<string name="state_cleaning">Takarítás</string>
<string name="state_syncing">Szinkronizálás (%1$d%%)</string>
<string name="state_error">Hiba</string>
<string name="state_unknown">Ismeretlen</string>

View file

@ -358,7 +358,6 @@ Si prega di segnalare eventuali problemi che si incontrano via Github.</string>
<!--Possible folder states-->
<string name="state_idle">Inattivo</string>
<string name="state_scanning">Scansione in corso</string>
<string name="state_cleaning">Pulizia</string>
<string name="state_syncing">Sincronizzazione (%1$d%%)</string>
<string name="state_error">Errore</string>
<string name="state_unknown">Sconosciuto</string>

View file

@ -353,7 +353,6 @@
<!--Possible folder states-->
<string name="state_idle">アイドル</string>
<string name="state_scanning">スキャン中</string>
<string name="state_cleaning">クリーニング中</string>
<string name="state_syncing">同期中 (%1$d%%)</string>
<string name="state_error">エラー</string>
<string name="state_unknown">不明</string>

View file

@ -346,7 +346,6 @@
<!--Possible folder states-->
<string name="state_idle">대기</string>
<string name="state_scanning">스캔 중</string>
<string name="state_cleaning">지우는 중</string>
<string name="state_syncing">동기화 중 (%1$d%%)</string>
<string name="state_error">오류</string>
<string name="state_unknown">알 수 없음</string>

View file

@ -275,7 +275,6 @@
<!--Possible folder states-->
<string name="state_idle">Inaktiv</string>
<string name="state_scanning">Skanner</string>
<string name="state_cleaning">Rydder</string>
<string name="state_syncing">Synkroniserer (%1$d%%)</string>
<string name="state_error">Feil</string>
<string name="state_unknown">Ukjent</string>

View file

@ -357,7 +357,6 @@ Als je problemen tegenkomt, meld ze dan via GitHub.</string>
<!--Possible folder states-->
<string name="state_idle">Inactief</string>
<string name="state_scanning">Bezig met scannen</string>
<string name="state_cleaning">Bezig met opruimen</string>
<string name="state_syncing">Bezig met synchroniseren (%1$d%%)</string>
<string name="state_error">Fout</string>
<string name="state_unknown">Onbekend</string>

View file

@ -275,7 +275,6 @@
<!--Possible folder states-->
<string name="state_idle">Kviler</string>
<string name="state_scanning">Skannar</string>
<string name="state_cleaning">Reingjer</string>
<string name="state_syncing">Synkroniserer (%1$d%%)</string>
<string name="state_error">Feil</string>
<string name="state_unknown">Ukjend</string>

View file

@ -305,7 +305,6 @@ Proszę zgłaszać napotkane błędy programu za pośrednictwem serwisu Github.<
<!--Possible folder states-->
<string name="state_idle">Bezczynny</string>
<string name="state_scanning">Skanowanie</string>
<string name="state_cleaning">Czyszczenie</string>
<string name="state_syncing">Synchronizowanie (%1$d%%)</string>
<string name="state_error">Błąd</string>
<string name="state_unknown">Nieznany</string>

View file

@ -354,7 +354,6 @@ Por favor, nos avise sobre quaisquer problemas que você encontrar via Github.</
<!--Possible folder states-->
<string name="state_idle">Em espera</string>
<string name="state_scanning">Verificando</string>
<string name="state_cleaning">Limpando</string>
<string name="state_syncing">Sincronizando (%1$d%%)</string>
<string name="state_error">Erro</string>
<string name="state_unknown">Desconhecido</string>

View file

@ -297,7 +297,6 @@ Reporte, através do Github, quaisquer problemas que encontre, por favor.</strin
<!--Possible folder states-->
<string name="state_idle">Em espera</string>
<string name="state_scanning">Verificando</string>
<string name="state_cleaning">Limpando</string>
<string name="state_syncing">Sincronizando (%1$d%%)</string>
<string name="state_error">Erro</string>
<string name="state_unknown">Desconhecido</string>

View file

@ -361,7 +361,6 @@ Vă rugăm să raportați orice problemă întâlniți, prin intermediul GitHub.
<!--Possible folder states-->
<string name="state_idle">Inactiv</string>
<string name="state_scanning">Scanare</string>
<string name="state_cleaning">Curățare</string>
<string name="state_syncing">Se sincronizează(%1$d%%)</string>
<string name="state_error">Eroare</string>
<string name="state_unknown">Necunoscut</string>

View file

@ -311,7 +311,6 @@
<!--Possible folder states-->
<string name="state_idle">Бездействие</string>
<string name="state_scanning">Сканирование</string>
<string name="state_cleaning">Очистка</string>
<string name="state_syncing">Синхронизация (%1$d%%)</string>
<string name="state_error">Ошибка</string>
<string name="state_unknown">Неизвестно</string>

View file

@ -256,7 +256,6 @@ Naozaj chcete resetovať databázu s indexom súborov?</string>
<!--Possible folder states-->
<string name="state_idle">Nečinné</string>
<string name="state_scanning">Skenovanie</string>
<string name="state_cleaning">Čistenie</string>
<string name="state_syncing">Synchronizuje sa (%1$d%%)</string>
<string name="state_error">Chyba</string>
<string name="state_unknown">Neznámy</string>

View file

@ -357,7 +357,6 @@ Vänligen rapportera eventuella problem du stöter på via Github.</string>
<!--Possible folder states-->
<string name="state_idle">Inaktiv</string>
<string name="state_scanning">Skannar</string>
<string name="state_cleaning">Städar</string>
<string name="state_syncing">Synkroniserar (%1$d%%)</string>
<string name="state_error">Fel</string>
<string name="state_unknown">Okänd</string>

View file

@ -296,7 +296,6 @@ Eğer herhangi bir sorunla karşılaşırsan Github aracılığıyla bildir.</st
<!--Possible folder states-->
<string name="state_idle">Boşta</string>
<string name="state_scanning">Taranıyor</string>
<string name="state_cleaning">Temizleniyor</string>
<string name="state_syncing">Eşzamanlama gerçekleştiriliyor (%1$d%%)</string>
<string name="state_error">Hata</string>
<string name="state_unknown">Bilinmiyor</string>

View file

@ -254,7 +254,6 @@
<!--Possible folder states-->
<string name="state_idle">Очікування</string>
<string name="state_scanning">Сканування</string>
<string name="state_cleaning">Очистка</string>
<string name="state_syncing">Синхронізуються (%1$d%%)</string>
<string name="state_error">Помилка</string>
<string name="state_unknown">Невідомо</string>

View file

@ -270,7 +270,6 @@
<!--Possible folder states-->
<string name="state_idle">Rãnh rỗi</string>
<string name="state_scanning">Đang quét</string>
<string name="state_cleaning">Đang dọn dẹp</string>
<string name="state_syncing">Đang đ.bộ (%1$d%%)</string>
<string name="state_error">Lỗi</string>
<string name="state_unknown">Không rõ</string>

View file

@ -355,7 +355,6 @@
<!--Possible folder states-->
<string name="state_idle">空闲</string>
<string name="state_scanning">正在扫描</string>
<string name="state_cleaning">正在清理</string>
<string name="state_syncing">正在同步 (%1$d%%)</string>
<string name="state_error">错误</string>
<string name="state_unknown">未知</string>

View file

@ -354,7 +354,6 @@
<!--Possible folder states-->
<string name="state_idle">閒置</string>
<string name="state_scanning">正在掃描</string>
<string name="state_cleaning">正在清理</string>
<string name="state_syncing">正在同步 (%1$d%%)</string>
<string name="state_error">錯誤</string>
<string name="state_unknown">未知</string>

View file

@ -5,6 +5,7 @@
<color name="accent">#FFC107</color>
<color name="divider">#1F000000</color>
<color name="text_black">#000000</color>
<color name="text_red">#ffff4444</color>
<color name="text_blue">#ff33b5e5</color>
<color name="text_green">#ff99cc00</color>

View file

@ -103,6 +103,12 @@ Please report any problems you encounter via Github.</string>
<!-- Indicates that there is no connection to the device -->
<string name="device_disconnected">Disconnected</string>
<!-- Indicates that the device is paused and does not sync -->
<string name="device_paused">Paused</string>
!-- Indicates that the device connection is unknown -->
<string name="device_state_unknown">Unknown</string>
<!-- Title for current download rate -->
<string name="download_title">Download</string>
@ -149,6 +155,9 @@ Please report any problems you encounter via Github.</string>
<!-- Setting title -->
<string name="folder_fileWatcher">Realtime Sync</string>
<!-- Setting title -->
<string name="folder_pause">Pause Folder</string>
<!-- Setting title -->
<string name="devices">Devices</string>
@ -212,6 +221,9 @@ Please report any problems you encounter via Github.</string>
<!-- Setting title -->
<string name="introducer">Introducer</string>
<!-- Setting title -->
<string name="pause_device">Pause Device</string>
<!-- ActionBar item -->
<string name="delete_device">Delete Device</string>
@ -620,10 +632,10 @@ Please report any problems you encounter via Github.</string>
<!-- Possible folder states -->
<string name="state_idle">Idle</string>
<string name="state_scanning">Scanning</string>
<string name="state_cleaning">Cleaning</string>
<string name="state_syncing">Syncing (%1$d%%)</string>
<string name="state_error">Error</string>
<string name="state_unknown">Unknown</string>
<string name="state_paused">Paused</string>
<string name="status_outofsync">Out of Sync</string>
<!-- Format string for folder size, eg "500 MiB / 1 GiB" -->