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

Add offline "Tips & Tricks" library (fixes #91) (#102)

* Add TipsAndTricks activity

* Add TipListAdapter

* Fix lint

* Fix typo

* Fix toolbar

* Fix layout

* Add onClick listener

* Add tips

* Update APK version to 0.14.51.8 / 4171

* Update README.md and whatsnew

* Fix Android 4.x compatibility

* Imported translations
This commit is contained in:
Catfriend1 2018-10-21 20:50:52 +02:00 committed by GitHub
parent 5fbd99619e
commit 200f50e940
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
47 changed files with 299 additions and 47 deletions

View file

@ -2,7 +2,7 @@
[![License: MPLv2](https://img.shields.io/badge/License-MPLv2-blue.svg)](https://opensource.org/licenses/MPL-2.0)
<a href="https://github.com/Catfriend1/syncthing-android/releases" alt="GitHub release"><img src="https://img.shields.io/github/release/Catfriend1/syncthing-android/all.svg" /></a>
<a href="https://f-droid.org/de/packages/com.github.catfriend1.syncthingandroid" alt="F-Droid release"><img src="https://img.shields.io/badge/f--droid-4161-brightgreen.svg" /></a>
<a href="https://f-droid.org/de/packages/com.github.catfriend1.syncthingandroid" alt="F-Droid release"><img src="https://img.shields.io/badge/f--droid-4170-brightgreen.svg" /></a>
# Major enhancements in this fork are:
- Individual sync conditions can be applied per device and per folder (for expert users).

View file

@ -5,6 +5,7 @@ apply plugin: 'com.github.triplet.play'
dependencies {
implementation 'eu.chainfire:libsuperuser:1.0.0.201704021214'
implementation 'com.android.support:design:28.0.0'
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.google.zxing:android-integration:3.3.0'
implementation 'com.google.code.gson:gson:2.8.2'
implementation 'org.mindrot:jbcrypt:0.4'
@ -35,8 +36,8 @@ android {
applicationId "com.github.catfriend1.syncthingandroid"
minSdkVersion 16
targetSdkVersion 26
versionCode 4170
versionName "0.14.51.7"
versionCode 4171
versionName "0.14.51.8"
testApplicationId 'com.github.catfriend1.syncthingandroid.test'
testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner'
playAccountConfig = playAccountConfigs.defaultAccountConfig

View file

@ -46,6 +46,15 @@
android:label="@string/app_name"
android:launchMode="singleTask">
</activity>
<activity
android:name=".activities.TipsAndTricksActivity"
android:label="@string/tips_and_tricks_title"
android:parentActivityName=".activities.MainActivity"
android:configChanges="keyboardHidden|orientation|screenSize">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".activities.MainActivity" />
</activity>
<activity
android:name=".activities.WebGuiActivity"
android:label="@string/web_gui_title"

View file

@ -0,0 +1,75 @@
package com.nutomic.syncthingandroid.activities;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import com.nutomic.syncthingandroid.R;
import com.nutomic.syncthingandroid.views.TipListAdapter;
import com.nutomic.syncthingandroid.views.TipListAdapter.ItemClickListener;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
/**
* Holds a RecyclerView that shows tips and tricks.
*/
public class TipsAndTricksActivity extends SyncthingActivity {
private static final String TAG = "TipsAndTricksActivity";
private RecyclerView mRecyclerView;
private TipListAdapter mTipListAdapter;
private RecyclerView.LayoutManager mLayoutManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tips_and_tricks);
mRecyclerView = findViewById(R.id.tip_recycler_view);
mRecyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
mTipListAdapter = new TipListAdapter(this);
/**
* Determine the app's private data folder on external storage if present.
* e.g. "/storage/abcd-efgh/Android/[PACKAGE_NAME]/files"
*/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
ArrayList<File> externalFilesDir = new ArrayList<>();
externalFilesDir.addAll(Arrays.asList(getExternalFilesDirs(null)));
externalFilesDir.remove(getExternalFilesDir(null));
if (externalFilesDir.size() > 0) {
String absExternalStorageAppFilesPath = externalFilesDir.get(0).getAbsolutePath();
mTipListAdapter.add(getString(R.string.tip_write_to_sdcard_title),
getString(R.string.tip_write_to_sdcard_text, absExternalStorageAppFilesPath));
}
}
// Fill tip title and text content.
mTipListAdapter.add(getString(R.string.tip_sync_on_local_network_title), getString(R.string.tip_sync_on_local_network_text));
mTipListAdapter.add(getString(R.string.tip_custom_sync_conditions_title), getString(R.string.tip_custom_sync_conditions_text));
// Set onClick listener and add adapter to recycler view.
mTipListAdapter.setOnClickListener(
new ItemClickListener() {
@Override
public void onItemClick(View view, String itemTitle, String itemText) {
Log.v(TAG, "User clicked item with title \'" + itemTitle + "\'");
/**
* Future improvement:
* Collapse texts to the first three lines and open a DialogFragment
* if the user clicks an item from the tip list.
*/
}
}
);
mRecyclerView.setAdapter(mTipListAdapter);
}
}

View file

@ -18,6 +18,7 @@ import com.google.common.collect.ImmutableMap;
import com.nutomic.syncthingandroid.R;
import com.nutomic.syncthingandroid.activities.MainActivity;
import com.nutomic.syncthingandroid.activities.SettingsActivity;
import com.nutomic.syncthingandroid.activities.TipsAndTricksActivity;
import com.nutomic.syncthingandroid.activities.WebGuiActivity;
import com.nutomic.syncthingandroid.http.ImageGetRequest;
import com.nutomic.syncthingandroid.service.Constants;
@ -37,11 +38,20 @@ public class DrawerFragment extends Fragment implements SyncthingService.OnServi
private static final String TAG = "DrawerFragment";
/**
* These buttons might be accessible if the screen is big enough
* or the user can scroll the drawer to access them.
*/
private TextView mVersion = null;
private TextView mDrawerActionShowQrCode;
private TextView mDrawerActionWebGui;
private TextView mDrawerActionImportExport;
private TextView mDrawerActionRestart;
private TextView mDrawerTipsAndTricks;
/**
* These buttons are always visible.
*/
private TextView mDrawerActionSettings;
private TextView mDrawerActionExit;
@ -84,6 +94,7 @@ public class DrawerFragment extends Fragment implements SyncthingService.OnServi
mDrawerActionWebGui = view.findViewById(R.id.drawerActionWebGui);
mDrawerActionImportExport = view.findViewById(R.id.drawerActionImportExport);
mDrawerActionRestart = view.findViewById(R.id.drawerActionRestart);
mDrawerTipsAndTricks = view.findViewById(R.id.drawerActionTipsAndTricks);
mDrawerActionSettings = view.findViewById(R.id.drawerActionSettings);
mDrawerActionExit = view.findViewById(R.id.drawerActionExit);
@ -92,6 +103,7 @@ public class DrawerFragment extends Fragment implements SyncthingService.OnServi
mDrawerActionWebGui.setOnClickListener(this);
mDrawerActionImportExport.setOnClickListener(this);
mDrawerActionRestart.setOnClickListener(this);
mDrawerTipsAndTricks.setOnClickListener(this);
mDrawerActionSettings.setOnClickListener(this);
mDrawerActionExit.setOnClickListener(this);
@ -124,6 +136,7 @@ public class DrawerFragment extends Fragment implements SyncthingService.OnServi
mDrawerActionShowQrCode.setVisibility(synthingRunning ? View.VISIBLE : View.GONE);
mDrawerActionWebGui.setVisibility(synthingRunning ? View.VISIBLE : View.GONE);
mDrawerActionRestart.setVisibility(synthingRunning ? View.VISIBLE : View.GONE);
mDrawerTipsAndTricks.setVisibility(View.VISIBLE);
mDrawerActionExit.setVisibility(View.VISIBLE);
}
@ -155,14 +168,13 @@ public class DrawerFragment extends Fragment implements SyncthingService.OnServi
public void onClick(View v) {
Intent intent;
switch (v.getId()) {
case R.id.drawerActionShowQrCode:
showQrCode();
break;
case R.id.drawerActionWebGui:
startActivity(new Intent(mActivity, WebGuiActivity.class));
mActivity.closeDrawer();
break;
case R.id.drawerActionSettings:
startActivity(new Intent(mActivity, SettingsActivity.class));
mActivity.closeDrawer();
break;
case R.id.drawerActionImportExport:
intent = new Intent(mActivity, SettingsActivity.class);
intent.putExtra(SettingsActivity.EXTRA_OPEN_SUB_PREF_SCREEN, "category_import_export");
@ -173,6 +185,14 @@ public class DrawerFragment extends Fragment implements SyncthingService.OnServi
mActivity.showRestartDialog();
mActivity.closeDrawer();
break;
case R.id.drawerActionTipsAndTricks:
startActivity(new Intent(mActivity, TipsAndTricksActivity.class));
mActivity.closeDrawer();
break;
case R.id.drawerActionSettings:
startActivity(new Intent(mActivity, SettingsActivity.class));
mActivity.closeDrawer();
break;
case R.id.drawerActionExit:
if (sharedPreferences != null && sharedPreferences.getBoolean(Constants.PREF_START_SERVICE_ON_BOOT, false)) {
/**
@ -193,9 +213,6 @@ public class DrawerFragment extends Fragment implements SyncthingService.OnServi
}
mActivity.closeDrawer();
break;
case R.id.drawerActionShowQrCode:
showQrCode();
break;
}
}

View file

@ -152,7 +152,7 @@ public class FileUtils {
try {
/**
* Determine the app's private data folder on external storage if present.
* e.g. "/storage/abcd-efgh/Android/com.nutomic.syncthinandroid/files"
* e.g. "/storage/abcd-efgh/Android/[PACKAGE_NAME]/files"
*/
ArrayList<File> externalFilesDir = new ArrayList<>();
externalFilesDir.addAll(Arrays.asList(context.getExternalFilesDirs(null)));

View file

@ -0,0 +1,90 @@
package com.nutomic.syncthingandroid.views;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
// import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.TextView;
import com.nutomic.syncthingandroid.R;
import java.util.ArrayList;
public class TipListAdapter extends RecyclerView.Adapter<TipListAdapter.ViewHolder> {
// private static final String TAG = "TipListAdapter";
private ArrayList<TipEntry> mTipData = new ArrayList<TipEntry>();
private ItemClickListener mOnClickListener;
private LayoutInflater mLayoutInflater;
private class TipEntry {
public String title;
public String text;
public TipEntry(String title, String text) {
this.title = title;
this.text = text;
}
}
public interface ItemClickListener {
void onItemClick(View view, String title, String text);
}
public TipListAdapter(Context context) {
mLayoutInflater = LayoutInflater.from(context);
}
public void add(String title, String text) {
mTipData.add(new TipEntry(title, text));
}
public void setOnClickListener(ItemClickListener onClickListener) {
mOnClickListener = onClickListener;
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView tipTitle;
public TextView tipText;
public View layout;
public ViewHolder(View view) {
super(view);
tipTitle = view.findViewById(R.id.tip_title);
tipText = view.findViewById(R.id.tip_text);
view.setOnClickListener(this);
}
@Override
public void onClick(View view) {
int position = getAdapterPosition();
String title = mTipData.get(position).title;
String text = mTipData.get(position).text;
if (mOnClickListener != null) {
mOnClickListener.onItemClick(view, title, text);
}
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = mLayoutInflater.inflate(R.layout.item_tip, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, final int position) {
viewHolder.tipTitle.setText(mTipData.get(position).title);
viewHolder.tipText.setText(mTipData.get(position).text);
}
@Override
public int getItemCount() {
return mTipData.size();
}
}

View file

@ -1,13 +1,11 @@
Enhancements
* Specify sync conditions differently for each folder, device [NEW]
* Added offline 'tips & tricks' content [NEW]
* UI explains why syncthing is running (or not)
* Support in-app editing of folder's ignore list items
Fixes
* Fixed the "battery eater"
* Fixed xml encoding when parsing, saving the config (#89)
* Fixed override changes button not showing
* Android 8 and 9 support
* 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
* Updated syncthing to v0.14.51 (receiveOnly folders)

Binary file not shown.

After

Width:  |  Height:  |  Size: 544 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 364 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 740 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include layout="@layout/widget_toolbar" />
<android.support.v7.widget.RecyclerView
android:id="@+id/tip_recycler_view"
android:paddingTop="?attr/actionBarSize"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical" />
</RelativeLayout>

View file

@ -135,6 +135,17 @@
android:text="@string/restart"
android:clickable="true"
android:focusable="true" />
<TextView
android:id="@+id/drawerActionTipsAndTricks"
style="@style/Widget.Syncthing.TextView.Label"
android:layout_width="match_parent"
android:layout_height="48dp"
android:drawableLeft="@drawable/ic_help_outline_black_24dp"
android:drawableStart="@drawable/ic_help_outline_black_24dp"
android:text="@string/tips_and_tricks_title"
android:clickable="true"
android:focusable="true" />
</LinearLayout>
</ScrollView>
</RelativeLayout>

View file

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:padding="6dip"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/tip_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="6dip"
android:layout_marginRight="6dip"
android:contentDescription="@string/generic_help"
android:gravity="top"
android:src="@drawable/ic_help_outline_black_24dp" />
<TextView
android:id="@+id/tip_title"
android:layout_marginTop="-25dp"
android:layout_marginLeft="30dp"
android:layout_marginStart="30dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="16sp" />
<TextView
android:id="@+id/tip_text"
android:layout_marginLeft="30dp"
android:layout_marginStart="30dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="12sp" />
</LinearLayout>

View file

@ -197,7 +197,6 @@
<!-- WebGuiActivity -->
<!-- Title of the web gui activity -->
<string name="web_gui_title">Уеб интерфейс</string>

View file

@ -222,7 +222,6 @@ Ens podeu informar dels problemes que trobeu a través de Github.</string>
<!-- WebGuiActivity -->
<!-- Title of the web gui activity -->
<string name="web_gui_title">Interfície web</string>

View file

@ -210,7 +210,6 @@ Všechny zaznamenané chyby prosím hlašte přes Github.</string>
<!-- WebGuiActivity -->
<!-- Title of the web gui activity -->
<string name="web_gui_title">Syncthing GUI</string>

View file

@ -206,7 +206,6 @@ Vær venlig at rapportere ethvert problem, du støder på, via Github. </string>
<!-- WebGuiActivity -->
<!-- Title of the web gui activity -->
<string name="web_gui_title">Web GUI</string>

View file

@ -36,6 +36,7 @@ Bitte melden Sie auftretende Probleme via GitHub.</string>
<string name="finish">Fertig</string>
<string name="generic_example">Beispiel</string>
<string name="generic_error">Fehler</string>
<string name="generic_help">Hilfe</string>
<string name="grant_permission">Zugriff gewähren</string>
<string name="permission_granted">Zugriff gewährt</string>
<string name="reason">Grund:</string>
@ -283,9 +284,23 @@ Bitte melden Sie auftretende Probleme via GitHub.</string>
<!-- Toast show if we could not get root permissions -->
<string name="toast_root_denied">Konnte keine Root-Rechte erhalten.</string>
<!-- WebGuiActivity -->
<!-- TipsAndTricks activity -->
<!-- Title of the Tips and Tricks activity -->
<string name="tips_and_tricks_title">Tipps &amp; Tricks</string>
<string name="tip_write_to_sdcard_title">Workaround zum Schreiben auf Speicherkarte</string>
<string name="tip_write_to_sdcard_text">Wenn Du die Meldung \"Android erlaubt nur schreibgeschützten Zugriff\" für einen bestimmten Ordner erhältst, erstelle einen neuen Ordner und benutze diesen Pfad, um Schreibzugriff zu erhalten:\n%1$s/DEIN_ORDNER_NAME\nSei vorsichtig: Dieser Ordner wird von Android gelöscht, sobald du die App deinstallierst. Verschiebe die Daten an einen sicheren Ort außerhalb des .../Android Ordners, bevor du die App deinstallierst.</string>
<string name="tip_sync_on_local_network_title">Nur über lokales WLAN-Netzwerk syncen</string>
<string name="tip_sync_on_local_network_text">Wenn Du beabsichtigst, nur mit Geräten zu syncen, die am lokalen WLAN-Netzwerk angeschlossen oder Teil eines Hotspot-WLAN sind, kannst du den Batterieverbrauch reduzieren und versehentliches Syncen über mobile Daten verhindern, indem Du die folgenden Optionen unter \"Einstellungen/Syncthing-Optionen\" abschaltest:\n- NAT-Durchdringung\n- Globale Gerätesuche\n- Weiterleitung aktivieren\nLasse nur die \"Lokale Gerätesuche\" eingeschaltet.</string>
<string name="tip_custom_sync_conditions_title">Sync-Bedingungen pro Ordner/Gerät festlegen</string>
<string name="tip_custom_sync_conditions_text">Diese Funktion wird in zukünftigen Releases weiter verbessert. Für den Moment wollten wir das App-Verhalten nicht \"umstürzen\", um bestehende Konfigurationen nicht zu \"brechen\". Deshalb können die \"individuellen Sync-Bedingungen\" für einen bestimmten Netzwerktyp erst festgelegt werden, wenn dieser Netzwerktyp vorher in den globalen Laufkonditionen aktiviert wurde.</string>
<!-- WebGuiActivity -->
<!-- Title of the web gui activity -->
<string name="web_gui_title">Weboberfläche</string>

View file

@ -206,7 +206,6 @@
<!-- WebGuiActivity -->
<!-- Title of the web gui activity -->
<string name="web_gui_title">Web GUI</string>

View file

@ -184,7 +184,6 @@
<!-- WebGuiActivity -->
<!-- Title of the web gui activity -->
<string name="web_gui_title">Interfaz Web</string>

View file

@ -195,7 +195,6 @@
<!-- WebGuiActivity -->
<!-- Title of the web gui activity -->
<string name="web_gui_title">Interfaz gráfica web</string>

View file

@ -211,7 +211,6 @@ Ilmoitathan ystävällisesti kaikista havaitsemistasi ongelmista Githubin kautta
<!-- WebGuiActivity -->
<!-- Title of the web gui activity -->
<string name="web_gui_title">Web käyttöliittymä</string>

View file

@ -224,7 +224,6 @@ S\'il vous plaît, soumettez les problèmes que vous rencontrez via Github.</str
<!-- WebGuiActivity -->
<!-- Title of the web gui activity -->
<string name="web_gui_title">Interface WEB</string>

View file

@ -228,7 +228,6 @@ Néhány eszközön extra alkalmazás-leállító alkalmazást telepített fel a
<!-- WebGuiActivity -->
<!-- Title of the web gui activity -->
<string name="web_gui_title">Webes felület</string>

View file

@ -200,7 +200,6 @@ Jika ada masalah silakan laporkan lewat Github.</string>
<!-- WebGuiActivity -->
<!-- Title of the web gui activity -->
<string name="web_gui_title">Web GUI</string>

View file

@ -224,7 +224,6 @@ Si prega di segnalare eventuali problemi che si incontrano via Github.</string>
<!-- WebGuiActivity -->
<!-- Title of the web gui activity -->
<string name="web_gui_title">Interfaccia Web</string>

View file

@ -207,7 +207,6 @@
<!-- WebGuiActivity -->
<!-- Title of the web gui activity -->
<string name="web_gui_title">Web GUI</string>

View file

@ -205,7 +205,6 @@
<!-- WebGuiActivity -->
<!-- Title of the web gui activity -->
<string name="web_gui_title">웹 GUI</string>

View file

@ -187,7 +187,6 @@
<!-- WebGuiActivity -->
<!-- Title of the web gui activity -->
<string name="web_gui_title">Webgrensesnitt</string>

View file

@ -224,7 +224,6 @@ Als je problemen tegenkomt, meld ze dan via GitHub.</string>
<!-- WebGuiActivity -->
<!-- Title of the web gui activity -->
<string name="web_gui_title">Web-interface</string>

View file

@ -187,7 +187,6 @@
<!-- WebGuiActivity -->
<!-- Title of the web gui activity -->
<string name="web_gui_title">Grafisk grensesnitt på verdsveven</string>

View file

@ -210,7 +210,6 @@ Proszę zgłaszać napotkane błędy programu za pośrednictwem serwisu Github.<
<!-- WebGuiActivity -->
<!-- Title of the web gui activity -->
<string name="web_gui_title">Interfejs internetowy</string>

View file

@ -224,7 +224,6 @@ Por favor, nos avise sobre quaisquer problemas que você encontrar via Github.</
<!-- WebGuiActivity -->
<!-- Title of the web gui activity -->
<string name="web_gui_title">Interface web</string>

View file

@ -200,7 +200,6 @@ Reporte, através do Github, quaisquer problemas que encontre, por favor.</strin
<!-- WebGuiActivity -->
<!-- Title of the web gui activity -->
<string name="web_gui_title">Interface Web</string>

View file

@ -242,7 +242,6 @@ Vă rugăm să raportați orice problemă întâlniți, prin intermediul GitHub.
<!-- WebGuiActivity -->
<!-- Title of the web gui activity -->
<string name="web_gui_title">Interfață web</string>

View file

@ -226,7 +226,6 @@
<!-- WebGuiActivity -->
<!-- Title of the web gui activity -->
<string name="web_gui_title">Веб-интерфейс</string>

View file

@ -171,7 +171,6 @@
<!-- WebGuiActivity -->
<!-- Title of the web gui activity -->
<string name="web_gui_title">Webové GUI</string>

View file

@ -241,7 +241,6 @@ Vänligen rapportera eventuella problem du stöter på via Github.</string>
<!-- WebGuiActivity -->
<!-- Title of the web gui activity -->
<string name="web_gui_title">Webbgränssnitt</string>

View file

@ -197,7 +197,6 @@ Eğer herhangi bir sorunla karşılaşırsan Github aracılığıyla bildir.</st
<!-- WebGuiActivity -->
<!-- Title of the web gui activity -->
<string name="web_gui_title">Web Arayüzü</string>

View file

@ -158,7 +158,6 @@
<!-- WebGuiActivity -->
<!-- Title of the web gui activity -->
<string name="web_gui_title">Веб-інтерфейс</string>

View file

@ -184,7 +184,6 @@
<!-- WebGuiActivity -->
<!-- Title of the web gui activity -->
<string name="web_gui_title">GUI web</string>

View file

@ -209,7 +209,6 @@
<!-- WebGuiActivity -->
<!-- Title of the web gui activity -->
<string name="web_gui_title">网页管理页面</string>

View file

@ -205,7 +205,6 @@
<!-- WebGuiActivity -->
<!-- Title of the web gui activity -->
<string name="web_gui_title">網頁 GUI</string>

View file

@ -36,6 +36,7 @@ Please report any problems you encounter via Github.</string>
<string name="finish">Finish</string>
<string name="generic_example">Example</string>
<string name="generic_error">Error</string>
<string name="generic_help">Help</string>
<string name="grant_permission">Grant permission</string>
<string name="permission_granted">Permission granted</string>
<string name="reason">Reason:</string>
@ -283,9 +284,23 @@ Please report any problems you encounter via Github.</string>
<!-- Toast show if we could not get root permissions -->
<string name="toast_root_denied">Did not get root permissions</string>
<!-- WebGuiActivity -->
<!-- TipsAndTricks activity -->
<!-- Title of the Tips and Tricks activity -->
<string name="tips_and_tricks_title">Tips &amp; Tricks</string>
<string name="tip_write_to_sdcard_title">Write to external sdcard workaround</string>
<string name="tip_write_to_sdcard_text">If you see the UI stating that \'Android only grants syncthing read-only access\' to a certain folder, create a new folder using this path to gain write access:\n%1$s/YOUR_FOLDER_NAME\nBe careful: This folder will get wiped out by Android if you uninstall this app. Before uninstalling the app, move the data to a safe place outside the .../Android folder.</string>
<string name="tip_sync_on_local_network_title">Sync only using the local WiFi network</string>
<string name="tip_sync_on_local_network_text">If you\'d like to sync only with devices that are located on the local WiFi network or reachable via WiFi hotspot, you can lower battery usage and avoid accidentially syncing over mobile data by turning off the following options under \'Settings/Syncthing Options\':\n- Enable NAT traversal\n- Global Discovery\n- Enable Relaying\nOnly leave \'Local discovery\' enabled.</string>
<string name="tip_custom_sync_conditions_title">Use per folder/device custom sync conditions</string>
<string name="tip_custom_sync_conditions_text">This feature will still be improved in future releases. For now, we didn\'t want to break existing configs and app behaviour. That\'s why custom sync conditions for a certain network type can only be set if you enable syncing on the network in the global run conditions first.</string>
<!-- WebGuiActivity -->
<!-- Title of the web gui activity -->
<string name="web_gui_title">Web GUI</string>