From 003076eb14fd5b99edfcf6bf4b36a03f0836a290 Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Thu, 27 Apr 2017 10:08:39 +0200 Subject: [PATCH 01/53] ability to show custom error message for webview --- .../ui/activity/ExternalSiteWebView.java | 17 ++++++++++++++++- src/modified/assets/customError.html | 4 ++++ 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 src/modified/assets/customError.html diff --git a/src/main/java/com/owncloud/android/ui/activity/ExternalSiteWebView.java b/src/main/java/com/owncloud/android/ui/activity/ExternalSiteWebView.java index 17625df860..a05072142a 100644 --- a/src/main/java/com/owncloud/android/ui/activity/ExternalSiteWebView.java +++ b/src/main/java/com/owncloud/android/ui/activity/ExternalSiteWebView.java @@ -38,6 +38,9 @@ import com.owncloud.android.MainApp; import com.owncloud.android.R; import com.owncloud.android.lib.common.utils.Log_OC; +import java.io.IOException; +import java.io.InputStream; + /** * This activity shows an URL as a web view */ @@ -122,7 +125,19 @@ public class ExternalSiteWebView extends FileActivity { webview.setWebViewClient(new WebViewClient() { public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { - Toast.makeText(activity, getString(R.string.webview_error) + ": " + description, Toast.LENGTH_SHORT).show(); + try { + InputStream errorPage = getAssets().open("customError.html"); + + if (errorPage != null) { + view.loadUrl("file:///android_asset/customError.html"); + } else { + Toast.makeText(activity, getString(R.string.webview_error) + ": " + description, + Toast.LENGTH_SHORT).show(); + } + } catch (IOException e) { + Toast.makeText(activity, getString(R.string.webview_error) + ": " + description, + Toast.LENGTH_SHORT).show(); + } } }); diff --git a/src/modified/assets/customError.html b/src/modified/assets/customError.html new file mode 100644 index 0000000000..187dc5febc --- /dev/null +++ b/src/modified/assets/customError.html @@ -0,0 +1,4 @@ + +

Sorry

+Modified + \ No newline at end of file From 58566337f6975e99d9356d64d065c7da6624da44 Mon Sep 17 00:00:00 2001 From: alejandro Date: Thu, 27 Apr 2017 15:11:04 -0500 Subject: [PATCH 02/53] Fix to load error page from raw --- .../authentication/AuthenticatorActivity.java | 21 ++++++++++++ .../ui/activity/ExternalSiteWebView.java | 33 ++++++++++++------- .../res/raw/custom_error.html} | 0 3 files changed, 42 insertions(+), 12 deletions(-) rename src/{modified/assets/customError.html => main/res/raw/custom_error.html} (100%) diff --git a/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java b/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java index 3a72048608..bf0e466c89 100644 --- a/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java +++ b/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java @@ -74,6 +74,8 @@ import android.view.View.OnTouchListener; import android.view.inputmethod.EditorInfo; import android.webkit.HttpAuthHandler; import android.webkit.SslErrorHandler; +import android.webkit.WebResourceRequest; +import android.webkit.WebResourceResponse; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Button; @@ -115,6 +117,9 @@ import com.owncloud.android.ui.dialog.SslUntrustedCertDialog; import com.owncloud.android.ui.dialog.SslUntrustedCertDialog.OnSslUntrustedCertListener; import com.owncloud.android.utils.DisplayUtils; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; import java.security.cert.X509Certificate; import java.util.Map; @@ -336,6 +341,22 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity } return false; } + + public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { + BufferedReader buffreader = new BufferedReader(new InputStreamReader(getResources().openRawResource(R.raw.custom_error))); + String line; + StringBuilder text = new StringBuilder(); + try { + while (( line = buffreader.readLine()) != null) { + text.append(line); + text.append('\n'); + } + } catch (IOException e) { + Log_OC.e(TAG,e.getMessage()); + return; + } + mLoginWebView.loadData(text.toString(),"text/html; charset=UTF-8", null); + } }); } diff --git a/src/main/java/com/owncloud/android/ui/activity/ExternalSiteWebView.java b/src/main/java/com/owncloud/android/ui/activity/ExternalSiteWebView.java index a05072142a..586054756d 100644 --- a/src/main/java/com/owncloud/android/ui/activity/ExternalSiteWebView.java +++ b/src/main/java/com/owncloud/android/ui/activity/ExternalSiteWebView.java @@ -28,6 +28,9 @@ import android.support.v4.widget.DrawerLayout; import android.view.MenuItem; import android.view.Window; import android.webkit.WebChromeClient; +import android.webkit.WebResourceError; +import android.webkit.WebResourceRequest; +import android.webkit.WebResourceResponse; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; @@ -38,8 +41,10 @@ import com.owncloud.android.MainApp; import com.owncloud.android.R; import com.owncloud.android.lib.common.utils.Log_OC; +import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; /** * This activity shows an URL as a web view @@ -55,6 +60,7 @@ public class ExternalSiteWebView extends FileActivity { private boolean showSidebar = false; private int menuItemId; + private WebView webview; @Override protected void onCreate(Bundle savedInstanceState) { @@ -62,7 +68,7 @@ public class ExternalSiteWebView extends FileActivity { Bundle extras = getIntent().getExtras(); String title = extras.getString(EXTRA_TITLE); - String url = extras.getString(EXTRA_URL); + final String url = extras.getString(EXTRA_URL); menuItemId = extras.getInt(EXTRA_MENU_ITEM_ID); showSidebar = extras.getBoolean(EXTRA_SHOW_SIDEBAR); @@ -72,8 +78,8 @@ public class ExternalSiteWebView extends FileActivity { super.onCreate(savedInstanceState); setContentView(R.layout.externalsite_webview); - WebView webview = (WebView) findViewById(R.id.webView); - WebSettings webSettings = webview.getSettings(); + webview = (WebView) findViewById(R.id.webView); + final WebSettings webSettings = webview.getSettings(); webview.setFocusable(true); webview.setFocusableInTouchMode(true); @@ -125,19 +131,22 @@ public class ExternalSiteWebView extends FileActivity { webview.setWebViewClient(new WebViewClient() { public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { - try { - InputStream errorPage = getAssets().open("customError.html"); - if (errorPage != null) { - view.loadUrl("file:///android_asset/customError.html"); - } else { - Toast.makeText(activity, getString(R.string.webview_error) + ": " + description, - Toast.LENGTH_SHORT).show(); + BufferedReader buffreader = new BufferedReader(new InputStreamReader(getResources().openRawResource(R.raw.custom_error))); + String line; + StringBuilder text = new StringBuilder(); + try { + while (( line = buffreader.readLine()) != null) { + text.append(line); + text.append('\n'); } } catch (IOException e) { - Toast.makeText(activity, getString(R.string.webview_error) + ": " + description, - Toast.LENGTH_SHORT).show(); + Log_OC.e(TAG,e.getMessage()); + return; } + + webview.loadData(text.toString(),"text/html; charset=UTF-8", null); + } }); diff --git a/src/modified/assets/customError.html b/src/main/res/raw/custom_error.html similarity index 100% rename from src/modified/assets/customError.html rename to src/main/res/raw/custom_error.html From 10b48a21ecf6385355fbb14c0d6546339a4a8025 Mon Sep 17 00:00:00 2001 From: alejandro Date: Thu, 27 Apr 2017 15:23:36 -0500 Subject: [PATCH 03/53] Fixing imports --- .../android/authentication/AuthenticatorActivity.java | 2 -- .../owncloud/android/ui/activity/ExternalSiteWebView.java | 7 +------ 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java b/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java index bf0e466c89..e6a9304697 100644 --- a/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java +++ b/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java @@ -74,8 +74,6 @@ import android.view.View.OnTouchListener; import android.view.inputmethod.EditorInfo; import android.webkit.HttpAuthHandler; import android.webkit.SslErrorHandler; -import android.webkit.WebResourceRequest; -import android.webkit.WebResourceResponse; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Button; diff --git a/src/main/java/com/owncloud/android/ui/activity/ExternalSiteWebView.java b/src/main/java/com/owncloud/android/ui/activity/ExternalSiteWebView.java index 586054756d..ecd066f738 100644 --- a/src/main/java/com/owncloud/android/ui/activity/ExternalSiteWebView.java +++ b/src/main/java/com/owncloud/android/ui/activity/ExternalSiteWebView.java @@ -28,14 +28,10 @@ import android.support.v4.widget.DrawerLayout; import android.view.MenuItem; import android.view.Window; import android.webkit.WebChromeClient; -import android.webkit.WebResourceError; -import android.webkit.WebResourceRequest; -import android.webkit.WebResourceResponse; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.ProgressBar; -import android.widget.Toast; import com.owncloud.android.MainApp; import com.owncloud.android.R; @@ -43,7 +39,6 @@ import com.owncloud.android.lib.common.utils.Log_OC; import java.io.BufferedReader; import java.io.IOException; -import java.io.InputStream; import java.io.InputStreamReader; /** @@ -68,7 +63,7 @@ public class ExternalSiteWebView extends FileActivity { Bundle extras = getIntent().getExtras(); String title = extras.getString(EXTRA_TITLE); - final String url = extras.getString(EXTRA_URL); + String url = extras.getString(EXTRA_URL); menuItemId = extras.getInt(EXTRA_MENU_ITEM_ID); showSidebar = extras.getBoolean(EXTRA_SHOW_SIDEBAR); From 0994140d55f8b858916547a1e4eea64a898c09ea Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Fri, 21 Apr 2017 20:09:59 +0200 Subject: [PATCH 04/53] Progress on magic --- .../activity/ContactsPreferenceActivity.java | 257 +------------- .../ui/activity/FileDisplayActivity.java | 1 + .../ContactsBackup}/ContactListFragment.java | 47 ++- .../ContactsBackupFragment.java | 336 ++++++++++++++++++ src/main/res/layout/contactlist_fragment.xml | 7 +- .../res/layout/contacts_backup_fragment.xml | 88 +++++ src/main/res/layout/contacts_preference.xml | 75 +--- src/main/res/values/strings.xml | 3 +- 8 files changed, 478 insertions(+), 336 deletions(-) rename src/main/java/com/owncloud/android/ui/{activity => fragment/ContactsBackup}/ContactListFragment.java (90%) create mode 100644 src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactsBackupFragment.java create mode 100644 src/main/res/layout/contacts_backup_fragment.xml diff --git a/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java b/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java index 5315e1c69d..a420d0c23d 100644 --- a/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java @@ -21,43 +21,27 @@ package com.owncloud.android.ui.activity; -import android.Manifest; import android.accounts.Account; -import android.app.DatePickerDialog; import android.content.Context; import android.content.Intent; -import android.content.SharedPreferences; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.design.widget.BottomNavigationView; import android.support.design.widget.Snackbar; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; -import android.support.v7.widget.SwitchCompat; -import android.view.MenuItem; -import android.view.View; -import android.widget.CompoundButton; -import android.widget.DatePicker; -import android.widget.TextView; -import android.widget.Toast; import com.evernote.android.job.JobManager; import com.evernote.android.job.JobRequest; import com.evernote.android.job.util.support.PersistableBundleCompat; import com.owncloud.android.R; import com.owncloud.android.datamodel.OCFile; -import com.owncloud.android.db.PreferenceManager; import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.services.ContactsBackupJob; +import com.owncloud.android.ui.fragment.ContactsBackup.ContactsBackupFragment; import com.owncloud.android.ui.fragment.FileFragment; -import com.owncloud.android.utils.DisplayUtils; -import com.owncloud.android.utils.PermissionUtil; -import java.util.Calendar; -import java.util.Collections; -import java.util.Comparator; import java.util.Set; -import java.util.Vector; /** * This activity shows all settings for contact backup/restore @@ -69,9 +53,6 @@ public class ContactsPreferenceActivity extends FileActivity implements FileFrag public static final String PREFERENCE_CONTACTS_AUTOMATIC_BACKUP = "PREFERENCE_CONTACTS_AUTOMATIC_BACKUP"; public static final String PREFERENCE_CONTACTS_LAST_BACKUP = "PREFERENCE_CONTACTS_LAST_BACKUP"; - private SwitchCompat backupSwitch; - private SharedPreferences sharedPreferences; - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -84,41 +65,10 @@ public class ContactsPreferenceActivity extends FileActivity implements FileFrag // setup drawer setupDrawer(R.id.nav_contacts); - getSupportActionBar().setTitle(R.string.actionbar_contacts); - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - - sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); - - backupSwitch = (SwitchCompat) findViewById(R.id.contacts_automatic_backup); - backupSwitch.setChecked(sharedPreferences.getBoolean(PREFERENCE_CONTACTS_AUTOMATIC_BACKUP, false)); - - backupSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - if (isChecked && - checkAndAskForContactsReadPermission(PermissionUtil.PERMISSIONS_READ_CONTACTS_AUTOMATIC)) { - // store value - setAutomaticBackup(backupSwitch, true); - - // enable daily job - startContactBackupJob(getAccount()); - } else { - setAutomaticBackup(backupSwitch, false); - - // cancel pending jobs - cancelContactBackupJob(getBaseContext()); - } - } - }); - - // display last backup - TextView lastBackup = (TextView) findViewById(R.id.contacts_last_backup_timestamp); - Long lastBackupTimestamp = sharedPreferences.getLong(PREFERENCE_CONTACTS_LAST_BACKUP, -1); - - if (lastBackupTimestamp == -1) { - lastBackup.setText(R.string.contacts_preference_backup_never); - } else { - lastBackup.setText(DisplayUtils.getRelativeTimestamp(getBaseContext(), lastBackupTimestamp)); + if (savedInstanceState == null) { + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + transaction.add(R.id.frame_container, new ContactsBackupFragment()); + transaction.commit(); } BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottom_navigation_view); @@ -129,183 +79,6 @@ public class ContactsPreferenceActivity extends FileActivity implements FileFrag } } - @Override - public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults); - - if (requestCode == PermissionUtil.PERMISSIONS_READ_CONTACTS_AUTOMATIC) { - for (int index = 0; index < permissions.length; index++) { - if (Manifest.permission.READ_CONTACTS.equalsIgnoreCase(permissions[index])) { - if (grantResults[index] >= 0) { - setAutomaticBackup(backupSwitch, true); - } else { - setAutomaticBackup(backupSwitch, false); - } - - break; - } - } - } - - if (requestCode == PermissionUtil.PERMISSIONS_READ_CONTACTS_MANUALLY) { - for (int index = 0; index < permissions.length; index++) { - if (Manifest.permission.READ_CONTACTS.equalsIgnoreCase(permissions[index])) { - if (grantResults[index] >= 0) { - startContactsBackupJob(); - } - - break; - } - } - } - } - - public void backupContacts(View v) { - if (checkAndAskForContactsReadPermission(PermissionUtil.PERMISSIONS_READ_CONTACTS_MANUALLY)) { - startContactsBackupJob(); - } - } - - private void startContactsBackupJob() { - PersistableBundleCompat bundle = new PersistableBundleCompat(); - bundle.putString(ContactsBackupJob.ACCOUNT, getAccount().name); - bundle.putBoolean(ContactsBackupJob.FORCE, true); - - new JobRequest.Builder(ContactsBackupJob.TAG) - .setExtras(bundle) - .setExecutionWindow(3_000L, 10_000L) - .setRequiresCharging(false) - .setPersisted(false) - .setUpdateCurrent(false) - .build() - .schedule(); - - Snackbar.make(findViewById(R.id.contacts_linear_layout), R.string.contacts_preferences_backup_scheduled, - Snackbar.LENGTH_LONG).show(); - } - - private void setAutomaticBackup(SwitchCompat backupSwitch, boolean bool) { - backupSwitch.setChecked(bool); - SharedPreferences.Editor editor = sharedPreferences.edit(); - editor.putBoolean(PREFERENCE_CONTACTS_AUTOMATIC_BACKUP, bool); - editor.apply(); - } - - private boolean checkAndAskForContactsReadPermission(final int permission) { - // check permissions - if ((PermissionUtil.checkSelfPermission(this, Manifest.permission.READ_CONTACTS))) { - return true; - } else { - // Check if we should show an explanation - if (PermissionUtil.shouldShowRequestPermissionRationale(ContactsPreferenceActivity.this, - android.Manifest.permission.READ_CONTACTS)) { - // Show explanation to the user and then request permission - Snackbar snackbar = Snackbar.make(findViewById(R.id.contacts_linear_layout), R.string.contacts_read_permission, - Snackbar.LENGTH_INDEFINITE) - .setAction(R.string.common_ok, new View.OnClickListener() { - @Override - public void onClick(View v) { - PermissionUtil.requestReadContactPermission(ContactsPreferenceActivity.this, permission); - } - }); - - DisplayUtils.colorSnackbar(this, snackbar); - - snackbar.show(); - - return false; - } else { - // No explanation needed, request the permission. - PermissionUtil.requestReadContactPermission(ContactsPreferenceActivity.this, permission); - - return false; - } - } - } - - public void openDate(View v) { - String backupFolderString = getResources().getString(R.string.contacts_backup_folder) + OCFile.PATH_SEPARATOR; - OCFile backupFolder = getStorageManager().getFileByPath(backupFolderString); - - Vector backupFiles = getStorageManager().getFolderContent(backupFolder, false); - - Collections.sort(backupFiles, new Comparator() { - @Override - public int compare(OCFile o1, OCFile o2) { - if (o1.getModificationTimestamp() == o2.getModificationTimestamp()) { - return 0; - } - - if (o1.getModificationTimestamp() > o2.getModificationTimestamp()) { - return 1; - } else { - return -1; - } - } - }); - - Calendar cal = Calendar.getInstance(); - int year = cal.get(Calendar.YEAR); - int month = cal.get(Calendar.MONTH) + 1; - int day = cal.get(Calendar.DAY_OF_MONTH); - - DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() { - @Override - public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) { - String backupFolderString = getResources().getString(R.string.contacts_backup_folder) + OCFile.PATH_SEPARATOR; - OCFile backupFolder = getStorageManager().getFileByPath(backupFolderString); - Vector backupFiles = getStorageManager().getFolderContent(backupFolder, false); - - // find file with modification with date and time between 00:00 and 23:59 - // if more than one file exists, take oldest - Calendar date = Calendar.getInstance(); - date.set(year, month, dayOfMonth); - - // start - date.set(Calendar.HOUR, 0); - date.set(Calendar.MINUTE, 0); - date.set(Calendar.SECOND, 1); - date.set(Calendar.MILLISECOND, 0); - date.set(Calendar.AM_PM, Calendar.AM); - Long start = date.getTimeInMillis(); - - // end - date.set(Calendar.HOUR, 23); - date.set(Calendar.MINUTE, 59); - date.set(Calendar.SECOND, 59); - Long end = date.getTimeInMillis(); - - OCFile backupToRestore = null; - - for (OCFile file : backupFiles) { - if (start < file.getModificationTimestamp() && end > file.getModificationTimestamp()) { - if (backupToRestore == null) { - backupToRestore = file; - } else if (backupToRestore.getModificationTimestamp() < file.getModificationTimestamp()) { - backupToRestore = file; - } - } - } - - if (backupToRestore != null) { - Fragment contactListFragment = ContactListFragment.newInstance(backupToRestore, getAccount()); - - FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); - transaction.replace(R.id.contacts_linear_layout, contactListFragment); - transaction.commit(); - } else { - Toast.makeText(ContactsPreferenceActivity.this, R.string.contacts_preferences_no_file_found, - Toast.LENGTH_SHORT).show(); - } - } - }; - - DatePickerDialog datePickerDialog = new DatePickerDialog(this, dateSetListener, year, month, day); - datePickerDialog.getDatePicker().setMaxDate(backupFiles.lastElement().getModificationTimestamp()); - datePickerDialog.getDatePicker().setMinDate(backupFiles.firstElement().getModificationTimestamp()); - - datePickerDialog.show(); - } public static void startContactBackupJob(Account account) { Log_OC.d(TAG, "start daily contacts backup job"); @@ -335,26 +108,6 @@ public class ContactsPreferenceActivity extends FileActivity implements FileFrag } - @Override - public boolean onOptionsItemSelected(MenuItem item) { - boolean retval; - switch (item.getItemId()) { - case android.R.id.home: - if (isDrawerOpen()) { - closeDrawer(); - } else { - openDrawer(); - } - retval = true; - break; - - default: - retval = super.onOptionsItemSelected(item); - break; - } - return retval; - } - @Override public void showFiles(boolean onDeviceOnly) { super.showFiles(onDeviceOnly); diff --git a/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java index fc240c4e5f..311aacb29e 100644 --- a/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -83,6 +83,7 @@ import com.owncloud.android.services.observer.FileObserverService; import com.owncloud.android.syncadapter.FileSyncAdapter; import com.owncloud.android.ui.dialog.SortingOrderDialogFragment; import com.owncloud.android.ui.events.TokenPushEvent; +import com.owncloud.android.ui.fragment.ContactsBackup.ContactListFragment; import com.owncloud.android.ui.fragment.ExtendedListFragment; import com.owncloud.android.ui.fragment.FileDetailFragment; import com.owncloud.android.ui.fragment.FileFragment; diff --git a/src/main/java/com/owncloud/android/ui/activity/ContactListFragment.java b/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactListFragment.java similarity index 90% rename from src/main/java/com/owncloud/android/ui/activity/ContactListFragment.java rename to src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactListFragment.java index 074f2574eb..ae9bebee17 100644 --- a/src/main/java/com/owncloud/android/ui/activity/ContactListFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactListFragment.java @@ -19,7 +19,7 @@ * along with this program. If not, see . */ -package com.owncloud.android.ui.activity; +package com.owncloud.android.ui.fragment.ContactsBackup; import android.Manifest; import android.accounts.Account; @@ -38,7 +38,7 @@ import android.support.v7.app.AlertDialog; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; -import android.view.Menu; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; @@ -54,6 +54,7 @@ import com.owncloud.android.files.services.FileDownloader; import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.services.ContactsImportJob; import com.owncloud.android.ui.TextDrawable; +import com.owncloud.android.ui.activity.ContactsPreferenceActivity; import com.owncloud.android.ui.fragment.FileFragment; import com.owncloud.android.utils.BitmapUtils; import com.owncloud.android.utils.PermissionUtil; @@ -98,6 +99,11 @@ public class ContactListFragment extends FileFragment { View view = inflater.inflate(R.layout.contactlist_fragment, null); setHasOptionsMenu(true); + ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); + contactsPreferenceActivity.getSupportActionBar().setTitle(R.string.actionbar_contacts_restore); + contactsPreferenceActivity.getSupportActionBar().setDisplayHomeAsUpEnabled(true); + contactsPreferenceActivity.setDrawerIndicatorEnabled(false); + ArrayList vCards = new ArrayList<>(); checkedVCards = new HashSet<>(); @@ -136,10 +142,10 @@ public class ContactListFragment extends FileFragment { ContactListAdapter.OnVCardClickListener vCardClickListener = new ContactListAdapter.OnVCardClickListener() { private void setRestoreButton() { if (checkedVCards.size() > 0) { - restoreContacts.setEnabled(true); + restoreContacts.setVisibility(View.VISIBLE); restoreContacts.setBackgroundColor(getResources().getColor(R.color.primary_button_background_color)); } else { - restoreContacts.setEnabled(false); + restoreContacts.setVisibility(View.GONE); restoreContacts.setBackgroundColor(getResources().getColor(R.color.standard_grey)); } } @@ -169,13 +175,36 @@ public class ContactListFragment extends FileFragment { } @Override - public void onPrepareOptionsMenu(Menu menu) { - menu.findItem(R.id.action_search).setVisible(false); - menu.findItem(R.id.action_sync_account).setVisible(false); - menu.findItem(R.id.action_sort).setVisible(false); - menu.findItem(R.id.action_switch_view).setVisible(false); + public void onDestroy() { + super.onDestroy(); + ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); + contactsPreferenceActivity.setDrawerIndicatorEnabled(true); } + public void onResume() { + super.onResume(); + ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); + contactsPreferenceActivity.setDrawerIndicatorEnabled(false); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + boolean retval; + ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); + + switch (item.getItemId()) { + case android.R.id.home: + contactsPreferenceActivity.onBackPressed(); + retval = true; + break; + default: + retval = super.onOptionsItemSelected(item); + break; + } + return retval; + } + + static class ContactItemViewHolder extends RecyclerView.ViewHolder { private ImageView badge; private CheckedTextView name; diff --git a/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactsBackupFragment.java b/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactsBackupFragment.java new file mode 100644 index 0000000000..f13666f872 --- /dev/null +++ b/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactsBackupFragment.java @@ -0,0 +1,336 @@ +/** + * Nextcloud Android client application + * + * @author Mario Danic + * Copyright (C) 2017 Mario Danic + * Copyright (C) 2017 Nextcloud GmbH. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +package com.owncloud.android.ui.fragment.ContactsBackup; + +import android.Manifest; +import android.app.DatePickerDialog; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.design.widget.Snackbar; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentTransaction; +import android.support.v7.widget.SwitchCompat; +import android.view.LayoutInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CompoundButton; +import android.widget.DatePicker; +import android.widget.TextView; +import android.widget.Toast; + +import com.evernote.android.job.JobRequest; +import com.evernote.android.job.util.support.PersistableBundleCompat; +import com.owncloud.android.R; +import com.owncloud.android.datamodel.OCFile; +import com.owncloud.android.db.PreferenceManager; +import com.owncloud.android.services.ContactsBackupJob; +import com.owncloud.android.ui.activity.ContactsPreferenceActivity; +import com.owncloud.android.ui.fragment.FileFragment; +import com.owncloud.android.utils.DisplayUtils; +import com.owncloud.android.utils.PermissionUtil; + +import java.util.Calendar; +import java.util.Collections; +import java.util.Comparator; +import java.util.Vector; + +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.OnClick; + +import static com.owncloud.android.ui.activity.ContactsPreferenceActivity.PREFERENCE_CONTACTS_AUTOMATIC_BACKUP; +import static com.owncloud.android.ui.activity.ContactsPreferenceActivity.PREFERENCE_CONTACTS_LAST_BACKUP; + +public class ContactsBackupFragment extends FileFragment { + public static final String TAG = ContactsBackupFragment.class.getSimpleName(); + + private SharedPreferences sharedPreferences; + + @BindView(R.id.contacts_automatic_backup) + SwitchCompat backupSwitch; + + @Override + public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + + View view = inflater.inflate(R.layout.contacts_backup_fragment, null); + ButterKnife.bind(this, view); + + setHasOptionsMenu(true); + + final ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); + + contactsPreferenceActivity.getSupportActionBar().setTitle(R.string.actionbar_contacts); + contactsPreferenceActivity.getSupportActionBar().setDisplayHomeAsUpEnabled(true); + + sharedPreferences = PreferenceManager.getDefaultSharedPreferences(contactsPreferenceActivity); + + backupSwitch.setChecked(sharedPreferences.getBoolean(PREFERENCE_CONTACTS_AUTOMATIC_BACKUP, false)); + + backupSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + if (isChecked && + checkAndAskForContactsReadPermission(PermissionUtil.PERMISSIONS_READ_CONTACTS_AUTOMATIC)) { + // store value + setAutomaticBackup(backupSwitch, true); + + // enable daily job + contactsPreferenceActivity.startContactBackupJob(contactsPreferenceActivity.getAccount()); + } else { + setAutomaticBackup(backupSwitch, false); + + // cancel pending jobs + contactsPreferenceActivity.cancelContactBackupJob(contactsPreferenceActivity); + } + } + }); + + // display last backup + TextView lastBackup = (TextView) view.findViewById(R.id.contacts_last_backup_timestamp); + Long lastBackupTimestamp = sharedPreferences.getLong(PREFERENCE_CONTACTS_LAST_BACKUP, -1); + + if (lastBackupTimestamp == -1) { + lastBackup.setText(R.string.contacts_preference_backup_never); + } else { + lastBackup.setText(DisplayUtils.getRelativeTimestamp(contactsPreferenceActivity, lastBackupTimestamp)); + } + + return view; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + final ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); + + boolean retval; + switch (item.getItemId()) { + case android.R.id.home: + if (contactsPreferenceActivity.isDrawerOpen()) { + contactsPreferenceActivity.closeDrawer(); + } else { + contactsPreferenceActivity.openDrawer(); + } + retval = true; + break; + + default: + retval = super.onOptionsItemSelected(item); + break; + } + return retval; + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + + if (requestCode == PermissionUtil.PERMISSIONS_READ_CONTACTS_AUTOMATIC) { + for (int index = 0; index < permissions.length; index++) { + if (Manifest.permission.READ_CONTACTS.equalsIgnoreCase(permissions[index])) { + if (grantResults[index] >= 0) { + setAutomaticBackup(backupSwitch, true); + } else { + setAutomaticBackup(backupSwitch, false); + } + + break; + } + } + } + + if (requestCode == PermissionUtil.PERMISSIONS_READ_CONTACTS_MANUALLY) { + for (int index = 0; index < permissions.length; index++) { + if (Manifest.permission.READ_CONTACTS.equalsIgnoreCase(permissions[index])) { + if (grantResults[index] >= 0) { + startContactsBackupJob(); + } + + break; + } + } + } + } + + @OnClick(R.id.contacts_backup_now) + public void backupContacts() { + if (checkAndAskForContactsReadPermission(PermissionUtil.PERMISSIONS_READ_CONTACTS_MANUALLY)) { + startContactsBackupJob(); + } + } + + private void startContactsBackupJob() { + final ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); + + PersistableBundleCompat bundle = new PersistableBundleCompat(); + bundle.putString(ContactsBackupJob.ACCOUNT, contactsPreferenceActivity.getAccount().name); + bundle.putBoolean(ContactsBackupJob.FORCE, true); + + new JobRequest.Builder(ContactsBackupJob.TAG) + .setExtras(bundle) + .setExecutionWindow(3_000L, 10_000L) + .setRequiresCharging(false) + .setPersisted(false) + .setUpdateCurrent(false) + .build() + .schedule(); + + Snackbar.make(getView().findViewById(R.id.contacts_linear_layout), R.string.contacts_preferences_backup_scheduled, + Snackbar.LENGTH_LONG).show(); + } + + private void setAutomaticBackup(SwitchCompat backupSwitch, boolean bool) { + backupSwitch.setChecked(bool); + SharedPreferences.Editor editor = sharedPreferences.edit(); + editor.putBoolean(PREFERENCE_CONTACTS_AUTOMATIC_BACKUP, bool); + editor.apply(); + } + + private boolean checkAndAskForContactsReadPermission(final int permission) { + final ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); + + // check permissions + if ((PermissionUtil.checkSelfPermission(contactsPreferenceActivity, Manifest.permission.READ_CONTACTS))) { + return true; + } else { + // Check if we should show an explanation + if (PermissionUtil.shouldShowRequestPermissionRationale(contactsPreferenceActivity, + android.Manifest.permission.READ_CONTACTS)) { + // Show explanation to the user and then request permission + Snackbar snackbar = Snackbar.make(getView().findViewById(R.id.contacts_linear_layout), + R.string.contacts_read_permission, + Snackbar.LENGTH_INDEFINITE) + .setAction(R.string.common_ok, new View.OnClickListener() { + @Override + public void onClick(View v) { + PermissionUtil.requestReadContactPermission(contactsPreferenceActivity, permission); + } + }); + + DisplayUtils.colorSnackbar(contactsPreferenceActivity, snackbar); + + snackbar.show(); + + return false; + } else { + // No explanation needed, request the permission. + PermissionUtil.requestReadContactPermission(contactsPreferenceActivity, permission); + + return false; + } + } + } + + @OnClick(R.id.contacts_datepicker) + public void openDate() { + final ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); + + + String backupFolderString = getResources().getString(R.string.contacts_backup_folder) + OCFile.PATH_SEPARATOR; + OCFile backupFolder = contactsPreferenceActivity.getStorageManager().getFileByPath(backupFolderString); + + Vector backupFiles = contactsPreferenceActivity.getStorageManager().getFolderContent(backupFolder, + false); + + Collections.sort(backupFiles, new Comparator() { + @Override + public int compare(OCFile o1, OCFile o2) { + if (o1.getModificationTimestamp() == o2.getModificationTimestamp()) { + return 0; + } + + if (o1.getModificationTimestamp() > o2.getModificationTimestamp()) { + return 1; + } else { + return -1; + } + } + }); + + Calendar cal = Calendar.getInstance(); + int year = cal.get(Calendar.YEAR); + int month = cal.get(Calendar.MONTH) + 1; + int day = cal.get(Calendar.DAY_OF_MONTH); + + DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() { + @Override + public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) { + String backupFolderString = getResources().getString(R.string.contacts_backup_folder) + OCFile.PATH_SEPARATOR; + OCFile backupFolder = contactsPreferenceActivity.getStorageManager().getFileByPath(backupFolderString); + Vector backupFiles = contactsPreferenceActivity.getStorageManager().getFolderContent( + backupFolder, false); + + // find file with modification with date and time between 00:00 and 23:59 + // if more than one file exists, take oldest + Calendar date = Calendar.getInstance(); + date.set(year, month, dayOfMonth); + + // start + date.set(Calendar.HOUR, 0); + date.set(Calendar.MINUTE, 0); + date.set(Calendar.SECOND, 1); + date.set(Calendar.MILLISECOND, 0); + date.set(Calendar.AM_PM, Calendar.AM); + Long start = date.getTimeInMillis(); + + // end + date.set(Calendar.HOUR, 23); + date.set(Calendar.MINUTE, 59); + date.set(Calendar.SECOND, 59); + Long end = date.getTimeInMillis(); + + OCFile backupToRestore = null; + + for (OCFile file : backupFiles) { + if (start < file.getModificationTimestamp() && end > file.getModificationTimestamp()) { + if (backupToRestore == null) { + backupToRestore = file; + } else if (backupToRestore.getModificationTimestamp() < file.getModificationTimestamp()) { + backupToRestore = file; + } + } + } + + if (backupToRestore != null) { + Fragment contactListFragment = ContactListFragment.newInstance(backupToRestore, + contactsPreferenceActivity.getAccount()); + + FragmentTransaction transaction = contactsPreferenceActivity.getSupportFragmentManager().beginTransaction(); + transaction.replace(R.id.frame_container, contactListFragment); + transaction.addToBackStack(null); + transaction.commit(); + } else { + Toast.makeText(contactsPreferenceActivity, R.string.contacts_preferences_no_file_found, + Toast.LENGTH_SHORT).show(); + } + } + }; + + DatePickerDialog datePickerDialog = new DatePickerDialog(contactsPreferenceActivity, + dateSetListener, year, month, day); + datePickerDialog.getDatePicker().setMaxDate(backupFiles.lastElement().getModificationTimestamp()); + datePickerDialog.getDatePicker().setMinDate(backupFiles.firstElement().getModificationTimestamp()); + + datePickerDialog.show(); + } + +} diff --git a/src/main/res/layout/contactlist_fragment.xml b/src/main/res/layout/contactlist_fragment.xml index f9543f808d..99f6e344d6 100644 --- a/src/main/res/layout/contactlist_fragment.xml +++ b/src/main/res/layout/contactlist_fragment.xml @@ -21,6 +21,7 @@ + android:theme="@style/Button.Primary" + android:visibility="gone"/> \ No newline at end of file diff --git a/src/main/res/layout/contacts_backup_fragment.xml b/src/main/res/layout/contacts_backup_fragment.xml new file mode 100644 index 0000000000..df4ea000bc --- /dev/null +++ b/src/main/res/layout/contacts_backup_fragment.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/res/layout/contacts_preference.xml b/src/main/res/layout/contacts_preference.xml index fb4a59172f..fa6198b444 100644 --- a/src/main/res/layout/contacts_preference.xml +++ b/src/main/res/layout/contacts_preference.xml @@ -28,7 +28,7 @@ @@ -45,77 +45,12 @@ + android:layout_height="match_parent" + android:id="@+id/frame_container"> - - - - - - - - - - - - - - + diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index d621d8997f..cf435b869d 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -633,7 +633,8 @@ About Backup contacts - Now + Restore contacts + Backup now Restore last backup Restore Backup From 382ee5dc1c69c0de63af30529a578157b5251a92 Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Fri, 21 Apr 2017 20:16:10 +0200 Subject: [PATCH 05/53] Small reformat --- .../com/owncloud/android/ui/activity/FileDisplayActivity.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java index 311aacb29e..8378ab4aa5 100644 --- a/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -434,7 +434,7 @@ public class FileDisplayActivity extends HookActivity updateActionBarTitleAndHomeButton(file); } else { cleanSecondFragment(); - if (file.isDown() && MimeTypeUtil.isVCard(file.getMimetype())){ + if (file.isDown() && MimeTypeUtil.isVCard(file.getMimetype())) { startContactListFragment(file); } else if (file.isDown() && PreviewTextFragment.canBePreviewed(file)) { startTextPreview(file); @@ -603,7 +603,7 @@ public class FileDisplayActivity extends HookActivity if (PreviewMediaFragment.canBePreviewed(mWaitingToPreview)) { startMediaPreview(mWaitingToPreview, 0, true); detailsFragmentChanged = true; - } else if (MimeTypeUtil.isVCard(mWaitingToPreview.getMimetype())){ + } else if (MimeTypeUtil.isVCard(mWaitingToPreview.getMimetype())) { startContactListFragment(mWaitingToPreview); detailsFragmentChanged = true; } else if (PreviewTextFragment.canBePreviewed(mWaitingToPreview)) { From 1f5e134fb9bc1ff741cf6b65dffd68ec064e52ee Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Fri, 21 Apr 2017 21:17:11 +0200 Subject: [PATCH 06/53] Fix codacy issues --- .../android/ui/activity/ContactsPreferenceActivity.java | 2 +- .../com/owncloud/android/ui/activity/FileDisplayActivity.java | 2 +- .../ui/fragment/ContactsBackup/ContactListFragment.java | 2 +- .../ui/fragment/ContactsBackup/ContactsBackupFragment.java | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java b/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java index a420d0c23d..24b83cbce0 100644 --- a/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java @@ -38,7 +38,7 @@ import com.owncloud.android.R; import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.services.ContactsBackupJob; -import com.owncloud.android.ui.fragment.ContactsBackup.ContactsBackupFragment; +import com.owncloud.android.ui.fragment.contactsBackup.ContactsBackupFragment; import com.owncloud.android.ui.fragment.FileFragment; import java.util.Set; diff --git a/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java index 8378ab4aa5..a259a41624 100644 --- a/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -83,7 +83,7 @@ import com.owncloud.android.services.observer.FileObserverService; import com.owncloud.android.syncadapter.FileSyncAdapter; import com.owncloud.android.ui.dialog.SortingOrderDialogFragment; import com.owncloud.android.ui.events.TokenPushEvent; -import com.owncloud.android.ui.fragment.ContactsBackup.ContactListFragment; +import com.owncloud.android.ui.fragment.contactsBackup.ContactListFragment; import com.owncloud.android.ui.fragment.ExtendedListFragment; import com.owncloud.android.ui.fragment.FileDetailFragment; import com.owncloud.android.ui.fragment.FileFragment; diff --git a/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactListFragment.java b/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactListFragment.java index ae9bebee17..7de3a74420 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactListFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactListFragment.java @@ -19,7 +19,7 @@ * along with this program. If not, see . */ -package com.owncloud.android.ui.fragment.ContactsBackup; +package com.owncloud.android.ui.fragment.contactsBackup; import android.Manifest; import android.accounts.Account; diff --git a/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactsBackupFragment.java b/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactsBackupFragment.java index f13666f872..bbc0415eb3 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactsBackupFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactsBackupFragment.java @@ -18,7 +18,7 @@ * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ -package com.owncloud.android.ui.fragment.ContactsBackup; +package com.owncloud.android.ui.fragment.contactsBackup; import android.Manifest; import android.app.DatePickerDialog; @@ -67,7 +67,7 @@ public class ContactsBackupFragment extends FileFragment { private SharedPreferences sharedPreferences; @BindView(R.id.contacts_automatic_backup) - SwitchCompat backupSwitch; + private SwitchCompat backupSwitch; @Override public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { From dac342cc254d4b6bb83c86e62b8699d601eccf3d Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Fri, 21 Apr 2017 21:21:24 +0200 Subject: [PATCH 07/53] Fix pkg name again --- .../android/ui/activity/ContactsPreferenceActivity.java | 2 +- .../com/owncloud/android/ui/activity/FileDisplayActivity.java | 2 +- .../android/ui/fragment/ContactsBackup/ContactListFragment.java | 2 +- .../ui/fragment/ContactsBackup/ContactsBackupFragment.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java b/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java index 24b83cbce0..40b3ce437d 100644 --- a/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java @@ -38,7 +38,7 @@ import com.owncloud.android.R; import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.services.ContactsBackupJob; -import com.owncloud.android.ui.fragment.contactsBackup.ContactsBackupFragment; +import com.owncloud.android.ui.fragment.contactsbackup.ContactsBackupFragment; import com.owncloud.android.ui.fragment.FileFragment; import java.util.Set; diff --git a/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java index a259a41624..8653923ec7 100644 --- a/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -83,7 +83,7 @@ import com.owncloud.android.services.observer.FileObserverService; import com.owncloud.android.syncadapter.FileSyncAdapter; import com.owncloud.android.ui.dialog.SortingOrderDialogFragment; import com.owncloud.android.ui.events.TokenPushEvent; -import com.owncloud.android.ui.fragment.contactsBackup.ContactListFragment; +import com.owncloud.android.ui.fragment.contactsbackup.ContactListFragment; import com.owncloud.android.ui.fragment.ExtendedListFragment; import com.owncloud.android.ui.fragment.FileDetailFragment; import com.owncloud.android.ui.fragment.FileFragment; diff --git a/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactListFragment.java b/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactListFragment.java index 7de3a74420..c91d9e64dc 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactListFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactListFragment.java @@ -19,7 +19,7 @@ * along with this program. If not, see . */ -package com.owncloud.android.ui.fragment.contactsBackup; +package com.owncloud.android.ui.fragment.contactsbackup; import android.Manifest; import android.accounts.Account; diff --git a/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactsBackupFragment.java b/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactsBackupFragment.java index bbc0415eb3..370c156699 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactsBackupFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactsBackupFragment.java @@ -18,7 +18,7 @@ * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ -package com.owncloud.android.ui.fragment.contactsBackup; +package com.owncloud.android.ui.fragment.contactsbackup; import android.Manifest; import android.app.DatePickerDialog; From 16d79b4645ed78a479ce46a6f523b891c700bcae Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Fri, 21 Apr 2017 21:27:45 +0200 Subject: [PATCH 08/53] Fix build issue --- .../ui/fragment/ContactsBackup/ContactsBackupFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactsBackupFragment.java b/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactsBackupFragment.java index 370c156699..6b0e0bea4e 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactsBackupFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactsBackupFragment.java @@ -67,7 +67,7 @@ public class ContactsBackupFragment extends FileFragment { private SharedPreferences sharedPreferences; @BindView(R.id.contacts_automatic_backup) - private SwitchCompat backupSwitch; + public SwitchCompat backupSwitch; @Override public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { From b38866ebc74dcb15ca9e7d817e48c9ef75be12d2 Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Mon, 24 Apr 2017 11:51:14 +0200 Subject: [PATCH 09/53] Lots of magic --- src/main/AndroidManifest.xml | 3 +- .../ContactsBackupFragment.java | 152 ++++++++++++++++-- src/main/res/values/strings.xml | 1 + 3 files changed, 142 insertions(+), 14 deletions(-) diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index 25ab45a60e..6e9239f8e4 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -88,7 +88,8 @@ - + backupFiles = contactsPreferenceActivity.getStorageManager().getFolderContent(backupFolder, + false); + + if (backupFiles == null || backupFiles.size() == 0 || + sharedPreferences.getLong(PREFERENCE_CONTACTS_LAST_BACKUP, -1) == -1) { + contactsRestoreHeader.setVisibility(View.GONE); + contactsDatePickerBtn.setVisibility(View.GONE); + } else { + contactsRestoreHeader.setVisibility(View.VISIBLE); + contactsDatePickerBtn.setVisibility(View.VISIBLE); + } + } + + @Override public boolean onOptionsItemSelected(MenuItem item) { final ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); @@ -241,7 +314,11 @@ public class ContactsBackupFragment extends FileFragment { } @OnClick(R.id.contacts_datepicker) - public void openDate() { + public void openCleanDate() { + openDate(null); + } + + public void openDate(@Nullable Date savedDate) { final ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); @@ -267,13 +344,26 @@ public class ContactsBackupFragment extends FileFragment { }); Calendar cal = Calendar.getInstance(); - int year = cal.get(Calendar.YEAR); - int month = cal.get(Calendar.MONTH) + 1; - int day = cal.get(Calendar.DAY_OF_MONTH); + int year; + int month; + int day; + + if (savedDate == null) { + year = cal.get(Calendar.YEAR); + month = cal.get(Calendar.MONTH) + 1; + day = cal.get(Calendar.DAY_OF_MONTH); + } else { + year = savedDate.getYear(); + month = savedDate.getMonth(); + day = savedDate.getDay(); + } + DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) { + selectedDate = new Date(year, month, dayOfMonth); + String backupFolderString = getResources().getString(R.string.contacts_backup_folder) + OCFile.PATH_SEPARATOR; OCFile backupFolder = contactsPreferenceActivity.getStorageManager().getFileByPath(backupFolderString); Vector backupFiles = contactsPreferenceActivity.getStorageManager().getFolderContent( @@ -314,7 +404,8 @@ public class ContactsBackupFragment extends FileFragment { Fragment contactListFragment = ContactListFragment.newInstance(backupToRestore, contactsPreferenceActivity.getAccount()); - FragmentTransaction transaction = contactsPreferenceActivity.getSupportFragmentManager().beginTransaction(); + FragmentTransaction transaction = contactsPreferenceActivity.getSupportFragmentManager(). + beginTransaction(); transaction.replace(R.id.frame_container, contactListFragment); transaction.addToBackStack(null); transaction.commit(); @@ -325,12 +416,47 @@ public class ContactsBackupFragment extends FileFragment { } }; - DatePickerDialog datePickerDialog = new DatePickerDialog(contactsPreferenceActivity, - dateSetListener, year, month, day); - datePickerDialog.getDatePicker().setMaxDate(backupFiles.lastElement().getModificationTimestamp()); - datePickerDialog.getDatePicker().setMinDate(backupFiles.firstElement().getModificationTimestamp()); + if (backupFiles.size() > 0 && backupFiles.lastElement() != null) { + datePickerDialog = new DatePickerDialog(contactsPreferenceActivity, + dateSetListener, year, month, day); + datePickerDialog.getDatePicker().setMaxDate(backupFiles.lastElement().getModificationTimestamp()); + datePickerDialog.getDatePicker().setMinDate(backupFiles.firstElement().getModificationTimestamp()); - datePickerDialog.show(); + datePickerDialog.setOnDismissListener(new DialogInterface.OnDismissListener() { + @Override + public void onDismiss(DialogInterface dialog) { + selectedDate = null; + } + }); + + datePickerDialog.show(); + } else { + Toast.makeText(contactsPreferenceActivity, R.string.contacts_preferences_something_strange_happened, + Toast.LENGTH_SHORT).show(); + } + } + + @Override + public void onStop() { + super.onStop(); + if (datePickerDialog != null) { + datePickerDialog.dismiss(); + } + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + if (datePickerDialog != null) { + outState.putBoolean(KEY_CALENDAR_PICKER_OPEN, datePickerDialog.isShowing()); + + if (datePickerDialog.isShowing()) { + outState.putInt(KEY_CALENDAR_DAY, datePickerDialog.getDatePicker().getDayOfMonth()); + outState.putInt(KEY_CALENDAR_MONTH, datePickerDialog.getDatePicker().getMonth()); + outState.putInt(KEY_CALENDAR_YEAR, datePickerDialog.getDatePicker().getYear()); + } + + } } } diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index cf435b869d..d31f30f2aa 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -649,6 +649,7 @@ Choose date never No file found + We can\'t find your last backup! Backup scheduled and will start shortly Import scheduled and will start shortly From 573545d74001191ed1c6928eb5c353b18c97cb15 Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Mon, 24 Apr 2017 13:51:55 +0200 Subject: [PATCH 10/53] Fix remembering state/selection/etc --- .../android/services/ContactsImportJob.java | 4 +- .../android/ui/events/VCardToggleEvent.java | 28 +++ .../ContactsBackup/ContactListFragment.java | 181 +++++++++++++----- 3 files changed, 159 insertions(+), 54 deletions(-) create mode 100644 src/main/java/com/owncloud/android/ui/events/VCardToggleEvent.java diff --git a/src/main/java/com/owncloud/android/services/ContactsImportJob.java b/src/main/java/com/owncloud/android/services/ContactsImportJob.java index a02b8281fe..39d9e03c81 100644 --- a/src/main/java/com/owncloud/android/services/ContactsImportJob.java +++ b/src/main/java/com/owncloud/android/services/ContactsImportJob.java @@ -64,9 +64,7 @@ public class ContactsImportJob extends Job { vCards.addAll(Ezvcard.parse(file).all()); for (int i = 0; i < intArray.length; i++ ){ - if (intArray[i] == 1){ - operations.insertContact(vCards.get(i)); - } + operations.insertContact(vCards.get(intArray[i])); } } catch (Exception e) { Log_OC.e(TAG, e.getMessage()); diff --git a/src/main/java/com/owncloud/android/ui/events/VCardToggleEvent.java b/src/main/java/com/owncloud/android/ui/events/VCardToggleEvent.java new file mode 100644 index 0000000000..6c06d40cb6 --- /dev/null +++ b/src/main/java/com/owncloud/android/ui/events/VCardToggleEvent.java @@ -0,0 +1,28 @@ +/** + * Nextcloud Android client application + * + * @author Mario Danic + * Copyright (C) 2017 Mario Danic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +package com.owncloud.android.ui.events; + +public class VCardToggleEvent { + public boolean showRestoreButton; + + public VCardToggleEvent(boolean showRestore) { + this.showRestoreButton = showRestore; + } +} diff --git a/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactListFragment.java b/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactListFragment.java index c91d9e64dc..8c57e8db41 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactListFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactListFragment.java @@ -30,6 +30,7 @@ import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; +import android.os.Handler; import android.provider.ContactsContract; import android.support.annotation.NonNull; import android.support.design.widget.Snackbar; @@ -55,10 +56,15 @@ import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.services.ContactsImportJob; import com.owncloud.android.ui.TextDrawable; import com.owncloud.android.ui.activity.ContactsPreferenceActivity; +import com.owncloud.android.ui.events.VCardToggleEvent; import com.owncloud.android.ui.fragment.FileFragment; import com.owncloud.android.utils.BitmapUtils; import com.owncloud.android.utils.PermissionUtil; +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; + import java.io.File; import java.io.IOException; import java.util.ArrayList; @@ -66,6 +72,8 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import butterknife.BindView; +import butterknife.ButterKnife; import ezvcard.Ezvcard; import ezvcard.VCard; import ezvcard.property.StructuredName; @@ -80,8 +88,16 @@ public class ContactListFragment extends FileFragment { public static final String FILE_NAME = "FILE_NAME"; public static final String ACCOUNT = "ACCOUNT"; - private RecyclerView recyclerView; - private Set checkedVCards; + public static final String CHECKED_ITEMS_ARRAY_KEY = "CHECKED_ITEMS"; + + + @BindView(R.id.contactlist_recyclerview) + public RecyclerView recyclerView; + + @BindView(R.id.contactlist_restore_selected) + public Button restoreContacts; + + private ContactListAdapter contactListAdapter; public static ContactListFragment newInstance(OCFile file, Account account) { ContactListFragment frag = new ContactListFragment(); @@ -97,6 +113,8 @@ public class ContactListFragment extends FileFragment { public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.contactlist_fragment, null); + ButterKnife.bind(this, view); + setHasOptionsMenu(true); ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); @@ -105,7 +123,6 @@ public class ContactListFragment extends FileFragment { contactsPreferenceActivity.setDrawerIndicatorEnabled(false); ArrayList vCards = new ArrayList<>(); - checkedVCards = new HashSet<>(); try { OCFile ocFile = getArguments().getParcelable(FILE_NAME); @@ -125,7 +142,6 @@ public class ContactListFragment extends FileFragment { e.printStackTrace(); } - final Button restoreContacts = (Button) view.findViewById(R.id.contactlist_restore_selected); restoreContacts.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -138,42 +154,44 @@ public class ContactListFragment extends FileFragment { recyclerView = (RecyclerView) view.findViewById(R.id.contactlist_recyclerview); - - ContactListAdapter.OnVCardClickListener vCardClickListener = new ContactListAdapter.OnVCardClickListener() { - private void setRestoreButton() { - if (checkedVCards.size() > 0) { - restoreContacts.setVisibility(View.VISIBLE); - restoreContacts.setBackgroundColor(getResources().getColor(R.color.primary_button_background_color)); - } else { - restoreContacts.setVisibility(View.GONE); - restoreContacts.setBackgroundColor(getResources().getColor(R.color.standard_grey)); - } + if (savedInstanceState == null) { + contactListAdapter = new ContactListAdapter(getContext(), vCards); + } else { + Set checkedItems = new HashSet<>(); + int[] itemsArray = savedInstanceState.getIntArray(CHECKED_ITEMS_ARRAY_KEY); + for (int i = 0; i < itemsArray.length; i++) { + checkedItems.add(itemsArray[i]); } - - @Override - public void onVCardCheck(int position) { - checkedVCards.add(position); - Log_OC.d(TAG, position + " checked"); - - setRestoreButton(); + if (checkedItems.size() > 0) { + onMessageEvent(new VCardToggleEvent(true)); } - - @Override - public void onVCardUncheck(int position) { - checkedVCards.remove(position); - Log_OC.d(TAG, position + " unchecked"); - - setRestoreButton(); - } - }; - - ContactListAdapter contactListAdapter = new ContactListAdapter(getContext(), vCards, vCardClickListener); + contactListAdapter = new ContactListAdapter(getContext(), vCards, checkedItems); + } recyclerView.setAdapter(contactListAdapter); recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); return view; } + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putIntArray(CHECKED_ITEMS_ARRAY_KEY, contactListAdapter.getCheckedIntArray()); + } + + + @Subscribe(threadMode = ThreadMode.MAIN) + public void onMessageEvent(VCardToggleEvent event) { + if (event.showRestoreButton) { + restoreContacts.setVisibility(View.VISIBLE); + restoreContacts.setBackgroundColor(getResources().getColor(R.color.primary_button_background_color)); + } else { + restoreContacts.setVisibility(View.GONE); + restoreContacts.setBackgroundColor(getResources().getColor(R.color.standard_grey)); + } + + } + @Override public void onDestroy() { super.onDestroy(); @@ -187,6 +205,19 @@ public class ContactListFragment extends FileFragment { contactsPreferenceActivity.setDrawerIndicatorEnabled(false); } + + @Override + public void onStart() { + super.onStart(); + EventBus.getDefault().register(this); + } + + @Override + public void onStop() { + EventBus.getDefault().unregister(this); + super.onStop(); + } + @Override public boolean onOptionsItemSelected(MenuItem item) { boolean retval; @@ -240,19 +271,13 @@ public class ContactListFragment extends FileFragment { } private void importContacts(ContactAccount account) { - int[] intArray = new int[checkedVCards.size()]; - int i = 0; - for (Integer checkedVCard : checkedVCards) { - intArray[i] = checkedVCard; - i++; - } PersistableBundleCompat bundle = new PersistableBundleCompat(); bundle.putString(ContactsImportJob.ACCOUNT_NAME, account.name); bundle.putString(ContactsImportJob.ACCOUNT_TYPE, account.type); bundle.putString(ContactsImportJob.VCARD_FILE_PATH, getFile().getStoragePath()); - bundle.putIntArray(ContactsImportJob.CHECKED_ITEMS_ARRAY, intArray); + bundle.putIntArray(ContactsImportJob.CHECKED_ITEMS_ARRAY, contactListAdapter.getCheckedIntArray()); new JobRequest.Builder(ContactsImportJob.TAG) .setExtras(bundle) @@ -265,6 +290,14 @@ public class ContactListFragment extends FileFragment { Snackbar.make(recyclerView, R.string.contacts_preferences_import_scheduled, Snackbar.LENGTH_LONG).show(); + + Handler handler = new Handler(); + handler.postDelayed(new Runnable() { + @Override + public void run() { + getFragmentManager().popBackStack(); + } + }, 1000); } private void getAccountForImport() { @@ -375,15 +408,47 @@ public class ContactListFragment extends FileFragment { class ContactListAdapter extends RecyclerView.Adapter { private List vCards; - private Context context; - private OnVCardClickListener vCardClickListener; + private Set checkedVCards; - ContactListAdapter(Context context, List vCards, OnVCardClickListener vCardClickListener) { + private Context context; + + ContactListAdapter(Context context, List vCards) { this.vCards = vCards; this.context = context; - this.vCardClickListener = vCardClickListener; + this.checkedVCards = new HashSet<>(); } + ContactListAdapter(Context context, List vCards, + Set checkedVCards) { + this.vCards = vCards; + this.context = context; + this.checkedVCards = checkedVCards; + } + + + public int getCheckedCount() { + if (checkedVCards != null) { + return checkedVCards.size(); + } else { + return 0; + } + } + + public int[] getCheckedIntArray() { + int[] intArray; + if (checkedVCards != null && checkedVCards.size() > 0) { + intArray = new int[checkedVCards.size()]; + int i = 0; + for (int position: checkedVCards) { + intArray[i] = position; + i++; + } + return intArray; + } else { + intArray = new int[0]; + return intArray; + } + } @Override public ContactListFragment.ContactItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { @@ -394,9 +459,15 @@ class ContactListAdapter extends RecyclerView.Adapter Date: Mon, 24 Apr 2017 14:04:39 +0200 Subject: [PATCH 11/53] Take more time to pop --- .../android/ui/fragment/ContactsBackup/ContactListFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactListFragment.java b/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactListFragment.java index 8c57e8db41..72e166a5aa 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactListFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactListFragment.java @@ -297,7 +297,7 @@ public class ContactListFragment extends FileFragment { public void run() { getFragmentManager().popBackStack(); } - }, 1000); + }, 2500); } private void getAccountForImport() { From 7afe91914f3c2397b1d97da2b3ac6ac8b92d8da9 Mon Sep 17 00:00:00 2001 From: AndyScherzinger Date: Mon, 24 Apr 2017 17:19:42 +0200 Subject: [PATCH 12/53] remove/re-add for proper win support... --- .../ContactsBackup/ContactListFragment.java | 537 ------------------ .../ContactsBackupFragment.java | 462 --------------- 2 files changed, 999 deletions(-) delete mode 100644 src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactListFragment.java delete mode 100644 src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactsBackupFragment.java diff --git a/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactListFragment.java b/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactListFragment.java deleted file mode 100644 index 72e166a5aa..0000000000 --- a/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactListFragment.java +++ /dev/null @@ -1,537 +0,0 @@ -/** - * Nextcloud Android client application - * - * @author Tobias Kaminsky - * Copyright (C) 2017 Tobias Kaminsky - * Copyright (C) 2017 Nextcloud GmbH. - *

- * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * at your option) any later version. - *

- * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - *

- * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package com.owncloud.android.ui.fragment.contactsbackup; - -import android.Manifest; -import android.accounts.Account; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.database.Cursor; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.os.Bundle; -import android.os.Handler; -import android.provider.ContactsContract; -import android.support.annotation.NonNull; -import android.support.design.widget.Snackbar; -import android.support.v4.graphics.drawable.RoundedBitmapDrawable; -import android.support.v7.app.AlertDialog; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ArrayAdapter; -import android.widget.Button; -import android.widget.CheckedTextView; -import android.widget.ImageView; - -import com.evernote.android.job.JobRequest; -import com.evernote.android.job.util.support.PersistableBundleCompat; -import com.owncloud.android.R; -import com.owncloud.android.datamodel.OCFile; -import com.owncloud.android.files.services.FileDownloader; -import com.owncloud.android.lib.common.utils.Log_OC; -import com.owncloud.android.services.ContactsImportJob; -import com.owncloud.android.ui.TextDrawable; -import com.owncloud.android.ui.activity.ContactsPreferenceActivity; -import com.owncloud.android.ui.events.VCardToggleEvent; -import com.owncloud.android.ui.fragment.FileFragment; -import com.owncloud.android.utils.BitmapUtils; -import com.owncloud.android.utils.PermissionUtil; - -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import butterknife.BindView; -import butterknife.ButterKnife; -import ezvcard.Ezvcard; -import ezvcard.VCard; -import ezvcard.property.StructuredName; - -/** - * This fragment shows all contacts from a file and allows to import them. - */ - -public class ContactListFragment extends FileFragment { - public static final String TAG = ContactListFragment.class.getSimpleName(); - - public static final String FILE_NAME = "FILE_NAME"; - public static final String ACCOUNT = "ACCOUNT"; - - public static final String CHECKED_ITEMS_ARRAY_KEY = "CHECKED_ITEMS"; - - - @BindView(R.id.contactlist_recyclerview) - public RecyclerView recyclerView; - - @BindView(R.id.contactlist_restore_selected) - public Button restoreContacts; - - private ContactListAdapter contactListAdapter; - - public static ContactListFragment newInstance(OCFile file, Account account) { - ContactListFragment frag = new ContactListFragment(); - Bundle arguments = new Bundle(); - arguments.putParcelable(FILE_NAME, file); - arguments.putParcelable(ACCOUNT, account); - frag.setArguments(arguments); - - return frag; - } - - @Override - public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - - View view = inflater.inflate(R.layout.contactlist_fragment, null); - ButterKnife.bind(this, view); - - setHasOptionsMenu(true); - - ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); - contactsPreferenceActivity.getSupportActionBar().setTitle(R.string.actionbar_contacts_restore); - contactsPreferenceActivity.getSupportActionBar().setDisplayHomeAsUpEnabled(true); - contactsPreferenceActivity.setDrawerIndicatorEnabled(false); - - ArrayList vCards = new ArrayList<>(); - - try { - OCFile ocFile = getArguments().getParcelable(FILE_NAME); - setFile(ocFile); - Account account = getArguments().getParcelable(ACCOUNT); - - if (!ocFile.isDown()) { - Intent i = new Intent(getContext(), FileDownloader.class); - i.putExtra(FileDownloader.EXTRA_ACCOUNT, account); - i.putExtra(FileDownloader.EXTRA_FILE, ocFile); - getContext().startService(i); - } else { - File file = new File(ocFile.getStoragePath()); - vCards.addAll(Ezvcard.parse(file).all()); - } - } catch (IOException e) { - e.printStackTrace(); - } - - restoreContacts.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - - if (checkAndAskForContactsWritePermission()) { - getAccountForImport(); - } - } - }); - - recyclerView = (RecyclerView) view.findViewById(R.id.contactlist_recyclerview); - - if (savedInstanceState == null) { - contactListAdapter = new ContactListAdapter(getContext(), vCards); - } else { - Set checkedItems = new HashSet<>(); - int[] itemsArray = savedInstanceState.getIntArray(CHECKED_ITEMS_ARRAY_KEY); - for (int i = 0; i < itemsArray.length; i++) { - checkedItems.add(itemsArray[i]); - } - if (checkedItems.size() > 0) { - onMessageEvent(new VCardToggleEvent(true)); - } - contactListAdapter = new ContactListAdapter(getContext(), vCards, checkedItems); - } - recyclerView.setAdapter(contactListAdapter); - recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); - - return view; - } - - @Override - public void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - outState.putIntArray(CHECKED_ITEMS_ARRAY_KEY, contactListAdapter.getCheckedIntArray()); - } - - - @Subscribe(threadMode = ThreadMode.MAIN) - public void onMessageEvent(VCardToggleEvent event) { - if (event.showRestoreButton) { - restoreContacts.setVisibility(View.VISIBLE); - restoreContacts.setBackgroundColor(getResources().getColor(R.color.primary_button_background_color)); - } else { - restoreContacts.setVisibility(View.GONE); - restoreContacts.setBackgroundColor(getResources().getColor(R.color.standard_grey)); - } - - } - - @Override - public void onDestroy() { - super.onDestroy(); - ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); - contactsPreferenceActivity.setDrawerIndicatorEnabled(true); - } - - public void onResume() { - super.onResume(); - ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); - contactsPreferenceActivity.setDrawerIndicatorEnabled(false); - } - - - @Override - public void onStart() { - super.onStart(); - EventBus.getDefault().register(this); - } - - @Override - public void onStop() { - EventBus.getDefault().unregister(this); - super.onStop(); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - boolean retval; - ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); - - switch (item.getItemId()) { - case android.R.id.home: - contactsPreferenceActivity.onBackPressed(); - retval = true; - break; - default: - retval = super.onOptionsItemSelected(item); - break; - } - return retval; - } - - - static class ContactItemViewHolder extends RecyclerView.ViewHolder { - private ImageView badge; - private CheckedTextView name; - - ContactItemViewHolder(View itemView) { - super(itemView); - - badge = (ImageView) itemView.findViewById(R.id.contactlist_item_icon); - name = (CheckedTextView) itemView.findViewById(R.id.contactlist_item_name); - - itemView.setTag(this); - } - - public void setVCardListener(View.OnClickListener onClickListener) { - itemView.setOnClickListener(onClickListener); - } - - public ImageView getBadge() { - return badge; - } - - public void setBadge(ImageView badge) { - this.badge = badge; - } - - public CheckedTextView getName() { - return name; - } - - public void setName(CheckedTextView name) { - this.name = name; - } - } - - private void importContacts(ContactAccount account) { - - - PersistableBundleCompat bundle = new PersistableBundleCompat(); - bundle.putString(ContactsImportJob.ACCOUNT_NAME, account.name); - bundle.putString(ContactsImportJob.ACCOUNT_TYPE, account.type); - bundle.putString(ContactsImportJob.VCARD_FILE_PATH, getFile().getStoragePath()); - bundle.putIntArray(ContactsImportJob.CHECKED_ITEMS_ARRAY, contactListAdapter.getCheckedIntArray()); - - new JobRequest.Builder(ContactsImportJob.TAG) - .setExtras(bundle) - .setExecutionWindow(3_000L, 10_000L) - .setRequiresCharging(false) - .setPersisted(false) - .setUpdateCurrent(false) - .build() - .schedule(); - - - Snackbar.make(recyclerView, R.string.contacts_preferences_import_scheduled, Snackbar.LENGTH_LONG).show(); - - Handler handler = new Handler(); - handler.postDelayed(new Runnable() { - @Override - public void run() { - getFragmentManager().popBackStack(); - } - }, 2500); - } - - private void getAccountForImport() { - final ArrayList accounts = new ArrayList<>(); - - // add local one - accounts.add(new ContactAccount("Local contacts", null, null)); - - Cursor cursor = null; - try { - cursor = getContext().getContentResolver().query(ContactsContract.RawContacts.CONTENT_URI, - new String[]{ContactsContract.RawContacts.ACCOUNT_NAME, ContactsContract.RawContacts.ACCOUNT_TYPE}, - null, - null, - null); - - if (cursor != null && cursor.getCount() > 0) { - while (cursor.moveToNext()) { - String name = cursor.getString(cursor.getColumnIndex(ContactsContract.RawContacts.ACCOUNT_NAME)); - String type = cursor.getString(cursor.getColumnIndex(ContactsContract.RawContacts.ACCOUNT_TYPE)); - - ContactAccount account = new ContactAccount(name, name, type); - - if (!accounts.contains(account)) { - accounts.add(account); - } - } - - cursor.close(); - } - } catch (Exception e) { - Log_OC.d(TAG, e.getMessage()); - } finally { - cursor.close(); - } - - if (accounts.size() == 1) { - importContacts(accounts.get(0)); - } else { - - ArrayAdapter adapter = new ArrayAdapter<>(getContext(), android.R.layout.simple_list_item_1, accounts); - AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); - builder.setTitle(R.string.contactlist_account_chooser_title) - .setAdapter(adapter, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - importContacts(accounts.get(which)); - } - }).show(); - } - } - - private boolean checkAndAskForContactsWritePermission() { - // check permissions - if (!PermissionUtil.checkSelfPermission(getContext(), Manifest.permission.WRITE_CONTACTS)) { - PermissionUtil.requestWriteContactPermission(this); - return false; - } else { - return true; - } - } - - @Override - public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults); - - if (requestCode == PermissionUtil.PERMISSIONS_WRITE_CONTACTS) { - for (int index = 0; index < permissions.length; index++) { - if (Manifest.permission.WRITE_CONTACTS.equalsIgnoreCase(permissions[index])) { - if (grantResults[index] >= 0) { - getAccountForImport(); - } else { - Snackbar.make(getView(), R.string.contactlist_no_permission, Snackbar.LENGTH_LONG).show(); - } - break; - } - } - } - } - - private class ContactAccount { - private String displayName; - private String name; - private String type; - - ContactAccount(String displayName, String name, String type) { - this.displayName = displayName; - this.name = name; - this.type = type; - } - - @Override - public boolean equals(Object obj) { - if (obj instanceof ContactAccount) { - ContactAccount other = (ContactAccount) obj; - return this.name.equalsIgnoreCase(other.name) && this.type.equalsIgnoreCase(other.type); - } else { - return false; - } - } - - @Override - public String toString() { - return displayName; - } - } -} - -class ContactListAdapter extends RecyclerView.Adapter { - private List vCards; - private Set checkedVCards; - - private Context context; - - ContactListAdapter(Context context, List vCards) { - this.vCards = vCards; - this.context = context; - this.checkedVCards = new HashSet<>(); - } - - ContactListAdapter(Context context, List vCards, - Set checkedVCards) { - this.vCards = vCards; - this.context = context; - this.checkedVCards = checkedVCards; - } - - - public int getCheckedCount() { - if (checkedVCards != null) { - return checkedVCards.size(); - } else { - return 0; - } - } - - public int[] getCheckedIntArray() { - int[] intArray; - if (checkedVCards != null && checkedVCards.size() > 0) { - intArray = new int[checkedVCards.size()]; - int i = 0; - for (int position: checkedVCards) { - intArray[i] = position; - i++; - } - return intArray; - } else { - intArray = new int[0]; - return intArray; - } - } - - @Override - public ContactListFragment.ContactItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - View view = LayoutInflater.from(context).inflate(R.layout.contactlist_list_item, parent, false); - - return new ContactListFragment.ContactItemViewHolder(view); - } - - @Override - public void onBindViewHolder(final ContactListFragment.ContactItemViewHolder holder, final int position) { - final VCard vcard = vCards.get(position); - - if (vcard != null) { - - if (checkedVCards.contains(position)) { - holder.getName().setChecked(true); - } else { - holder.getName().setChecked(false); - } - // name - StructuredName name = vcard.getStructuredName(); - if (name != null) { - String first = (name.getGiven() == null) ? "" : name.getGiven() + " "; - String last = (name.getFamily() == null) ? "" : name.getFamily(); - holder.getName().setText(first + last); - } else { - holder.getName().setText(""); - } - - // photo - if (vcard.getPhotos().size() > 0) { - byte[] data = vcard.getPhotos().get(0).getData(); - - Bitmap thumbnail = BitmapFactory.decodeByteArray(data, 0, data.length); - RoundedBitmapDrawable drawable = BitmapUtils.bitmapToCircularBitmapDrawable(context.getResources(), - thumbnail); - - holder.getBadge().setImageDrawable(drawable); - } else { - try { - holder.getBadge().setImageDrawable( - TextDrawable.createNamedAvatar( - holder.getName().getText().toString(), - context.getResources().getDimension(R.dimen.list_item_avatar_icon_radius) - ) - ); - } catch (Exception e) { - holder.getBadge().setImageResource(R.drawable.ic_user); - } - } - - // Checkbox - holder.setVCardListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - holder.getName().setChecked(!holder.getName().isChecked()); - - if (holder.getName().isChecked()) { - if (!checkedVCards.contains(position)) { - checkedVCards.add(position); - } - if (checkedVCards.size() == 1) { - EventBus.getDefault().post(new VCardToggleEvent(true)); - } - - - } else { - if (checkedVCards.contains(position)) { - checkedVCards.remove(position); - } - - if (checkedVCards.size() == 0) { - EventBus.getDefault().post(new VCardToggleEvent(false)); - } - } - } - }); - } - } - - @Override - public int getItemCount() { - return vCards.size(); - } - -} diff --git a/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactsBackupFragment.java b/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactsBackupFragment.java deleted file mode 100644 index 666bded011..0000000000 --- a/src/main/java/com/owncloud/android/ui/fragment/ContactsBackup/ContactsBackupFragment.java +++ /dev/null @@ -1,462 +0,0 @@ -/** - * Nextcloud Android client application - * - * @author Mario Danic - * Copyright (C) 2017 Mario Danic - * Copyright (C) 2017 Nextcloud GmbH. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ -package com.owncloud.android.ui.fragment.contactsbackup; - -import android.Manifest; -import android.app.DatePickerDialog; -import android.content.DialogInterface; -import android.content.SharedPreferences; -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.design.widget.Snackbar; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentTransaction; -import android.support.v7.widget.AppCompatButton; -import android.support.v7.widget.SwitchCompat; -import android.view.LayoutInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; -import android.widget.CompoundButton; -import android.widget.DatePicker; -import android.widget.TextView; -import android.widget.Toast; - -import com.evernote.android.job.JobRequest; -import com.evernote.android.job.util.support.PersistableBundleCompat; -import com.owncloud.android.R; -import com.owncloud.android.datamodel.OCFile; -import com.owncloud.android.db.PreferenceManager; -import com.owncloud.android.services.ContactsBackupJob; -import com.owncloud.android.ui.activity.ContactsPreferenceActivity; -import com.owncloud.android.ui.fragment.FileFragment; -import com.owncloud.android.utils.DisplayUtils; -import com.owncloud.android.utils.PermissionUtil; - -import java.util.Calendar; -import java.util.Collections; -import java.util.Comparator; -import java.util.Date; -import java.util.Vector; - -import butterknife.BindView; -import butterknife.ButterKnife; -import butterknife.OnClick; - -import static com.owncloud.android.ui.activity.ContactsPreferenceActivity.PREFERENCE_CONTACTS_AUTOMATIC_BACKUP; -import static com.owncloud.android.ui.activity.ContactsPreferenceActivity.PREFERENCE_CONTACTS_LAST_BACKUP; - -public class ContactsBackupFragment extends FileFragment { - public static final String TAG = ContactsBackupFragment.class.getSimpleName(); - - private SharedPreferences sharedPreferences; - - @BindView(R.id.contacts_automatic_backup) - public SwitchCompat backupSwitch; - - @BindView(R.id.contacts_header_restore) - public TextView contactsRestoreHeader; - - @BindView(R.id.contacts_datepicker) - public AppCompatButton contactsDatePickerBtn; - - @BindView(R.id.contacts_last_backup_timestamp) - public TextView lastBackup; - - private Date selectedDate = null; - private boolean calendarPickerOpen; - - private DatePickerDialog datePickerDialog; - - - private static final String KEY_CALENDAR_PICKER_OPEN = "IS_CALENDAR_PICKER_OPEN"; - private static final String KEY_CALENDAR_DAY = "CALENDAR_DAY"; - private static final String KEY_CALENDAR_MONTH = "CALENDAR_MONTH"; - private static final String KEY_CALENDAR_YEAR = "CALENDAR_YEAR"; - - - @Override - public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - - View view = inflater.inflate(R.layout.contacts_backup_fragment, null); - ButterKnife.bind(this, view); - - setHasOptionsMenu(true); - - final ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); - - contactsPreferenceActivity.getSupportActionBar().setTitle(R.string.actionbar_contacts); - contactsPreferenceActivity.getSupportActionBar().setDisplayHomeAsUpEnabled(true); - - sharedPreferences = PreferenceManager.getDefaultSharedPreferences(contactsPreferenceActivity); - - backupSwitch.setChecked(sharedPreferences.getBoolean(PREFERENCE_CONTACTS_AUTOMATIC_BACKUP, false)); - - backupSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - if (isChecked && - checkAndAskForContactsReadPermission(PermissionUtil.PERMISSIONS_READ_CONTACTS_AUTOMATIC)) { - // store value - setAutomaticBackup(backupSwitch, true); - - // enable daily job - ContactsPreferenceActivity.startContactBackupJob(contactsPreferenceActivity.getAccount()); - } else { - setAutomaticBackup(backupSwitch, false); - - // cancel pending jobs - ContactsPreferenceActivity.cancelContactBackupJob(contactsPreferenceActivity); - } - } - }); - - // display last backup - Long lastBackupTimestamp = sharedPreferences.getLong(PREFERENCE_CONTACTS_LAST_BACKUP, -1); - - if (lastBackupTimestamp == -1) { - lastBackup.setText(R.string.contacts_preference_backup_never); - } else { - lastBackup.setText(DisplayUtils.getRelativeTimestamp(contactsPreferenceActivity, lastBackupTimestamp)); - } - - if (savedInstanceState != null && savedInstanceState.getBoolean(KEY_CALENDAR_PICKER_OPEN, false)) { - if (savedInstanceState.getInt(KEY_CALENDAR_YEAR, -1) != -1 && - savedInstanceState.getInt(KEY_CALENDAR_MONTH, -1) != -1 && - savedInstanceState.getInt(KEY_CALENDAR_DAY, -1) != -1) { - selectedDate = new Date(savedInstanceState.getInt(KEY_CALENDAR_YEAR), - savedInstanceState.getInt(KEY_CALENDAR_MONTH), savedInstanceState.getInt(KEY_CALENDAR_DAY)); - } - calendarPickerOpen = true; - } - - - return view; - } - - @Override - public void onActivityCreated(Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - - - } - - @Override - public void onResume() { - super.onResume(); - - if (calendarPickerOpen) { - if (selectedDate != null) { - openDate(selectedDate); - } else { - openDate(null); - } - } - - final ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); - - String backupFolderString = getResources().getString(R.string.contacts_backup_folder) + OCFile.PATH_SEPARATOR; - OCFile backupFolder = contactsPreferenceActivity.getStorageManager().getFileByPath(backupFolderString); - - Vector backupFiles = contactsPreferenceActivity.getStorageManager().getFolderContent(backupFolder, - false); - - if (backupFiles == null || backupFiles.size() == 0 || - sharedPreferences.getLong(PREFERENCE_CONTACTS_LAST_BACKUP, -1) == -1) { - contactsRestoreHeader.setVisibility(View.GONE); - contactsDatePickerBtn.setVisibility(View.GONE); - } else { - contactsRestoreHeader.setVisibility(View.VISIBLE); - contactsDatePickerBtn.setVisibility(View.VISIBLE); - } - } - - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - final ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); - - boolean retval; - switch (item.getItemId()) { - case android.R.id.home: - if (contactsPreferenceActivity.isDrawerOpen()) { - contactsPreferenceActivity.closeDrawer(); - } else { - contactsPreferenceActivity.openDrawer(); - } - retval = true; - break; - - default: - retval = super.onOptionsItemSelected(item); - break; - } - return retval; - } - - @Override - public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults); - - if (requestCode == PermissionUtil.PERMISSIONS_READ_CONTACTS_AUTOMATIC) { - for (int index = 0; index < permissions.length; index++) { - if (Manifest.permission.READ_CONTACTS.equalsIgnoreCase(permissions[index])) { - if (grantResults[index] >= 0) { - setAutomaticBackup(backupSwitch, true); - } else { - setAutomaticBackup(backupSwitch, false); - } - - break; - } - } - } - - if (requestCode == PermissionUtil.PERMISSIONS_READ_CONTACTS_MANUALLY) { - for (int index = 0; index < permissions.length; index++) { - if (Manifest.permission.READ_CONTACTS.equalsIgnoreCase(permissions[index])) { - if (grantResults[index] >= 0) { - startContactsBackupJob(); - } - - break; - } - } - } - } - - @OnClick(R.id.contacts_backup_now) - public void backupContacts() { - if (checkAndAskForContactsReadPermission(PermissionUtil.PERMISSIONS_READ_CONTACTS_MANUALLY)) { - startContactsBackupJob(); - } - } - - private void startContactsBackupJob() { - final ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); - - PersistableBundleCompat bundle = new PersistableBundleCompat(); - bundle.putString(ContactsBackupJob.ACCOUNT, contactsPreferenceActivity.getAccount().name); - bundle.putBoolean(ContactsBackupJob.FORCE, true); - - new JobRequest.Builder(ContactsBackupJob.TAG) - .setExtras(bundle) - .setExecutionWindow(3_000L, 10_000L) - .setRequiresCharging(false) - .setPersisted(false) - .setUpdateCurrent(false) - .build() - .schedule(); - - Snackbar.make(getView().findViewById(R.id.contacts_linear_layout), R.string.contacts_preferences_backup_scheduled, - Snackbar.LENGTH_LONG).show(); - } - - private void setAutomaticBackup(SwitchCompat backupSwitch, boolean bool) { - backupSwitch.setChecked(bool); - SharedPreferences.Editor editor = sharedPreferences.edit(); - editor.putBoolean(PREFERENCE_CONTACTS_AUTOMATIC_BACKUP, bool); - editor.apply(); - } - - private boolean checkAndAskForContactsReadPermission(final int permission) { - final ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); - - // check permissions - if ((PermissionUtil.checkSelfPermission(contactsPreferenceActivity, Manifest.permission.READ_CONTACTS))) { - return true; - } else { - // Check if we should show an explanation - if (PermissionUtil.shouldShowRequestPermissionRationale(contactsPreferenceActivity, - android.Manifest.permission.READ_CONTACTS)) { - // Show explanation to the user and then request permission - Snackbar snackbar = Snackbar.make(getView().findViewById(R.id.contacts_linear_layout), - R.string.contacts_read_permission, - Snackbar.LENGTH_INDEFINITE) - .setAction(R.string.common_ok, new View.OnClickListener() { - @Override - public void onClick(View v) { - PermissionUtil.requestReadContactPermission(contactsPreferenceActivity, permission); - } - }); - - DisplayUtils.colorSnackbar(contactsPreferenceActivity, snackbar); - - snackbar.show(); - - return false; - } else { - // No explanation needed, request the permission. - PermissionUtil.requestReadContactPermission(contactsPreferenceActivity, permission); - - return false; - } - } - } - - @OnClick(R.id.contacts_datepicker) - public void openCleanDate() { - openDate(null); - } - - public void openDate(@Nullable Date savedDate) { - final ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); - - - String backupFolderString = getResources().getString(R.string.contacts_backup_folder) + OCFile.PATH_SEPARATOR; - OCFile backupFolder = contactsPreferenceActivity.getStorageManager().getFileByPath(backupFolderString); - - Vector backupFiles = contactsPreferenceActivity.getStorageManager().getFolderContent(backupFolder, - false); - - Collections.sort(backupFiles, new Comparator() { - @Override - public int compare(OCFile o1, OCFile o2) { - if (o1.getModificationTimestamp() == o2.getModificationTimestamp()) { - return 0; - } - - if (o1.getModificationTimestamp() > o2.getModificationTimestamp()) { - return 1; - } else { - return -1; - } - } - }); - - Calendar cal = Calendar.getInstance(); - int year; - int month; - int day; - - if (savedDate == null) { - year = cal.get(Calendar.YEAR); - month = cal.get(Calendar.MONTH) + 1; - day = cal.get(Calendar.DAY_OF_MONTH); - } else { - year = savedDate.getYear(); - month = savedDate.getMonth(); - day = savedDate.getDay(); - } - - - DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() { - @Override - public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) { - selectedDate = new Date(year, month, dayOfMonth); - - String backupFolderString = getResources().getString(R.string.contacts_backup_folder) + OCFile.PATH_SEPARATOR; - OCFile backupFolder = contactsPreferenceActivity.getStorageManager().getFileByPath(backupFolderString); - Vector backupFiles = contactsPreferenceActivity.getStorageManager().getFolderContent( - backupFolder, false); - - // find file with modification with date and time between 00:00 and 23:59 - // if more than one file exists, take oldest - Calendar date = Calendar.getInstance(); - date.set(year, month, dayOfMonth); - - // start - date.set(Calendar.HOUR, 0); - date.set(Calendar.MINUTE, 0); - date.set(Calendar.SECOND, 1); - date.set(Calendar.MILLISECOND, 0); - date.set(Calendar.AM_PM, Calendar.AM); - Long start = date.getTimeInMillis(); - - // end - date.set(Calendar.HOUR, 23); - date.set(Calendar.MINUTE, 59); - date.set(Calendar.SECOND, 59); - Long end = date.getTimeInMillis(); - - OCFile backupToRestore = null; - - for (OCFile file : backupFiles) { - if (start < file.getModificationTimestamp() && end > file.getModificationTimestamp()) { - if (backupToRestore == null) { - backupToRestore = file; - } else if (backupToRestore.getModificationTimestamp() < file.getModificationTimestamp()) { - backupToRestore = file; - } - } - } - - if (backupToRestore != null) { - Fragment contactListFragment = ContactListFragment.newInstance(backupToRestore, - contactsPreferenceActivity.getAccount()); - - FragmentTransaction transaction = contactsPreferenceActivity.getSupportFragmentManager(). - beginTransaction(); - transaction.replace(R.id.frame_container, contactListFragment); - transaction.addToBackStack(null); - transaction.commit(); - } else { - Toast.makeText(contactsPreferenceActivity, R.string.contacts_preferences_no_file_found, - Toast.LENGTH_SHORT).show(); - } - } - }; - - if (backupFiles.size() > 0 && backupFiles.lastElement() != null) { - datePickerDialog = new DatePickerDialog(contactsPreferenceActivity, - dateSetListener, year, month, day); - datePickerDialog.getDatePicker().setMaxDate(backupFiles.lastElement().getModificationTimestamp()); - datePickerDialog.getDatePicker().setMinDate(backupFiles.firstElement().getModificationTimestamp()); - - datePickerDialog.setOnDismissListener(new DialogInterface.OnDismissListener() { - @Override - public void onDismiss(DialogInterface dialog) { - selectedDate = null; - } - }); - - datePickerDialog.show(); - } else { - Toast.makeText(contactsPreferenceActivity, R.string.contacts_preferences_something_strange_happened, - Toast.LENGTH_SHORT).show(); - } - } - - @Override - public void onStop() { - super.onStop(); - if (datePickerDialog != null) { - datePickerDialog.dismiss(); - } - } - - @Override - public void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - if (datePickerDialog != null) { - outState.putBoolean(KEY_CALENDAR_PICKER_OPEN, datePickerDialog.isShowing()); - - if (datePickerDialog.isShowing()) { - outState.putInt(KEY_CALENDAR_DAY, datePickerDialog.getDatePicker().getDayOfMonth()); - outState.putInt(KEY_CALENDAR_MONTH, datePickerDialog.getDatePicker().getMonth()); - outState.putInt(KEY_CALENDAR_YEAR, datePickerDialog.getDatePicker().getYear()); - } - - } - } - -} From 8d46e8b9d21800a833a0d58d1971963508065791 Mon Sep 17 00:00:00 2001 From: AndyScherzinger Date: Mon, 24 Apr 2017 17:20:03 +0200 Subject: [PATCH 13/53] remove/re-add for proper win support... --- .../contactsbackup/ContactListFragment.java | 537 ++++++++++++++++++ .../ContactsBackupFragment.java | 462 +++++++++++++++ 2 files changed, 999 insertions(+) create mode 100644 src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactListFragment.java create mode 100644 src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java diff --git a/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactListFragment.java b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactListFragment.java new file mode 100644 index 0000000000..72e166a5aa --- /dev/null +++ b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactListFragment.java @@ -0,0 +1,537 @@ +/** + * Nextcloud Android client application + * + * @author Tobias Kaminsky + * Copyright (C) 2017 Tobias Kaminsky + * Copyright (C) 2017 Nextcloud GmbH. + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + *

+ * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package com.owncloud.android.ui.fragment.contactsbackup; + +import android.Manifest; +import android.accounts.Account; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.database.Cursor; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Bundle; +import android.os.Handler; +import android.provider.ContactsContract; +import android.support.annotation.NonNull; +import android.support.design.widget.Snackbar; +import android.support.v4.graphics.drawable.RoundedBitmapDrawable; +import android.support.v7.app.AlertDialog; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.CheckedTextView; +import android.widget.ImageView; + +import com.evernote.android.job.JobRequest; +import com.evernote.android.job.util.support.PersistableBundleCompat; +import com.owncloud.android.R; +import com.owncloud.android.datamodel.OCFile; +import com.owncloud.android.files.services.FileDownloader; +import com.owncloud.android.lib.common.utils.Log_OC; +import com.owncloud.android.services.ContactsImportJob; +import com.owncloud.android.ui.TextDrawable; +import com.owncloud.android.ui.activity.ContactsPreferenceActivity; +import com.owncloud.android.ui.events.VCardToggleEvent; +import com.owncloud.android.ui.fragment.FileFragment; +import com.owncloud.android.utils.BitmapUtils; +import com.owncloud.android.utils.PermissionUtil; + +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import butterknife.BindView; +import butterknife.ButterKnife; +import ezvcard.Ezvcard; +import ezvcard.VCard; +import ezvcard.property.StructuredName; + +/** + * This fragment shows all contacts from a file and allows to import them. + */ + +public class ContactListFragment extends FileFragment { + public static final String TAG = ContactListFragment.class.getSimpleName(); + + public static final String FILE_NAME = "FILE_NAME"; + public static final String ACCOUNT = "ACCOUNT"; + + public static final String CHECKED_ITEMS_ARRAY_KEY = "CHECKED_ITEMS"; + + + @BindView(R.id.contactlist_recyclerview) + public RecyclerView recyclerView; + + @BindView(R.id.contactlist_restore_selected) + public Button restoreContacts; + + private ContactListAdapter contactListAdapter; + + public static ContactListFragment newInstance(OCFile file, Account account) { + ContactListFragment frag = new ContactListFragment(); + Bundle arguments = new Bundle(); + arguments.putParcelable(FILE_NAME, file); + arguments.putParcelable(ACCOUNT, account); + frag.setArguments(arguments); + + return frag; + } + + @Override + public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + + View view = inflater.inflate(R.layout.contactlist_fragment, null); + ButterKnife.bind(this, view); + + setHasOptionsMenu(true); + + ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); + contactsPreferenceActivity.getSupportActionBar().setTitle(R.string.actionbar_contacts_restore); + contactsPreferenceActivity.getSupportActionBar().setDisplayHomeAsUpEnabled(true); + contactsPreferenceActivity.setDrawerIndicatorEnabled(false); + + ArrayList vCards = new ArrayList<>(); + + try { + OCFile ocFile = getArguments().getParcelable(FILE_NAME); + setFile(ocFile); + Account account = getArguments().getParcelable(ACCOUNT); + + if (!ocFile.isDown()) { + Intent i = new Intent(getContext(), FileDownloader.class); + i.putExtra(FileDownloader.EXTRA_ACCOUNT, account); + i.putExtra(FileDownloader.EXTRA_FILE, ocFile); + getContext().startService(i); + } else { + File file = new File(ocFile.getStoragePath()); + vCards.addAll(Ezvcard.parse(file).all()); + } + } catch (IOException e) { + e.printStackTrace(); + } + + restoreContacts.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + if (checkAndAskForContactsWritePermission()) { + getAccountForImport(); + } + } + }); + + recyclerView = (RecyclerView) view.findViewById(R.id.contactlist_recyclerview); + + if (savedInstanceState == null) { + contactListAdapter = new ContactListAdapter(getContext(), vCards); + } else { + Set checkedItems = new HashSet<>(); + int[] itemsArray = savedInstanceState.getIntArray(CHECKED_ITEMS_ARRAY_KEY); + for (int i = 0; i < itemsArray.length; i++) { + checkedItems.add(itemsArray[i]); + } + if (checkedItems.size() > 0) { + onMessageEvent(new VCardToggleEvent(true)); + } + contactListAdapter = new ContactListAdapter(getContext(), vCards, checkedItems); + } + recyclerView.setAdapter(contactListAdapter); + recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); + + return view; + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putIntArray(CHECKED_ITEMS_ARRAY_KEY, contactListAdapter.getCheckedIntArray()); + } + + + @Subscribe(threadMode = ThreadMode.MAIN) + public void onMessageEvent(VCardToggleEvent event) { + if (event.showRestoreButton) { + restoreContacts.setVisibility(View.VISIBLE); + restoreContacts.setBackgroundColor(getResources().getColor(R.color.primary_button_background_color)); + } else { + restoreContacts.setVisibility(View.GONE); + restoreContacts.setBackgroundColor(getResources().getColor(R.color.standard_grey)); + } + + } + + @Override + public void onDestroy() { + super.onDestroy(); + ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); + contactsPreferenceActivity.setDrawerIndicatorEnabled(true); + } + + public void onResume() { + super.onResume(); + ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); + contactsPreferenceActivity.setDrawerIndicatorEnabled(false); + } + + + @Override + public void onStart() { + super.onStart(); + EventBus.getDefault().register(this); + } + + @Override + public void onStop() { + EventBus.getDefault().unregister(this); + super.onStop(); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + boolean retval; + ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); + + switch (item.getItemId()) { + case android.R.id.home: + contactsPreferenceActivity.onBackPressed(); + retval = true; + break; + default: + retval = super.onOptionsItemSelected(item); + break; + } + return retval; + } + + + static class ContactItemViewHolder extends RecyclerView.ViewHolder { + private ImageView badge; + private CheckedTextView name; + + ContactItemViewHolder(View itemView) { + super(itemView); + + badge = (ImageView) itemView.findViewById(R.id.contactlist_item_icon); + name = (CheckedTextView) itemView.findViewById(R.id.contactlist_item_name); + + itemView.setTag(this); + } + + public void setVCardListener(View.OnClickListener onClickListener) { + itemView.setOnClickListener(onClickListener); + } + + public ImageView getBadge() { + return badge; + } + + public void setBadge(ImageView badge) { + this.badge = badge; + } + + public CheckedTextView getName() { + return name; + } + + public void setName(CheckedTextView name) { + this.name = name; + } + } + + private void importContacts(ContactAccount account) { + + + PersistableBundleCompat bundle = new PersistableBundleCompat(); + bundle.putString(ContactsImportJob.ACCOUNT_NAME, account.name); + bundle.putString(ContactsImportJob.ACCOUNT_TYPE, account.type); + bundle.putString(ContactsImportJob.VCARD_FILE_PATH, getFile().getStoragePath()); + bundle.putIntArray(ContactsImportJob.CHECKED_ITEMS_ARRAY, contactListAdapter.getCheckedIntArray()); + + new JobRequest.Builder(ContactsImportJob.TAG) + .setExtras(bundle) + .setExecutionWindow(3_000L, 10_000L) + .setRequiresCharging(false) + .setPersisted(false) + .setUpdateCurrent(false) + .build() + .schedule(); + + + Snackbar.make(recyclerView, R.string.contacts_preferences_import_scheduled, Snackbar.LENGTH_LONG).show(); + + Handler handler = new Handler(); + handler.postDelayed(new Runnable() { + @Override + public void run() { + getFragmentManager().popBackStack(); + } + }, 2500); + } + + private void getAccountForImport() { + final ArrayList accounts = new ArrayList<>(); + + // add local one + accounts.add(new ContactAccount("Local contacts", null, null)); + + Cursor cursor = null; + try { + cursor = getContext().getContentResolver().query(ContactsContract.RawContacts.CONTENT_URI, + new String[]{ContactsContract.RawContacts.ACCOUNT_NAME, ContactsContract.RawContacts.ACCOUNT_TYPE}, + null, + null, + null); + + if (cursor != null && cursor.getCount() > 0) { + while (cursor.moveToNext()) { + String name = cursor.getString(cursor.getColumnIndex(ContactsContract.RawContacts.ACCOUNT_NAME)); + String type = cursor.getString(cursor.getColumnIndex(ContactsContract.RawContacts.ACCOUNT_TYPE)); + + ContactAccount account = new ContactAccount(name, name, type); + + if (!accounts.contains(account)) { + accounts.add(account); + } + } + + cursor.close(); + } + } catch (Exception e) { + Log_OC.d(TAG, e.getMessage()); + } finally { + cursor.close(); + } + + if (accounts.size() == 1) { + importContacts(accounts.get(0)); + } else { + + ArrayAdapter adapter = new ArrayAdapter<>(getContext(), android.R.layout.simple_list_item_1, accounts); + AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); + builder.setTitle(R.string.contactlist_account_chooser_title) + .setAdapter(adapter, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + importContacts(accounts.get(which)); + } + }).show(); + } + } + + private boolean checkAndAskForContactsWritePermission() { + // check permissions + if (!PermissionUtil.checkSelfPermission(getContext(), Manifest.permission.WRITE_CONTACTS)) { + PermissionUtil.requestWriteContactPermission(this); + return false; + } else { + return true; + } + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + + if (requestCode == PermissionUtil.PERMISSIONS_WRITE_CONTACTS) { + for (int index = 0; index < permissions.length; index++) { + if (Manifest.permission.WRITE_CONTACTS.equalsIgnoreCase(permissions[index])) { + if (grantResults[index] >= 0) { + getAccountForImport(); + } else { + Snackbar.make(getView(), R.string.contactlist_no_permission, Snackbar.LENGTH_LONG).show(); + } + break; + } + } + } + } + + private class ContactAccount { + private String displayName; + private String name; + private String type; + + ContactAccount(String displayName, String name, String type) { + this.displayName = displayName; + this.name = name; + this.type = type; + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof ContactAccount) { + ContactAccount other = (ContactAccount) obj; + return this.name.equalsIgnoreCase(other.name) && this.type.equalsIgnoreCase(other.type); + } else { + return false; + } + } + + @Override + public String toString() { + return displayName; + } + } +} + +class ContactListAdapter extends RecyclerView.Adapter { + private List vCards; + private Set checkedVCards; + + private Context context; + + ContactListAdapter(Context context, List vCards) { + this.vCards = vCards; + this.context = context; + this.checkedVCards = new HashSet<>(); + } + + ContactListAdapter(Context context, List vCards, + Set checkedVCards) { + this.vCards = vCards; + this.context = context; + this.checkedVCards = checkedVCards; + } + + + public int getCheckedCount() { + if (checkedVCards != null) { + return checkedVCards.size(); + } else { + return 0; + } + } + + public int[] getCheckedIntArray() { + int[] intArray; + if (checkedVCards != null && checkedVCards.size() > 0) { + intArray = new int[checkedVCards.size()]; + int i = 0; + for (int position: checkedVCards) { + intArray[i] = position; + i++; + } + return intArray; + } else { + intArray = new int[0]; + return intArray; + } + } + + @Override + public ContactListFragment.ContactItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.contactlist_list_item, parent, false); + + return new ContactListFragment.ContactItemViewHolder(view); + } + + @Override + public void onBindViewHolder(final ContactListFragment.ContactItemViewHolder holder, final int position) { + final VCard vcard = vCards.get(position); + + if (vcard != null) { + + if (checkedVCards.contains(position)) { + holder.getName().setChecked(true); + } else { + holder.getName().setChecked(false); + } + // name + StructuredName name = vcard.getStructuredName(); + if (name != null) { + String first = (name.getGiven() == null) ? "" : name.getGiven() + " "; + String last = (name.getFamily() == null) ? "" : name.getFamily(); + holder.getName().setText(first + last); + } else { + holder.getName().setText(""); + } + + // photo + if (vcard.getPhotos().size() > 0) { + byte[] data = vcard.getPhotos().get(0).getData(); + + Bitmap thumbnail = BitmapFactory.decodeByteArray(data, 0, data.length); + RoundedBitmapDrawable drawable = BitmapUtils.bitmapToCircularBitmapDrawable(context.getResources(), + thumbnail); + + holder.getBadge().setImageDrawable(drawable); + } else { + try { + holder.getBadge().setImageDrawable( + TextDrawable.createNamedAvatar( + holder.getName().getText().toString(), + context.getResources().getDimension(R.dimen.list_item_avatar_icon_radius) + ) + ); + } catch (Exception e) { + holder.getBadge().setImageResource(R.drawable.ic_user); + } + } + + // Checkbox + holder.setVCardListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + holder.getName().setChecked(!holder.getName().isChecked()); + + if (holder.getName().isChecked()) { + if (!checkedVCards.contains(position)) { + checkedVCards.add(position); + } + if (checkedVCards.size() == 1) { + EventBus.getDefault().post(new VCardToggleEvent(true)); + } + + + } else { + if (checkedVCards.contains(position)) { + checkedVCards.remove(position); + } + + if (checkedVCards.size() == 0) { + EventBus.getDefault().post(new VCardToggleEvent(false)); + } + } + } + }); + } + } + + @Override + public int getItemCount() { + return vCards.size(); + } + +} diff --git a/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java new file mode 100644 index 0000000000..666bded011 --- /dev/null +++ b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java @@ -0,0 +1,462 @@ +/** + * Nextcloud Android client application + * + * @author Mario Danic + * Copyright (C) 2017 Mario Danic + * Copyright (C) 2017 Nextcloud GmbH. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +package com.owncloud.android.ui.fragment.contactsbackup; + +import android.Manifest; +import android.app.DatePickerDialog; +import android.content.DialogInterface; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.design.widget.Snackbar; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentTransaction; +import android.support.v7.widget.AppCompatButton; +import android.support.v7.widget.SwitchCompat; +import android.view.LayoutInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CompoundButton; +import android.widget.DatePicker; +import android.widget.TextView; +import android.widget.Toast; + +import com.evernote.android.job.JobRequest; +import com.evernote.android.job.util.support.PersistableBundleCompat; +import com.owncloud.android.R; +import com.owncloud.android.datamodel.OCFile; +import com.owncloud.android.db.PreferenceManager; +import com.owncloud.android.services.ContactsBackupJob; +import com.owncloud.android.ui.activity.ContactsPreferenceActivity; +import com.owncloud.android.ui.fragment.FileFragment; +import com.owncloud.android.utils.DisplayUtils; +import com.owncloud.android.utils.PermissionUtil; + +import java.util.Calendar; +import java.util.Collections; +import java.util.Comparator; +import java.util.Date; +import java.util.Vector; + +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.OnClick; + +import static com.owncloud.android.ui.activity.ContactsPreferenceActivity.PREFERENCE_CONTACTS_AUTOMATIC_BACKUP; +import static com.owncloud.android.ui.activity.ContactsPreferenceActivity.PREFERENCE_CONTACTS_LAST_BACKUP; + +public class ContactsBackupFragment extends FileFragment { + public static final String TAG = ContactsBackupFragment.class.getSimpleName(); + + private SharedPreferences sharedPreferences; + + @BindView(R.id.contacts_automatic_backup) + public SwitchCompat backupSwitch; + + @BindView(R.id.contacts_header_restore) + public TextView contactsRestoreHeader; + + @BindView(R.id.contacts_datepicker) + public AppCompatButton contactsDatePickerBtn; + + @BindView(R.id.contacts_last_backup_timestamp) + public TextView lastBackup; + + private Date selectedDate = null; + private boolean calendarPickerOpen; + + private DatePickerDialog datePickerDialog; + + + private static final String KEY_CALENDAR_PICKER_OPEN = "IS_CALENDAR_PICKER_OPEN"; + private static final String KEY_CALENDAR_DAY = "CALENDAR_DAY"; + private static final String KEY_CALENDAR_MONTH = "CALENDAR_MONTH"; + private static final String KEY_CALENDAR_YEAR = "CALENDAR_YEAR"; + + + @Override + public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + + View view = inflater.inflate(R.layout.contacts_backup_fragment, null); + ButterKnife.bind(this, view); + + setHasOptionsMenu(true); + + final ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); + + contactsPreferenceActivity.getSupportActionBar().setTitle(R.string.actionbar_contacts); + contactsPreferenceActivity.getSupportActionBar().setDisplayHomeAsUpEnabled(true); + + sharedPreferences = PreferenceManager.getDefaultSharedPreferences(contactsPreferenceActivity); + + backupSwitch.setChecked(sharedPreferences.getBoolean(PREFERENCE_CONTACTS_AUTOMATIC_BACKUP, false)); + + backupSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + if (isChecked && + checkAndAskForContactsReadPermission(PermissionUtil.PERMISSIONS_READ_CONTACTS_AUTOMATIC)) { + // store value + setAutomaticBackup(backupSwitch, true); + + // enable daily job + ContactsPreferenceActivity.startContactBackupJob(contactsPreferenceActivity.getAccount()); + } else { + setAutomaticBackup(backupSwitch, false); + + // cancel pending jobs + ContactsPreferenceActivity.cancelContactBackupJob(contactsPreferenceActivity); + } + } + }); + + // display last backup + Long lastBackupTimestamp = sharedPreferences.getLong(PREFERENCE_CONTACTS_LAST_BACKUP, -1); + + if (lastBackupTimestamp == -1) { + lastBackup.setText(R.string.contacts_preference_backup_never); + } else { + lastBackup.setText(DisplayUtils.getRelativeTimestamp(contactsPreferenceActivity, lastBackupTimestamp)); + } + + if (savedInstanceState != null && savedInstanceState.getBoolean(KEY_CALENDAR_PICKER_OPEN, false)) { + if (savedInstanceState.getInt(KEY_CALENDAR_YEAR, -1) != -1 && + savedInstanceState.getInt(KEY_CALENDAR_MONTH, -1) != -1 && + savedInstanceState.getInt(KEY_CALENDAR_DAY, -1) != -1) { + selectedDate = new Date(savedInstanceState.getInt(KEY_CALENDAR_YEAR), + savedInstanceState.getInt(KEY_CALENDAR_MONTH), savedInstanceState.getInt(KEY_CALENDAR_DAY)); + } + calendarPickerOpen = true; + } + + + return view; + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + + } + + @Override + public void onResume() { + super.onResume(); + + if (calendarPickerOpen) { + if (selectedDate != null) { + openDate(selectedDate); + } else { + openDate(null); + } + } + + final ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); + + String backupFolderString = getResources().getString(R.string.contacts_backup_folder) + OCFile.PATH_SEPARATOR; + OCFile backupFolder = contactsPreferenceActivity.getStorageManager().getFileByPath(backupFolderString); + + Vector backupFiles = contactsPreferenceActivity.getStorageManager().getFolderContent(backupFolder, + false); + + if (backupFiles == null || backupFiles.size() == 0 || + sharedPreferences.getLong(PREFERENCE_CONTACTS_LAST_BACKUP, -1) == -1) { + contactsRestoreHeader.setVisibility(View.GONE); + contactsDatePickerBtn.setVisibility(View.GONE); + } else { + contactsRestoreHeader.setVisibility(View.VISIBLE); + contactsDatePickerBtn.setVisibility(View.VISIBLE); + } + } + + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + final ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); + + boolean retval; + switch (item.getItemId()) { + case android.R.id.home: + if (contactsPreferenceActivity.isDrawerOpen()) { + contactsPreferenceActivity.closeDrawer(); + } else { + contactsPreferenceActivity.openDrawer(); + } + retval = true; + break; + + default: + retval = super.onOptionsItemSelected(item); + break; + } + return retval; + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + + if (requestCode == PermissionUtil.PERMISSIONS_READ_CONTACTS_AUTOMATIC) { + for (int index = 0; index < permissions.length; index++) { + if (Manifest.permission.READ_CONTACTS.equalsIgnoreCase(permissions[index])) { + if (grantResults[index] >= 0) { + setAutomaticBackup(backupSwitch, true); + } else { + setAutomaticBackup(backupSwitch, false); + } + + break; + } + } + } + + if (requestCode == PermissionUtil.PERMISSIONS_READ_CONTACTS_MANUALLY) { + for (int index = 0; index < permissions.length; index++) { + if (Manifest.permission.READ_CONTACTS.equalsIgnoreCase(permissions[index])) { + if (grantResults[index] >= 0) { + startContactsBackupJob(); + } + + break; + } + } + } + } + + @OnClick(R.id.contacts_backup_now) + public void backupContacts() { + if (checkAndAskForContactsReadPermission(PermissionUtil.PERMISSIONS_READ_CONTACTS_MANUALLY)) { + startContactsBackupJob(); + } + } + + private void startContactsBackupJob() { + final ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); + + PersistableBundleCompat bundle = new PersistableBundleCompat(); + bundle.putString(ContactsBackupJob.ACCOUNT, contactsPreferenceActivity.getAccount().name); + bundle.putBoolean(ContactsBackupJob.FORCE, true); + + new JobRequest.Builder(ContactsBackupJob.TAG) + .setExtras(bundle) + .setExecutionWindow(3_000L, 10_000L) + .setRequiresCharging(false) + .setPersisted(false) + .setUpdateCurrent(false) + .build() + .schedule(); + + Snackbar.make(getView().findViewById(R.id.contacts_linear_layout), R.string.contacts_preferences_backup_scheduled, + Snackbar.LENGTH_LONG).show(); + } + + private void setAutomaticBackup(SwitchCompat backupSwitch, boolean bool) { + backupSwitch.setChecked(bool); + SharedPreferences.Editor editor = sharedPreferences.edit(); + editor.putBoolean(PREFERENCE_CONTACTS_AUTOMATIC_BACKUP, bool); + editor.apply(); + } + + private boolean checkAndAskForContactsReadPermission(final int permission) { + final ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); + + // check permissions + if ((PermissionUtil.checkSelfPermission(contactsPreferenceActivity, Manifest.permission.READ_CONTACTS))) { + return true; + } else { + // Check if we should show an explanation + if (PermissionUtil.shouldShowRequestPermissionRationale(contactsPreferenceActivity, + android.Manifest.permission.READ_CONTACTS)) { + // Show explanation to the user and then request permission + Snackbar snackbar = Snackbar.make(getView().findViewById(R.id.contacts_linear_layout), + R.string.contacts_read_permission, + Snackbar.LENGTH_INDEFINITE) + .setAction(R.string.common_ok, new View.OnClickListener() { + @Override + public void onClick(View v) { + PermissionUtil.requestReadContactPermission(contactsPreferenceActivity, permission); + } + }); + + DisplayUtils.colorSnackbar(contactsPreferenceActivity, snackbar); + + snackbar.show(); + + return false; + } else { + // No explanation needed, request the permission. + PermissionUtil.requestReadContactPermission(contactsPreferenceActivity, permission); + + return false; + } + } + } + + @OnClick(R.id.contacts_datepicker) + public void openCleanDate() { + openDate(null); + } + + public void openDate(@Nullable Date savedDate) { + final ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); + + + String backupFolderString = getResources().getString(R.string.contacts_backup_folder) + OCFile.PATH_SEPARATOR; + OCFile backupFolder = contactsPreferenceActivity.getStorageManager().getFileByPath(backupFolderString); + + Vector backupFiles = contactsPreferenceActivity.getStorageManager().getFolderContent(backupFolder, + false); + + Collections.sort(backupFiles, new Comparator() { + @Override + public int compare(OCFile o1, OCFile o2) { + if (o1.getModificationTimestamp() == o2.getModificationTimestamp()) { + return 0; + } + + if (o1.getModificationTimestamp() > o2.getModificationTimestamp()) { + return 1; + } else { + return -1; + } + } + }); + + Calendar cal = Calendar.getInstance(); + int year; + int month; + int day; + + if (savedDate == null) { + year = cal.get(Calendar.YEAR); + month = cal.get(Calendar.MONTH) + 1; + day = cal.get(Calendar.DAY_OF_MONTH); + } else { + year = savedDate.getYear(); + month = savedDate.getMonth(); + day = savedDate.getDay(); + } + + + DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() { + @Override + public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) { + selectedDate = new Date(year, month, dayOfMonth); + + String backupFolderString = getResources().getString(R.string.contacts_backup_folder) + OCFile.PATH_SEPARATOR; + OCFile backupFolder = contactsPreferenceActivity.getStorageManager().getFileByPath(backupFolderString); + Vector backupFiles = contactsPreferenceActivity.getStorageManager().getFolderContent( + backupFolder, false); + + // find file with modification with date and time between 00:00 and 23:59 + // if more than one file exists, take oldest + Calendar date = Calendar.getInstance(); + date.set(year, month, dayOfMonth); + + // start + date.set(Calendar.HOUR, 0); + date.set(Calendar.MINUTE, 0); + date.set(Calendar.SECOND, 1); + date.set(Calendar.MILLISECOND, 0); + date.set(Calendar.AM_PM, Calendar.AM); + Long start = date.getTimeInMillis(); + + // end + date.set(Calendar.HOUR, 23); + date.set(Calendar.MINUTE, 59); + date.set(Calendar.SECOND, 59); + Long end = date.getTimeInMillis(); + + OCFile backupToRestore = null; + + for (OCFile file : backupFiles) { + if (start < file.getModificationTimestamp() && end > file.getModificationTimestamp()) { + if (backupToRestore == null) { + backupToRestore = file; + } else if (backupToRestore.getModificationTimestamp() < file.getModificationTimestamp()) { + backupToRestore = file; + } + } + } + + if (backupToRestore != null) { + Fragment contactListFragment = ContactListFragment.newInstance(backupToRestore, + contactsPreferenceActivity.getAccount()); + + FragmentTransaction transaction = contactsPreferenceActivity.getSupportFragmentManager(). + beginTransaction(); + transaction.replace(R.id.frame_container, contactListFragment); + transaction.addToBackStack(null); + transaction.commit(); + } else { + Toast.makeText(contactsPreferenceActivity, R.string.contacts_preferences_no_file_found, + Toast.LENGTH_SHORT).show(); + } + } + }; + + if (backupFiles.size() > 0 && backupFiles.lastElement() != null) { + datePickerDialog = new DatePickerDialog(contactsPreferenceActivity, + dateSetListener, year, month, day); + datePickerDialog.getDatePicker().setMaxDate(backupFiles.lastElement().getModificationTimestamp()); + datePickerDialog.getDatePicker().setMinDate(backupFiles.firstElement().getModificationTimestamp()); + + datePickerDialog.setOnDismissListener(new DialogInterface.OnDismissListener() { + @Override + public void onDismiss(DialogInterface dialog) { + selectedDate = null; + } + }); + + datePickerDialog.show(); + } else { + Toast.makeText(contactsPreferenceActivity, R.string.contacts_preferences_something_strange_happened, + Toast.LENGTH_SHORT).show(); + } + } + + @Override + public void onStop() { + super.onStop(); + if (datePickerDialog != null) { + datePickerDialog.dismiss(); + } + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + if (datePickerDialog != null) { + outState.putBoolean(KEY_CALENDAR_PICKER_OPEN, datePickerDialog.isShowing()); + + if (datePickerDialog.isShowing()) { + outState.putInt(KEY_CALENDAR_DAY, datePickerDialog.getDatePicker().getDayOfMonth()); + outState.putInt(KEY_CALENDAR_MONTH, datePickerDialog.getDatePicker().getMonth()); + outState.putInt(KEY_CALENDAR_YEAR, datePickerDialog.getDatePicker().getYear()); + } + + } + } + +} From 7a5409f0e8323a6ef902d89a36dcc27522c8dc20 Mon Sep 17 00:00:00 2001 From: AndyScherzinger Date: Mon, 24 Apr 2017 17:33:20 +0200 Subject: [PATCH 14/53] extract listener to class --- .../ContactsBackupFragment.java | 126 ++++++++---------- 1 file changed, 59 insertions(+), 67 deletions(-) diff --git a/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java index 666bded011..6be226f64f 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java @@ -65,7 +65,7 @@ import butterknife.OnClick; import static com.owncloud.android.ui.activity.ContactsPreferenceActivity.PREFERENCE_CONTACTS_AUTOMATIC_BACKUP; import static com.owncloud.android.ui.activity.ContactsPreferenceActivity.PREFERENCE_CONTACTS_LAST_BACKUP; -public class ContactsBackupFragment extends FileFragment { +public class ContactsBackupFragment extends FileFragment implements DatePickerDialog.OnDateSetListener{ public static final String TAG = ContactsBackupFragment.class.getSimpleName(); private SharedPreferences sharedPreferences; @@ -149,15 +149,12 @@ public class ContactsBackupFragment extends FileFragment { calendarPickerOpen = true; } - return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); - - } @Override @@ -267,7 +264,8 @@ public class ContactsBackupFragment extends FileFragment { .build() .schedule(); - Snackbar.make(getView().findViewById(R.id.contacts_linear_layout), R.string.contacts_preferences_backup_scheduled, + Snackbar.make(getView().findViewById(R.id.contacts_linear_layout), + R.string.contacts_preferences_backup_scheduled, Snackbar.LENGTH_LONG).show(); } @@ -321,7 +319,6 @@ public class ContactsBackupFragment extends FileFragment { public void openDate(@Nullable Date savedDate) { final ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); - String backupFolderString = getResources().getString(R.string.contacts_backup_folder) + OCFile.PATH_SEPARATOR; OCFile backupFolder = contactsPreferenceActivity.getStorageManager().getFileByPath(backupFolderString); @@ -358,67 +355,8 @@ public class ContactsBackupFragment extends FileFragment { day = savedDate.getDay(); } - - DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() { - @Override - public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) { - selectedDate = new Date(year, month, dayOfMonth); - - String backupFolderString = getResources().getString(R.string.contacts_backup_folder) + OCFile.PATH_SEPARATOR; - OCFile backupFolder = contactsPreferenceActivity.getStorageManager().getFileByPath(backupFolderString); - Vector backupFiles = contactsPreferenceActivity.getStorageManager().getFolderContent( - backupFolder, false); - - // find file with modification with date and time between 00:00 and 23:59 - // if more than one file exists, take oldest - Calendar date = Calendar.getInstance(); - date.set(year, month, dayOfMonth); - - // start - date.set(Calendar.HOUR, 0); - date.set(Calendar.MINUTE, 0); - date.set(Calendar.SECOND, 1); - date.set(Calendar.MILLISECOND, 0); - date.set(Calendar.AM_PM, Calendar.AM); - Long start = date.getTimeInMillis(); - - // end - date.set(Calendar.HOUR, 23); - date.set(Calendar.MINUTE, 59); - date.set(Calendar.SECOND, 59); - Long end = date.getTimeInMillis(); - - OCFile backupToRestore = null; - - for (OCFile file : backupFiles) { - if (start < file.getModificationTimestamp() && end > file.getModificationTimestamp()) { - if (backupToRestore == null) { - backupToRestore = file; - } else if (backupToRestore.getModificationTimestamp() < file.getModificationTimestamp()) { - backupToRestore = file; - } - } - } - - if (backupToRestore != null) { - Fragment contactListFragment = ContactListFragment.newInstance(backupToRestore, - contactsPreferenceActivity.getAccount()); - - FragmentTransaction transaction = contactsPreferenceActivity.getSupportFragmentManager(). - beginTransaction(); - transaction.replace(R.id.frame_container, contactListFragment); - transaction.addToBackStack(null); - transaction.commit(); - } else { - Toast.makeText(contactsPreferenceActivity, R.string.contacts_preferences_no_file_found, - Toast.LENGTH_SHORT).show(); - } - } - }; - if (backupFiles.size() > 0 && backupFiles.lastElement() != null) { - datePickerDialog = new DatePickerDialog(contactsPreferenceActivity, - dateSetListener, year, month, day); + datePickerDialog = new DatePickerDialog(contactsPreferenceActivity, this, year, month, day); datePickerDialog.getDatePicker().setMaxDate(backupFiles.lastElement().getModificationTimestamp()); datePickerDialog.getDatePicker().setMinDate(backupFiles.firstElement().getModificationTimestamp()); @@ -455,8 +393,62 @@ public class ContactsBackupFragment extends FileFragment { outState.putInt(KEY_CALENDAR_MONTH, datePickerDialog.getDatePicker().getMonth()); outState.putInt(KEY_CALENDAR_YEAR, datePickerDialog.getDatePicker().getYear()); } - } } + @Override + public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) { + final ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); + selectedDate = new Date(year, month, dayOfMonth); + + String backupFolderString = getResources().getString(R.string.contacts_backup_folder) + OCFile.PATH_SEPARATOR; + OCFile backupFolder = contactsPreferenceActivity.getStorageManager().getFileByPath(backupFolderString); + Vector backupFiles = contactsPreferenceActivity.getStorageManager().getFolderContent( + backupFolder, false); + + // find file with modification with date and time between 00:00 and 23:59 + // if more than one file exists, take oldest + Calendar date = Calendar.getInstance(); + date.set(year, month, dayOfMonth); + + // start + date.set(Calendar.HOUR, 0); + date.set(Calendar.MINUTE, 0); + date.set(Calendar.SECOND, 1); + date.set(Calendar.MILLISECOND, 0); + date.set(Calendar.AM_PM, Calendar.AM); + Long start = date.getTimeInMillis(); + + // end + date.set(Calendar.HOUR, 23); + date.set(Calendar.MINUTE, 59); + date.set(Calendar.SECOND, 59); + Long end = date.getTimeInMillis(); + + OCFile backupToRestore = null; + + for (OCFile file : backupFiles) { + if (start < file.getModificationTimestamp() && end > file.getModificationTimestamp()) { + if (backupToRestore == null) { + backupToRestore = file; + } else if (backupToRestore.getModificationTimestamp() < file.getModificationTimestamp()) { + backupToRestore = file; + } + } + } + + if (backupToRestore != null) { + Fragment contactListFragment = ContactListFragment.newInstance(backupToRestore, + contactsPreferenceActivity.getAccount()); + + FragmentTransaction transaction = contactsPreferenceActivity.getSupportFragmentManager(). + beginTransaction(); + transaction.replace(R.id.frame_container, contactListFragment); + transaction.addToBackStack(null); + transaction.commit(); + } else { + Toast.makeText(contactsPreferenceActivity, R.string.contacts_preferences_no_file_found, + Toast.LENGTH_SHORT).show(); + } + } } From 097b05d59a3fc2b82500951ea1bca1fbf6ac1cee Mon Sep 17 00:00:00 2001 From: AndyScherzinger Date: Thu, 27 Apr 2017 09:46:50 +0200 Subject: [PATCH 15/53] fixes after rebase --- .../ui/activity/ContactsPreferenceActivity.java | 8 +++----- src/main/res/layout/contacts_preference.xml | 11 +---------- src/main/res/values/setup.xml | 2 +- 3 files changed, 5 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java b/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java index 40b3ce437d..89232bb5c4 100644 --- a/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java @@ -25,11 +25,9 @@ import android.accounts.Account; import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.NonNull; import android.support.design.widget.BottomNavigationView; -import android.support.design.widget.Snackbar; -import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; +import android.view.View; import com.evernote.android.job.JobManager; import com.evernote.android.job.JobRequest; @@ -38,8 +36,9 @@ import com.owncloud.android.R; import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.services.ContactsBackupJob; -import com.owncloud.android.ui.fragment.contactsbackup.ContactsBackupFragment; import com.owncloud.android.ui.fragment.FileFragment; +import com.owncloud.android.ui.fragment.contactsbackup.ContactsBackupFragment; +import com.owncloud.android.utils.DisplayUtils; import java.util.Set; @@ -79,7 +78,6 @@ public class ContactsPreferenceActivity extends FileActivity implements FileFrag } } - public static void startContactBackupJob(Account account) { Log_OC.d(TAG, "start daily contacts backup job"); diff --git a/src/main/res/layout/contacts_preference.xml b/src/main/res/layout/contacts_preference.xml index fa6198b444..217ceb8b1b 100644 --- a/src/main/res/layout/contacts_preference.xml +++ b/src/main/res/layout/contacts_preference.xml @@ -36,24 +36,15 @@ - - - - - false - false + true true From 841ad6c348a13bb82961dde5b05e63da0e17635e Mon Sep 17 00:00:00 2001 From: AndyScherzinger Date: Thu, 27 Apr 2017 09:55:01 +0200 Subject: [PATCH 16/53] minor code review fixes --- .../contactsbackup/ContactListFragment.java | 20 ++++--------------- src/main/res/layout/contactlist_list_item.xml | 1 - .../res/layout/contacts_backup_fragment.xml | 19 ++++++++++++++++++ 3 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactListFragment.java b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactListFragment.java index 72e166a5aa..3339db9e9b 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactListFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactListFragment.java @@ -81,7 +81,6 @@ import ezvcard.property.StructuredName; /** * This fragment shows all contacts from a file and allows to import them. */ - public class ContactListFragment extends FileFragment { public static final String TAG = ContactListFragment.class.getSimpleName(); @@ -90,7 +89,6 @@ public class ContactListFragment extends FileFragment { public static final String CHECKED_ITEMS_ARRAY_KEY = "CHECKED_ITEMS"; - @BindView(R.id.contactlist_recyclerview) public RecyclerView recyclerView; @@ -139,7 +137,7 @@ public class ContactListFragment extends FileFragment { vCards.addAll(Ezvcard.parse(file).all()); } } catch (IOException e) { - e.printStackTrace(); + Log_OC.e(TAG, "Error processing contacts file!", e); } restoreContacts.setOnClickListener(new View.OnClickListener() { @@ -179,7 +177,6 @@ public class ContactListFragment extends FileFragment { outState.putIntArray(CHECKED_ITEMS_ARRAY_KEY, contactListAdapter.getCheckedIntArray()); } - @Subscribe(threadMode = ThreadMode.MAIN) public void onMessageEvent(VCardToggleEvent event) { if (event.showRestoreButton) { @@ -189,7 +186,6 @@ public class ContactListFragment extends FileFragment { restoreContacts.setVisibility(View.GONE); restoreContacts.setBackgroundColor(getResources().getColor(R.color.standard_grey)); } - } @Override @@ -205,7 +201,6 @@ public class ContactListFragment extends FileFragment { contactsPreferenceActivity.setDrawerIndicatorEnabled(false); } - @Override public void onStart() { super.onStart(); @@ -235,7 +230,6 @@ public class ContactListFragment extends FileFragment { return retval; } - static class ContactItemViewHolder extends RecyclerView.ViewHolder { private ImageView badge; private CheckedTextView name; @@ -271,8 +265,6 @@ public class ContactListFragment extends FileFragment { } private void importContacts(ContactAccount account) { - - PersistableBundleCompat bundle = new PersistableBundleCompat(); bundle.putString(ContactsImportJob.ACCOUNT_NAME, account.name); bundle.putString(ContactsImportJob.ACCOUNT_TYPE, account.type); @@ -288,7 +280,6 @@ public class ContactListFragment extends FileFragment { .build() .schedule(); - Snackbar.make(recyclerView, R.string.contacts_preferences_import_scheduled, Snackbar.LENGTH_LONG).show(); Handler handler = new Handler(); @@ -331,13 +322,14 @@ public class ContactListFragment extends FileFragment { } catch (Exception e) { Log_OC.d(TAG, e.getMessage()); } finally { - cursor.close(); + if (cursor != null) { + cursor.close(); + } } if (accounts.size() == 1) { importContacts(accounts.get(0)); } else { - ArrayAdapter adapter = new ArrayAdapter<>(getContext(), android.R.layout.simple_list_item_1, accounts); AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); builder.setTitle(R.string.contactlist_account_chooser_title) @@ -425,7 +417,6 @@ class ContactListAdapter extends RecyclerView.Adapter. --> - diff --git a/src/main/res/layout/contacts_backup_fragment.xml b/src/main/res/layout/contacts_backup_fragment.xml index df4ea000bc..6f2518cb16 100644 --- a/src/main/res/layout/contacts_backup_fragment.xml +++ b/src/main/res/layout/contacts_backup_fragment.xml @@ -1,4 +1,23 @@ + Date: Thu, 27 Apr 2017 09:56:53 +0200 Subject: [PATCH 17/53] revert bottom_toolbar_enabled to false --- src/main/res/values/setup.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/res/values/setup.xml b/src/main/res/values/setup.xml index cdfa9651a1..e62dc23d57 100644 --- a/src/main/res/values/setup.xml +++ b/src/main/res/values/setup.xml @@ -86,7 +86,7 @@ false - true + false true From fc2f762bb264bb50db148bf72e1b1b52d624e1ec Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Thu, 27 Apr 2017 10:27:28 +0200 Subject: [PATCH 18/53] Fix restore appearance --- .../ui/fragment/contactsbackup/ContactsBackupFragment.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java index 6be226f64f..2d6c319a62 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java @@ -177,8 +177,7 @@ public class ContactsBackupFragment extends FileFragment implements DatePickerDi Vector backupFiles = contactsPreferenceActivity.getStorageManager().getFolderContent(backupFolder, false); - if (backupFiles == null || backupFiles.size() == 0 || - sharedPreferences.getLong(PREFERENCE_CONTACTS_LAST_BACKUP, -1) == -1) { + if (backupFiles == null || backupFiles.size() == 0) { contactsRestoreHeader.setVisibility(View.GONE); contactsDatePickerBtn.setVisibility(View.GONE); } else { From cb00d3f4227830d5fd02ddd14a11b2a74561694b Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Thu, 27 Apr 2017 10:50:50 +0200 Subject: [PATCH 19/53] Fix enable automatic job --- .../ContactsBackupFragment.java | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java index 2d6c319a62..65bbcf0e0f 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java @@ -65,7 +65,7 @@ import butterknife.OnClick; import static com.owncloud.android.ui.activity.ContactsPreferenceActivity.PREFERENCE_CONTACTS_AUTOMATIC_BACKUP; import static com.owncloud.android.ui.activity.ContactsPreferenceActivity.PREFERENCE_CONTACTS_LAST_BACKUP; -public class ContactsBackupFragment extends FileFragment implements DatePickerDialog.OnDateSetListener{ +public class ContactsBackupFragment extends FileFragment implements DatePickerDialog.OnDateSetListener { public static final String TAG = ContactsBackupFragment.class.getSimpleName(); private SharedPreferences sharedPreferences; @@ -117,15 +117,9 @@ public class ContactsBackupFragment extends FileFragment implements DatePickerDi if (isChecked && checkAndAskForContactsReadPermission(PermissionUtil.PERMISSIONS_READ_CONTACTS_AUTOMATIC)) { // store value - setAutomaticBackup(backupSwitch, true); - - // enable daily job - ContactsPreferenceActivity.startContactBackupJob(contactsPreferenceActivity.getAccount()); + setAutomaticBackup(true); } else { - setAutomaticBackup(backupSwitch, false); - - // cancel pending jobs - ContactsPreferenceActivity.cancelContactBackupJob(contactsPreferenceActivity); + setAutomaticBackup(false); } } }); @@ -217,9 +211,9 @@ public class ContactsBackupFragment extends FileFragment implements DatePickerDi for (int index = 0; index < permissions.length; index++) { if (Manifest.permission.READ_CONTACTS.equalsIgnoreCase(permissions[index])) { if (grantResults[index] >= 0) { - setAutomaticBackup(backupSwitch, true); + setAutomaticBackup(true); } else { - setAutomaticBackup(backupSwitch, false); + setAutomaticBackup(false); } break; @@ -268,8 +262,16 @@ public class ContactsBackupFragment extends FileFragment implements DatePickerDi Snackbar.LENGTH_LONG).show(); } - private void setAutomaticBackup(SwitchCompat backupSwitch, boolean bool) { - backupSwitch.setChecked(bool); + private void setAutomaticBackup(final boolean bool) { + + final ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); + + if (bool) { + ContactsPreferenceActivity.startContactBackupJob(contactsPreferenceActivity.getAccount()); + } else { + ContactsPreferenceActivity.cancelContactBackupJob(contactsPreferenceActivity); + } + SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putBoolean(PREFERENCE_CONTACTS_AUTOMATIC_BACKUP, bool); editor.apply(); From 3522d28fbfa53bd5c3c20e27699abe44b98094d7 Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Thu, 27 Apr 2017 11:10:11 +0200 Subject: [PATCH 20/53] Fix all issues --- .../ui/activity/ContactsPreferenceActivity.java | 14 +++++++++++++- .../android/ui/activity/FileDisplayActivity.java | 11 +++++------ .../contactsbackup/ContactListFragment.java | 8 ++++++-- .../contactsbackup/ContactsBackupFragment.java | 2 -- 4 files changed, 24 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java b/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java index 89232bb5c4..e9ae39aac9 100644 --- a/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java @@ -37,9 +37,12 @@ import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.services.ContactsBackupJob; import com.owncloud.android.ui.fragment.FileFragment; +import com.owncloud.android.ui.fragment.contactsbackup.ContactListFragment; import com.owncloud.android.ui.fragment.contactsbackup.ContactsBackupFragment; import com.owncloud.android.utils.DisplayUtils; +import org.parceler.Parcels; + import java.util.Set; /** @@ -64,9 +67,18 @@ public class ContactsPreferenceActivity extends FileActivity implements FileFrag // setup drawer setupDrawer(R.id.nav_contacts); + Intent intent = getIntent(); if (savedInstanceState == null) { FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); - transaction.add(R.id.frame_container, new ContactsBackupFragment()); + if (intent == null || intent.getParcelableExtra(ContactListFragment.FILE_NAME) == null || + intent.getParcelableExtra(ContactListFragment.ACCOUNT) == null) { + transaction.add(R.id.frame_container, new ContactsBackupFragment()); + } else { + OCFile file = Parcels.unwrap(intent.getParcelableExtra(ContactListFragment.FILE_NAME)); + Account account = Parcels.unwrap(intent.getParcelableExtra(ContactListFragment.ACCOUNT)); + ContactListFragment contactListFragment = ContactListFragment.newInstance(file, account); + transaction.add(R.id.frame_container, contactListFragment); + } transaction.commit(); } diff --git a/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java index 8653923ec7..ab56e8fa2b 100644 --- a/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -102,6 +102,7 @@ import com.owncloud.android.utils.MimeTypeUtil; import com.owncloud.android.utils.PermissionUtil; import org.greenrobot.eventbus.EventBus; +import org.parceler.Parcels; import java.io.File; import java.util.ArrayList; @@ -1952,12 +1953,10 @@ public class FileDisplayActivity extends HookActivity } public void startContactListFragment(OCFile file) { - Fragment contactListFragment = ContactListFragment.newInstance(file, getAccount()); - - setSecondFragment(contactListFragment); - updateFragmentsVisibility(true); - updateActionBarTitleAndHomeButton(file); - setFile(file); + Intent intent = new Intent(this, ContactsPreferenceActivity.class); + intent.putExtra(ContactListFragment.FILE_NAME, Parcels.wrap(file)); + intent.putExtra(ContactListFragment.ACCOUNT, Parcels.wrap(getAccount())); + startActivity(intent); } /** diff --git a/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactListFragment.java b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactListFragment.java index 3339db9e9b..f630ba34c2 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactListFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactListFragment.java @@ -286,9 +286,13 @@ public class ContactListFragment extends FileFragment { handler.postDelayed(new Runnable() { @Override public void run() { - getFragmentManager().popBackStack(); + if (getFragmentManager().getBackStackEntryCount() > 0) { + getFragmentManager().popBackStack(); + } else { + getActivity().finish(); + } } - }, 2500); + }, 1750); } private void getAccountForImport() { diff --git a/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java index 65bbcf0e0f..db16bbe671 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java @@ -87,13 +87,11 @@ public class ContactsBackupFragment extends FileFragment implements DatePickerDi private DatePickerDialog datePickerDialog; - private static final String KEY_CALENDAR_PICKER_OPEN = "IS_CALENDAR_PICKER_OPEN"; private static final String KEY_CALENDAR_DAY = "CALENDAR_DAY"; private static final String KEY_CALENDAR_MONTH = "CALENDAR_MONTH"; private static final String KEY_CALENDAR_YEAR = "CALENDAR_YEAR"; - @Override public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { From 06d87d7a11d52cd1f34230e56c60540b9e167761 Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Thu, 27 Apr 2017 12:22:56 +0200 Subject: [PATCH 21/53] add select/deselect all button --- .../contactsbackup/ContactListFragment.java | 43 +++++++++++++++++++ src/main/res/menu/contactlist_menu.xml | 35 +++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 src/main/res/menu/contactlist_menu.xml diff --git a/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactListFragment.java b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactListFragment.java index f630ba34c2..c9b5d03aaa 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactListFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactListFragment.java @@ -39,6 +39,8 @@ import android.support.v7.app.AlertDialog; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; @@ -107,6 +109,15 @@ public class ContactListFragment extends FileFragment { return frag; } + /** + * {@inheritDoc} + */ + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + super.onCreateOptionsMenu(menu, inflater); + inflater.inflate(R.menu.contactlist_menu, menu); + } + @Override public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -223,6 +234,12 @@ public class ContactListFragment extends FileFragment { contactsPreferenceActivity.onBackPressed(); retval = true; break; + case R.id.action_select_all: + item.setChecked(!item.isChecked()); + setSelectAllMenuItem(item, item.isChecked()); + contactListAdapter.selectAllFiles(item.isChecked()); + retval = true; + break; default: retval = super.onOptionsItemSelected(item); break; @@ -230,6 +247,15 @@ public class ContactListFragment extends FileFragment { return retval; } + private void setSelectAllMenuItem(MenuItem selectAll, boolean checked) { + selectAll.setChecked(checked); + if(checked) { + selectAll.setIcon(R.drawable.ic_select_none); + } else { + selectAll.setIcon(R.drawable.ic_select_all); + } + } + static class ContactItemViewHolder extends RecyclerView.ViewHolder { private ImageView badge; private CheckedTextView name; @@ -526,4 +552,21 @@ class ContactListAdapter extends RecyclerView.Adapter(); + if (select) { + for (int i = 0; i < vCards.size(); i++) { + checkedVCards.add(i); + } + } + + if (checkedVCards.size() > 0) { + EventBus.getDefault().post(new VCardToggleEvent(true)); + } else { + EventBus.getDefault().post(new VCardToggleEvent(false)); + } + + notifyDataSetChanged(); + } } diff --git a/src/main/res/menu/contactlist_menu.xml b/src/main/res/menu/contactlist_menu.xml new file mode 100644 index 0000000000..b924fb3c2f --- /dev/null +++ b/src/main/res/menu/contactlist_menu.xml @@ -0,0 +1,35 @@ + + +

+ + + + From 4dae921763fb63acc4892d40c3106fe7ed568328 Mon Sep 17 00:00:00 2001 From: AndyScherzinger Date: Thu, 27 Apr 2017 16:02:36 +0200 Subject: [PATCH 22/53] change style of import button --- .../contactsbackup/ContactListFragment.java | 10 ++++---- src/main/res/layout/contactlist_fragment.xml | 24 +++++++++++++++---- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactListFragment.java b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactListFragment.java index c9b5d03aaa..7244e45a16 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactListFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactListFragment.java @@ -48,6 +48,7 @@ import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.CheckedTextView; import android.widget.ImageView; +import android.widget.LinearLayout; import com.evernote.android.job.JobRequest; import com.evernote.android.job.util.support.PersistableBundleCompat; @@ -94,6 +95,9 @@ public class ContactListFragment extends FileFragment { @BindView(R.id.contactlist_recyclerview) public RecyclerView recyclerView; + @BindView(R.id.contactlist_restore_selected_container) + public LinearLayout restoreContactsContainer; + @BindView(R.id.contactlist_restore_selected) public Button restoreContacts; @@ -191,11 +195,9 @@ public class ContactListFragment extends FileFragment { @Subscribe(threadMode = ThreadMode.MAIN) public void onMessageEvent(VCardToggleEvent event) { if (event.showRestoreButton) { - restoreContacts.setVisibility(View.VISIBLE); - restoreContacts.setBackgroundColor(getResources().getColor(R.color.primary_button_background_color)); + restoreContactsContainer.setVisibility(View.VISIBLE); } else { - restoreContacts.setVisibility(View.GONE); - restoreContacts.setBackgroundColor(getResources().getColor(R.color.standard_grey)); + restoreContactsContainer.setVisibility(View.GONE); } } diff --git a/src/main/res/layout/contactlist_fragment.xml b/src/main/res/layout/contactlist_fragment.xml index 99f6e344d6..ae0f7eda1d 100644 --- a/src/main/res/layout/contactlist_fragment.xml +++ b/src/main/res/layout/contactlist_fragment.xml @@ -31,12 +31,26 @@ android:layout_weight="1" android:choiceMode="multipleChoice"/> - + android:background="@color/white" + android:orientation="vertical" + android:visibility="gone"> + + + + + + \ No newline at end of file From 7fc6d5fb6dbeb14233aba68a5ee888ae953452b9 Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Thu, 27 Apr 2017 15:06:02 +0200 Subject: [PATCH 23/53] deleted not needed xml stuff --- src/main/res/menu/contactlist_menu.xml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/res/menu/contactlist_menu.xml b/src/main/res/menu/contactlist_menu.xml index b924fb3c2f..bdf6342097 100644 --- a/src/main/res/menu/contactlist_menu.xml +++ b/src/main/res/menu/contactlist_menu.xml @@ -20,9 +20,7 @@ along with this program. If not, see . --> + xmlns:app="http://schemas.android.com/apk/res-auto"> Date: Thu, 27 Apr 2017 16:09:30 +0200 Subject: [PATCH 24/53] cancel specific backup job disable daily backup on remove --- .../activity/ContactsPreferenceActivity.java | 18 ++++++++++++++-- .../android/ui/activity/DrawerActivity.java | 3 ++- .../android/ui/activity/FileActivity.java | 2 +- .../android/ui/activity/UserInfoActivity.java | 21 +++++++++++++++---- .../ContactsBackupFragment.java | 2 +- 5 files changed, 37 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java b/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java index e9ae39aac9..4224fa1dc3 100644 --- a/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java @@ -106,8 +106,8 @@ public class ContactsPreferenceActivity extends FileActivity implements FileFrag .schedule(); } - public static void cancelContactBackupJob(Context context) { - Log_OC.d(TAG, "disabling contacts backup job"); + public static void cancelAllContactBackupJobs(Context context) { + Log_OC.d(TAG, "disabling all contacts backup job"); JobManager jobManager = JobManager.create(context); Set jobs = jobManager.getAllJobRequestsForTag(ContactsBackupJob.TAG); @@ -117,6 +117,20 @@ public class ContactsPreferenceActivity extends FileActivity implements FileFrag } } + public static void cancelContactBackupJobForAccount(Context context, Account account) { + Log_OC.d(TAG, "disabling contacts backup job for account: " + account.name); + + JobManager jobManager = JobManager.create(context); + Set jobs = jobManager.getAllJobRequestsForTag(ContactsBackupJob.TAG); + + for (JobRequest jobRequest : jobs) { + PersistableBundleCompat extras = jobRequest.getExtras(); + if (extras.getString(ContactsBackupJob.ACCOUNT, "").equalsIgnoreCase(account.name)) { + jobManager.cancel(jobRequest.getJobId()); + } + } + } + @Override public void showFiles(boolean onDeviceOnly) { diff --git a/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java b/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java index 6c094f7191..36d43c05f5 100644 --- a/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java @@ -1197,7 +1197,8 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU Account account = AccountUtils.getCurrentOwnCloudAccount(DrawerActivity.this); - if (account != null && getStorageManager().getCapability(account.name) != null && + if (account != null && getStorageManager() != null && + getStorageManager().getCapability(account.name) != null && getStorageManager().getCapability(account.name).getExternalLinks().isTrue()) { int count = sharedPreferences.getInt(EXTERNAL_LINKS_COUNT, -1); diff --git a/src/main/java/com/owncloud/android/ui/activity/FileActivity.java b/src/main/java/com/owncloud/android/ui/activity/FileActivity.java index dbd3b23a1b..41bcab4b9c 100644 --- a/src/main/java/com/owncloud/android/ui/activity/FileActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/FileActivity.java @@ -250,7 +250,7 @@ public abstract class FileActivity extends DrawerActivity if (sharedPreferences.getBoolean(ContactsPreferenceActivity.PREFERENCE_CONTACTS_AUTOMATIC_BACKUP, false)) { ContactsPreferenceActivity.startContactBackupJob(getAccount()); } else { - ContactsPreferenceActivity.cancelContactBackupJob(getBaseContext()); + ContactsPreferenceActivity.cancelAllContactBackupJobs(getBaseContext()); } } diff --git a/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java b/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java index 6d4954a7d9..e8f7f9272a 100644 --- a/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java @@ -31,6 +31,7 @@ import android.app.DialogFragment; import android.app.FragmentManager; import android.content.DialogInterface; import android.content.Intent; +import android.content.SharedPreferences; import android.os.Bundle; import android.support.annotation.ColorInt; import android.support.annotation.NonNull; @@ -50,6 +51,7 @@ import android.widget.TextView; import com.owncloud.android.R; import com.owncloud.android.authentication.AccountUtils; import com.owncloud.android.authentication.AuthenticatorActivity; +import com.owncloud.android.db.PreferenceManager; import com.owncloud.android.lib.common.UserInfo; import com.owncloud.android.lib.common.operations.RemoteOperation; import com.owncloud.android.lib.common.operations.RemoteOperationResult; @@ -337,11 +339,22 @@ public class UserInfoActivity extends FileActivity { new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { - Bundle bundle = new Bundle(); - bundle.putParcelable(KEY_ACCOUNT, Parcels.wrap(account)); - Intent intent = new Intent(); - intent.putExtras(bundle); + // remove contact backup job + ContactsPreferenceActivity.cancelContactBackupJobForAccount(getActivity(), account); + + // disable daily backup + SharedPreferences sharedPreferences = PreferenceManager + .getDefaultSharedPreferences(getActivity()); + SharedPreferences.Editor editor = sharedPreferences.edit(); + editor.putBoolean(ContactsPreferenceActivity.PREFERENCE_CONTACTS_AUTOMATIC_BACKUP, + false); + editor.apply(); + if (getActivity() != null && !removeDirectly) { + Bundle bundle = new Bundle(); + bundle.putParcelable(KEY_ACCOUNT, Parcels.wrap(account)); + Intent intent = new Intent(); + intent.putExtras(bundle); getActivity().setResult(KEY_DELETE_CODE, intent); getActivity().finish(); } else { diff --git a/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java index db16bbe671..db0dccbb11 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java @@ -267,7 +267,7 @@ public class ContactsBackupFragment extends FileFragment implements DatePickerDi if (bool) { ContactsPreferenceActivity.startContactBackupJob(contactsPreferenceActivity.getAccount()); } else { - ContactsPreferenceActivity.cancelContactBackupJob(contactsPreferenceActivity); + ContactsPreferenceActivity.cancelAllContactBackupJobs(contactsPreferenceActivity); } SharedPreferences.Editor editor = sharedPreferences.edit(); From 1cd175a1e5a2172e1c0818f343487d55d729dab6 Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Fri, 28 Apr 2017 07:42:34 +0200 Subject: [PATCH 25/53] Fix bugs --- .../contactsbackup/ContactListFragment.java | 3 +- .../ContactsBackupFragment.java | 33 +++++++++++-------- .../android/utils/PermissionUtil.java | 32 ------------------ 3 files changed, 22 insertions(+), 46 deletions(-) diff --git a/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactListFragment.java b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactListFragment.java index 7244e45a16..67d839baf3 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactListFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactListFragment.java @@ -377,7 +377,8 @@ public class ContactListFragment extends FileFragment { private boolean checkAndAskForContactsWritePermission() { // check permissions if (!PermissionUtil.checkSelfPermission(getContext(), Manifest.permission.WRITE_CONTACTS)) { - PermissionUtil.requestWriteContactPermission(this); + requestPermissions(new String[]{Manifest.permission.WRITE_CONTACTS}, + PermissionUtil.PERMISSIONS_WRITE_CONTACTS); return false; } else { return true; diff --git a/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java index db0dccbb11..70834c8045 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java @@ -87,6 +87,8 @@ public class ContactsBackupFragment extends FileFragment implements DatePickerDi private DatePickerDialog datePickerDialog; + private CompoundButton.OnCheckedChangeListener onCheckedChangeListener; + private static final String KEY_CALENDAR_PICKER_OPEN = "IS_CALENDAR_PICKER_OPEN"; private static final String KEY_CALENDAR_DAY = "CALENDAR_DAY"; private static final String KEY_CALENDAR_MONTH = "CALENDAR_MONTH"; @@ -109,18 +111,20 @@ public class ContactsBackupFragment extends FileFragment implements DatePickerDi backupSwitch.setChecked(sharedPreferences.getBoolean(PREFERENCE_CONTACTS_AUTOMATIC_BACKUP, false)); - backupSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + onCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - if (isChecked && - checkAndAskForContactsReadPermission(PermissionUtil.PERMISSIONS_READ_CONTACTS_AUTOMATIC)) { - // store value - setAutomaticBackup(true); - } else { - setAutomaticBackup(false); + if (checkAndAskForContactsReadPermission(PermissionUtil.PERMISSIONS_READ_CONTACTS_AUTOMATIC)) { + if (isChecked) { + setAutomaticBackup(true); + } else { + setAutomaticBackup(false); + } } } - }); + }; + + backupSwitch.setOnCheckedChangeListener(onCheckedChangeListener); // display last backup Long lastBackupTimestamp = sharedPreferences.getLong(PREFERENCE_CONTACTS_LAST_BACKUP, -1); @@ -211,7 +215,9 @@ public class ContactsBackupFragment extends FileFragment implements DatePickerDi if (grantResults[index] >= 0) { setAutomaticBackup(true); } else { - setAutomaticBackup(false); + backupSwitch.setOnCheckedChangeListener(null); + backupSwitch.setChecked(false); + backupSwitch.setOnCheckedChangeListener(onCheckedChangeListener); } break; @@ -265,7 +271,7 @@ public class ContactsBackupFragment extends FileFragment implements DatePickerDi final ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); if (bool) { - ContactsPreferenceActivity.startContactBackupJob(contactsPreferenceActivity.getAccount()); + ContactsPreferenceActivity.startContactBackupJob(contactsPreferenceActivity.getAccount()); } else { ContactsPreferenceActivity.cancelAllContactBackupJobs(contactsPreferenceActivity); } @@ -292,7 +298,8 @@ public class ContactsBackupFragment extends FileFragment implements DatePickerDi .setAction(R.string.common_ok, new View.OnClickListener() { @Override public void onClick(View v) { - PermissionUtil.requestReadContactPermission(contactsPreferenceActivity, permission); + requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, + PermissionUtil.PERMISSIONS_READ_CONTACTS_AUTOMATIC); } }); @@ -303,8 +310,8 @@ public class ContactsBackupFragment extends FileFragment implements DatePickerDi return false; } else { // No explanation needed, request the permission. - PermissionUtil.requestReadContactPermission(contactsPreferenceActivity, permission); - + requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, + PermissionUtil.PERMISSIONS_READ_CONTACTS_AUTOMATIC); return false; } } diff --git a/src/main/java/com/owncloud/android/utils/PermissionUtil.java b/src/main/java/com/owncloud/android/utils/PermissionUtil.java index f0a326664b..8e39d0dc53 100644 --- a/src/main/java/com/owncloud/android/utils/PermissionUtil.java +++ b/src/main/java/com/owncloud/android/utils/PermissionUtil.java @@ -52,36 +52,4 @@ public class PermissionUtil { new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSIONS_WRITE_EXTERNAL_STORAGE); } - - /** - * request the read permission for contacts - * - * @param activity The target activity. - */ - public static void requestReadContactPermission(Activity activity, int permission) { - ActivityCompat.requestPermissions(activity, - new String[]{Manifest.permission.READ_CONTACTS}, - permission); - } - - /** - * request the write permission for contacts - * - * @param activity The target activity. - */ - public static void requestWriteContactPermission(Activity activity) { - ActivityCompat.requestPermissions(activity, - new String[]{Manifest.permission.WRITE_CONTACTS}, - PERMISSIONS_WRITE_CONTACTS); - } - - /** - * request the write permission for contacts - * - * @param fragment The target fragment. - */ - public static void requestWriteContactPermission(android.support.v4.app.Fragment fragment) { - fragment.requestPermissions(new String[]{Manifest.permission.WRITE_CONTACTS}, - PERMISSIONS_WRITE_CONTACTS); - } } From aca5040a8041a4eafa8ce4305ce50adef44da44f Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Fri, 28 Apr 2017 14:09:23 +0200 Subject: [PATCH 26/53] add Arbitrary Data table --- .../datamodel/ArbitraryDataProvider.java | 223 ++++++++++++++++++ .../com/owncloud/android/db/ProviderMeta.java | 10 +- .../providers/FileContentProvider.java | 73 +++++- .../activity/ContactsPreferenceActivity.java | 24 +- 4 files changed, 305 insertions(+), 25 deletions(-) create mode 100644 src/main/java/com/owncloud/android/datamodel/ArbitraryDataProvider.java diff --git a/src/main/java/com/owncloud/android/datamodel/ArbitraryDataProvider.java b/src/main/java/com/owncloud/android/datamodel/ArbitraryDataProvider.java new file mode 100644 index 0000000000..1e6e3bc9aa --- /dev/null +++ b/src/main/java/com/owncloud/android/datamodel/ArbitraryDataProvider.java @@ -0,0 +1,223 @@ +/** + * Nextcloud Android client application + *

+ * Copyright (C) 2017 Tobias Kaminsky + * Copyright (C) 2017 Nextcloud. + *

+ * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + *

+ * You should have received a copy of the GNU Affero General Public + * License along with this program. If not, see . + */ +package com.owncloud.android.datamodel; + +import android.accounts.Account; +import android.content.ContentResolver; +import android.content.ContentValues; +import android.database.Cursor; +import android.net.Uri; + +import com.owncloud.android.db.ProviderMeta; +import com.owncloud.android.lib.common.utils.Log_OC; + +import java.util.ArrayList; + +/** + * Database provider for handling the persistence aspects of arbitrary data table. + */ + +public class ArbitraryDataProvider { + static private final String TAG = ArbitraryDataProvider.class.getSimpleName(); + + private ContentResolver contentResolver; + + public ArbitraryDataProvider(ContentResolver contentResolver) { + if (contentResolver == null) { + throw new IllegalArgumentException("Cannot create an instance with a NULL contentResolver"); + } + this.contentResolver = contentResolver; + } + + public void storeOrUpdateKeyValue(Account account, String key, String newValue) { + Log_OC.v(TAG, "Adding arbitrary data with cloud id: " + account.name + " key: " + key + " value: " + newValue); + + ArbitraryDataSet data = getArbitraryDataSet(account, key); + if (data == null) { + ContentValues cv = new ContentValues(); + cv.put(ProviderMeta.ProviderTableMeta.ARBITRARY_DATA_CLOUD_ID, account.name); + cv.put(ProviderMeta.ProviderTableMeta.ARBITRARY_DATA_KEY, key); + cv.put(ProviderMeta.ProviderTableMeta.ARBITRARY_DATA_VALUE, newValue); + + Uri result = contentResolver.insert(ProviderMeta.ProviderTableMeta.CONTENT_URI_ARBITRARY_DATA, cv); + + if (result == null) { + Log_OC.v(TAG, "Failed to store arbitrary data with cloud id: " + account.name + " key: " + key + + " value: " + newValue); + } + } else { + ContentValues cv = new ContentValues(); + cv.put(ProviderMeta.ProviderTableMeta.ARBITRARY_DATA_CLOUD_ID, data.getCloudId()); + cv.put(ProviderMeta.ProviderTableMeta.ARBITRARY_DATA_KEY, data.getKey()); + cv.put(ProviderMeta.ProviderTableMeta.ARBITRARY_DATA_VALUE, newValue); + + int result = contentResolver.update( + ProviderMeta.ProviderTableMeta.CONTENT_URI_ARBITRARY_DATA, + cv, + ProviderMeta.ProviderTableMeta._ID + "=?", + new String[]{String.valueOf(data.getId())} + ); + + if (result == 0) { + Log_OC.v(TAG, "Failed to update arbitrary data with cloud id: " + account.name + " key: " + key + + " value: " + newValue); + } + } + } + + + public Long getLongValue(Account account, String key) { + String value = getValue(account, key); + + if (value.isEmpty()) { + return -1l; + } else { + return Long.valueOf(value); + } + } + + private ArrayList getValues(Account account, String key) { + Cursor cursor = contentResolver.query( + ProviderMeta.ProviderTableMeta.CONTENT_URI_ARBITRARY_DATA, + null, + ProviderMeta.ProviderTableMeta.ARBITRARY_DATA_CLOUD_ID + " = ? and " + + ProviderMeta.ProviderTableMeta.ARBITRARY_DATA_KEY + " = ?", + new String[]{account.name, key}, + null + ); + + if (cursor != null) { + ArrayList list = new ArrayList<>(); + if (cursor.moveToFirst()) { + do { + String value = cursor.getString(cursor.getColumnIndex( + ProviderMeta.ProviderTableMeta.ARBITRARY_DATA_VALUE)); + if (value == null) { + Log_OC.e(TAG, "Arbitrary value could not be created from cursor"); + } else { + list.add(value); + } + } while (cursor.moveToNext()); + } + cursor.close(); + return list; + } else { + Log_OC.e(TAG, "DB error restoring arbitrary values."); + } + + return new ArrayList<>(); + } + + public String getValue(Account account, String key) { + Cursor cursor = contentResolver.query( + ProviderMeta.ProviderTableMeta.CONTENT_URI_ARBITRARY_DATA, + null, + ProviderMeta.ProviderTableMeta.ARBITRARY_DATA_CLOUD_ID + " = ? and " + + ProviderMeta.ProviderTableMeta.ARBITRARY_DATA_KEY + " = ?", + new String[]{account.name, key}, + null + ); + + if (cursor != null) { + if (cursor.moveToFirst()) { + String value = cursor.getString(cursor.getColumnIndex( + ProviderMeta.ProviderTableMeta.ARBITRARY_DATA_VALUE)); + if (value == null) { + Log_OC.e(TAG, "Arbitrary value could not be created from cursor"); + } else { + return value; + } + } + cursor.close(); + return ""; + } else { + Log_OC.e(TAG, "DB error restoring arbitrary values."); + } + + return ""; + } + + private ArbitraryDataSet getArbitraryDataSet(Account account, String key) { + Cursor cursor = contentResolver.query( + ProviderMeta.ProviderTableMeta.CONTENT_URI_ARBITRARY_DATA, + null, + ProviderMeta.ProviderTableMeta.ARBITRARY_DATA_CLOUD_ID + " = ? and " + + ProviderMeta.ProviderTableMeta.ARBITRARY_DATA_KEY + " = ?", + new String[]{account.name, key}, + null + ); + + ArbitraryDataSet dataSet = null; + if (cursor != null) { + if (cursor.moveToFirst()) { + int id = cursor.getInt(cursor.getColumnIndex(ProviderMeta.ProviderTableMeta._ID)); + String dbAccount = cursor.getString(cursor.getColumnIndex( + ProviderMeta.ProviderTableMeta.ARBITRARY_DATA_CLOUD_ID)); + String dbKey = cursor.getString(cursor.getColumnIndex( + ProviderMeta.ProviderTableMeta.ARBITRARY_DATA_KEY)); + String dbValue = cursor.getString(cursor.getColumnIndex( + ProviderMeta.ProviderTableMeta.ARBITRARY_DATA_VALUE)); + + if (id == -1) { + Log_OC.e(TAG, "Arbitrary value could not be created from cursor"); + } else { + dataSet = new ArbitraryDataSet(id, dbAccount, dbKey, dbValue); + } + } + cursor.close(); + } else { + Log_OC.e(TAG, "DB error restoring arbitrary values."); + } + + return dataSet; + } + + + public class ArbitraryDataSet { + private int id; + private String cloudId; + private String key; + private String value; + + public ArbitraryDataSet(int id, String cloudId, String key, String value) { + this.id = id; + this.cloudId = cloudId; + this.key = key; + this.value = value; + } + + public int getId() { + return id; + } + + public String getCloudId() { + return cloudId; + } + + public String getKey() { + return key; + } + + public String getValue() { + return value; + } + } + +} diff --git a/src/main/java/com/owncloud/android/db/ProviderMeta.java b/src/main/java/com/owncloud/android/db/ProviderMeta.java index 5329db315e..bed543cb15 100644 --- a/src/main/java/com/owncloud/android/db/ProviderMeta.java +++ b/src/main/java/com/owncloud/android/db/ProviderMeta.java @@ -33,7 +33,7 @@ import com.owncloud.android.MainApp; public class ProviderMeta { public static final String DB_NAME = "filelist"; - public static final int DB_VERSION = 19; + public static final int DB_VERSION = 20; private ProviderMeta() { } @@ -45,6 +45,7 @@ public class ProviderMeta { public static final String UPLOADS_TABLE_NAME = "list_of_uploads"; public static final String SYNCED_FOLDERS_TABLE_NAME = "synced_folders"; public static final String EXTERNAL_LINKS_TABLE_NAME = "external_links"; + public static final String ARBITRARY_DATA_TABLE_NAME = "arbitrary_data"; private static final String CONTENT_PREFIX = "content://"; @@ -64,6 +65,8 @@ public class ProviderMeta { + MainApp.getAuthority() + "/synced_folders"); public static final Uri CONTENT_URI_EXTERNAL_LINKS = Uri.parse(CONTENT_PREFIX + MainApp.getAuthority() + "/external_links"); + public static final Uri CONTENT_URI_ARBITRARY_DATA = Uri.parse(CONTENT_PREFIX + + MainApp.getAuthority() + "/arbitrary_data"); public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.owncloud.file"; public static final String CONTENT_TYPE_ITEM = "vnd.android.cursor.item/vnd.owncloud.file"; @@ -178,5 +181,10 @@ public class ProviderMeta { public static final String EXTERNAL_LINKS_TYPE = "type"; public static final String EXTERNAL_LINKS_NAME = "name"; public static final String EXTERNAL_LINKS_URL = "url"; + + // Columns of arbitrary data table + public static final String ARBITRARY_DATA_CLOUD_ID = "cloud_id"; + public static final String ARBITRARY_DATA_KEY = "key"; + public static final String ARBITRARY_DATA_VALUE = "value"; } } \ No newline at end of file diff --git a/src/main/java/com/owncloud/android/providers/FileContentProvider.java b/src/main/java/com/owncloud/android/providers/FileContentProvider.java index 83578dfe96..c11eefd9e2 100644 --- a/src/main/java/com/owncloud/android/providers/FileContentProvider.java +++ b/src/main/java/com/owncloud/android/providers/FileContentProvider.java @@ -72,6 +72,7 @@ public class FileContentProvider extends ContentProvider { private static final int UPLOADS = 6; private static final int SYNCED_FOLDERS = 7; private static final int EXTERNAL_LINKS = 8; + private static final int ARBITRARY_DATA = 9; private static final String TAG = FileContentProvider.class.getSimpleName(); @@ -201,6 +202,9 @@ public class FileContentProvider extends ContentProvider { case EXTERNAL_LINKS: count = db.delete(ProviderTableMeta.EXTERNAL_LINKS_TABLE_NAME, where, whereArgs); break; + case ARBITRARY_DATA: + count = db.delete(ProviderTableMeta.ARBITRARY_DATA_TABLE_NAME, where, whereArgs); + break; default: //Log_OC.e(TAG, "Unknown uri " + uri); throw new IllegalArgumentException("Unknown uri: " + uri.toString()); @@ -335,6 +339,18 @@ public class FileContentProvider extends ContentProvider { } return insertedExternalLinkUri; + case ARBITRARY_DATA: + Uri insertedArbitraryDataUri = null; + long arbitraryDataId = db.insert(ProviderTableMeta.ARBITRARY_DATA_TABLE_NAME, null, values); + if (arbitraryDataId > 0) { + insertedArbitraryDataUri = + ContentUris.withAppendedId(ProviderTableMeta.CONTENT_URI_ARBITRARY_DATA, arbitraryDataId); + } else { + throw new SQLException("ERROR " + uri); + + } + return insertedArbitraryDataUri; + default: throw new IllegalArgumentException("Unknown uri id: " + uri); } @@ -385,6 +401,7 @@ public class FileContentProvider extends ContentProvider { mUriMatcher.addURI(authority, "uploads/#", UPLOADS); mUriMatcher.addURI(authority, "synced_folders", SYNCED_FOLDERS); mUriMatcher.addURI(authority, "external_links", EXTERNAL_LINKS); + mUriMatcher.addURI(authority, "arbitrary_data", ARBITRARY_DATA); return true; } @@ -473,6 +490,13 @@ public class FileContentProvider extends ContentProvider { + uri.getPathSegments().get(1)); } break; + case ARBITRARY_DATA: + sqlQuery.setTables(ProviderTableMeta.ARBITRARY_DATA_TABLE_NAME); + if (uri.getPathSegments().size() > 1) { + sqlQuery.appendWhere(ProviderTableMeta._ID + "=" + + uri.getPathSegments().get(1)); + } + break; default: throw new IllegalArgumentException("Unknown uri id: " + uri); } @@ -495,6 +519,9 @@ public class FileContentProvider extends ContentProvider { case EXTERNAL_LINKS: order = ProviderTableMeta.EXTERNAL_LINKS_NAME; break; + case ARBITRARY_DATA: + order = ProviderTableMeta.ARBITRARY_DATA_CLOUD_ID; + break; default: // Files order = ProviderTableMeta.FILE_DEFAULT_SORT_ORDER; break; @@ -538,25 +565,19 @@ public class FileContentProvider extends ContentProvider { case DIRECTORY: return 0; //updateFolderSize(db, selectionArgs[0]); case SHARES: - return db.update( - ProviderTableMeta.OCSHARES_TABLE_NAME, values, selection, selectionArgs - ); + return db.update(ProviderTableMeta.OCSHARES_TABLE_NAME, values, selection, selectionArgs); case CAPABILITIES: - return db.update( - ProviderTableMeta.CAPABILITIES_TABLE_NAME, values, selection, selectionArgs - ); + return db.update(ProviderTableMeta.CAPABILITIES_TABLE_NAME, values, selection, selectionArgs); case UPLOADS: - int ret = db.update( - ProviderTableMeta.UPLOADS_TABLE_NAME, values, selection, selectionArgs - ); + int ret = db.update(ProviderTableMeta.UPLOADS_TABLE_NAME, values, selection, selectionArgs); trimSuccessfulUploads(db); return ret; case SYNCED_FOLDERS: return db.update(ProviderTableMeta.SYNCED_FOLDERS_TABLE_NAME, values, selection, selectionArgs); + case ARBITRARY_DATA: + return db.update(ProviderTableMeta.ARBITRARY_DATA_TABLE_NAME, values, selection, selectionArgs); default: - return db.update( - ProviderTableMeta.FILE_TABLE_NAME, values, selection, selectionArgs - ); + return db.update(ProviderTableMeta.FILE_TABLE_NAME, values, selection, selectionArgs); } } @@ -611,6 +632,9 @@ public class FileContentProvider extends ContentProvider { // Create external links table createExternalLinksTable(db); + + // Create arbitrary data table + createArbitraryData(db); } @Override @@ -927,6 +951,22 @@ public class FileContentProvider extends ContentProvider { if (!upgraded) { Log_OC.i(SQL, String.format(Locale.ENGLISH, UPGRADE_VERSION_MSG, oldVersion, newVersion)); } + + if (oldVersion < 20 && newVersion >= 20) { + Log_OC.i(SQL, "Adding arbitrary data table"); + db.beginTransaction(); + try { + createArbitraryData(db); + upgraded = true; + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } + } + + if (!upgraded) { + Log_OC.i(SQL, String.format(Locale.ENGLISH, UPGRADE_VERSION_MSG, oldVersion, newVersion)); + } } } @@ -1064,6 +1104,15 @@ public class FileContentProvider extends ContentProvider { ); } + private void createArbitraryData(SQLiteDatabase db) { + db.execSQL("CREATE TABLE " + ProviderTableMeta.ARBITRARY_DATA_TABLE_NAME + "(" + + ProviderTableMeta._ID + " INTEGER PRIMARY KEY, " // id + + ProviderTableMeta.ARBITRARY_DATA_CLOUD_ID + " TEXT, " // cloud id (account name + FQDN) + + ProviderTableMeta.ARBITRARY_DATA_KEY + " TEXT, " // key + + ProviderTableMeta.ARBITRARY_DATA_VALUE + " TEXT) " // value + ); + } + /** * Version 10 of database does not modify its scheme. It coincides with the upgrade of the ownCloud account names * structure to include in it the path to the server instance. Updating the account names and path to local files diff --git a/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java b/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java index 5315e1c69d..49cab69bec 100644 --- a/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java @@ -26,7 +26,6 @@ import android.accounts.Account; import android.app.DatePickerDialog; import android.content.Context; import android.content.Intent; -import android.content.SharedPreferences; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.design.widget.BottomNavigationView; @@ -45,8 +44,8 @@ import com.evernote.android.job.JobManager; import com.evernote.android.job.JobRequest; import com.evernote.android.job.util.support.PersistableBundleCompat; import com.owncloud.android.R; +import com.owncloud.android.datamodel.ArbitraryDataProvider; import com.owncloud.android.datamodel.OCFile; -import com.owncloud.android.db.PreferenceManager; import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.services.ContactsBackupJob; import com.owncloud.android.ui.fragment.FileFragment; @@ -70,7 +69,7 @@ public class ContactsPreferenceActivity extends FileActivity implements FileFrag public static final String PREFERENCE_CONTACTS_LAST_BACKUP = "PREFERENCE_CONTACTS_LAST_BACKUP"; private SwitchCompat backupSwitch; - private SharedPreferences sharedPreferences; + private ArbitraryDataProvider arbitraryDataProvider; @Override protected void onCreate(Bundle savedInstanceState) { @@ -87,10 +86,11 @@ public class ContactsPreferenceActivity extends FileActivity implements FileFrag getSupportActionBar().setTitle(R.string.actionbar_contacts); getSupportActionBar().setDisplayHomeAsUpEnabled(true); - sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); + arbitraryDataProvider = new ArbitraryDataProvider(getContentResolver()); backupSwitch = (SwitchCompat) findViewById(R.id.contacts_automatic_backup); - backupSwitch.setChecked(sharedPreferences.getBoolean(PREFERENCE_CONTACTS_AUTOMATIC_BACKUP, false)); + backupSwitch.setChecked(arbitraryDataProvider.getValue(getAccount(), PREFERENCE_CONTACTS_AUTOMATIC_BACKUP) + .equals("true")); backupSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override @@ -113,7 +113,7 @@ public class ContactsPreferenceActivity extends FileActivity implements FileFrag // display last backup TextView lastBackup = (TextView) findViewById(R.id.contacts_last_backup_timestamp); - Long lastBackupTimestamp = sharedPreferences.getLong(PREFERENCE_CONTACTS_LAST_BACKUP, -1); + Long lastBackupTimestamp = arbitraryDataProvider.getLongValue(getAccount(), PREFERENCE_CONTACTS_LAST_BACKUP); if (lastBackupTimestamp == -1) { lastBackup.setText(R.string.contacts_preference_backup_never); @@ -186,9 +186,8 @@ public class ContactsPreferenceActivity extends FileActivity implements FileFrag private void setAutomaticBackup(SwitchCompat backupSwitch, boolean bool) { backupSwitch.setChecked(bool); - SharedPreferences.Editor editor = sharedPreferences.edit(); - editor.putBoolean(PREFERENCE_CONTACTS_AUTOMATIC_BACKUP, bool); - editor.apply(); + arbitraryDataProvider.storeOrUpdateKeyValue(getAccount(), + PREFERENCE_CONTACTS_AUTOMATIC_BACKUP, String.valueOf(bool)); } private boolean checkAndAskForContactsReadPermission(final int permission) { @@ -200,12 +199,13 @@ public class ContactsPreferenceActivity extends FileActivity implements FileFrag if (PermissionUtil.shouldShowRequestPermissionRationale(ContactsPreferenceActivity.this, android.Manifest.permission.READ_CONTACTS)) { // Show explanation to the user and then request permission - Snackbar snackbar = Snackbar.make(findViewById(R.id.contacts_linear_layout), R.string.contacts_read_permission, - Snackbar.LENGTH_INDEFINITE) + Snackbar snackbar = Snackbar.make(findViewById(R.id.contacts_linear_layout), + R.string.contacts_read_permission, Snackbar.LENGTH_INDEFINITE) .setAction(R.string.common_ok, new View.OnClickListener() { @Override public void onClick(View v) { - PermissionUtil.requestReadContactPermission(ContactsPreferenceActivity.this, permission); + PermissionUtil.requestReadContactPermission(ContactsPreferenceActivity.this, + permission); } }); From c9c2cdbb4e4eaced947710512d134047ad672f8b Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Fri, 28 Apr 2017 14:52:30 +0200 Subject: [PATCH 27/53] add Arbitrary Data table use it for multiple account contact backup --- .../datamodel/ArbitraryDataProvider.java | 12 ++++++++++- .../android/services/ContactsBackupJob.java | 17 ++++++++------- .../activity/ContactsPreferenceActivity.java | 6 +++++- .../android/ui/activity/FileActivity.java | 10 ++++----- .../android/ui/activity/UserInfoActivity.java | 15 +++++++------ .../ContactsBackupFragment.java | 21 ++++++++++--------- 6 files changed, 47 insertions(+), 34 deletions(-) diff --git a/src/main/java/com/owncloud/android/datamodel/ArbitraryDataProvider.java b/src/main/java/com/owncloud/android/datamodel/ArbitraryDataProvider.java index 1e6e3bc9aa..4dc4111959 100644 --- a/src/main/java/com/owncloud/android/datamodel/ArbitraryDataProvider.java +++ b/src/main/java/com/owncloud/android/datamodel/ArbitraryDataProvider.java @@ -47,10 +47,12 @@ public class ArbitraryDataProvider { } public void storeOrUpdateKeyValue(Account account, String key, String newValue) { - Log_OC.v(TAG, "Adding arbitrary data with cloud id: " + account.name + " key: " + key + " value: " + newValue); + ArbitraryDataSet data = getArbitraryDataSet(account, key); if (data == null) { + Log_OC.v(TAG, "Adding arbitrary data with cloud id: " + account.name + " key: " + key + + " value: " + newValue); ContentValues cv = new ContentValues(); cv.put(ProviderMeta.ProviderTableMeta.ARBITRARY_DATA_CLOUD_ID, account.name); cv.put(ProviderMeta.ProviderTableMeta.ARBITRARY_DATA_KEY, key); @@ -63,6 +65,8 @@ public class ArbitraryDataProvider { + " value: " + newValue); } } else { + Log_OC.v(TAG, "Updating arbitrary data with cloud id: " + account.name + " key: " + key + + " value: " + newValue); ContentValues cv = new ContentValues(); cv.put(ProviderMeta.ProviderTableMeta.ARBITRARY_DATA_CLOUD_ID, data.getCloudId()); cv.put(ProviderMeta.ProviderTableMeta.ARBITRARY_DATA_KEY, data.getKey()); @@ -93,6 +97,12 @@ public class ArbitraryDataProvider { } } + public boolean getBooleanValue(Account account, String key) { + String value = getValue(account, key); + + return !value.isEmpty() && value.equalsIgnoreCase("true"); + } + private ArrayList getValues(Account account, String key) { Cursor cursor = contentResolver.query( ProviderMeta.ProviderTableMeta.CONTENT_URI_ARBITRARY_DATA, diff --git a/src/main/java/com/owncloud/android/services/ContactsBackupJob.java b/src/main/java/com/owncloud/android/services/ContactsBackupJob.java index 86e4de1377..036e700709 100644 --- a/src/main/java/com/owncloud/android/services/ContactsBackupJob.java +++ b/src/main/java/com/owncloud/android/services/ContactsBackupJob.java @@ -26,7 +26,6 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; -import android.content.SharedPreferences; import android.database.Cursor; import android.net.Uri; import android.os.IBinder; @@ -39,9 +38,9 @@ import com.evernote.android.job.util.support.PersistableBundleCompat; import com.owncloud.android.MainApp; import com.owncloud.android.R; import com.owncloud.android.authentication.AccountUtils; +import com.owncloud.android.datamodel.ArbitraryDataProvider; import com.owncloud.android.datamodel.FileDataStorageManager; import com.owncloud.android.datamodel.OCFile; -import com.owncloud.android.db.PreferenceManager; import com.owncloud.android.files.services.FileUploader; import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.operations.UploadFileOperation; @@ -76,13 +75,15 @@ public class ContactsBackupJob extends Job { boolean force = bundle.getBoolean(FORCE, false); - SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); - Long lastExecution = sharedPreferences.getLong(ContactsPreferenceActivity.PREFERENCE_CONTACTS_LAST_BACKUP, -1); + final Account account = AccountUtils.getOwnCloudAccountByName(context, bundle.getString(ACCOUNT, "")); + + ArbitraryDataProvider arbitraryDataProvider = new ArbitraryDataProvider(getContext().getContentResolver()); + Long lastExecution = arbitraryDataProvider.getLongValue(account, + ContactsPreferenceActivity.PREFERENCE_CONTACTS_LAST_BACKUP); if (force || (lastExecution + 24 * 60 * 60 * 1000) < Calendar.getInstance().getTimeInMillis()) { Log_OC.d(TAG, "start contacts backup job"); - final Account account = AccountUtils.getOwnCloudAccountByName(context, bundle.getString(ACCOUNT, "")); String backupFolder = getContext().getResources().getString(R.string.contacts_backup_folder) + OCFile.PATH_SEPARATOR; Integer daysToExpire = getContext().getResources().getInteger(R.integer.contacts_backup_expire); @@ -96,9 +97,9 @@ public class ContactsBackupJob extends Job { OperationsService.BIND_AUTO_CREATE); // store execution date - sharedPreferences.edit().putLong(ContactsPreferenceActivity.PREFERENCE_CONTACTS_LAST_BACKUP, - Calendar.getInstance().getTimeInMillis()).apply(); - + arbitraryDataProvider.storeOrUpdateKeyValue(account, + ContactsPreferenceActivity.PREFERENCE_CONTACTS_LAST_BACKUP, + String.valueOf(Calendar.getInstance().getTimeInMillis())); } else { Log_OC.d(TAG, "last execution less than 24h ago"); } diff --git a/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java b/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java index 46ff4a0cea..b69304a154 100644 --- a/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java @@ -75,7 +75,11 @@ public class ContactsPreferenceActivity extends FileActivity implements FileFrag FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); if (intent == null || intent.getParcelableExtra(ContactListFragment.FILE_NAME) == null || intent.getParcelableExtra(ContactListFragment.ACCOUNT) == null) { - transaction.add(R.id.frame_container, new ContactsBackupFragment()); + ContactsBackupFragment fragment = new ContactsBackupFragment(); + Bundle bundle = new Bundle(); + bundle.putParcelable(ContactListFragment.ACCOUNT, getAccount()); + fragment.setArguments(bundle); + transaction.add(R.id.frame_container, fragment); } else { OCFile file = Parcels.unwrap(intent.getParcelableExtra(ContactListFragment.FILE_NAME)); Account account = Parcels.unwrap(intent.getParcelableExtra(ContactListFragment.ACCOUNT)); diff --git a/src/main/java/com/owncloud/android/ui/activity/FileActivity.java b/src/main/java/com/owncloud/android/ui/activity/FileActivity.java index 41bcab4b9c..14d77fe7db 100644 --- a/src/main/java/com/owncloud/android/ui/activity/FileActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/FileActivity.java @@ -28,7 +28,6 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; -import android.content.SharedPreferences; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; @@ -41,8 +40,8 @@ import com.owncloud.android.MainApp; import com.owncloud.android.R; import com.owncloud.android.authentication.AccountUtils; import com.owncloud.android.authentication.AuthenticatorActivity; +import com.owncloud.android.datamodel.ArbitraryDataProvider; import com.owncloud.android.datamodel.OCFile; -import com.owncloud.android.db.PreferenceManager; import com.owncloud.android.files.services.FileDownloader; import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder; import com.owncloud.android.files.services.FileUploader; @@ -245,12 +244,11 @@ public abstract class FileActivity extends DrawerActivity } private void checkContactsBackupJob() { - SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); + ArbitraryDataProvider arbitraryDataProvider = new ArbitraryDataProvider(getContentResolver()); - if (sharedPreferences.getBoolean(ContactsPreferenceActivity.PREFERENCE_CONTACTS_AUTOMATIC_BACKUP, false)) { + if (getAccount() != null && arbitraryDataProvider.getBooleanValue(getAccount(), + ContactsPreferenceActivity.PREFERENCE_CONTACTS_AUTOMATIC_BACKUP)) { ContactsPreferenceActivity.startContactBackupJob(getAccount()); - } else { - ContactsPreferenceActivity.cancelAllContactBackupJobs(getBaseContext()); } } diff --git a/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java b/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java index e8f7f9272a..a00c56007a 100644 --- a/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java @@ -31,7 +31,6 @@ import android.app.DialogFragment; import android.app.FragmentManager; import android.content.DialogInterface; import android.content.Intent; -import android.content.SharedPreferences; import android.os.Bundle; import android.support.annotation.ColorInt; import android.support.annotation.NonNull; @@ -51,7 +50,7 @@ import android.widget.TextView; import com.owncloud.android.R; import com.owncloud.android.authentication.AccountUtils; import com.owncloud.android.authentication.AuthenticatorActivity; -import com.owncloud.android.db.PreferenceManager; +import com.owncloud.android.datamodel.ArbitraryDataProvider; import com.owncloud.android.lib.common.UserInfo; import com.owncloud.android.lib.common.operations.RemoteOperation; import com.owncloud.android.lib.common.operations.RemoteOperationResult; @@ -343,12 +342,12 @@ public class UserInfoActivity extends FileActivity { ContactsPreferenceActivity.cancelContactBackupJobForAccount(getActivity(), account); // disable daily backup - SharedPreferences sharedPreferences = PreferenceManager - .getDefaultSharedPreferences(getActivity()); - SharedPreferences.Editor editor = sharedPreferences.edit(); - editor.putBoolean(ContactsPreferenceActivity.PREFERENCE_CONTACTS_AUTOMATIC_BACKUP, - false); - editor.apply(); + ArbitraryDataProvider arbitraryDataProvider = new ArbitraryDataProvider( + getActivity().getContentResolver()); + + arbitraryDataProvider.storeOrUpdateKeyValue(account, + ContactsPreferenceActivity.PREFERENCE_CONTACTS_AUTOMATIC_BACKUP, + "false"); if (getActivity() != null && !removeDirectly) { Bundle bundle = new Bundle(); diff --git a/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java index 70834c8045..8893cbc4e6 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java @@ -21,9 +21,9 @@ package com.owncloud.android.ui.fragment.contactsbackup; import android.Manifest; +import android.accounts.Account; import android.app.DatePickerDialog; import android.content.DialogInterface; -import android.content.SharedPreferences; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; @@ -44,8 +44,8 @@ import android.widget.Toast; import com.evernote.android.job.JobRequest; import com.evernote.android.job.util.support.PersistableBundleCompat; import com.owncloud.android.R; +import com.owncloud.android.datamodel.ArbitraryDataProvider; import com.owncloud.android.datamodel.OCFile; -import com.owncloud.android.db.PreferenceManager; import com.owncloud.android.services.ContactsBackupJob; import com.owncloud.android.ui.activity.ContactsPreferenceActivity; import com.owncloud.android.ui.fragment.FileFragment; @@ -68,8 +68,6 @@ import static com.owncloud.android.ui.activity.ContactsPreferenceActivity.PREFER public class ContactsBackupFragment extends FileFragment implements DatePickerDialog.OnDateSetListener { public static final String TAG = ContactsBackupFragment.class.getSimpleName(); - private SharedPreferences sharedPreferences; - @BindView(R.id.contacts_automatic_backup) public SwitchCompat backupSwitch; @@ -93,6 +91,9 @@ public class ContactsBackupFragment extends FileFragment implements DatePickerDi private static final String KEY_CALENDAR_DAY = "CALENDAR_DAY"; private static final String KEY_CALENDAR_MONTH = "CALENDAR_MONTH"; private static final String KEY_CALENDAR_YEAR = "CALENDAR_YEAR"; + private ArbitraryDataProvider arbitraryDataProvider; + private Account account; + @Override public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -104,12 +105,14 @@ public class ContactsBackupFragment extends FileFragment implements DatePickerDi final ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); + account = (Account) getArguments().get(ContactListFragment.ACCOUNT); + contactsPreferenceActivity.getSupportActionBar().setTitle(R.string.actionbar_contacts); contactsPreferenceActivity.getSupportActionBar().setDisplayHomeAsUpEnabled(true); - sharedPreferences = PreferenceManager.getDefaultSharedPreferences(contactsPreferenceActivity); + arbitraryDataProvider = new ArbitraryDataProvider(getContext().getContentResolver()); - backupSwitch.setChecked(sharedPreferences.getBoolean(PREFERENCE_CONTACTS_AUTOMATIC_BACKUP, false)); + backupSwitch.setChecked(arbitraryDataProvider.getBooleanValue(account, PREFERENCE_CONTACTS_AUTOMATIC_BACKUP)); onCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() { @Override @@ -127,7 +130,7 @@ public class ContactsBackupFragment extends FileFragment implements DatePickerDi backupSwitch.setOnCheckedChangeListener(onCheckedChangeListener); // display last backup - Long lastBackupTimestamp = sharedPreferences.getLong(PREFERENCE_CONTACTS_LAST_BACKUP, -1); + Long lastBackupTimestamp = arbitraryDataProvider.getLongValue(account, PREFERENCE_CONTACTS_LAST_BACKUP); if (lastBackupTimestamp == -1) { lastBackup.setText(R.string.contacts_preference_backup_never); @@ -276,9 +279,7 @@ public class ContactsBackupFragment extends FileFragment implements DatePickerDi ContactsPreferenceActivity.cancelAllContactBackupJobs(contactsPreferenceActivity); } - SharedPreferences.Editor editor = sharedPreferences.edit(); - editor.putBoolean(PREFERENCE_CONTACTS_AUTOMATIC_BACKUP, bool); - editor.apply(); + arbitraryDataProvider.storeOrUpdateKeyValue(account, PREFERENCE_CONTACTS_AUTOMATIC_BACKUP, String.valueOf(bool)); } private boolean checkAndAskForContactsReadPermission(final int permission) { From fa84532da71096bb9d88e655e2ce578a0ed566fe Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Fri, 28 Apr 2017 15:05:50 +0200 Subject: [PATCH 28/53] make custom build 100% independent --- src/modified/res/values/setup.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/modified/res/values/setup.xml b/src/modified/res/values/setup.xml index 5c7cb36d8d..77bdbed7c5 100644 --- a/src/modified/res/values/setup.xml +++ b/src/modified/res/values/setup.xml @@ -4,8 +4,8 @@ false - Nextcloud - nextcloud + Custom + custom com.custom.client.provider com.custom.client.provider.UsersAndGroupsSearch com.custom.client.provider.UsersAndGroupsSearch.action.SHARE_WITH @@ -13,9 +13,9 @@ com.custom.client.provider.Files nextcloud.db nextcloud - nextcloud + custom nextcloud - Nextcloud + Custom Mozilla/5.0 (Android) ownCloud-android/%1$s From 887645921fb14873b09cec36fd7acd8844eb4281 Mon Sep 17 00:00:00 2001 From: alejandro Date: Fri, 28 Apr 2017 10:22:47 -0500 Subject: [PATCH 29/53] Fixing duplicated code --- .../authentication/AuthenticatorActivity.java | 18 ++----------- .../ui/activity/ExternalSiteWebView.java | 22 ++-------------- .../owncloud/android/utils/DisplayUtils.java | 26 +++++++++++++++++++ 3 files changed, 30 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java b/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java index e6a9304697..7211cc7587 100644 --- a/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java +++ b/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java @@ -115,9 +115,6 @@ import com.owncloud.android.ui.dialog.SslUntrustedCertDialog; import com.owncloud.android.ui.dialog.SslUntrustedCertDialog.OnSslUntrustedCertListener; import com.owncloud.android.utils.DisplayUtils; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; import java.security.cert.X509Certificate; import java.util.Map; @@ -341,19 +338,8 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity } public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { - BufferedReader buffreader = new BufferedReader(new InputStreamReader(getResources().openRawResource(R.raw.custom_error))); - String line; - StringBuilder text = new StringBuilder(); - try { - while (( line = buffreader.readLine()) != null) { - text.append(line); - text.append('\n'); - } - } catch (IOException e) { - Log_OC.e(TAG,e.getMessage()); - return; - } - mLoginWebView.loadData(text.toString(),"text/html; charset=UTF-8", null); + + mLoginWebView.loadData(DisplayUtils.getData(getResources().openRawResource(R.raw.custom_error)),"text/html; charset=UTF-8", null); } }); } diff --git a/src/main/java/com/owncloud/android/ui/activity/ExternalSiteWebView.java b/src/main/java/com/owncloud/android/ui/activity/ExternalSiteWebView.java index ecd066f738..bde1c32784 100644 --- a/src/main/java/com/owncloud/android/ui/activity/ExternalSiteWebView.java +++ b/src/main/java/com/owncloud/android/ui/activity/ExternalSiteWebView.java @@ -36,10 +36,7 @@ import android.widget.ProgressBar; import com.owncloud.android.MainApp; import com.owncloud.android.R; import com.owncloud.android.lib.common.utils.Log_OC; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; +import com.owncloud.android.utils.DisplayUtils; /** * This activity shows an URL as a web view @@ -126,22 +123,7 @@ public class ExternalSiteWebView extends FileActivity { webview.setWebViewClient(new WebViewClient() { public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { - - BufferedReader buffreader = new BufferedReader(new InputStreamReader(getResources().openRawResource(R.raw.custom_error))); - String line; - StringBuilder text = new StringBuilder(); - try { - while (( line = buffreader.readLine()) != null) { - text.append(line); - text.append('\n'); - } - } catch (IOException e) { - Log_OC.e(TAG,e.getMessage()); - return; - } - - webview.loadData(text.toString(),"text/html; charset=UTF-8", null); - + webview.loadData(DisplayUtils.getData(getResources().openRawResource(R.raw.custom_error)),"text/html; charset=UTF-8", null); } }); diff --git a/src/main/java/com/owncloud/android/utils/DisplayUtils.java b/src/main/java/com/owncloud/android/utils/DisplayUtils.java index c5d1a76057..b57711f5eb 100644 --- a/src/main/java/com/owncloud/android/utils/DisplayUtils.java +++ b/src/main/java/com/owncloud/android/utils/DisplayUtils.java @@ -81,7 +81,10 @@ import com.owncloud.android.utils.svg.SvgDrawableTranscoder; import org.greenrobot.eventbus.EventBus; import org.parceler.Parcels; +import java.io.BufferedReader; +import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; import java.math.BigDecimal; import java.net.IDN; import java.text.DateFormat; @@ -646,4 +649,27 @@ public class DisplayUtils { activity.startActivity(recentlyAddedIntent); } } + + + /** + * Get String data from a InputStream + * + * @param inputStream The File InputStream + */ + public static String getData(InputStream inputStream){ + + BufferedReader buffreader = new BufferedReader(new InputStreamReader(inputStream)); + String line; + StringBuilder text = new StringBuilder(); + try { + while (( line = buffreader.readLine()) != null) { + text.append(line); + text.append('\n'); + } + } catch (IOException e) { + Log_OC.e(TAG,e.getMessage()); + } + return text.toString(); + } + } From 87cb2890ad5a2ad32988909b21315b6519426a1e Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Fri, 28 Apr 2017 20:51:47 +0200 Subject: [PATCH 30/53] Cancel job only for an account --- .../ui/fragment/contactsbackup/ContactsBackupFragment.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java index 8893cbc4e6..ce709d54ea 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java @@ -276,10 +276,12 @@ public class ContactsBackupFragment extends FileFragment implements DatePickerDi if (bool) { ContactsPreferenceActivity.startContactBackupJob(contactsPreferenceActivity.getAccount()); } else { - ContactsPreferenceActivity.cancelAllContactBackupJobs(contactsPreferenceActivity); + ContactsPreferenceActivity.cancelContactBackupJobForAccount(contactsPreferenceActivity, + contactsPreferenceActivity.getAccount()); } - arbitraryDataProvider.storeOrUpdateKeyValue(account, PREFERENCE_CONTACTS_AUTOMATIC_BACKUP, String.valueOf(bool)); + arbitraryDataProvider.storeOrUpdateKeyValue(account, PREFERENCE_CONTACTS_AUTOMATIC_BACKUP, + String.valueOf(bool)); } private boolean checkAndAskForContactsReadPermission(final int permission) { From 299a71e03f9a5a3071804e89f2960344e33c7641 Mon Sep 17 00:00:00 2001 From: Bernhard Blieninger Date: Fri, 28 Apr 2017 22:38:31 +0200 Subject: [PATCH 31/53] I think the "and" is missing. --- src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index d621d8997f..d9358c282c 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -284,7 +284,7 @@ Rename Remove "Do you really want to remove %1$s?" - "Do you really want to remove %1$s the contents thereof?" + "Do you really want to remove %1$s and the contents thereof?" Local only "Removed" "Removal failed" From 7b1f251a0d88f7d22c8934e811281b6da7f40e9a Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Sat, 29 Apr 2017 00:21:08 +0000 Subject: [PATCH 32/53] [tx-robot] updated from transifex --- src/main/res/values-de-rDE/strings.xml | 248 +++++++++-------------- src/main/res/values-de/strings.xml | 145 +++++++------- src/main/res/values-es-rMX/strings.xml | 220 +++++++++++---------- src/main/res/values-fr/strings.xml | 171 +--------------- src/main/res/values-nb-rNO/strings.xml | 191 ++++-------------- src/main/res/values-pt-rBR/strings.xml | 262 +++++++++++++------------ 6 files changed, 450 insertions(+), 787 deletions(-) diff --git a/src/main/res/values-de-rDE/strings.xml b/src/main/res/values-de-rDE/strings.xml index b2deac4823..b3063a5471 100644 --- a/src/main/res/values-de-rDE/strings.xml +++ b/src/main/res/values-de-rDE/strings.xml @@ -46,10 +46,10 @@ Fingerabdruck-Sperre Keine Fingerabdrücke eingerichtet. Versteckte Dateien anzeigen - Sofortiger Bilderupload - Fotos von der Kamera sofort hochladen - Sofortiger Videoupload - Videos von der Kamera sofort hochladen + Sofortiges Hochladen von Bildern + Sofortiges Hochladen von Bildern, die mit der Kamera gemacht wurden + Sofortiges Hochladen von Videos + Sofortiges Hochladen von Videos, die mit der Kamera gemacht wurden Protokollierung aktivieren Dies wird zur Protokollierung von Problemen benutzt Protokollverlauf @@ -58,23 +58,17 @@ Kalender & Kontakte synchronisieren DAVdroid (v1.3.0+) für aktuelles Konto einrichten Serveradresse des Kontos für die DAVdroid-Nutzung konnte nicht ermittelt werden - Weder Google Play Store noch F-Droid App installiert - Kalender- & Kontakte-Synchronisierung erfolgreich konfiguriert + Weder F-Droid noch Google-Play sind installiert + Kalender- & Adress-Synchronisation konfigurieren Hilfe - Dies einem Freund empfehlen + Einem Freund empfehlen Rückmeldungen Impressum - Geteilten Speicherort merken - Geteilten Upload-Speicherort merken - - %1$s auf Ihrem Smartphone ausprobieren! - Ich empfehle Ihnen die Nutzung von %1$s auf Ihrem Smartphone!\nSie können die App hier herunterladen: %2$s - - Server überprüfen + %1$s auf Ihrem Smartphone ausprobieren! + Server überprüfen Server-Adresse https://… Benutzername Passwort - Sie haben bislang keinen Server?\nHier klicken um Server-Anbieter zu finden Dateien Verbinden Hochladen @@ -86,43 +80,43 @@ Keine Datei zum Hochladen %1$s kann einen Textteil als Datei hochladen Empfangene Daten enthalten keine gültige Datei. - Datei kann nicht hochgeladen werden + Diese Datei kan nicht hochgeladen werden %1$s darf eine empfangene Datei nicht lesen - Hochzuladende Datei wurde an seinem Ort nicht gefunden. Prüfen Sie, dass die Datei existiert. - Es ist ein Fehler beim Kopieren dieser Datei in einen temporären Ordner aufgetreten. Bitte versuchen Sie erneut die Datei zu senden. + Die zum Hochladen ausgewählte Datei kann nicht gefunden werden. Bitte prüfen Sie ob die Datei existiert. + Konnte Datei nicht in temporärem Ordner speichern. Bitte versuche es erneut. Upload Option: In Nextcloud Ordner verschieben Hochladen und Datei im ursprünglichen Ordner behalten Lösche Datei aus dem ursprünglichen Ordner Gerade eben - Keine Dateien vorhanden - Laden Sie Inhalte hoch oder synchronisieren Sie sie mit Ihren Geräten! - Favorisieren Sie einige Dateien oder synchronisieren Sie Ihre Geräte! - Dateien und Ordner, die Sie als Favoriten kennzeichnen, werden hier erscheinen - Keine favorisierten Dateien in Ihrem Verlauf gefunden! + Keine Dateien vorhanden + Lade Dateien hoch oder synchronisiere mit deine Geräte. + Favoritisiere Dateien oder synchronisiere deine Geräte. + Dateien und Ordner, die du favoritisierst, werden hier angezeigt + Deine Suche ergab keine favoritisierten Dateien. Lade… - Es wurde keine App für diesen Dateityp gefunden! + Keine App verfügbar um diesen Dateityp zu verarbeiten. Es befinden sich keine Dateien in diesem Ordner. Keine Ergebnisse in diesem Ordner Keine Ergebnisse - Noch keine Favoriten vorhanden + Noch nichts favoritisiert. Noch nichts geteilt Dateien und Ordner, die Sie teilen, werden hier erscheinen Keine Videos Keine Fotos - In einem anderen Ordner suchen? - Keine, innerhalb der letzten 7 Tage, geänderten Dateien gefunden - Keine Dateien in Ihrem Verlauf gefunden, -  die in den letzten 7 Tagen geändert wurden! - Keine kürzlich hinzu gefügten Dateien gefunden - Keine kürzlich hinzu gefügten Dateien in Ihrem Verlauf gefunden! - Laden Sie Fotos hoch oder aktivieren Sie den Sofort-Upload! - Keine Fotos in Ihrem Verlauf gefunden! - Laden Sie einige Videos hoch oder aktivieren Sie den Sofort-Upload! - Keine Videos in Ihrem Verlauf gefunden! + Vielleicht liegt es in einem anderen Ordner? + Keine Dateien gefunden, die in den letzten 7 Tagen modifiziert wurden + Deine Such ergab keine Dateien, +die in den letzten 7 Tagen modifiziert wurden. + Keine kürzlich hinzugefügten Dateien gefunden + Deine Suche ergab keine kürzlich hinzugefügten Dateien + Lade ein paar Fotos hoch oder aktiviere automatisches Hochladen + Deine Suche hat keine Fotos gefunden. + Lade ein paar Videos hoch oder aktiviere automatisches Hochladen + Deine Suche hat keine Videos gefunden. Keine Uploads verfügbar - Laden Sie Inhalte hoch oder aktivieren Sie den Sofort-Upload! - Laden Sie Inhalte hoch oder aktivieren Sie den Sofort-Upload! + Lade ein paar Dateien hoch oder aktiviere automatisches Hochladen. + Lade ein paar Dateien hoch oder aktiviere automatisches Hochladen. Ordner Ordner Datei @@ -134,14 +128,13 @@ Geändert: Herunterladen Synchronisieren - Datei wurde während des Uploads zu %1$s umbenannt - Listenlayout + Datei während des Hochladens in %1$s umbenannt Teilen Ja Nein OK Upload entfernen - Hochladen wiederholen + Versuche erneut hochzuladen Synchronisation abbrechen Abbrechen Zurück @@ -161,10 +154,10 @@ Ordnername Hochladen … %1$d%% Hochladen %2$s - Hochladen erfolgreich + Hochgeladen %1$s hochgeladen Hochladen fehlgeschlagen - Hochladen von %1$s konnte nicht abgeschlossen werden + Konnte %1$s nicht hochladen Hochladen fehlgeschlagen, Sie müssen sich erneut anmelden. Uploads Aktuell @@ -181,37 +174,36 @@ Lokale Datei nicht gefunden Berechtigungsfehler Konflikt - Die Anwendung wurde beendet + App beendet Unbekannter Fehler - Warte auf WLAN-Verbindung + Warte auf W-Lan-Verbindung Warten auf das Hochladen Herunterladen … %1$d%% beim Laden von %2$s - Herunterladen erfolgreich + Heruntergeladen %1$s wurde erfolgreich heruntergeladen Herunterladen fehlgeschlagen - Herunterladen von %1$s konnte nicht abgeschlossen werden + Konnte %1$s nicht herunterladen Noch nicht heruntergeladen Herunterladen fehlgeschlagen, Sie müssen sich erneut anmelden. Konto auswählen Synchronisation fehlgeschlagen - Synchronisation fehlgeschlagen, Sie müssen sich erneut anmelden. + Synchronisation fehlgeschlagen. Sie müssen sich erneut anmelden Synchronisation von %1$s konnte nicht abgeschlossen werden - Ungültiges Passwort für %1$s + Falsches Passwort für %1$s Konflikte gefunden %1$d Synchronisationsdateien konnten nicht synchronisiert werden. Synchronisationsdateien konnten nicht synchronisiert werden. Inhalte von %1$d Dateien konnten nicht synchronisiert werden (%2$d Konflikte) Einige lokale Dateien wurden vergessen %1$d Dateien aus dem %2$s Ordner konnten nicht kopiert werden nach - Seit Version 1.3.16 werden Dateien die von diesem Gerät aus hochgeladen werden in den lokalen Ordner %1$s kopiert um Datenverlust zu vermeiden, wenn eine einzelne Datei mit mehreren Accounts synchronisiert wird.\n\nInfolge dieser Änderung wurden alle Dateien, die mit vorherigen Versionen dieser App hochgeladen wurden, in den Ordner %2$s verschoben. Jedoch ist während der Account-Synchronisation ein Fehler aufgetreten, der das Abschließen dieses Vorgangs verhindert. Sie können die Datei(en) entweder wie sie sind belassen und den Link zu %3$s entfernen oder die Datei(en) in den %1$s Ordner verschieben und den Link zu %4$s beibehalten.\n\nUnten befindet sich eine Liste der lokalen Datei(en) und der mit ihnen verbundenen Remote-Datei(en) in %5$s. - Das Verzeichnis %1$s existiert nicht mehr + Der Ordner %1$s existiert nicht mehr Verschiebe alle Alle Dateien wurden verschoben Einige Dateien konnten nicht verschoben werden Lokal: %1$s Entfernte Freigabe: %1$s - Es steht nicht genügend Speicherplatz zur Verfügung, um die ausgewählten Dateien in das Verzeichnis %1$s zu kopieren. Sollen diese stattdessen verschoben werden? + Unzureichender Speicherplatz verhindert das Kopieren der ausgewählten Dateien in den Ordner %1$s . Möchstest du sie stattdessen verschieben? Bitte geben Sie ihre PIN ein Bitte PIN eingeben @@ -229,16 +221,19 @@ %1$s Wiedergabe beendet Keine Mediendatei gefunden Kein Konto angegeben - Datei ist nicht in einem gültigen Account + Die Datei befindet sich nicht in einem gültigen Konto Nicht unterstützter Media-codec - Mediendatei konnte nicht gelesen werden - Mediendatei nicht korrekt kodiert - Wartezeit für Wiedergabe abgelaufen - Mediendatei kann nicht gestreamt werden - Die Mediendatei kann nicht mit dem vorinstallierten Media Player abgespielt werden - Sicherheitsfehler bei der Wiedergabe von %1$s - Eingabefehler beim Versuch %1$s abzuspielen - Unerwarteter Fehler beim Versuch %1$s wiederzugeben + Konnte die Mediendatei nicht lesen + +Die Mediendatei ist falsch encodiert. + +Zeitüberschreitung beim Versuch die Datei abzuspielen + Die Mediendatei kann nicht gestreamt werden + Die Standard-Applikation für Musik kann die Mediendatei nicht abspielen. + Ein Sicherheitsfehler trat beim Abspielen von %1$s auf + Eingabefehler beim Abspielen von %1$s + +Unerwarteter Fehler beim Abspielen von %1$s Zurückspulknopf Wiedergabe- oder Pause-Knopf Vorspul-Knopf @@ -250,31 +245,31 @@ Verbindung hergestellt Teste Verbindung Fehlerhafte Server Konfiguration - Ein Benutzerkonto für den gleichen Benutzer und Server existiert auf diesem Gerät bereits + Ein Account für den gleichen Benutzer und Server existiert bereits auf diesem Gerät Der eingegebene Benutzer passt nicht zu dem Benutzer dieses Benutzerkontos Ein unbekannter Fehler ist aufgetreten! - Konnte den Host nicht finden. - Server-Installation nicht gefunden + Konnte den Server nicht finden + Server nicht gefunden Der Server braucht zu lange für eine Antwort. - Fehlerhaftes Format Ihrer Serveradresse + Falsches Adress-Format für den Server SSL-Initialisierung fehlgeschlagen. - SSL-Server-Identität konnte nicht überprüft werden + Konnte die Identität des SSL Servers nicht verifizieren Unbekannte Server-Version - Konnte keine Verbindung aufbauen. + Verbindung konnte nicht hergestellt werden Sichere Verbindung hergestellt Falscher Benutzername oder Passwort Legitimierung nicht erfolgreich Zugriff durch den Legitimierungsserver abgelehnt - Unerwarteter Zustand; bitte geben Sie die Adresse des Servers nochmals ein + Unerwarteter Status, bitte gib die Serveradresse erneut ein Ihre Legitimierung ist abgelaufen. Bitte Legitimierung nochmals durchführen Bitte geben Sie Ihr aktuelles Passwort ein Ihre Sitzung ist abgelaufen. Bitte erneut verbinden - Verbinde mit dem Authentifizierungs-Server… + Verbinde zum Authentifizierungsserver... Der Server unterstützt diese Legitimierungsmethode nicht %1$s unterstützt nicht mehrere Benutzerkonten - Ihr Server gibt keine korrekte Benutzer-ID zurück, bitte kontaktiere einen Administrator + Dein Server sendet keine korrekte Benutzer ID, bitte kontaktiere den Serveradministrator Die Authentifizierung gegenüber dem Server konnte nicht durchgeführt werden - Das Benutzerkonto ist bislang auf dem Gerät nicht vorhanden + Account existiert auf diesem Gerät noch nicht Als Offline verfügbar markieren Markierung Offline verfügbar entfernen @@ -283,36 +278,31 @@ Umbenennen Entfernen Möchten Sie %1$s wirklich löschen? - Möchten Sie wirklich %1$s und dessen Inhalte entfernen? Nur lokal - Erfolgreich entfernt + Entfernt Entfernen fehlgeschlagen Geben Sie einen neuen Namen ein - Die lokale Kopie konnte nicht umbenannt werden. Versuchen Sie es mit einem anderen Namen. - Die Umbenennung konnte nicht abgeschlossen werden. - Die entfernte Datei konnte nicht überprüft werden + Lokale Kopie konnte nicht umbenannt werden, versuche einen anderen Namen + Konnte dem Server keinen neuen Namen geben + Konnte die entfernte Datei nicht überprüfen Dateiinhalte bereits synchronisiert - Ordner konnte nicht erstellt werden + Konnte den Ordner nicht erstellen Verbotene Zeichen: / \\ < > : \" | ? * Der Dateiname enthält mindestens ein ungültiges Zeichen Dateiname darf nicht leer sein - Einen Moment warten + Bitte warten... Prüfe gespeicherte Anmeldeinformationen - Ein unerwartetes Problem ist aufgetreten. Bitte versuchen Sie, die Datei in einer anderen App zu öffnen. - Es wurde keine Datei ausgewählt. + Keine Datei gewählt Link senden an … Kopiere Datei vom privatem Speicher Anmelden mit oAuth2 - Verbinde mit dem oAuth2-Server… - Die Identität der Website konnte nicht überprüft werden - Das Zertifikat des Servers ist nicht vertrauenswürdig - Das Zertifikat des Servers ist abgelaufen - Das Gültigkeitsdatum des Serverzertifikats liegt in der Zukunft - Die Adresse stimmt nicht mit dem im Zertifikat angegebenen Hostnamen überein Möchten Sie diesem Zertifikat trotzdem vertrauen? - Das Zertifikat konnte nicht gespeichert werden Details Ausblenden Ausgestellt für: @@ -336,24 +326,22 @@ Dies ist ein Platzhalter platzhalter.txt - PNG Bild 389 KB 18.05.2012 12:23 12:23:45 - Nur über WLAN hochladen - Fotos nur über WLAN hochladen - Videos nur über WLAN hochladen - Hochladen nur während des Ladens - Hochladen nur während des Ladens + Nur über W-Lan hochladen + Bilder nur über W-Lan hochladen + Videos nur über W-Lan hochladen + Nur während des Ladens hochladen + Nur während des Ladens hochladen /SofortUpload Dateikonflikt - Welche Datei möchten Sie behalten? Wenn Sie beide Versionen auswählen, wird der lokalen Datei eine Zahl ans Ende ihres Dateinamens angehängt. Beide behalten lokale Version Server-Version - Das tut mir leid! + Entschuldigung. Bildvorschau Bild kann nicht angezeigt werden @@ -364,7 +352,7 @@ Verwende Unterordner Speichere in Unterordnern basierend auf Jahr und Monat - Entschuldigung, das Teilen ist auf Ihrem Server nicht aktiviert. Bitte kontaktiere Sie Ihren Administrator. + Teilen ist auf Ihrem Server nicht aktiviert. Bitte kontaktieren Sie den Administrator. Teilen nicht möglich. Prüfen Sie, ob die Datei existiert Es ist ein Fehler beim Freigeben der Datei oder des Ordners aufgetreten. Entfernen der Freigabe nicht möglich. Prüfen Sie, ob die Datei existiert @@ -378,56 +366,40 @@ Link kopieren In die Zwischenablage kopiert - Kein Text zum Kopieren in die Zwischenablage empfangen Unerwarteter Fehler beim Kopieren in die Zwischenablage Text von %1$s kopiert - Kritischer Fehler: Operationen können nicht ausgeführt werden - - Es ist ein Fehler bei der Verbindung mit dem Server aufgetreten. - Es ist ein Fehler während des Wartens auf den Server aufgetreten, die Operation kann nicht ausgeführt werden - Es ist ein Fehler während des Wartens auf den Server aufgetreten, die Operation kann nicht ausgeführt werden - Die Operation kann nicht abgeschlossen werden, der Server ist nicht erreichbar - Sie haben keine Berechtigung %s + Ihnen fehlt die Erlaubnis %s diese Datei umzubenennen diese Datei zu löschen diese Datei zu teilen diese Datei nicht mehr zu teilen zum Aktualisieren dieser Freigabe - eine Datei zu erstellen - in diesem Order etwas hochzuladen + diese Datei zu erstellen + diesen Ordner hochzuladen Diese Datei steht auf dem Server nicht mehr zur Verfügung Aktualisiere Speicherort Beenden Bereite Migration vor… Prüfe Zielort… - Speichere Konteneinstellung… - Warte auf Abschluss der Synchronisierungen… + Sichere Konfiguration der Konten… + Warte auf die Fertigstellung der Synchronisationen… Verschiebe Dateien… Aktualisiere Index… Aufräumen… - Konteneinstellung wiederherstellen… + Konfiguration der Konten wiederherstellen… Abgeschlossen - FEHLER: Nicht genügend Speicherplatz + FEHLER: zu wenig Platz FEHLER: Datei kann nicht geschrieben werden - FEHLER: Datei nicht lesbar + FEHLER: Datei kann nicht gelesen werden FEHLER: Nextcloud Ordner existiert bereits - FEHLER: Während der Migration - FEHLER: Während der Aktualisierung des Indixes - - Datenordner existiert bereits, was soll getan werden? - Überschreiben - Verwende Bestehenden - + FEHLER: Migration fehlgeschlagen Konten Konto hinzufügen Konten verwalten - Die gesicherte Verbindung wird auf eine unsichere Route weitergeleitet. - - Protokolle + Protokolle Verlauf senden - Keine App zum Versenden der Meldungen gefunden. Bitte installieren Sie eine Mail-App! %1$s Android-App Meldungen Lade Daten … @@ -435,27 +407,20 @@ Falsches Passwort Verschieben Kopieren - Nichts vorhanden. Sie können einen Ordner hinzufügen! Auswählen - Verschieben nicht möglich. Bitte überprüfen Sie, ob die Datei existiert - Es ist nicht möglich einen Ordner eine Ebene tiefer zu verschieben - Die Datei ist bereits im Zielordner vorhanden Es ist ein Fehler beim Verschieben dieser Datei oder dieses Ordners aufgetreten. um diese Datei zu verschieben Kopieren nicht möglich. Bitte überprüfen Sie, ob die Datei existiert - Es ist nicht möglich, einen Ordner in einen seiner Unterordner zu kopieren - Die Datei ist bereits im Zielordner vorhanden Es ist ein Fehler beim Kopieren dieser Datei oder dieses Ordners aufgetreten um diese Datei zu kopieren Sofortiges Hochladen Details - Pfad zum sofortigen Video-Upload - Bei der Synchronisation konnte %1$s Ordner nicht fertig gestellt werden + Bei der Synchronisation konnte %1$s Ordner nicht fertig gestellt werden geteilt Mit Ihnen @@ -496,7 +461,6 @@ Benutzer oder Gruppe hinzufügen Link teilen Ein Ablaufdatum setzen - Passwortschutz Gesichert Bearbeitung erlauben Dateiliste verbergen @@ -512,7 +476,6 @@ %1$s (E-Mail) %1$s ( auf %2$s ) - Entschuldigung, Ihre Serverversion erlaubt das Teilen mit Nutzern innerhalb der Clients nicht. \nBitte kontaktieren Sie Ihren Administrator kann teilen kann bearbeiten erstellen @@ -521,50 +484,34 @@ Freigabe löschen Erledigt - Wiederholung fehlgeschlagen Entferne Fehlversuche - Entferne erfolgreiche Uploads - Alles aufräumen - Zur Rasteransicht wechseln Zur Listenansicht wechseln Speicher verwalten - Einstellungen, Datenbank und Server-Zertifikate von %1$s\'s Daten werden dauerhaft gelöscht.\n\nHerunter geladene Dateien bleiben unangetastet.\n\nDieser Vorgang kann eine Zeit dauern. Lösche Daten Einige Dateien konnten nicht gelöscht werden. - Weitere Berechtigungen erforderlich für das Hoch- und Herunterladen von Dateien - Die Datei wurde im lokalen Dateisystem nicht gefunden Wollen Sie die ausgewählten Einträge wirklich löschen? Wollen Sie die ausgewählten Einträge und deren Inhalte wirklich löschen? - Warte auf das Aufladen des Gerätes Suche Dies ist eine Nextcloud Funktion, bitte updaten. Mehr Auto-Upload Mitmachen - Helfen Sie uns beim Testen - Fehler gefunden? Merkwürdiges Verhalten? Fehler melden auf Github - Möchten Sie uns beim Testen der nächsten Version unterstützen? Testen Sie die Beta-Version - Dies beinhaltet neue Funktionalitäten und ist nicht vollumfänglich qualitätsgesichert. Es können daher Fehler/Bugs auftreten, melden Sie uns diese bitte. Vorabversionen - Eine Vorabversion, auch Release Candidate (RC) genannt, ist ein stabiler Stand der kommenden, finalen Version. Ein Test in der eigenen Umgebung hilft uns diese Stabilität sicherzustellen. Melden Sie sich als Tester im Play Store an oder suchen und installieren Sie die passende Version bei F-Droid unter „Versionen“. Aktiv etwas beitragen An Diskussionen im IRC teilnehmen: <a href=\"%1$s\">#nextcloud-mobile</a> Helfen Sie anderen im <a href="%1$s">Forum</a> Die App <a href=\"%1$s\">übersetzen</a> - Als Entwickler einen Beitrag leisten, Details unter <a href="https://github.com/nextcloud/android/blob/master/CONTRIBUTING.md">CONTRIBUTING.md</a> Verschieben nach… Kopieren nach… Ordner auswählen… Ordner laden… Keine Medienordner gefunden. - Auto Upload Einstellungen Einstellungen - Der Auto-Upload wurde vollständig überarbeitet. Bitte über das Hauptmenü zum Auto-Upload gehen und neu konfigurieren. Bitte entschuldigen Sie die Unannehmlichkeiten.\n\nViel Vergnügen mit den neuen und erweiterten Möglichkeiten des Auto-Uploads! Für %1$s %d ausgewählt @@ -578,7 +525,6 @@ Keine Benachrichtigungen Bitte sehen Sie später noch einmal nach. - Dateinamen und -typ zum Hochladen eingeben Dateiname Dateityp Schnipsel-Textdatei (.txt) @@ -594,8 +540,6 @@ Ein sicheres Zuhause für alle Ihre Daten - Zugriff, Freigabe & Schutz Ihrer Dateien zu Hause und in Ihrem Unternehmen. - Mehrfachkonto Verbinden Sie sich mit all Ihren Clouds @@ -609,7 +553,6 @@ Vollständiger Name - E-Mail Telefonnummer Adresse Webseite @@ -619,23 +562,16 @@ Bislang keine Aktivitäten - Dieser Stream zeigt Ereignisse wie\nHinzugekommenes, Änderungen & und Freigaben an Fehler aufgetreten Über - Adressen-Sicherung - Sicherung jetzt erstellen Letztes Backup wiederherstellen Wiederherstellen Sicherung Adressen-Sicherung Letzte Sicherung - Lese-Zugriffs-Erlaubnis für Adressen ist erforderlich - Schreib-Erlaubnis für Adressen ist erforderlich Adressen wiederherstellen Ausgewählte Adressen wiederherstellen - Konto für den Import auswählen - Keine Berechtigung, es wurde nichts importiert! Datum auswählen nie Keine Datei gefunden @@ -644,6 +580,4 @@ Neue Benachrichtigung erhalten - - - + diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml index 92b5c5c514..81cad2d864 100644 --- a/src/main/res/values-de/strings.xml +++ b/src/main/res/values-de/strings.xml @@ -46,10 +46,10 @@ Fingerabdruck-Sperre Keine Fingerabdrücke eingerichtet. Versteckte Dateien anzeigen - Sofortiger Bilder-Upload - Lade Fotos von der Kamera sofort hoch - Sofortiger Video-Upload - Lade Videos von der Kamera sofort hoch + Sofortiges Hochladen von Bildern + Lade mit der Kamera gemachte Fotos sofort hoch + Sofortiges Hochladen von Videos + Lade mit der Kamera gemachte Videos sofort hoch Protokollierung aktivieren Dies wird zur Protokollierung von Problemen genutzt Protokollierungs-Historie @@ -58,17 +58,17 @@ Kalender & Kontakte synchronisieren DAVdroid (v1.3.0+) für aktuelles Konto einrichten Serveradresse des Kontos für die DAVdroid-Nutzung konnte nicht ermittelt werden - Weder Google Play Store noch F-Droid App installiert - Kalender- & Kontakte-Synchronisierung erfolgreich konfiguriert + Weder F-Droid noch Google-Play sind installiert + Kalender- & Adress-Synchronisation konfigurieren Hilfe - Empfehle dies einem Freund + Einem Freund empfehlen Rückmeldungen Impressum Geteilten Speicherort merken - Geteilten Upload-Speicherort merken + Zuletzt verwendeten, geteilten Upload-Speicherort merken Probiere %1$s auf Deinem Smartphone! - Ich empfehle Dir die Nutzung von %1$s auf Deinem Smartphone!\nLade es hier herunter: %2$s + "Ich empfehle Dir die Nutzung von %1$s auf Deinem Smartphone!\nLade es hier herunter: %2$s" Server überprüfen Server-Adresse https://… @@ -86,20 +86,21 @@ Keine Datei zum Hochladen %1$s kann einen Textteil als Datei hochladen Empfangene Daten enthalten keine gültige Datei. - Datei kann nicht hochgeladen werden + Diese Datei kan nicht hochgeladen werden %1$s darf eine empfangene Datei nicht lesen - Hochzuladende Datei wurde an ihrem Ort nicht gefunden. Prüfe, ob die Datei existiert. + Die zum Hochladen ausgewählte Datei kann nicht gefunden werden. Bitte prüfe ob die Datei existiert. + Es ist ein Fehler beim Kopieren dieser Datei in einen temporären Ordner aufgetreten. Bitte erneut versuchen die Datei zu senden. Upload Option: Datei in Nextcloud Ordner verschieben Hochladen und im Quellordner behalten Hochladen und Datei im Quellordner löschen Gerade eben - Keine Dateien vorhanden - Lade Inhalt hoch oder synchronisiere mit Deinen Geräten! - Favorisiere einige Dateien oder synchronisiere deine Geräte! + Keine Dateien vorhanden + Lade Inhalt hoch oder synchronisiere mit Deinen Geräten. + Favorisiere einige Dateien oder synchronisiere deine Geräte. Dateien und Ordner, die als Favoriten markiert werden, erscheinen hier - Keine favorisierten Dateien in deinem Verlauf gefunden! + Keine favorisierten Dateien in deinem Verlauf gefunden. Lade… Es wurde keine App für diesen Dateityp gefunden! Es befinden sich keine Dateien in diesem Ordner. @@ -110,19 +111,18 @@ Von dir geteilte Dateien und Ordner werden hier erscheinen Keine Videos Keine Fotos - Soll in einem anderen Ordner nachgesehen werden? + Vielleicht befindet es sich in einem anderen Ordner? Keine, innerhalb der letzten 7 Tage, geänderten Dateien gefunden - Keine Dateien in deinem Verlauf gefunden, - die in den letzten 7 Tagen geändert wurden! - Keine kürzlich hinzu gefügten Dateien gefunden - Keine kürzlich hinzu gefügten Dateien in deinem Verlauf gefunden! + Keine Dateien gefunden, die in den letzten 7 Tagen geändert wurden. + Keine kürzlich hinzugefügten Dateien gefunden + Keine kürzlich hinzu gefügten Dateien gefunden! Lade Fotos hoch oder aktiviere den Sofortupload! - Keine Fotos in deinem Verlauf gefunden! - Lade einige Videos hoch oder aktiviere den Sofortupload! - Keine Videos in deinem Verlauf gefunden! + Keine Fotos gefunden. + Lade einige Videos hoch oder aktiviere den Sofortupload. + Keine Videos gefunden. Keine Uploads verfügbar - Lade Inhalt hoch oder aktiviere den Sofortupload! - Lade Inhalt hoch oder aktiviere den Sofortupload! + Lade Inhalte hoch oder aktiviere den Sofortupload. + Lade Inhalte hoch oder aktiviere den Auto Upload! Ordner Ordner Datei @@ -134,14 +134,14 @@ Geändert: Herunterladen Synchronisation - Datei wurde wärend des Uploads in %1$s umbenannt + Datei während des Hochladens in %1$s umbenannt Layout der Liste Teilen Ja Nein OK Upload entfernen - Hochladen erneut versuchen + Versuche erneut hochzuladen Synchronisation abbrechen Abbrechen Zurück @@ -161,10 +161,10 @@ Ordnername Hochladen … %1$d%% Hochladen %2$s - Hochladen erfolgreich + Hochgeladen %1$s hochgeladen Hochladen fehlgeschlagen - Hochladen von %1$s konnte nicht abgeschlossen werden + Konnte %1$s nicht hochladen Hochladen fehlgeschlagen, erneute Anmeldung erforderlich Uploads Aktuell @@ -181,21 +181,21 @@ Lokale Datei nicht gefunden Berechtigungsfehler Konflikt - Die Anwendung wurde beendet + App beendet Unbekannter Fehler - Warten auf Drahtlos-Verbindung + Warte auf W-Lan-Verbindung Warte auf Hochladen Herunterladen … %1$d%% Herunterladen %2$s - Herunterladen erfolgreich + Heruntergeladen %1$s heruntergeladen Herunterladen fehlgeschlagen - Herunterladen von %1$s konnte nicht abgeschlossen werden + Konnte %1$s nicht herunterladen Noch nicht Heruntergeladen Herunterladen fehlgeschlagen, erneute Anmeldung erforderlich Konto auswählen Synchronisation fehlgeschlagen - Synchronisation fehlgeschlagen, erneute Anmeldung erforderlich. + Synchronisation fehlgeschlagen. Du mußt Dich erneut anmelden Synchronisation von %1$s konnte nicht abgeschlossen werden Falsches Passwort für %1$s Konflikte gefunden @@ -204,8 +204,8 @@ Inhalte von %1$d Dateien konnten nicht synchronisiert werden (%2$d Konflikte) Einige lokale Dateien wurden vergessen %1$d Dateien aus dem %2$s Verzeichnis konnten nicht kopiert werden nach - Seit Version 1.3.16 werden Dateien die von diesem Gerät aus hochgeladen werden in den lokalen Ordner %1$s kopiert um Datenverlust zu vermeiden, wenn eine einzelne Datei mit mehreren Accounts synchronisiert wird.\n\nInfolge dieser Änderung wurden alle Dateien, die mit vorherigen Versionen dieser App hochgeladen wurden, in den Ordner %2$s verschoben. Jedoch ist während der Konto-Synchronisation ein Fehler aufgetreten, der das Abschließen dieses Vorgangs verhindert hat. Die Datei(en) können entweder wie sie sind belassen und den Link zu %3$s entfernt werden oder die Datei(en) in den Ordner %1$s verschoben und den Link zu %4$s beibehalten werden.\n\nUnten befindet sich eine Liste der lokalen Datei(en) und der mit ihnen verbundenen Remote-Datei(en) in %5$s. - Das Verzeichnis %1$s existiert nicht mehr + Seit Version 1.3.16 werden Dateien die von diesem Gerät aus hochgeladen werden in den lokalen Ordner %1$s kopiert um Datenverlust zu vermeiden, wenn eine einzelne Datei mit mehreren Accounts synchronisiert wird.\n\nInfolge dieser Änderung wurden alle Dateien, die mit vorherigen Versionen dieser App hochgeladen wurden, in den Ordner %2$s verschoben. Jedoch ist während der Konto-Synchronisation ein Fehler aufgetreten, der das Abschließen dieses Vorgangs verhindert hat. Die Datei(en) können entweder wie sie sind belassen und den Link zu %3$s entfernt werden oder die Datei(en) in den Ordner %1$s verschoben und den Link zu %4$s beibehalten werden.\n\nUnten befindet sich eine Liste der lokalen Datei(en) und der mit ihnen verbundenen Remote-Datei(en) in %5$s. + Der Ordner %1$s existiert nicht mehr Verschiebe alle Alle Dateien wurden verschoben Einige Dateien konnten nicht verschoben werden @@ -229,12 +229,12 @@ %1$s Wiedergabe Beendet Keine Mediendatei gefunden Kein Konto angegeben - Datei ist nicht in einem gültigen Konto + Die Datei befindet sich nicht in einem gültigen Konto Medien-Codec wird nicht unterstützt - Mediendatei konnte nicht gelesen werden - Mediendatei nicht korrekt encodiert + Konnte die Mediendatei nicht lesen + Mediendatei ist nicht korrekt encodiert Wartezeit beim Abspielversuch abgelaufen - Mediendatei kann nicht gestreamt werden + Die Mediendatei kann nicht gestreamt werden Diese Mediendatei konnte nicht mit dem Standardplayer geöffnet werden Sicherheitsfehler beim Versuch %1$s wiederzugeben Eingabefehler beim Versuch %1$s wiederzugeben @@ -253,14 +253,14 @@ Ein Benutzerkonto für den gleichen Benutzer und Server existiert auf diesem Gerät bereits Der eingegebene Benutzer passt nicht zu dem Benutzer dieses Benutzerkontos Ein unbekannter Fehler ist aufgetreten! - Konnte den Host nicht finden. - Server-Installation nicht gefunden + Konnte den Host nicht finden + Server nicht gefunden Der Server braucht zu lange für eine Antwort. - falsches Server-Adress Format + Falsches Adress-Format für den Server SSL-Initialisierung fehlgeschlagen. SSL-Server-Identität konnte nicht überprüft werden Unbekannte Server-Version - Verbindung konnte nicht aufgebaut werden + Verbindung konnte nicht hergestellt werden Sichere Verbindung hergestellt Falscher Benutzername oder Passwort Autorisierung nicht erfolgreich @@ -285,7 +285,7 @@ Möchtest Du %1$s wirklich entfernen? Soll %1$s und dessen Inhalt wirklich entfernt werden? Nur lokal - Erfolgreich entfernt + Entfernt Entfernen fehlgeschlagen Gib einen neuen Namen ein Die lokale Kopie konnte nicht umbenannt werden. Versuche es mit einem anderen Namen. @@ -296,15 +296,15 @@ Verbotene Zeichen: / \\ < > : \" | ? * Der Dateiname enthält mindestens ein ungültiges Zeichen Dateiname darf nicht leer sein - Bitte warte einen Moment. + Bitte warten... Überprüfe gespeicherte Anmeldeinformationen Ein unerwartetes Problem ist aufgetreten. Bitte versuche, die Datei in einer anderen App zu öffnen - Es wurde keine Datei ausgewählt. + Keine Datei gewählt Link senden an … Kopiere Datei vom privatem Speicher Anmelden mit oAuth2 - Verbinde mit dem oAuth2-Server. + Verbinde mit dem oAuth2-Server... Die Identität der Website konnte nicht überprüft werden - Das Zertifikat des Servers ist nicht vertrauenswürdig @@ -341,11 +341,11 @@ 18.5.2012 12:23 12:23:45 - Nur über WLAN hochladen - Bilder nur über Wifi hochladen - Videos nur über Wifi hochladen - Hochladen nur während des Ladens - Hochladen nur während des Ladens + Nur über W-Lan hochladen + Bilder nur über W-Lan hochladen + Videos nur über W-Lan hochladen + Nur während des Ladens hochladen + Nur während des Ladens hochladen /SofortUpload Dateikonfilikt Welche Datei soll behalten werden? Wenn du beide Versionen wählst, wird der lokalen Datei eine Zahl am Ende des Dateinamens angefügt. @@ -353,7 +353,7 @@ Lokale Version Serverversion - Das tut mir leid! + Entschuldigung. Bildvorschau Bild kann nicht angezeigt werden @@ -364,7 +364,7 @@ Unterordner benutzen In Unterordnern speichern, basierend auf Jahr und Monat - Entschuldigung, das Teilen ist auf deinem Server nicht aktiviert. Bitte kontaktiere deinen Administrator. + Teilen ist auf Deinem Server nicht aktiviert. Bitte kontaktiere den Administrator. Teilen nicht möglich. Prüfe, ob die Datei existiert Es ist ein Fehler beim Freigeben der Datei oder des Ordners aufgetreten. Entfernen der Freigabe nicht möglich. Prüfe, dass die Datei existiert @@ -388,32 +388,33 @@ Es ist ein Fehler beim Warten auf den Server aufgetreten, die Operation konnte nicht abgeschlossen werden Es ist ein Fehler beim Warten auf den Server aufgetreten, die Operationkonnte nicht abgeschlossen werden Die Operation kann nicht abgeschlossen werden, der Server ist nicht erreichbar - Sie haben keine Berechtigung %s + + Dir fehlt die Erlaubnis %s diese Datei umzubenennen diese Datei zu löschen diese Datei zu teilen diese Datei nicht mehr zu teilen zum Aktualisieren dieser Freigabe - eine Datei zu erstellen - in diesen Order etwas hochzuladen + diese Datei zu erstellen + diesen Ordner hochzuladen Diese Datei steht auf dem Server nicht mehr zur Verfügung Aktualisiere Speicherort Beenden Bereite Migration vor… Prüfe Zielort… - Speichere Konteneinstellung… - Warte auf Abschluss der Synchronisierungen… + Sichere Konfiguration der Konten… + Warte auf die Fertigstellung der Synchronisationen… Verschiebe Dateien… Aktualisiere Index… Aufräumen… - Konteneinstellung wiederherstellen… + Konfiguration der Konten wiederherstellen… Abgeschlossen - FEHLER: Nicht genügend Speicherplatz + FEHLER: zu wenig Platz FEHLER: Datei kann nicht geschrieben werden - FEHLER: Datei nicht lesbar + FEHLER: Datei kann nicht gelesen werden FEHLER: Nextcloud Ordner existiert bereits - FEHLER: Während der Migration + FEHLER: Migration fehlgeschlagen FEHLER: Während der Aktualisierung des Indexes Datenordner existiert bereits, was soll geschehen? @@ -435,7 +436,7 @@ Falsches Passwort Verschieben Kopieren - Noch nichts vorhanden. Sie können einen Ordner hinzufügen! + Noch nichts vorhanden. Du kannst einen Ordner hinzufügen. Auswählen Verschieben nicht möglich. Prüfe, ob die Datei existiert @@ -454,7 +455,7 @@ sofort hochladen Details - Sofortupload-Video-Ordner + Video Speicherpfad wählen Bei der Synchronisation konnte %1$s Ordner nicht fertig gestellt werden geteilt @@ -556,7 +557,6 @@ An Chats teilnehmen auf IRC: <a href="%1$s">#nextcloud-mobile</a> Hilf anderen im <a href="%1$s">Forum</a> Die App <a href="%1$s">Übersetzen</a> - Als Entwickler einen Beitrag leisten, Details unter <a href="https://github.com/nextcloud/android/blob/master/CONTRIBUTING.md">CONTRIBUTING.md</a> Verschieben nach… Kopieren nach… Wähle Verzeichnis… @@ -564,7 +564,7 @@ Keine Medienverzeichnisse gefunden. Einstellungen Auto-Hochladen Einstellungen - Sofortiger Upload wurde vollständig überarbeitet. Bitte über das Hauptmenü zum Auto Upload gehen und neu configurieren. Bitte entschuldige die Unannehmlichkeiten.\n\nViel Vergnügen mit den neuen und erweiterten Möglichkeiten des Auto Uploads! + Sofortiger Upload wurde vollständig überarbeitet. Bitte über das Hauptmenü zum Auto Upload gehen und neu configurieren. Bitte entschuldige die Unannehmlichkeiten.\n\nViel Vergnügen mit den neuen und erweiterten Möglichkeiten des Auto Uploads. Für %1$s %d ausgewählt @@ -619,19 +619,19 @@ Bislang keine Aktivitäten - Dieser Stream zeigt Ereignisse wie\nHinzugekommenes, Änderungen & und Freigaben an + Dieser Stream zeigt Ereignisse wie\nHinzugekommenes, Änderungen und Freigaben an Fehler aufgetreten Über - Adressen-Sicherung + Kontakte-Sicherung Sicherung jetzt erstellen Letztes Backup wiederherstellen Wiederherstellen Sicherung Adressen-Sicherung Letzte Sicherung - Lese-Zugriffs-Erlaubnis für Adressen ist erforderlich - Schreib-Erlaubnis für Adressen ist erforderlich + Leseberechtigung auf Kontakte erforderlich + Schreibberechtigung auf Kontakte erforderlich Adressen wiederherstellen Ausgewählte Adressen wiederherstellen Konto für den Import auswählen @@ -644,6 +644,7 @@ Neue Benachrichtigung erhalten + Abmelden diff --git a/src/main/res/values-es-rMX/strings.xml b/src/main/res/values-es-rMX/strings.xml index 5fa58784b2..f5a72dc0e6 100644 --- a/src/main/res/values-es-rMX/strings.xml +++ b/src/main/res/values-es-rMX/strings.xml @@ -47,7 +47,7 @@ No se ha establecido ninguna huella digital. Mostrar archivos escondidos Carga instantánea de imágenes - Cargar instantáneamente las fotografías tomadas por la cámara + Cargar instantaneamente las fotografías tomadas por la cámara Carga instantánea de video Cargar instantáneamente los videos grabados por la cámara Habilitar registro @@ -58,23 +58,23 @@ Sincronizar calendario & contactos Configurar DAVdroid (v1.3.0+) para la cuenta actual La dirección del servidor para la cuenta no se pudo resolver para DAVdroid - No han instalado las aplicaciones Google Play store o F-Droid - El calendario & contactos se configuraron exitosamente + No ha sido instalado F-Droid o Google Play + Configuración de la sincronizacion del calendario & contactos Ayuda Recomendar a un amigo Retroalimentación Exención de responsabilidad Recordar la ubicación del elemento compartido - Recordar la última ubicación del elemento compartido cargado. + Recordar la ubicación del elemento compartido más recientemente usado Prueba  %1$s en tu teléfono inteligente! - ¡Quisiera invitarlo a usar %1$s en su teléfono inteligente!\\nDescargue aquí: %2$s + Quisiera invitarlo a usar %1$s en su teléfono inteligente\nDescargue aquí: %2$s Verficar el servidor Dirección del servidor https://… Nombre de usuario Contraseña - Aún no tiene un servidor? \nDa click aquí para obtener uno de un proveedor + Aún no tiene un servidor? \nHaga click aquí para obtener uno de un proveedor Archivos Conectar Cargar @@ -86,43 +86,43 @@ No hay un archivo para cargar %1$s no puede cargar una fragmento de texto como un archivo. La información recibida no contiene un archivo válido. - El archivo no se puede cargar + Este archivo no puede ser cargado %1$s no tiene permitido leer un archivo recibido - El archivo a cargar no ha sido encontrado en su ubicación. Favor de verificar si el archivo existe. - Se presentó un error al copiar el archivo a una carpeta temporal. Favor de intentar enviarlo de nuevo. + El archivo seleccionado para cargar no fue encontrado. Favor de verificar si el archivo existe. + No fue posible copiar el archivo a una carpeta temporal. Favor de intentar enviarlo de nuevo. Opción de carga: Mover el archivo a la carpeta de Nextcloud Mantener el archivo en la carpeta de origen Borrar el archivo de la carpeta de origen hace algunos segundos No hay archivos aquí - ¡Cargue algún contenido o sincronice con sus dispositivos! - ¡Marque algunos archivos como favoritos o sincronice con sus dispositivos! + Cargue algún contenido o sincronice con sus dispositivos. + Marque algunos archivos como favoritos o sincronice con sus dispositivos. Los archivos y carpetas que marque como favoritos se mostrarán aquí - ¡No se encontraron archivos marcados como favoritos en su consulta! + Su búsqueda no regresó archivos marcados como favoritos. Cargando… - ¡No se encontró una aplicación para este tipo de archivo! + No se cuenta con una aplicación que maneje este tipo de achivo. No hay archivos en esta carpeta No hay resultados en esta carpeta No hay resultados - Aún no hay favoritos + Aún no hay nada marcado como favorito Aún no hay nada compartido Los archivos y carpetas que comparta se mostrarán aquí. No hay videos No hay fotos - ¿Intentó buscar en otra carpeta? + ¿Tal vez está dentro de una carpeta diferente? No se encontraron archivos que hayan sido modificado en los últimos 7 días - ¡No se encontraron archivos para su búsqueda que hayan sido modificados -en los últimos 7 días! + Su búsqueda no encontró archivos que hayan sido modificados +en los últimos 7 días. No se encontraron archivos agregados recientemente - ¡No se encontraron archivos agregados recientemente para su consulta! - ¡Cargue algunas fotos o active la carga automática! - ¡Ninguna foto fue encontrada para su búsqueda! - ¡Cargue algunos videos o active la carga automática! - ¡No se encontraron videos para su búsqueda! + Su búsqueda no encontró archivos recientemente agregados. + Cargue algunas fotos o active la carga automática. + Su búsqueda no encontró fotografías. + Cargue algunos videos o active la carga automática. + Su búsqueda no encontró videos. No hay cargas disponibles - ¡Cargue nuevo contenido o active la carga instantánea! - ¡Cargue algún contenido o active la carga automática! + Cargue algún contenido o active la carga instantánea + Cargue algún contenido o active la carga automática carpeta carpetas archivo @@ -135,7 +135,7 @@ en los últimos 7 días! Descargar Sincronizar El archivo se renombró como %1$s durante la carga - Vista de lista + Vista enlistada Compartir No @@ -161,10 +161,10 @@ en los últimos 7 días! Nombre de la carpeta Cargando … %1$d%% Cargando %2$s - Carga exitosa + Cargado %1$s cargado Falla en la carga - La carga de %1$s no pudo ser completada + No fue posible cargar %1$s Falla en la carga, necesita autenticarse de nuevo Cargas Actual @@ -181,22 +181,22 @@ en los últimos 7 días! No se encontró el archivo local Error de permisos Conflicto - La aplicación ha cerrado inesperadamente + La aplicación ha sido terminada Error desconocido - Esperando conexión Wi-Fi + Aguardando conectividad Wi-Fi Esperando para cargar Descargando … %1$d%% Descargando %2$s - Descarga exitosa + Descargado %1$s descargado Falla en la descarga - La descarga de %1$s no pudo ser completada + No fue posible descargar %1$s Aún no ha descargado Falla en la descarga, necesita ingresar a su cuenta de nuevo Elija una cuenta Falla en la sincronización - Falla en la sincronización; necesita ingresal a su cuenta de nuevo - La sincronización de %1$s no pudo ser completada + Falla en la sincronización, necesita volver a inicar sesión + No fue posible completar la sincronización de %1$s Contraseña inválida para %1$s Se encontraron conflictos %1$d archivos mantenidos-en-sincronización no pudieron ser sinconizados @@ -204,14 +204,14 @@ en los últimos 7 días! El contenido de%1$d archivos no pudo ser sincronizado (%2$d conflictos) Algunos archivos locales se han perdido %1$d archivos de la carpeta %2$s no pudieron ser copiadas - A partir de la versión 1.3.16, los archivos cargados desde este dispositivo son copiados a la carpeta local %1$s para prevenir pérdidas de datos cuando un archivo es sincronizado entre cuentas múltiples.\n\nDebido a este cambio, todos los archivos subidos en versiones anteriores de esta aplicación fueron copiadas a la carpeta %2$s. Sin embargo, un error evitó completar esta operación durante la sincronización de la cuenta. Usted puede dejar el(los) archivo(s) como están y eliminar la liga a %3$s, o bien mover el(los) archivo(s) a la carpeta %1$s y mantener la liga a %4$s.\n\nSe enlistan a continuación los archivos locales y remotos en %5$s a donde estaban ligados. - La carpeta %1$s ya no existe. + A partir de la versión 1.3.16, los archivos cargados desde este dispositivo son copiados a la carpeta local %1$s para prevenir perdidas de datos cuando un archivo se sincroniza entre múltiples cuentas. \n\nDervado de este cambio, todos los archivos cargados con versiones anteriores de la aplicación fueron copiados a la carpeta %2$s. Sin embargo, un error evitó que se completara esta operación durante la sincronizacion de la cuenta. Usted puede dejar el(los) archivo(s) como está(n) y eliminar la liga a %3$s, o bine, mover el(los) archivo(s) a la carpeta %1$s y mantener la liga a%4$s.\n\nSe enlistan a continuación los archivos locales asi como los archivos remotos en %5$s a donde estaban ligados. + La carpeta %1$s ya no existe Mover todo Todos los archivos fueron movidos Algunos archivos no puderon ser movidos Local: %1$s Remoto: %1$s - No hay suficiente espacio para copair los archivos seleccionados a la carpeta %1$s. Le gustaría moverlos? + El espacio insuficiente evita que se copien los archivos seleccionados dentro de la carpeta %1$s. ¿Le gustaría moverlos ahí en su lugar? Favor de ingresar su código de seguridad Ingrese su código de seguridad @@ -229,15 +229,15 @@ en los últimos 7 días! %1$s reproducción finalizada No se encontró el archivo No se ha proporcionado una cuenta - No se ha encontrado el archivo en una cuenta válida + El archivo no está en una cuenta válida Codec no soportado - El archivo no ha podido ser leído - El archivo no ha sido codificado correctamente - Tiempo de espera expirado al intentar reproducir - Archivo de medio no puede ser transmitido como flujo - El archivo de medios no se puede reproducir con el reproductor predeterminado + No fue posible leer el archivo de medios + El archivo de medios tiene una codificacion incorrecta + El intento de reproducir el archivo agotó el tiempo de espera. + Archivo de medio no puede ser transformado a un flujo + El reproductor predeterminado no puede reproducir el archivo de medios Se presentó un error de seguridad al intentar reproducir %1$s - Se presentó un error en la entrada de datos al intentar reproducir %1$s + Se presentó un error de entrada al intentar reproducir %1$s Se presentó un error inesperado al intentar reproducir %1$s Botón de rebobinar Botón de reproducir o pausar @@ -250,13 +250,13 @@ en los últimos 7 días! Conexión establecida Probando conexión La configuración del servidor está mal formada. - Una cuenta para el mismo usuario y servidor ya existe en el dispositivo + Ya existe una cuenta en el dispositivo para el mismo usuario y servidor El usuario ingresado no corresponde con el usuario de esta cuenta ¡Se presentó un error desconocido! No fue posible encontrar el servidor - No se encontró la instancia del servidor + El servidor no se encontró El servidor tardó demasiado en responder - Formato de dirección del servidor erróneo + El formato de dirección para el servidor es erróneo Falla en la inicialización de SSL No fue posible verificar la identidad del servidor SSL Versión del servidor no reconocida @@ -265,14 +265,14 @@ en los últimos 7 días! Nombre de usuario o contraseña incorrecto Autorización no exitosa Acceso denegado por el servidor de autorización - Estado inesperado; Favor de reingresar la dirección del servidor + Estado inesperado, favor de reingresar la dirección del servidor Su autorización ha expirado. Favor de volver a autorizar Por favor ingrese su contraseña actual Su sesión ha expirado. Favor de conectarse de nuevo - Conectando al servidor de autenticación ... + Conectando al servidor de autenticación... El servidor no soporta este método de autenticación %1$s no soporta cuentas múltiples - El servidor no está regresando un Id de usuario correcto, favor de contactar al adminitrador + Su servidor no está regresando un ID de usuario correcto, favor de contactar al adminitrador No es posible autenticarse en este servidor La cuenta aún no existe en el dispositivo @@ -285,26 +285,26 @@ en los últimos 7 días! ¿Realmente desea eliminar %1$s? ¿Desea realmente eliminar %1$s y sus contenidos? Sólo local - Eliminado exitosamente + Eliminado Falla al eliminar Ingrese un nombre nuevo - No ha sido posible cambiar el nombre de la copia local, intente ingresar un nombre differente - No se pudo completar el renombrado - El archivo remoto no pudo ser verificado + No fue posible renombar la copia local, intente con un nombre diferente + No fue posible renombrar el servidor + No fue posible verificar el archivo remoto Los contenidos del archivo ya han sido sincronizados - La carpeta no pudo ser creada + No fue posible crear la carpeta Caracteres inválidos: / \\ < > : \" | ? * El nombre del archivo contiene al menos un caracter inválido. El nombre del archivo no puede estar vacío - Espere un momento + Espere un momento... Verificando credenciales almacenadas - Problema inesperado; favor de seleccionar el archivo de una aplicación diferente  - No se ha seleccionado un archivo + Problema inesperado, favor de seleccionar el archivo desde una aplicación diferente + No se ha seleccionado algún archivo Enviar la liga a … Copiando el archivo desde almacenamiento privado Iniciar sesión con oAuth2 - Conectando al servidor oAuth2... + Conectando al servidor OAuth 2... La identidad del sitio no pudo ser verificada - El certificado del servidor no es de confianza @@ -312,7 +312,7 @@ en los últimos 7 días! - Las fechas del certificado del servidor están en el futuro - La URL no corresponde con el nombre del servidor en el certificado ¿Desea confiar en este certificado de todas formas? - El certificado no pudo ser guardado + No fue posible guardar el certificado Detalles Ocultar Emitido para: @@ -341,9 +341,9 @@ en los últimos 7 días! 2012/05/18 12:23 PM 12:23:45 - Cargar sólo mediante WiFi - Cargar imágenes a través de WiFi únicamente - Cargar videos a través de WiFi únicamente + Cargar sólo mediante Wi-Fi + Cargar imágenes sólo a través de Wi-Fi + Cargar videos sólo a través de Wi-Fi Cargar archivos sólo con el dispositivo conectado a la toma de corriente Cargar archivos sólo con el dispositivo conectado a la toma de corriente /CargasInstantáneas @@ -353,9 +353,9 @@ en los últimos 7 días! versión local versión de servidor - ¡Disculpas por eso! + Disculpe. Vista previa de imagen - La imagen no puede ser mostrada + No es posible mostrar la imagen %1$s no pudo ser copiado a la carpeta local %2$s Carpeta de carga instantánea @@ -364,7 +364,7 @@ en los últimos 7 días! Usar sub carpetas Almacenar en sub carpetas con base en el año y mes - Lo sentimos, no se permite compartir en su servidor. Favor de contactar a su adminstrador. + No se permite compartir en su servidor. Favor de contactar a su adminstrador. No fue posible compartir. Favor de revisar si el archivo existe Se presentó un error al trtatar de compartir este archivo o carpeta Falla al dejar de compartir. Favor de revisar si existe el archivo @@ -382,52 +382,53 @@ en los últimos 7 días! Se presentó un error inesperado al copiar al portapapeles Texto copiado desde %1$s - Error crítico: no se pueden realizar operaciones + Error crítico: No se pueden realizar operaciones - Se presentó un error al conectarse con el servidor - Se presentó un error al esperar respuesta del servidor; la operación no pudo ser completada - Se presentó un error al esperar respuesta del servidor; la operación no pudo ser completada - La operación no pudo ser completada; el servidor no está disponible - Usted no cuenta con los permisos %s + Se presentó un error durante la conexión alel servidor. + Se presentó un error al esperar respuesta del servidor. La operación no pudo ser completada. + Se presentó un error al esperar respuesta del servidor La operación no pudo ser completada. + La operación no pudo ser completada. El servidor no está disponible + + No se le permite %s para renombrar este archivo para borrar este archivo para compartir este archivo para dejar de compartir este archivo para actualizar este recurso compartido para crear el archivo - para cargar esta carpeta + para cargar a esta carpeta El archivo ya no se encuentra disponible en el servidor Actualizando la ruta de almacenamiento Terminar - Preparando para la migración… + Preparando la migración… Verificando el destino… Guardando la configuración de las cuentas… - En espera de las sincronizaciones incompletas… + Esperando que todas las sincronizaciones terminen… Moviendo información… Actualizando índice… Limpiando… - Restaurando configuración de cuentas… + Guardando la configuración de las cuentas… Terminado - ERROR: No cuenta con espacio suficiente - ERROR: El archivo no se puede escribir + ERROR: Espacio insuficiente + ERROR: No se puede escribir el archivo ERROR: El archivo no se puede leer ERROR: El directorio de Nextcloud ya existe - ERROR: Durante la migración - ERROR: Durante la actualización del índice + ERROR: Falla durante la migración + ERROR: Falla durante la actualización del índice - La carpeta de datos ya existe. ¿Qué desa hacer? - Anular - Usar existente + La carpeta de datos ya existe. Elija una de las siguientes: + Remplazar + Usar Cuentas Agregar cuenta Administrar cuentas - La conexión segura se está redirigiendo a través de una ruta insegura + La conexión segura se está redirigiendo a través de una ruta insegura. Registros Enviar histórico - No se cuenta con una aplicación para el envío de bitácoras. Favor de instalar una aplicación de correo electrónico. + No se encontró alguna aplicación para el envío de bitácoras. Favor de instalar un cliente de correo electrónico.  %1$s bitácora de aplicación Android Cargando información … @@ -435,10 +436,10 @@ en los últimos 7 días! Contraseña incorrecta Mover Copiar - No hay nada aquí. ¡Puede agregar una carpeta! + No hay nada aquí. Puede agregar una carpeta. Seleccionar - Falla al mover. Favor de revisar si el archivo existe + No fue posible mover el archivo. Favor de verificar si existe. No es posible mover una carpeta dentro de una de sus sub carpetas El archivo ya existe en la carpeta de destino Se presentó un error al intentar mover este archivo o carpeta @@ -512,7 +513,7 @@ en los últimos 7 días! %1$s (correo electrónico) %1$s ( a las %2$s ) - Lo sentimos, su versión del servidor no permite compartir con usuarios entre clientes.\nFavor de contactar a su adminsitrador + Actualice la versión del servidor para permitir compartir entre usuarios desde dentro de sus clientes.\nFavor de contactar a su adminsitrador puede compartir puede editar crear @@ -521,42 +522,42 @@ en los últimos 7 días! Dejar de compartir terminado - Falla en el reintento + El reintento falló Borrar fallidos - Borrar exitosos - Borrar todos + Borrados + Borrar cargas terminadas Vista de cuadrícula Vista de lista Administrar espacio - Los ajustes, base de datos y certificados del servior de %1$s serán borrados permanentemente.\n\nLos archivos descargados se mantendrán sin cambios.\n\nEste proceso puede tomar algo de tiempo. + Los ajustes, base de datos y certificados del servior de los datos de %1$s serán borrados permanentemente.\n\nLos archivos descargados se mantendrán sin cambios.\n\nEste proceso puede tomar algo de tiempo. Borrar datos No fue posible borrar algunos archivos - Se requieren permisos adicionales para cargar & descargar archivos. - No se encontró el archivo en el disco local + Se requieren permisos adicionales para cargar y descargar archivos. + No se encontró el archivo en sistema de archivos local ¿Realmente desea eliminar los elementos seleccionados? ¿Realmente desea eliminar los elementos seleccionados y su contenido? - Esperando la regarga del dispositivo + Aguardando la regarga del dispositivo Buscar Esta es una característica de Nextcloud, favor de actualizar. Conozca más Carga automática Participe - Ayúdenos a probar + Ayúdenos probando ¿Encontró una falla? ¿Hay algo raro? Reportar un tema en Github - ¿Le interesaría ayudarnos a probar la siguiente Versión? + ¿Le interesaría ayudarnos a probar la siguiente versión? Probar la versión de desarrollo - Esto incluye todas las próximas características y es lo más nuevo. Fallas/errores pueden ocurrir y si es el caso, favor de reportarnoslos. + Esto incluye todas las últimas funcionalidades y es lo más nuevo. Fallas/errores pueden ocurrir y si es el caso, favor de reportarnoslos.  Candidato a lanzamiento - El candidato a lanzamiento (CL) es una foto del más próximo lanzamiento y se espera que sea estable. Las pruebas a su configuración individual podría ayudarnos a asegurar esto. Regístrese para hacer pruebas en la Play Store o consulte directamente la sección de  \"versiones\" en F-Droid. + El candidato a lanzamiento (CL) es una foto del más próximo lanzamiento y se espera que sea estable. Las pruebas a su configuración individual podrían ayudarnos a asegurar esto. Regístrese para hacer pruebas en la Play Store o consulte directamente la sección de \"versiones\" en F-Droid. Contribuya activamente Únase a las conversaciones en IRC: <a href=\"%1$s\">#nextcloud-mobile</a> Ayude a los demás en el <a href=\"%1$s\">foro</a> <a href=\"%1$s\">Traduzca</a> la aplicación - Contribuya como desarrollador, consulte <a href=\"https://github.com/nextcloud/android/blob/master/CONTRIBUTING.md\">CONTRIBUIR.md</a> para más detalles + Revise, corrija y escriba código, consulte <a href=\"https://github.com/nextcloud/android/blob/master/CONTRIBUTING.md\">CONTRIBUIR.md</a> para más detalles Mover a… Copiar a… Seleccione la carpeta… @@ -564,7 +565,7 @@ en los últimos 7 días! No se encontraron carpetas de medios Preferencias de carga automática Ajustes - La carga instantánea ha sido completamente moderinzada. Favor de ver el menú principal y reconfigurar sus cargas automáticas. Disculpenos por los inconvenientes. \n\nDisfrute de las nuevas y extendidas capacidades de cargas automáticas. + La carga instantánea ha sido completamente moderinzada. Reconfigure su carga automática desde el menu principal. \n\nDisfrute de las nuevas y extendidas capacidades de la carga automática. Para %1$s %d seleccionado @@ -578,7 +579,7 @@ en los últimos 7 días! No hay notificaciones Favor de verificar más tarde. - Ingrese el nombre del archivo y el tipo del archivo a cargar + Ingrese el nombre y el tipo del archivo a cargar Nombre de archivo Tipo de archivo Archivo snippet de texto(.txt) @@ -594,7 +595,7 @@ en los últimos 7 días! Un lugar seguro para todos sus datos - Acceda, comparta  & proteja todos sus archivos de casa y de su empresa + Acceda, comparta y proteja sus archivos en casa y la oficina Multi cuenta Conéctese a todas sus nubes @@ -619,23 +620,23 @@ en los últimos 7 días! Aún no hay actividades - Este flujo le mostrará eventos tales como \nagregados, cambios & compartidos + Este flujo le mostrará eventos tales como \nagregados, cambios & elementos compartidos Se presentó un error Acerca de - Respaldo de contactos - Respaldar ahora + Respaldar contactos + Ahora Restaurar el último respaldo Restaurar Respaldar Respaldo de contactos Último respaldo - Se requieren permisos de lectura para los contactos - Se requieren permisos de escritura para los contactos + Se requiere el permiso para leer la lista de contactos + Se requiere el permiso para cambiar la lista de contactos Restaurar contactos Restaurar los contactos seleccionados - Seleccione la cuenta para importar - ¡Sin permisos, nada ha sido importado! + Seleccione la cuenta a importar + ¡No se otorgaron permisos, nada fue importado! Seleccione una fecha nunca No se encontraron archivos @@ -644,6 +645,7 @@ en los últimos 7 días! No se han recibido nuevas notificaciones + Salir de la sesión diff --git a/src/main/res/values-fr/strings.xml b/src/main/res/values-fr/strings.xml index 643830614f..c92329dbf4 100644 --- a/src/main/res/values-fr/strings.xml +++ b/src/main/res/values-fr/strings.xml @@ -46,10 +46,10 @@ Verrouillage par empreinte digitale Aucune empreinte digitale n\'a été installée. Afficher les fichiers masqués - Téléversement immédiat des photos - Téléverser immédiatement les photos prises par la caméra - Téléversement immédiat des vidéos - Téléverser immédiatement les vidéos prises par la caméra + Téléversements immédiats de photos + Téléverser immédiatement les photos prises par l\'appareil photo + Téléversements immédiats de vidéos + Téléverser immédiatement les vidéos prises par l\'appareil photo Activer la journalisation Cela est utilisé pour la journalisation des problèmes Historique de la journalisation @@ -58,23 +58,15 @@ Configurer la synchronisation de l\'agenda et des contacts Configurer DAVdroid (v1.3.0+) pour le compte actuel Une adresse de serveur pour le compte pourrait ne pas être résolue par DAVdroid - Aucune application Google Play store ou F-Droid installée - La synchronisation de l\'agenda & des contacts a bien été configurée. Aide Recommander à un ami Nous contacter par mail Mentions - Mémoriser l\'emplacement de partage - Mémoriser le dernier emplacement de téléversement - - Essayez %1$s sur votre smartphone ! - J\'aimerais vous inviter à utiliser %1$s sur votre smartphone !\nTéléchargez-le ici : %2$s. - - Vérifier le serveur + Essayez %1$s sur votre smartphone ! + Vérifier le serveur Adresse du serveur https://… Nom d\'utilisateur Mot de passe - Vous n\'avez pas encore un serveur ?\nCliquez ici pour en obtenir un d\'un fournisseur Fichiers Connecter Téléverser @@ -86,43 +78,21 @@ Aucun fichier à téléverser %1$s ne peut téléverser un morceau de texte comme un fichier. Les données reçues n\'incluent aucun fichier valide - Le fichier ne peut pas être téléversé %1$s n\'est pas autorisé à lire un fichier reçu - Le fichier à téléverser n\'a pas été trouvé dans son emplacement. Merci de vérifier si ce fichier existe. - Une erreur est survenue lors de la copie du fichier vers un dossier temporaire. Merci de recommencer votre envoi. Option de téléversement : Déplacer le fichier dans le dossier Nextcloud Conserver le fichier dans le dossier original Supprimer le fichier du dossier original à l\'instant - Aucun fichier - Déposez du contenu ou synchronisez vos appareils ! - Mettez certains fichiers en favoris ou synchronisez vos appareils ! - Les fichiers et dossiers ajoutés à vos favoris apparaîtront ici - Auncun fichier mis en favori trouvé qui correspond à votre requête ! Chargement… - Aucune application trouvée pour ce type de fichier ! Aucun fichier n\'est présent dans ce dossier. Aucun résultat dans ce dossier Aucun résultat - Aucun favoris pour l\'instant Rien n\'est partagé pour l\'instant Les fichiers et dossiers que vous partagez apparaîtront ici Aucune vidéo Aucune photo - Essayez de chercher dans un autre dossier ? - Aucun fichier modifié au cours des 7 derniers jours trouvé - Aucun fichier trouvé qui correspond à votre requête qui a été modifié - durant les 7 derniers jours ! - Auncun fichier ajouté récemment trouvé - Auncun fichier ajouté récemment trouvé qui correspond à votre requête ! - Téléversez des photos ou activez le téléversement automatique ! - Aucune photo trouvée qui correspond à votre requête ! - Téléversez des vidéos ou activez le téléversement automatique ! - Aucune vidéo trouvée qui correspond à votre requête ! Aucun historique de téléversement - Téléversez du contenu ou activez le téléversement instantané ! - Téléversez du contenu ou activez le téléversement instantané ! dossier dossiers fichier @@ -134,14 +104,11 @@ Modifié le : Télécharger Synchroniser - Le fichier a été renommé en %1$s pendant le téléversement - Affichage en liste Partager Oui Non OK Retirer le téléversement - Réessayer le téléversement Annuler la synchronisation Annuler Retour @@ -161,10 +128,8 @@ Nom du dossier Téléversement… Téléversement de %2$s : %1$d%% - Envoi terminé %1$s téléversé Échec du téléversement - Le téléversement de %1$s a échoué Le téléversement a échoué, vous devez vous reconnecter Historique des envois Actuellement @@ -181,37 +146,27 @@ Fichier local non trouvé Erreur de permissions Conflit - L\'application a été arrêtée Erreur inconnue - En attente d\'une connexion wifi En attente de téléversement Téléchargement en cours… Téléchargement de %2$s : %1$d%% effectués - Réception terminée %1$s téléchargé Le téléchargement a échoué - Le téléchargement de %1$s a échoué Pas encore téléchargé Le téléchargement a échoué, vous devez vous reconnecter Choisissez un compte La synchronisation a échoué - La synchronisation a échoué, vous devez vous reconnecter - La synchronisation de %1$s a échoué - Mot de passe invalide pour %1$s Des conflits ont été trouvés %1$d fichiers à garder synchronisés n\'ont pu être synchronisés La synchronisation des fichiers a échoué Le contenu de %1$d fichiers n\'a pu être synchronisé (%2$d conflits) Certains fichiers locaux ont été oubliés %1$d fichiers du dossier %2$s n\'ont pas pu être copiés dans - Depuis la version 1.3.16, les fichiers envoyés depuis cet appareil sont copiés dans le dossier local %1$s pour éviter une perte de données lorsqu\'un même fichier est synchronisé avec plusieurs comptes.\n\nEn raison de cette modification, tous les fichiers envoyés avec des versions antérieures de cette application ont été copiés dans le dossier %2$s. Cependant, une erreur a empêché l\'achèvement de cette opération pendant la synchronisation du compte. Vous pouvez soit laisser les fichiers tels quels et supprimer le lien vers %3$s, soit déplacer les fichiers dans le dossier %1$s et garder le lien vers %4$s.\n\nCi-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxquels ils étaient liés. - Le dossier %1$s n\'existe plus Tout déplacer Tous les fichiers ont été déplacés Certains fichiers n\'ont pu être déplacés Local : %1$s Distant : %1$s - Il n\'y a pas assez d\'espace pour copier les fichiers sélectionnés dans le dossier %1$s. Souhaitez-vous plutôt les déplacer ? Veuillez saisir votre code de sécurité Saisissez votre code de sécurité @@ -229,16 +184,7 @@ Lecture de %1$s terminée Aucun fichier média trouvé Aucun compte fourni - Le fichier n\'est pas dans un compte valide Le codec de ce média n\'est pas pris en charge - Le fichier média ne peut pas être lu - Le fichier média n\'est pas correctement encodé - Délai dépassé pour la lecture du morceau - Le fichier média ne peut pas être diffusé - Le fichier média ne peut être lu avec le lecteur intégré - Erreur de sécurité à la lecture de %1$s - Erreur d\'entrée à la lecture de %1$s - Erreur inattendue à la lecture de %1$s Bouton de rembobinage Bouton de lecture ou de pause Bouton d\'avance rapide @@ -250,32 +196,21 @@ Connexion établie Test de connexion en cours Configuration du serveur erronée - Un compte pour les mêmes utilisateur et serveur existe déjà sur cet appareil L\'utilisateur saisi ne correspond pas à l\'utilisateur de ce compte Une erreur inconnue s\'est produite ! - Impossible de trouver l\'hôte - Aucune instance du serveur n\'a été trouvée Le serveur a pris trop de temps à répondre - Adresse du serveur non valable Échec de l\'initialisation SSL - Impossible de vérifier l\'identité du serveur SSL La version du serveur n\'est pas reconnue - Impossible d\'établir la connexion Connexion sécurisée établie Nom d\'utilisateur ou mot de passe incorrect Échec d\'autorisation Accès refusé par le serveur d\'autorisation - Problème inattendu ; veuillez saisir à nouveau l\'adresse du serveur Votre autorisation a expiré. Merci de vous authentifier à nouveau Veuillez saisir le mot de passe actuel Votre session a expiré. Merci de vous reconnecter - Connexion au serveur d\'authentification… Le serveur ne prend pas en charge cette méthode d\'authentification %1$s ne prend pas en charge les comptes multiples - Votre serveur a retourné un identifiant d\'utilisateur incorrect. Veuillez contacter un administrateur Impossible de s\'authentifier sur ce serveur - Le compte n\'existe pas encore sur ce périphérique - Rendre disponible hors-ligne Ne plus rendre disponible hors-ligne Mettre en favori @@ -283,36 +218,24 @@ Renommer Supprimer Voulez-vous vraiment supprimer %1$s ? - Voulez-vous vraiment supprimer %1$s et ses contenus ? Local seulement - Suppression terminée avec succès Échec de la suppression Entrez un nouveau nom - La version locale ne peut être renommée ; veuillez réessayer avec un nom différent - Échec du renommage - Le fichier distant n\'a pu être vérifié Le contenu du fichier est déjà synchronisé - Le dossier n\'a pas pu être créé Caractères interdits : / \\ < > : \" | ? * Le nom de fichier contient au moins un caractère invalide Le nom du fichier ne peut pas être vide - Veuillez patienter Vérification des identifiants enregistrés - Problème inattendu ; veuillez sélectionner le fichier depuis une autre application - Aucun fichier n\'était sélectionné Envoyer le lien vers … Copie du fichier depuis le stockage privé Connexion avec oAuth2 - Connexion au serveur oAuth2… - L\'identité du site ne peut être vérifiée - Le certificat du serveur n\'est pas sûr - Le certificat du serveur a expiré - Le certificat du serveur n\'est pas encore valide - L\'URL ne correspond pas au nom d\'hôte du certificat Voulez-vous tout de même faire confiance à ce certificat ? - Impossible de sauvegarder le certificat Détails Masquer Délivré à : @@ -336,27 +259,17 @@ Ceci est un espace réservé placeholder.txt - Image PNG 389 Ko 18/05/2012 12:23 PM 12:23:45 - Téléverse par wifi uniquement - Téléverser les images via une connexion WiFi uniquement - Téléverser les images via une connexion WiFi uniquement - Téléverser les images uniquement si le chargeur est branché - Téléverser les images uniquement si le chargeur est branché /InstantUpload Conflit de fichiers - Quels fichiers voulez-vous conserver ? Si vous sélectionnez les deux, un chiffre sera ajouté au nom du fichier local. Conserver les deux version locale version serveur - Désolé à propos de cela ! Prévisualisation de l\'image - L\'image ne peut pas être affichée - %1$s n\'a pas pu être copié dans le dossier local %2$s Téléversement immédiat du dossier Dossier local @@ -364,7 +277,6 @@ Utiliser des sous-dossiers Stocker dans des sous-dossiers basés sur années et mois - Désolé, le partage n\'est pas disponible sur votre serveur. Veuillez contacter votre administrateur. Impossible de partager. Vérifiez que le fichier est bien présent Une erreur est survenue lors de la tentative de partage de ce fichier ou répertoire Impossible de supprimer le partage. Vérifiez que le fichier est bien présent @@ -378,56 +290,29 @@ Copier le lien Copié dans le presse-papier - Aucun texte n\'a été reçu pour copier dans le presse-papier Erreur inattendue lors de la copie vers le presse-papiers Texte copié depuis %1$s - Erreur critique : impossible de réaliser les opérations - - Une erreur est survenue pendant la connexion au serveur. - Une erreur est survenue pendant l\'attente du serveur. L\'opération n\'a pas pu être effectuée - Une erreur est survenue pendant l\'attente du serveur. L\'opération n\'a pas pu être effectuée - Impossible de réaliser l\'opération, le serveur n\'est pas accessible. - Vous n\'avez pas la permission %s de renommer ce fichier de supprimer ce fichier de partager ce fichier de cesser le partage de ce fichier de modifier ce partage - de créer ce fichier - de téléverser dans ce dossier Ce fichier n’est plus disponible sur le serveur Mise à jour du chemin de stockage Terminer - Préparation pour la migration… Vérification de la destination… - Enregistrement de la configuration des comptes… - En attente des synchronisations non terminées… Déplacement des données… Mise à jour des indexes… Nettoyage… - Restauration de la configuration des comptes… Terminé - ERREUR : Espace insufisant - ERREUR : Le fichier n\'est pas modifiable - ERREUR : Le fichier est illisible ERREUR : Le dossier Nextcloud existe déjà - ERREUR : Lors de la migration - ERREUR : Lors de la mise à jour de l\'index - - Le dossier de données existe déjà, que souhaitez-vous faire ? - Écraser - Conserver le dossier actuel - Comptes Ajouter un compte Gérer les comptes - Le connexion sécurisée est redirigée vers une route non-sécurisée. - - Journaux + Journaux Envoyer le journal - Aucune application n\'a été trouvée pour envoyer les journaux. Merci d\'installer une application de messagerie. Journaux de l\'application Android %1$s Chargement des données … @@ -435,27 +320,20 @@ Mot de passe incorrect Déplacer Copier - Il n\'y a rien ici. Vous pouvez ajouter un dossier ! Valider - Impossible de déplacer. Vérifiez que le fichier existe - Il n\'est pas possible de déplacer un dossier vers un de ses descendants - Le fichier existe déjà dans le dossier de destination Une erreur est survenue lors de la tentative de déplacement de ce fichier ou dossier de déplacer ce fichier Impossible de copier. Vérifiez que le fichier existe - Il n\'est pas possible de copier un dossier vers un de ses descendants - Le fichier existe déjà dans le dossier de destination Une erreur est survenue lors de la copie de ce fichier ou dossier de copier ce fichier Téléversement immédiat Propriétés - Téléversement immédiat du dossier vidéos - La synchronisation du dossier %1$s n\'a pas pu être terminée + La synchronisation du dossier %1$s n\'a pas pu être terminée a partagé avec vous @@ -496,7 +374,6 @@ Ajouter un Utilisateur ou un Groupe Partager par lien public Indiquer une date d\'expiration - Protéger par un mot de passe Sécurisé Permettre la modification Masquer la liste des fichiers @@ -512,7 +389,6 @@ %1$s (courriel) %1$s (sur %2$s) - Désolé, la version de votre serveur ne permet pas aux applications d\'initier des partages avec d\'autres utilisateurs.\nVeuillez contacter votre administrateur peut partager peut modifier création @@ -521,50 +397,34 @@ Terminer le partage Terminé - Relancer les échoués Effacer les échoués - Effacer les envoyés - Effacer tous les terminés - Affichage Mosaïque Affichage Liste Gestion de l\'espace - Les paramètres, la base de données et les certificats du serveur provenant de %1$s seront définitivement effacés. \n\nLes fichiers téléchargés ne seront pas impactés.\n\nCette opération peut prendre du temps. Effacer les données Certains fichiers n\'ont pu être supprimés. - Des permissions supplémentaires sont exigées pour téléverser & télécharger des fichiers. - Le fichier n\'a pas été trouvé sur le système de fichier local Voulez-vous vraiment supprimer les éléments sélectionnés ? Voulez-vous vraiment supprimer les éléments sélectionnés et leurs contenus ? - En attente de recharge de l\'appareil Rechercher Il s\'agit d\'une fonctionnalité de Nextcloud ; veuillez mettre à jour.. En apprendre plus Téléversement automatique Participer - Aidez-nous à améliorer Nextcloud - Vous avez trouvé un bug ? Quelque chose vous semble étrange ? Signaler un problème sur Github - Vous avez envie de nous aider en testant les futures versions ? Testez la version Bêta - La version Beta inclut les dernières fonctionnalités qui sont encore toutes fraîches. Des erreurs peuvent se produire et si c\'est le cas, merci de nous les signaler. Testez la version Release Candidate - La version « release candidate » (RC) est un instantanné de la dernière version supposée stable. Le test de votre configuration pourrait nous aider à nous assurer que cette version est entièrement stable. Inscrivez vous pour être testeur sur le Play store ou allez jeter un œil dans la section \"versions\" de F-Droid. Participez activement Rejoignez la discussion sur IRC <a href=\"%1$s\">#nextcloud-mobile</a>. Aidez les autres sur le <a href=\"%1$s\">forum</a>. <a href=\"%1$s\">Traduisez</a> l\'application. - Vous êtes développeur ? Consultez <a href=\"https://github.com/nextcloud/android/blob/master/CONTRIBUTING.md\">CONTRIBUTING.md</a>. Déplacer vers… Copier vers… Sélectionner le dossier… Chargement des dossiers… Aucun dossier média trouvé. - Préférences du téléversement automatique Paramètres - Le téléversement immédiat a été complètement réorganisé. Merci de bien vouloir accéder au menu principal et de reconfigurer votre téléversement automatique. Désolé pour le désagrément.\n\nProfitez des nouvelles capacités étendues du téléversement automatique ! Pour %1$s %d sélectionné @@ -578,7 +438,6 @@ Aucune notification Veuillez revenir plus tard. - Spécifiez le nom et le type du fichier téléversé Nom de fichier Type de fichier Extrait du fichier texte (.txt) @@ -594,8 +453,6 @@ Un endroit sûr pour toutes vos données - Accédez, partagez et protégez vos fichiers personnels et professionnels - Multi-compte Connectez-vous avec plusieurs comptes clouds @@ -609,7 +466,6 @@ Nom complet - Adresse e-mail Numéro de téléphone Adresse Site web @@ -619,23 +475,16 @@ Aucune activité pour le moment - Ce flux affichera des événements comme\n des ajouts, des changements & des partages Une erreur est survenue À propos - Copie de sauvegarde des contacts - Sauvegarder maintenant Restaurer la dernière copie de sauvegarde Restaurer Copie de sauvegarde Copie de sauvegarde des contacts Dernière copie de sauvegarde - L\'autorisation de lecture des contacts est nécessaire - L\'autorisation d\'écriture des contacts est nécessaire Restaurer les contacts Restaurer les contacts sélectionnés - Choisissez un compte pour importer - Aucune autorisation, rien d\'importé ! Choisir la date jamais Aucun fichier trouvé @@ -644,6 +493,4 @@ Nouvelle notification reçue - - - + diff --git a/src/main/res/values-nb-rNO/strings.xml b/src/main/res/values-nb-rNO/strings.xml index 109c16ed41..6e90552fd5 100644 --- a/src/main/res/values-nb-rNO/strings.xml +++ b/src/main/res/values-nb-rNO/strings.xml @@ -1,6 +1,6 @@ - %1$s Android app + %1$s Android-program versjon %1$s Oppdater konto Last opp @@ -46,10 +46,10 @@ Fingeravtrykkslås Det har ikke blitt satt opp noen fingeravtrykk. Vis skjulte filer - Umiddelbare bildeopplastninger - Last opp bilder tatt av kameraet umiddelbart - Umiddelbar opplasting av filmer - Last opp filmer tatt opp av kameraet umiddelbart + Umiddelbar opplasting av bilder + Last opp bilder tatt med kameraet med én gang + Umiddelbar opplasting av video + Last opp videoer tatt med kameraet med én gang Aktiver loggføring Denne er brukt til å loggføre problemer Loggføringshistorikk @@ -58,23 +58,16 @@ Synkroniser kalender & kontakter Sett opp DAVdroid (v1.3.0+) for nåværende konto Tjeneradressen for kontoen ble ikke funnet for DAVdroid - Ingen Google Play butikk eller F-Droid app er installert - Kalender & kontaktsynkronisering ble satt opp + Hverken F-droid eller Google play er installert Hjelp Anbefal til en venn Tilbakemelding Avtrykk - Husk delt plassering - Husk sist delt plassering for opplasting - - Prøv %1$s på smarttelefonen din! - Jeg ønsker å invitere deg til å bruke %1$s på smarttelefonen din!\nLast ned her: %2$s - - Sjekk tjener + Prøv %1$s på smarttelefonen din! + Sjekk tjener Tjeneradresse https://... Brukernavn Passord - Har du ingen tjener enda?\nKlikk her for å opprette en hos en tilbyder Filer Koble til Last opp @@ -86,43 +79,29 @@ Ingen fil å laste opp %1$s kan ikke laste opp tekst som en fil. Mottatte data inneholder ingen gyldig fil. - Filen kan ikke lastes opp + Denne filen kan ikke lastes opp %1$s er har ikke tilgang til å se mottatt fil - Filen som skulle lastes opp ble ikke funnet der den skulle være. Vennligst sjekk at filen finnes. - En feil oppstod under kopiering av filen til en midlertidig mappe. Vennligst prøv å sende på nytt. + Fil valgt for opplasting ble ikke funnet. Sjekk hvorvidt filen eksisterer. + Kunne ikke kopiere fil til midlertidig mappe. Prøv å sende igjen. Alternativer for opplasting: Flytt filen til Nextcloud mappen Behold filen i kildemappe Slett filen fra kildemappen for få sekunder siden Ingen filer her - Last opp innhold eller synkroniser med enhetene dine. - Marker noen filer som favoritter eller synkroniser enhetene dine! - Filer og mapper du markerer som favoritter vil vises her - Din spørring returnerte ingen filer markert som favoritter! Laster… - Ingen applikasjon funnet for filtypen! Det er ingen filer i denne mappen. Ingen resultater i denne mappen Ingen resultater - Ingen favoritter ennå Ingenting delt enda Filer og mapper som du deler vil bli vist her Ingen videoer Ingen bilder - Vil du prøve i en annen mappe? - Fant ingen filer endret de siste syv dagene - Spørringen din returnerte ingen filer endret - de siste syv dagene! Fant ingen nylig tillagte filer - Din spørring returnerte ingen filer som nylig er blitt lagt til! - Last opp noen bilder eller aktiver automatisk opplasting! - Din spørring returnerte ingen bilder! - Last opp noen videoer eller skru på automatisk opplasting! - Din spørring returnerte ingen vidoer! + Søket ditt frambragte ingen nylig tillagte filer. + Last opp noen bilder eller aktiver automatisk opplasting. + Ditt søk frambragte ingen bilder. Ingen opplastinger tilgjengelig - Last opp innhold eller aktiver umiddelbar opplasting. - Last opp noe innhold eller aktiver automatisk opplasting! mappe mapper fil @@ -134,14 +113,11 @@ Endret: Last ned Synkroniser - Filnavnet ble endret til %1$s under opplasting - Listevisning Delt ressurs Ja Nei Ok Fjern opplasting - Prøv å laste opp igjen. Avbryt synkronisering Avbryt Tilbake @@ -161,10 +137,10 @@ Mappenavn Laster opp … %1$d%% Laster opp %2$s - Opplasting fullført + Opplastet %1$s lastet opp Opplasting feilet - Opplasting av %1$s kunne ikke fullføres + Kunne ikke laste opp %1$s Opplasting feilet, du må logge inn på nytt Opplastinger Nåværende @@ -181,37 +157,30 @@ Finner ikke lokal fil Tillatelsesfeil Konflikt - Applikasjonen ble avsluttet Ukjent feil - Venter på trådløstilkobling Venter på å laste opp Laster ned … %1$d%% Laster ned %2$s - Nedlasting fullført + Nedlastet %1$s lastet ned Nedlasting feilet - Nedlasting av %1$s kunne ikke fullføres + Kunne ikke laste ned %1$s Ikke lastet ned enda Nedlasting mislyktes, du må logge inn på nytt Velg konto Synkronisering feilet - Synkronisering feilet, du må logge inn på nytt - Synkronisering av %1$s kunne ikke fullføres - Ugyldig passord for %1$s + Feil passord for %1$s Konflikter funnet %1$d hold-i-synk filer kunne ikke synkroniseres Holdt-i-synk -filer mislyktes Innholdet av %1$d filer kunne ikke synkroniseres (%2$d konflikter) Noen lokale filer ble glemt %1$d filer fra %2$s mappen kunne ikke kopieres til - Fra versjon 1.3.16 blir filer som lastes opp fra denne enheten kopiert inn i den lokale mappen %1$s for å forhindre tap av data når samme fil synkroniseres med flere kontoer.\n\nPga. denne endringen ble alle filer som er blitt lastet opp med tidligere versjoner av denne appen, kopiert til mappe %2$s. Imidlertid kunne ikke denne kopieringen fullføres under konto-synkroniseringen pga. en feil. Du kan enten la filen(e) ligge der de ligger og fjerne lenken til %3$s, eller flytte filene til mappe %1$s og beholde lenken til %4$s.\n\nNedenfor finner du en liste over de lokale filene og de eksterne filene i %5$s som de var lenket til. - Mappen %1$s finnes ikke lengre Flytt alle Alle filer ble flyttet Noen filer kunne ikke fjernes Lokal: %1$s Ekstern: %1$s - Det er ikke nok plass til å kopiere de valgte filene inn i mappen %1$s. Vil du flytte dem i stedet? Sett inn passordet ditt Skriv inn passordet ditt @@ -229,16 +198,7 @@ %1$s avspilling avsluttet Ingen mediafil funnet Ingen konto angitt - Filen er ikke i en gyldig konto Ustøttet mediakodek - Mediafilen kunne ikke leses - Mediafilen er ikke riktig kodet - Tidsavbrudd under avspillingsforsøk - Mediafilen kan ikke strømmes - Mediafilen kan ikke spilles med forvalgt mediaspiller - Sikkerhetsfeil under avspilling av %1$s - Inndatafeil under avspilling av %1$s - Uventet feil under avspilling av %1$s Spol tilbake Spill eller pause Spol fremover @@ -250,32 +210,22 @@ Tilkobling opprettet Tester forbindelsen Feil i tjenerkonfigurasjon - En konto for samme bruker og tjener finnes allerede på enheten Den innskrevne brukeren samsvarer ikke med brukeren av denne kontoen Ukjent feil oppstod! - Fant ikke tjener - Finner ikke tjenerinstans + Fant ikke vert Tjeneren brukte for lang tid på å svare - Feil format på tjeneradresse Oppstart av SSL mislyktes - Kunne ikke verifisere SSL-tjenerens identitet Ukjent tjenerversjon - Klarte ikke å opprette tilkobling Sikker tilkobling opprettet Feil brukernavn eller passord Mislykket autorisasjon Tilgang nektet av autorisasjonstjener - Uventet tilstand. Legg inn tjeneradressen på nytt Autorisasjonen din har gått ut. Autoriser igjen Legg inn nåværende passord Økta di har gått ut. Koble til igjen - Kobler til autentiseringstjener.. Tjeneren støtter ikke denne autorisasjonsmetoden %1$s støtter ikke flere kontoer - Tjeneren din svarer ikke med korrekt bruker-ID, vennligst ta kontakt med en administrator Kan ikke autentisere mot denne tjeneren - Kontoen eksisterer ikke på enheten enda - Sett som tilgjengelig frakoblet Fjern som tilgjengelig frakoblet Sett som favoritt @@ -283,36 +233,26 @@ Endre navn Fjern Vil du virkelig fjerne %1$s? - Vil du virkelig fjerne %1$s inkludert innholdet? Kun lokalt - Fjerning var vellykket + "Fjernet" Fjerning mislyktes Skriv inn et nytt navn - Lokal kopi kunne ikke endre navn; prøv et annet navn - Klarte ikke å endre navn - Eksterne filer kunne ikke sjekkes filinnhold er allerede synkronisert - Mappe kunne ikke opprettes Forbudte tegn: / \\ < > : \" | ? * Filnavnet inneholder minst ett ulovlig tegn Filnavn kan ikke være tomt - Vent et øyeblikk + Vent et øyeblikk… Sjekker lagrede påloggingsdetaljer - Uventet problem; vennligst velg filen fra en annen applikasjon - Ingen fil ble valgt Send lenke til … Kopierer fil fra privat lager Logg inn med oAuth2 - Kobler til oAuth2 tjener... - Identiteten til siden kunne ikke bekreftes - Tjenerens sertifikat er ikke til å stole på - Tjenerens sertifikat er utløpt - Tjenersertifikatets gyldige datoer er i fremtiden - Nettadressen samsvarer ikke med vertsnavnet i sertifikatet Vil du stole på dette sertifikatet likevel? - Sertifikatet kunne ikke lagres Detaljer Skjul Utstedt til: @@ -341,21 +281,17 @@ 18.05.2012 12:23 12:23:45 - Last opp kun via Wi-Fi - Last opp bilder kun via Wi-Fi - Last kun opp filmer via Wi-Fi - Last kun opp under lading - Last kun opp under lading + Bare last opp på Wi-Fi + Bare last opp bilder på Wi-Fi /Direkteopplasting Filkonflikt - Hvilke filer ønsker du å beholder? Hvis du velger begge versjonene, får den lokale filen lagt til et tall i navnet. Behold begge lokal versjon tjenerversjon - Beklager! + Beklager. Bildeforhåndsvisning - Bildet kan ikke vises + Kunne ikke vise bilde %1$s kunne ikke kopieres til lokal mappe %2$s Mappe for umiddelbar opplasting @@ -364,7 +300,6 @@ Bruk undermapper Lagre filer i undermapper basert på år og måned - Beklager, deling er ikke skrudd på for din tjener. Ta kontakt med administratoren. Kan ikke dele. Sjekk om filen eksisterer. Det skjedde en feil under deling av denne filen eller mappen Kan ikke fjerne deling. Sjekk om filen eksisterer. @@ -378,56 +313,32 @@ Kopier lenke Kopiert til utklippstavlen - Ingen tekst ble mottatt for kopi til utklippstavlen Uventet feil ved kopiering til utklippstavle Teksten ble kopiert fra %1$s - Kritisk feil: Kan ikke utføre operasjonene - - En feil oppstod ved oppretting av forbindelse til tjeneren. - En feil oppstod ved venting på svar fra tjeneren. Operasjonen kunne ikke utføres - En feil oppstod ved venting på svar fra tjeneren. Operasjonen kunne ikke utføres - Operasjonen kunne ikke fullføres. Tjeneren er utilgjengelig - Du har ikke tillatelse til %s å gi denne filen nytt navn å slette denne filen å dele denne filen å avslutte deling av denne filen å oppdatere denne delingen - å opprette filen - å laste opp i denne mappen Filen finnes ikke på tjeneren lenger Oppdaterer sti for lagring Fullfør - Forebereder migrering… Sjekker mål… - Lagrer kontokonfigurasjon… - Venter på uferdig synkronisering… Flytter data… Oppdaterer index… Rydder… - Gjenoppretter kontokonfigurasjon… Fullført - FEIL: Ikke nok plass - FEIL: Filen er skrivebeskyttet - FEIL: er ikke lesbar FEIL: Nextcloudmappen finnes allerede - FEIL: Under migrering - FEIL: Under oppdatering av indeks - - Datamappe finnes fra før, hva skal gjøres? - Overstyr - Bruk eksisterende + Erstatt + Bruk Kontoer Legg til en konto Håndter kontoer - Sikker tilkobling videresendes gjennom en usikker rute. - - Logger + Logger Send historikk - Fant inget program til forsendelse av logger. Installer e-post-program. %1$s Android applikasjons-logger Laster data … @@ -435,27 +346,20 @@ Feil passord Flytt Kopier - Ingenting her. Du kan legge til en mappe! Velg - Kan ikke flytte. Sjekk om filen eksisterer. - Det er ikke mulig å flytte en mappe inn i sin egen undermappe - Filen finnes allerede i målmappen En feil oppstod ved flytting av denne filen eller mappen å flytte denne filen Kan ikke kopiere. Sjekk om filen eksisterer - Det er ikke mulig å kopiere en mappe inn i sin egen undermappe - Filen finnes allerede i målmappen En feil oppstod ved kopiering av denne filen eller mappen å kopiere denne filen Umiddelbare opplastinger Detaljer - Mappe for umiddelbar opplasting av filmer - Synkronisering av %1$s mappe kunne ikke fullføres + Synkronisering av %1$s mappe kunne ikke fullføres delt med deg @@ -496,7 +400,6 @@ Legg til bruker eller gruppe Del lenke Sett utløpsdato - Passordbeskyttet Sikret Tillat redigering Skjul filliste @@ -512,7 +415,6 @@ %1$s (e-post) %1$s ( hos %2$s ) - Beklager, tjenerversjonen din tillater ikke klienter å dele med brukere. \nKontakt systemadministratoren kan dele kan endre opprette @@ -521,50 +423,35 @@ Avslutt deling ferdig - Forsøkte igjen, feilet. + Nytt forsøk mislyktes Sletting feilet - Sletting vellykket - Slett alle ferdige - Rutenett-visning Listevisning Håndter plass - Innstillinger, database og tjenersertifikater fra %1$s\'s filer vil bli slettet. \n\nNedlastede filer blir urørt.\n\nDette kan ta noe tid. Nullstill data Noen filer kunne ikke fjernes. - Flere tillatelser trengs for å laste opp & ned filer. - Filen ble ikke funnet i lokalt filsystem Vil du virkelig fjerne de valgte elementene? Vil du virkelig fjerne de valgte elementene og dets innhold? - Venter på lading av enhet. Søk Dette er en Nextcloud funksjon, vennligst oppdater. Lær mer Auto-opplasting Delta - Hjelp oss å teste - Funnet en feil? Føles noe rart? Meld en feil på Github - Er du interessert i å hjelpe oss å teste ned neste versjonen? Test utvikler-versjonen - Dette inkluderer alle kommende funksjoner og er helt på kanten. Feil/feilmeldinger kan oppstå og i sådant fall, meld fra om dem til oss. Release candidate - Release candidate (RC) er en pakke av den kommende utgaven og er forventet å være stabil. Ved å teste denne med ditt oppsett vil kunne hjelpe oss å sikre dette. Meld deg på for testen i Play butikken eller se i versjonsseksjonen i F-Droid. Bidra aktivt Delta i chat på IRC: <a href="%1$s">#nextcloud-mobile</a> Hjelp andre på <a href="%1$s">forumet</a> <a href="%1$s">Oversette</a> app\'en - Bidra som en utvikler, se <a href="https://github.com/nextcloud/android/blob/master/CONTRIBUTING.md">CONTRIBUTING.md</a> for detaljer Flytt til… Kopier til… Velg mappe… Laster inn mapper… Ingen mediamapper funnet. - Innstillinger for auto-opplasting Innstillinger - Umiddelbar opplasting er fullstendig omarbeidet. Se hovedmenyen og konfigurer auto-opplasting på nytt. Beklager uleiligheten.\n\nTa i bruk de nye og utvidede mulighetene i auto-opplasting. For %1$s %d valgt @@ -578,7 +465,6 @@ Ingen varsler Kom innom senere og ta en titt. - Legg inn filnavn og -type for opplasting Filnavn Filtype Textfil-snutt(.txt) @@ -594,8 +480,6 @@ Et trygt hjem for alle dine data - Benytt, del & beskytt filene dine hjemme og i din bedrift - Multi-konto Foren alle skyene dine @@ -619,23 +503,18 @@ Ingen aktivitet enda - Denne strømmen vil vise hendelser som\nf.eks. innlegging, endring og deling Feil oppstod Om - Sikkerhetskopiering av kontakter - Sikkerhetskopier nå + Gjenopprett fra siste sikkerhetskopiering Gjenopprett Sikkerhetskopier Sikkerhetskopi av kontakter Siste sikkerhetskopi - Lesetilgang til kontaktliste trengs - Skrivetilgang til kontaktliste trengs Gjenopprett kontakter Gjenopprett valgte kontakter - Velg konto for import - Ingen tilgang, ingenting importert! + Velg konto å importere Velg dato aldri Ingen fil funnet @@ -644,6 +523,4 @@ Nytt varsel mottatt - - - + diff --git a/src/main/res/values-pt-rBR/strings.xml b/src/main/res/values-pt-rBR/strings.xml index 3b464afda1..f2d7de2e20 100644 --- a/src/main/res/values-pt-rBR/strings.xml +++ b/src/main/res/values-pt-rBR/strings.xml @@ -47,9 +47,9 @@ Nenhuma impressão digital foi configurada. Mostrar arquivos ocultos Envio automático de imagens - Envia automaticamente as fotos tiradas com a câmera - Envio automático de vídeos - Envia automaticamente os vídeos feitos com a câmera + Enviar automaticamente as imagens tiradas pela câmera + Envio automático de vídeos. + Enviar automaticamente os vídeos gravados pela câmera Habilitar login Usado para registrar problemas Histórico de logins @@ -58,23 +58,23 @@ Configurar a sincronização do calendário e dos contatos Configurar o DAVdroid (v1.3.0+) para a conta em uso O endereço do servidor da conta não pôde ser reconhecido pelo DAVdroid - Não há um aplicativo F-Droid ou Google Play instalado - A sincronização do calendário e dos contatos foi configurada com sucesso + Nem F-droid nem Google Play estão instalados + Configuração da sincronização de calendário & contatos Ajuda Recomendar a um amigo Feedback Imprimir - Lembrar o local de compartilhamento - Lembrar o último local de envio de compartilhamento + Lembrar localização do compartilhamento + Lembrar localização do compartilhamento usado mais recentemente Tentar %1$s em seu smartfone! - Gostaria de convidá-lo a usar %1$s em seu smartphone!\nBaixe aqui: %2$s + Quero convidar você a usar %1$s em seu smartphone.\nBaixe daqui: %2$s Verificar servidor Endereço do servidor https://... Nome de usuário Senha - Ainda não tem um servidor?\nClique aqui para obter um de um fornecedor + Você não tem um servidor ainda?\nClique aqui para obter um de um provedor Arquivos Conectar Enviar @@ -86,22 +86,22 @@ Nenhum arquivo para envio %1$s não pôde enviar um pedaço de texto como um arquivo. Os dados recebidos não incluem um arquivo válido. - O arquivo não pôde ser enviado + Este arquivo não pôde ser enviado %1$s não tem permissão para ler um arquivo recebido - Arquivo para envio não foi encontrado em sua localização. Verifique se o arquivo existe. - Ocorreu um erro ao copiar o arquivo para uma pasta temporária. Por favor, tente enviar novamente. + O arquivo selectionado para envio não foi encontrado. Verifique se ele existe. + Não foi possível copiar o arquivo para uma pasta temporária. Tente reenviá-lo. Opção de envio: Mover o arquivo para a pasta do Nextcoud Manter o arquivo na pasta de origem Excluir o arquivo da pasta de origem segundos atrás Nenhum arquivo aqui - Faça o envio de conteúdo ou sincronize com seus dispositivos! - Favorite alguns arquivos ou sincronize com seus dispositivos! - Arquivos e pastas que você favoritar serão mostrados aqui - Nenhum arquivos favorito encontrado em sua pesquisa! + Enviar um conteúdo ou sincronizar com seus dispositivos. + Favoritar algum arquivo ou sincronizar com seus dispositivos. + Arquivos e pastas favoritas serão mostradas aqui + Sua pesquisa não retornou nenhum arquivo favorito. Carregando… - Nenhum aplicativo encontrado para esse tipo de arquivo! + Nenhuma aplicação definida para manipular este tipo de arquivo. Não existe nenhum arquivo nesta pasta. Nenhum resultado nesta pasta Sem resultados @@ -110,19 +110,19 @@ Arquivos e pastas que você compartilhar serão mostrados aqui Sem vídeos Sem fotos - Tentar encontrar em outra pasta? - Nenhum arquivo modificado nos últimos 7 dias - Nenhum arquivo modificado nos últimos 7 dias -foram encontrados para sua pesquisa! - Nenhum arquivo recentemente adicionado foi encontrado! - Nenhum arquivo recentemente adicionado foi encontrado para sua pesquisa! - Envie algumas fotos ou ative o envio automático! - Nenhuma foto foi encontrada para sua pesquisa! - Envie alguns vídeos ou ative o envio automático! - Nenhum vídeo encontrado para sua pesquisa! + Talvez seja uma pasta diferente? + Nenhum arquivo alterado nos últimos 7 dias foi encontrado + Sua pesquisa não encontrou arquivos alterados + nos últimos 7 dias. + Nenhum arquivo recente foi adicionado + Sua pesquisa não encontrou arquivos adicionados recentemente. + Enviar algumas fotos ou ativar o envio automático. + Sua pesquisa não encontrou fotos. + Enviar alguns vídeos ou ativar o envio automático. + Sua pesquisa não encontrou vídeos. Nenhum envio disponível - Envie algum conteúdo ou ative o envio automático! - Envie algum conteúdo ou ative o envio automático! + Enviar algum conteúdo ou ativar o envio automático. + Enviar algum conteúdo ou ativar o envio automático. pasta pastas arquivo @@ -135,13 +135,13 @@ foram encontrados para sua pesquisa! Baixar Sincronizar Arquivo renomeado para %1$s durante o envio - Layout da lista + Layout listado Compartilhar Sim Não OK Excluir arquivo enviado - Tentar enviar de novo + Retentar o envio Cancelar sincronização Cancelar Voltar @@ -161,10 +161,10 @@ foram encontrados para sua pesquisa! Nome da pasta Enviando … %1$d%% enviando %2$s - Envio bem sucedido + Enviado %1$s enviado Falha no envio - O envio de %1$s não pôde ser finalizado + Não foi possível enviar %1$s Falha no envio, você precisa reautenticar-se Envios Atual @@ -181,37 +181,37 @@ foram encontrados para sua pesquisa! Arquivo local não encontrado Erro de permissão Conflito - Aplicativo foi encerrado + Aplicativo finalizado Erro desconhecido - Aguardando conexão wi-fi + Esperando por conectividade Wi-Fi Aguardando para enviar Baixando … %1$d%% Baixando %2$s - Download realizado com sucesso + Baixado %1$s baixado Download falhou - Download de %1$s não pôde ser concluído + Não foi possível baixar %1$s Ainda não baixado Falha em baixar o arquivo, você precisa reautenticar-se Escolha a conta Falha na sincronização - Falha na sincronização, você precisa se logar novamente - A sincronização de %1$s não pôde ser finalizada - Senha inválida para %1$s + A sincronização falhou. Você precisa reautenticar-se + Não foi possível sincronizar %1$s + Senha errada para %1$s Conflitos encontrados %1$d arquivos \"manter sincronizados\" não puderam ser sincronizados Falha ao manter arquivos sincronizados O conteúdo de %1$d arquivos não puderam ser sincronizados (%2$d conflitos) Alguns arquivos locais foram esquecidos %1$d arquivos de %2$s não puderam ser copiados para a pasta - A partir da versão 1.3.16, os arquivos enviados a partir deste aparelho são copiados para a pasta local %1$s para evitar a perda de dados quando um único arquivo é sincronizado com várias contas. \n\nDevido a essa mudança, todos os arquivos enviados em versões anteriores deste aplicativo foram copiados para a pasta %2$s . No entanto, um erro impediu a conclusão dessa operação durante a sincronização da conta. Você pode tanto deixar os arquivos como estão e remover o link para %3$s, ou mover os arquivo(s) para a pasta %1$s e manter o link para %4$s. \n\nListados abaixo são os arquivo(s) locais, e os arquivo(s) remoto(s) em %5$s que estavam vinculados. - Pasta %1s não existe mais + A partir da versão 1.3.16, os arquivos enviados deste dispositivo serão copiados para a pasta local %1$s para evitar a perda de dados quando um único arquivo é sincronizado em várias contas.\n\nDevido à esta alteração, todos os arquivos enviados com versões anteriores deste aplicativo foram copiados para a pasta %2$s No entanto, um erro impediu a conclusão desta operação durante a sincronização da conta. Você pode deixar o (s) arquivo (s) como está e remover o link para %3$s ou mover os arquivos para a pasta %1$s e manter o link para %4$s.\n\nListados abaixo estão os arquivos locais e os arquivos remotos em %5$s taos quais eles foram vinculados. + A pasta %1$s não existe mais Mover todos Todos os arquivos foram movidos Alguns arquivos não puderam ser movidos Local: %1$s Remoto: %1$s - Não há espaço suficiente para copiar os arquivos selecionados para a pasta %1$s. Gostaria de movê-los em vez disso? + O espaço insuficiente está impedindo a cópia dos arquivos selecionados para a pasta %1$s. Ao invés de copiá-los , gostaria de movê-los para lá? Digite sua senha Digite o código de acesso @@ -229,16 +229,16 @@ foram encontrados para sua pesquisa! %1$s reprodução finalizada Nenhum arquivo de mídia encontrado Nenhuma conta fornecida - O arquivo não está em uma conta válida + O arquivo não é uma conta válida O codec de mídia não é suportado - O arquivo de mídia não pode ser lido - O arquivo de mídia não está corretamente codificado - Expirou o tempo durante a tentativa de reproduzir - O arquivo de mídia não pode ser transmitido - O arquivo de mídia não pode ser reproduzido com o stock media player - Erro de segurança tentando reproduzir %1$s + Não foi possível ler o arquivo de mídia + O arquivo de mídia tem uma codificação incorreta + Tempo esgotado tentando reproduzir o arquivo + O arquivo de mídia não pode ser enviado via streaming + O reprodutor de mídia não consegue reproduzir o arquivo de mídia + Errro de segurança enquanto se tentava reproduzir %1$s Erro de entrada tentando reproduzir %1$s - Erro inesperado tentando reproduzir %1$s + Erro inesperado euquanto se tentava reproduzir %1$s Botão rebobinar Botão reproduzir ou pausar Botão de avanço rápido @@ -250,31 +250,31 @@ foram encontrados para sua pesquisa! Conexão estabelecida Testando conexão... Configuração do servidor inválida - Já existe no dispositivo uma conta para o mesmo usuário e servidor + Uma conta para o mesmo usuário e servidor já existe no dispositivo As informações que o usuário digitou não correspondem ao usuário da conta Ocorreu um erro desconhecido! Não foi possível encontrar o host - Instância de servidor não encontrada + Servidor não encontrado O servidor demorou demais a responder - Formato de endereço de servidor errado + O formato de endereço do servidor está errado Inicialização SSL falhou Não foi possível verificar a identidade do servidor SSL Versão do servidor desconhecida - Não foi possível estabelecer conexão + Não foi possível estabelecer a conexão Conexão segura estabelecida Nome de usuário ou senha errado Autorização sem sucesso Acesso negado pelo servidor de autorização - Estado inesperado. Insira o endereço do servidor novamente + Estado inesperado. Entre o endereço do servidor novamente Sua autorização expirou. Por favor, autorize novamente Por favor, digite a senha atual Sua sessão expirou. Por favor, conecte-se novamente Conectando ao servidor de autenticação... O servidor não suporta este método de autenticação %1$s não suporta múltiplas contas - Seu servidor não está retornando um id de usuário correto. Por favor, entre em contato com um administrador + Seu servidor não está retornando um ID correto de usuário. Por favor, contacte o administrador Não é possível obter autenticação neste servidor - Conta ainda não existe no dispositivo + A conta ainda não existe no dispositivo Definir como disponível offline Definir como não disponível offline @@ -283,28 +283,28 @@ foram encontrados para sua pesquisa! Renomear Excluir Deseja realmente excluir %1$s? - Você deseja realmente excluir %1$s e seu conteúdo? + Quer realmente excluir %1$s de seu conteúdo? Somente local - Excluído com sucesso + Excluído Erro ao excluir Digite um novo nome - Cópia local não pôde ser renomeada. Tente outro nome - Renomeação não pôde ser finalizada - Arquivo remoto não pôde ser verificado + A cópia local não pôde ser renomeada. Tente um nome diferente + Não foi possível dar um nome novo ao servidor + Não foi possível verificar o arquivo remoto Conteúdo do arquivo já foi sincronizado - A pasta não pôde ser criada + Não foi possível criar a pasta Caracteres proibidos: / \\ < > : \" | ? * O nome do arquivo contém pelo menos um caractere inválido O nome do arquivo não pode estar vazio - Aguarde um momento + Aguarde um momento... Verificando credenciais salvas - Problema inesperado. Por favor, tente selecionar o arquivo com outro aplicativo - Nenhum arquivo foi selecionado + Problema inesperado. Por favor selecione o arquivo de um diferente aplicativo + Nenhum arquivo selecionado Enviar o link para … Copiando o arquivo da armazenagem privada Login com oAuth2 - Conectando-se a oAuth2 servidor... + Conectando ao servidor OAuth 2... A identidade do site não pôde ser verificada - O certificado do servidor não é confiável @@ -312,7 +312,7 @@ foram encontrados para sua pesquisa! - A data de expiração do certificado do servidor está no futuro - A URL do host não confere com o host do certificado Você confia nesse certificado mesmo assim? - O certificado não pôde ser salvo + Não foi possível salvar o certificado Detalhes Ocultar Emitido para: @@ -341,21 +341,21 @@ foram encontrados para sua pesquisa! 2012/05/18 12:23 PM 12:23:45 - Enviar somente via wifi - Enviar fotos apenas por Wi-Fi - Enviar vídeos apenas por Wi-Fi - Enviar apenas quando solicitado - Enviar apenas quando solicitado + Somente enviar por Wi-Fi + Somente enviar imagens por Wi-Fi + Somente enviar vídeos por Wi-Fi + Somente enviar quando carregando + Somente enviar quando carregando /Upload automático Conflito de arquivo - Quais arquivos você deseja manter? Se você selecionar ambas as versões, o arquivo local terá um número adicionado ao seu nome. + Quais arquivos você quer manter? Se você selecionar ambos, o arquivo local terá um número adicionado ao seu nome. Manter ambos versão local versão do servidor - Desculpe isso! + Desculpe. Pré-visualização da imagem - Imagem não pôde ser mostrada + Não foi possível mostrar a imagem %1$s não pôde ser copiado para pasta local %2$s Pasta de envio automático @@ -364,7 +364,7 @@ foram encontrados para sua pesquisa! Usar subpastas Armazena em subpastas baseado no ano e mês - Lamentamos, mas o compartilhamento não está ativado no servidor. Entre em contato com o administrador. + O compartilhamento não está habilitado em seu servidor. Por favor, contact o administrador. Não é possível compartilhar. Por favor verifique se o arquivo existe Ocorreu um erro durante a tentativa de compartilhar esse arquivo ou pasta Não é possível descompartilhar. Por favor verifique se o arquivo existe @@ -378,16 +378,17 @@ foram encontrados para sua pesquisa! Copiar link Copiado para área de transferência - Nenhum texto recebido para copiar para área de transferência + Nenhum texto foi recebido para copiar para a área de transferência Erro inesperado ao copiar para a área de transferência Texto copiado de %1$s - Erro crítico: não foi possível executar as operações + Erro crítico: Não foi possível executar as operações + + Um erro ocorreu durante a conexão ao servidor. + Um erro ocorreu quando esperava pelo servidor. Não foi possível completar a operação. + Um erro ocorreu quando esperava pelo servidor. Não foi possível completar a operação. + Não foi possível completar a operação. O servidor está indisponível - Ocorreu um erro durante a conexão com o servidor. - Ocorreu um erro enquanto se espera pelo servidor, a operação pode não ter sido executada - Ocorreu um erro enquanto se espera pelo servidor, a operação pode não ter sido executada - A operação não pôde ser concluída pois o servidor está indisponível Você não tem permissão %s para renomear este arquivo para excluir este arquivo @@ -400,34 +401,34 @@ foram encontrados para sua pesquisa! Atualizando caminho do armazenamento Finalizado - Preparando para migração… + Preparando migração… Verificando destino… - Salvando configuração de contas… - Aguardando por sincronismo não-finalizado… + Salvando configuração das contas… + Esperando por todas as sincronizações terminarem… Movendo dados… Atualizando index… Limpando… - Restaurando configurações de contas… + Restaurando a configuração das contas… Finalizado - ERRO: Espaço Insuficiente - ERRO: Arquivo não permite gravação - ERRO: Arquivo não permite leitura + ERRO: Espaço insuficiente + ERRO: Arquivo é somente leitura + ERRO: Arquivo não é legível ERRO: Diretório Nexcloud já existe - ERRO: Durante a Migração - ERRO: Durante atualização de índice + ERRO: Falha durante a migração + ERRO: Falha ao atualizar índice - Pasta de dados já existe, o que fazer? - Sobrescrever - Usar a existente + Pasta Data já existe. Escolha uma das seguintes: + Substituir + Usar Contas Adicionar uma conta Gerenciar contas - A conexão segura está redirecionada através de uma rota insegura. + A conexão segura foi redirecionada através de uma rota insegura. Logs Enviar histórico - Nenhum aplicativo para envio de logs foi encontrado. Por favor, instale um aplicativo de email. + Nenhum aplicativo para enviar registros foi encontrado. Por favor instale um cliente de email. %1$s logs do aplicativo Android Carregando dados … @@ -435,26 +436,26 @@ foram encontrados para sua pesquisa! Senha incorreta Mover Copiar - Nada aqui. Você pode adicionar uma pasta! + Não há nada aqui. Você pode adicionar uma pasta. Escolher - Não é possível mover. Por favor, verifique se o arquivo existe - Não é possível mover a pasta para uma descendente - O arquivo já existe na pasta de destino + Impossível mover o arquivo. Por favor verifique se ele existe. + Não é possível mover uma pasta para uma das suas próprias pastas subjacentes + O arquivo já está presente na pasta destino Ocorreu um erro ao tentar mover este arquivo ou pasta mover este arquivo Não é possível copiar. Por favor, verifique se o arquivo existe - Não é possível copiar uma pasta em uma descendente - O arquivo já existe na pasta de destino + Não é possível copiar uma pasta para uma das suas próprias pastas subjacentes + O arquivo já está presente na pasta destino Ocorreu um erro ao tentar copiar este arquivo ou pasta copiar este arquivo Envio automático Detalhes - Pasta de envio automático de vídeos + Pasta de vídeo para envios automáticos A sincronização da pasta %1$s não pôde ser finalizada compartilhado @@ -512,7 +513,7 @@ foram encontrados para sua pesquisa! %1$s (email) %1$s ( em %2$s ) - Lamentamos, mas a versão do seu servidor não permite compartilhar com utilizadores nos clientes.\nPor favor contacte o administrador + Atualize a versão do servidor para permitir compartilhamento entre usuários de dentro de seus clientes.\nPor favor, contacte o administrador pode compartilhar pode editar criar @@ -521,50 +522,50 @@ foram encontrados para sua pesquisa! Parar compartilhamento finalizado - Retentar falhou + Nova tentativa falhou Limpeza falhou - Limpo com sucesso - Limpar tudo finalizado + Limpo + Limpar envios termiandos Grade de exibição Lista de visualização Gerenciar o espaço - Definições, certificados de banco de dados e servidor de dados %1$s serão excluídos permanentemente. \n\nArquivos baixados serão mantidos inalterados. \n\nEste processo pode demorar algum tempo. + Configurações, banco de dados e certificados do servidor de dados de %1$s serão excluídos permanentemente.\n\nArquivos baixados serão mantidos intocados.\n\nEste processo pode levar um tempo. Limpar dados Alguns arquivos não puderam ser excluídos. - Permissões adicionais são necessárias para se enviar e baixar arquivos & . - O arquivo não foi encontrado no sistema de arquivos local + Permissões adicionais são necessárias para enviar ou baixar arquivos. + Arquivo não encontrado no sistema de arquivos local Deseja realmente excluir os itens selecionados? Deseja realmente excluir os itens selecionados e seus conteúdos? - Esperando o carregamento do dispositivo + Esperando carregar Pesquisar Este é um recurso do Nextcloud. Por favor, atualize. Saiba mais Envio automático Participar - Ajude-nos a testar - Encontrou um erro? Algo está estranho? + Ajuda para teste + Encontrou um erro? Comentários? Relate o problema no Github - Está interessado em ajudar-nos a testar a próxima versão? + Interessado em ajudar testando a próxima versão? Teste a versão dev - Isso inclui todos os próximos recursos. Erros pode ocorrer e irão. Por favor, reporte-os a nós. + Isso inclui todos os recursos futuros e está num limite perigoso. Erros podem ocorrer e acontecendo, por favor reporte-os à nós. Candidato a versão - O candidato à versão (RC) é um instantâneo do lançamento e espera-se que seja estável. Testar a sua configuração individual pode ajudar a garantir isso. Registre-se para testar na Play Store ou procure manualmente na seção \"versões\" na F-Droid. + O release candidate (RC) é um instantâneo da próxima versão e espera-se que seja estável. Testar sua configuração individual pode ajudar a garantir isso. Inscreva-se para testar na Play Store ou confira a seção \"versões\" no F-Droid. Contribuir ativamente Participe de uma conversa no IRC: <a href="%1$s">#nextcloud-mobile</a> Ajude outros no <a href="%1$s">forum</a> <a href="%1$s">Traduza</a> the app - Contribuir como desenvolvedor, veja <a href="https://github.com/nextcloud/android/blob/master/CONTRIBUTING.md">CONTRIBUTING.md</a> para detalhes + Revisar, alterar e escrever código, veja <a href=\"https://github.com/nextcloud/android/blob/master/CONTRIBUTING.md\">CONTRIBUTING.md</a> para detalhes Mover para… Copiar para… Escolha a pasta… Carregando pastas… Nenhuma pasta de mídia encontrada. - Preferências do envio automático + Preferências do auto envio Configurações - O envio automático foi completamente renovado. Por favor veja o menu principal e reconfigure o seu envio automático. Desculpe o inconveniente. \n\nAproveite as novas e extendidas capacidades do envio automático! + O envio automático foi completamente renovado. Reconfigure-o dentro do menu principal.\n\nCurta o novo e estendido envio automático. Para %1$s %d selecionado @@ -578,7 +579,7 @@ foram encontrados para sua pesquisa! Não há notificações Por favor verifique mais tarde. - Forneça o nome e o tipo de arquivo a enviar + Entre o nome e tipo de arquivo a enviar Nome do Arquivo Tipo do Arquivo Fragmento de arquivo texto (.txt) @@ -594,7 +595,7 @@ foram encontrados para sua pesquisa! Um local seguro para seus dados - Acesse, compartilhe & proteja seus dados em casa e na sua empresa + Acesse, compartilhe e proteja seus arquivos, em casa e no trabalho Multi contas Conectar em todas as suas Nuvens @@ -619,23 +620,23 @@ foram encontrados para sua pesquisa! Nenhuma atividade ainda - O stream irá mostrar eventos como\nadições, mudanças & compartilhamentos + O fluxo irá mostrar eventos como\nInclusões, alterações e compartilhamentos Um erro ocorreu Sobre - Backup dos contatos - Backup agora + Fazer backup dos contatos + Agora Retornar último backup Retornar Backup Backup dos contatos Último backup - A permissão de leitura dos contatos é necessária - A permissão de gravação dos contatos é necessária + Permissão para ler contatos é necessária + Permissão para alterar a lista de contatos é necessária Restaurar contatos Restaurar contatos selecionados - Escolha a conta a importar - Sem permissão. Nada foi importado! + Escolha a conta para importar + Nenhuma permissão foi dada, nada importado! Escolha a data nunca Nenhum arquivo encontrado @@ -644,6 +645,7 @@ foram encontrados para sua pesquisa! Nova notificação recebida + Sair From 21c4551c45a134fb766ad0a9e52d4f9eaec244cd Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Sat, 29 Apr 2017 08:21:50 +0200 Subject: [PATCH 33/53] default to "keep file in original folder" --- .../java/com/owncloud/android/services/AutoUploadJob.java | 2 +- .../com/owncloud/android/ui/activity/FolderSyncActivity.java | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/owncloud/android/services/AutoUploadJob.java b/src/main/java/com/owncloud/android/services/AutoUploadJob.java index 041bb1a205..7ae6502f6e 100644 --- a/src/main/java/com/owncloud/android/services/AutoUploadJob.java +++ b/src/main/java/com/owncloud/android/services/AutoUploadJob.java @@ -52,7 +52,7 @@ public class AutoUploadJob extends Job { final String filePath = bundle.getString(LOCAL_PATH, ""); final String remotePath = bundle.getString(REMOTE_PATH, ""); final Account account = AccountUtils.getOwnCloudAccountByName(context, bundle.getString(ACCOUNT, "")); - final Integer uploadBehaviour = bundle.getInt(UPLOAD_BEHAVIOUR, -1); + final Integer uploadBehaviour = bundle.getInt(UPLOAD_BEHAVIOUR, FileUploader.LOCAL_BEHAVIOUR_FORGET); File file = new File(filePath); diff --git a/src/main/java/com/owncloud/android/ui/activity/FolderSyncActivity.java b/src/main/java/com/owncloud/android/ui/activity/FolderSyncActivity.java index cf829c6095..3602c6f821 100644 --- a/src/main/java/com/owncloud/android/ui/activity/FolderSyncActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/FolderSyncActivity.java @@ -45,12 +45,13 @@ import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.datamodel.SyncedFolder; import com.owncloud.android.datamodel.SyncedFolderDisplayItem; import com.owncloud.android.datamodel.SyncedFolderProvider; +import com.owncloud.android.files.services.FileUploader; import com.owncloud.android.ui.adapter.FolderSyncAdapter; import com.owncloud.android.ui.decoration.MediaGridItemDecoration; import com.owncloud.android.ui.dialog.SyncedFolderPreferencesDialogFragment; import com.owncloud.android.ui.dialog.parcel.SyncedFolderParcelable; -import com.owncloud.android.utils.DisplayUtils; import com.owncloud.android.utils.AnalyticsUtils; +import com.owncloud.android.utils.DisplayUtils; import java.io.File; import java.util.ArrayList; @@ -303,7 +304,7 @@ public class FolderSyncActivity extends FileActivity implements FolderSyncAdapte false, false, AccountUtils.getCurrentOwnCloudAccount(this).name, - 0, + FileUploader.LOCAL_BEHAVIOUR_FORGET, false, mediaFolder.filePaths, mediaFolder.folderName, From fb025d17d0bd7b1e795c56e9401ac7048b323147 Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Sat, 29 Apr 2017 09:03:41 +0200 Subject: [PATCH 34/53] db name also "custom" --- src/modified/res/values/setup.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/modified/res/values/setup.xml b/src/modified/res/values/setup.xml index 77bdbed7c5..d1131a2384 100644 --- a/src/modified/res/values/setup.xml +++ b/src/modified/res/values/setup.xml @@ -11,8 +11,8 @@ com.custom.client.provider.UsersAndGroupsSearch.action.SHARE_WITH com.custom.client.provider.Documents com.custom.client.provider.Files - nextcloud.db - nextcloud + custom.db + custom custom nextcloud Custom From 1f67a9ae141371e50e0b557426d002f90fdf9daa Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Sat, 29 Apr 2017 09:04:40 +0200 Subject: [PATCH 35/53] change log_name --- src/modified/res/values/setup.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modified/res/values/setup.xml b/src/modified/res/values/setup.xml index d1131a2384..65f1c89d7c 100644 --- a/src/modified/res/values/setup.xml +++ b/src/modified/res/values/setup.xml @@ -14,7 +14,7 @@ custom.db custom custom - nextcloud + custom Custom Mozilla/5.0 (Android) ownCloud-android/%1$s From a8230f03c98050cfdecdd92ab27a55899b8fec45 Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Sun, 30 Apr 2017 00:21:24 +0000 Subject: [PATCH 36/53] [tx-robot] updated from transifex --- src/main/res/values-de-rDE/strings.xml | 383 +++++++++++++++---------- src/main/res/values-de/strings.xml | 2 +- src/main/res/values-es-rMX/strings.xml | 1 - src/main/res/values-nl/strings.xml | 201 +++---------- src/main/res/values-pt-rBR/strings.xml | 1 - 5 files changed, 273 insertions(+), 315 deletions(-) diff --git a/src/main/res/values-de-rDE/strings.xml b/src/main/res/values-de-rDE/strings.xml index b3063a5471..f756f0d903 100644 --- a/src/main/res/values-de-rDE/strings.xml +++ b/src/main/res/values-de-rDE/strings.xml @@ -1,6 +1,6 @@ - %1$s Android-App + %1$s Android App Version %1$s Konto aktualisieren Hochladen @@ -13,7 +13,7 @@ Senden Sortieren Sortiere nach - Sortiere nach + Sortieren nach A - Z Z - A Neueste zuerst @@ -47,13 +47,13 @@ Keine Fingerabdrücke eingerichtet. Versteckte Dateien anzeigen Sofortiges Hochladen von Bildern - Sofortiges Hochladen von Bildern, die mit der Kamera gemacht wurden + Laden Sie mit der Kamera gemachte Fotos sofort hoch Sofortiges Hochladen von Videos - Sofortiges Hochladen von Videos, die mit der Kamera gemacht wurden + Laden Sie mit der Kamera gemachte Videos sofort hoch Protokollierung aktivieren - Dies wird zur Protokollierung von Problemen benutzt - Protokollverlauf - Dies zeigt die gespeicherten Protokolle + Dies wird zur Protokollierung von Problemen genutzt + Protokollierungs-Historie + Dies zeigt die gespeicherten Protokollierungen Verlauf löschen Kalender & Kontakte synchronisieren DAVdroid (v1.3.0+) für aktuelles Konto einrichten @@ -64,17 +64,23 @@ Einem Freund empfehlen Rückmeldungen Impressum - %1$s auf Ihrem Smartphone ausprobieren! - Server überprüfen + Geteilten Speicherort merken + Zuletzt verwendeten, geteilten Upload-Speicherort merken + + Probieren Sie %1$s auf Ihrem Smartphone! + Ich empfehle Ihnen die Nutzung von %1$s auf Ihrem Smartphone!\nLaden Sie es hier herunter: %2$s + + Server überprüfen Server-Adresse https://… Benutzername Passwort + Sie haben noch keinen Server?\nKlicke hier um Server-Anbieter zu finden Dateien Verbinden Hochladen Hochladeordner auswählen Kein Konto gefunden - Es sind keine %1$s-Konten auf Ihrem Gerät eingerichtet. Bitte richten Sie zuerst ein Konto ein. + Es sind keine %1$s Konten auf Ihrem Gerät eingerichtet. Bitte erstellen Sie zuerst ein Konto. Einrichten Beenden Keine Datei zum Hochladen @@ -82,41 +88,41 @@ Empfangene Daten enthalten keine gültige Datei. Diese Datei kan nicht hochgeladen werden %1$s darf eine empfangene Datei nicht lesen - Die zum Hochladen ausgewählte Datei kann nicht gefunden werden. Bitte prüfen Sie ob die Datei existiert. - Konnte Datei nicht in temporärem Ordner speichern. Bitte versuche es erneut. + Die zum Hochladen ausgewählte Datei kann nicht gefunden werden. Bitte prüfe ob die Datei existiert. + + Es ist ein Fehler beim Kopieren dieser Datei in einen temporären Ordner aufgetreten. Bitte erneut versuchen die Datei zu senden. Upload Option: - In Nextcloud Ordner verschieben - Hochladen und Datei im ursprünglichen Ordner behalten - Lösche Datei aus dem ursprünglichen Ordner + Datei in Nextcloud Ordner verschieben + Hochladen und im Quellordner behalten + Hochladen und Datei im Quellordner löschen Gerade eben Keine Dateien vorhanden - Lade Dateien hoch oder synchronisiere mit deine Geräte. - Favoritisiere Dateien oder synchronisiere deine Geräte. - Dateien und Ordner, die du favoritisierst, werden hier angezeigt - Deine Suche ergab keine favoritisierten Dateien. + Laden Sie Inhalt hoch oder synchronisieren Sie mit Ihren Geräten. + Favorisieren Sie einige Dateien oder synchronisieren Sie Ihre Geräte. + Dateien und Ordner, die als Favoriten markiert werden, erscheinen hier + Keine favorisierten Dateien in Ihrem Verlauf gefunden. Lade… - Keine App verfügbar um diesen Dateityp zu verarbeiten. + Es wurde keine App für diesen Dateityp gefunden! Es befinden sich keine Dateien in diesem Ordner. Keine Ergebnisse in diesem Ordner Keine Ergebnisse - Noch nichts favoritisiert. + Noch keine Favoriten vorhanden Noch nichts geteilt - Dateien und Ordner, die Sie teilen, werden hier erscheinen + Von dir geteilte Dateien und Ordner werden hier erscheinen Keine Videos Keine Fotos - Vielleicht liegt es in einem anderen Ordner? - Keine Dateien gefunden, die in den letzten 7 Tagen modifiziert wurden - Deine Such ergab keine Dateien, -die in den letzten 7 Tagen modifiziert wurden. + Vielleicht befindet es sich in einem anderen Ordner? + Keine, innerhalb der letzten 7 Tage, geänderten Dateien gefunden + Keine Dateien gefunden, die in den letzten 7 Tagen geändert wurden. Keine kürzlich hinzugefügten Dateien gefunden - Deine Suche ergab keine kürzlich hinzugefügten Dateien - Lade ein paar Fotos hoch oder aktiviere automatisches Hochladen - Deine Suche hat keine Fotos gefunden. - Lade ein paar Videos hoch oder aktiviere automatisches Hochladen - Deine Suche hat keine Videos gefunden. + Keine kürzlich hinzu gefügten Dateien gefunden! + Laden Sie Fotos hoch oder aktivieren Sie den Sofortupload! + Keine Fotos gefunden. + Laden Sie einige Videos hoch oder aktivieren Sie den Sofortupload. + Keine Videos gefunden. Keine Uploads verfügbar - Lade ein paar Dateien hoch oder aktiviere automatisches Hochladen. - Lade ein paar Dateien hoch oder aktiviere automatisches Hochladen. + Laden Sie Inhalte hoch oder aktivieren Sie den Sofortupload. + Laden Sie Inhalte hoch oder aktivieren Sie den Auto Upload! Ordner Ordner Datei @@ -129,17 +135,18 @@ die in den letzten 7 Tagen modifiziert wurden. Herunterladen Synchronisieren Datei während des Hochladens in %1$s umbenannt + Layout der Liste Teilen Ja Nein OK Upload entfernen - Versuche erneut hochzuladen + Versuchen Sie es erneut hochzuladen Synchronisation abbrechen Abbrechen Zurück Speichern - Speichern & Schließen + Speichern & verlassen Fehler Lade … unbekannt @@ -149,8 +156,8 @@ die in den letzten 7 Tagen modifiziert wurden. Passwort ändern Benutzerkonto löschen Das Konto %s löschen?\n\nDas Löschen kann nicht rückgängig gemacht werden. - Konto erstellen - Hochladen von … + Benutzerkonto erstellen + Dateien hochladen von … Ordnername Hochladen … %1$d%% Hochladen %2$s @@ -158,14 +165,14 @@ die in den letzten 7 Tagen modifiziert wurden. %1$s hochgeladen Hochladen fehlgeschlagen Konnte %1$s nicht hochladen - Hochladen fehlgeschlagen, Sie müssen sich erneut anmelden. + Hochladen fehlgeschlagen, erneute Anmeldung erforderlich Uploads Aktuell Fehlgeschlagen (Tippen zum Wiederholen) Hochgeladen Fertiggestellt Abgebrochen - Pausiert + pausiert Verbindungsfehler Hochladen wird in Kürze erneut versucht Zugangsdaten falsch @@ -177,132 +184,134 @@ die in den letzten 7 Tagen modifiziert wurden. App beendet Unbekannter Fehler Warte auf W-Lan-Verbindung - Warten auf das Hochladen + Warte auf Hochladen Herunterladen … - %1$d%% beim Laden von %2$s + %1$d%% Herunterladen %2$s Heruntergeladen - %1$s wurde erfolgreich heruntergeladen + %1$s heruntergeladen Herunterladen fehlgeschlagen Konnte %1$s nicht herunterladen - Noch nicht heruntergeladen - Herunterladen fehlgeschlagen, Sie müssen sich erneut anmelden. + Noch nicht Heruntergeladen + Herunterladen fehlgeschlagen, erneute Anmeldung erforderlich Konto auswählen Synchronisation fehlgeschlagen Synchronisation fehlgeschlagen. Sie müssen sich erneut anmelden Synchronisation von %1$s konnte nicht abgeschlossen werden Falsches Passwort für %1$s Konflikte gefunden - %1$d Synchronisationsdateien konnten nicht synchronisiert werden. - Synchronisationsdateien konnten nicht synchronisiert werden. + %1$d synchron zu haltende Dateien konnten nicht synchronisiert werden. + Synchronhalten schlug fehl. Inhalte von %1$d Dateien konnten nicht synchronisiert werden (%2$d Konflikte) Einige lokale Dateien wurden vergessen - %1$d Dateien aus dem %2$s Ordner konnten nicht kopiert werden nach + %1$d Dateien aus dem %2$s Verzeichnis konnten nicht kopiert werden nach + Seit Version 1.3.16 werden Dateien die von diesem Gerät aus hochgeladen werden in den lokalen Ordner %1$s kopiert um Datenverlust zu vermeiden, wenn eine einzelne Datei mit mehreren Accounts synchronisiert wird.\n\nInfolge dieser Änderung wurden alle Dateien, die mit vorherigen Versionen dieser App hochgeladen wurden, in den Ordner %2$s verschoben. Jedoch ist während der Konto-Synchronisation ein Fehler aufgetreten, der das Abschließen dieses Vorgangs verhindert hat. Die Datei(en) können entweder wie sie sind belassen und den Link zu %3$s entfernt werden oder die Datei(en) in den Ordner %1$s verschoben und den Link zu %4$s beibehalten werden.\n\nUnten befindet sich eine Liste der lokalen Datei(en) und der mit ihnen verbundenen Remote-Datei(en) in %5$s. Der Ordner %1$s existiert nicht mehr - Verschiebe alle + Alle verschieben Alle Dateien wurden verschoben Einige Dateien konnten nicht verschoben werden Lokal: %1$s - Entfernte Freigabe: %1$s - Unzureichender Speicherplatz verhindert das Kopieren der ausgewählten Dateien in den Ordner %1$s . Möchstest du sie stattdessen verschieben? - Bitte geben Sie ihre PIN ein + Remote: %1$s + Es steht nicht genügend Speicherplatz zur Verfügung, um die ausgewählten Dateien in das Verzeichnis %1$s zu kopieren. Sollen diese stattdessen verschoben werden? + Bitte geben Sie Ihre PIN ein Bitte PIN eingeben - Die PIN wird jedes mal wenn die App gestartet wird abgefragt - Bitte PIN erneut eingeben + Die PIN wird jedes mal beim Start der App abgefragt + Bitte Ihre PIN nochmals eingeben PIN entfernen Die PINs stimmen nicht überein PIN nicht korrekt PIN entfernt PIN gespeichert - %1$s Musikplayer - %1$s (läuft) - %1$s (lädt) - %1$s Wiedergabe beendet + %1$s Musik Player + %1$s (wird abgespielt) + %1$s (wird geladen) + %1$s Wiedergabe Beendet Keine Mediendatei gefunden Kein Konto angegeben Die Datei befindet sich nicht in einem gültigen Konto - Nicht unterstützter Media-codec + Medien-Codec wird nicht unterstützt Konnte die Mediendatei nicht lesen - -Die Mediendatei ist falsch encodiert. - -Zeitüberschreitung beim Versuch die Datei abzuspielen + Mediendatei ist nicht korrekt encodiert + Wartezeit beim Abspielversuch abgelaufen Die Mediendatei kann nicht gestreamt werden - Die Standard-Applikation für Musik kann die Mediendatei nicht abspielen. - Ein Sicherheitsfehler trat beim Abspielen von %1$s auf - Eingabefehler beim Abspielen von %1$s - -Unerwarteter Fehler beim Abspielen von %1$s - Zurückspulknopf - Wiedergabe- oder Pause-Knopf - Vorspul-Knopf + Diese Mediendatei konnte nicht mit dem Standardplayer geöffnet werden + Sicherheitsfehler beim Versuch %1$s wiederzugeben + Eingabefehler beim Versuch %1$s wiederzugeben + Ein unerwarteter Fehler ist aufgetreten beim Versuch %1$s wiederzugeben + Rückspulknopf + Wiedergabe-/Pause Knopf + Vorspul Knopf - Erhalte Genehmigung … - Anmeldeversuch … + Genehmigung erhalten … + Der Versuch, sich anzumelden … Keine Netzwerkverbindung Sichere Verbindung nicht verfügbar. Verbindung hergestellt - Teste Verbindung + Verbindung testen Fehlerhafte Server Konfiguration - Ein Account für den gleichen Benutzer und Server existiert bereits auf diesem Gerät + Ein Benutzerkonto für den gleichen Benutzer und Server existiert auf diesem Gerät bereits Der eingegebene Benutzer passt nicht zu dem Benutzer dieses Benutzerkontos Ein unbekannter Fehler ist aufgetreten! - Konnte den Server nicht finden + Konnte den Host nicht finden Server nicht gefunden Der Server braucht zu lange für eine Antwort. Falsches Adress-Format für den Server SSL-Initialisierung fehlgeschlagen. - Konnte die Identität des SSL Servers nicht verifizieren + SSL-Server-Identität konnte nicht überprüft werden Unbekannte Server-Version Verbindung konnte nicht hergestellt werden Sichere Verbindung hergestellt Falscher Benutzername oder Passwort - Legitimierung nicht erfolgreich - Zugriff durch den Legitimierungsserver abgelehnt - Unerwarteter Status, bitte gib die Serveradresse erneut ein - Ihre Legitimierung ist abgelaufen. Bitte Legitimierung nochmals durchführen - Bitte geben Sie Ihr aktuelles Passwort ein + Autorisierung nicht erfolgreich + Zugriff durch den Autorisierungsserver abgelehnt + Unerwarteter Zustand; Bitte gib die Adresse des Servers erneut ein + Die Autorisierung ist abgelaufen. Bitte Autorisierung nochmals durchführen + Bitte gib das aktuelle Passwort ein Ihre Sitzung ist abgelaufen. Bitte erneut verbinden - Verbinde zum Authentifizierungsserver... - Der Server unterstützt diese Legitimierungsmethode nicht + Verbinden zum Authentifizierungs-Server ... + Der Server unterstützt diese Authentifizierung-Methode nicht %1$s unterstützt nicht mehrere Benutzerkonten - Dein Server sendet keine korrekte Benutzer ID, bitte kontaktiere den Serveradministrator - Die Authentifizierung gegenüber dem Server konnte nicht durchgeführt werden - Account existiert auf diesem Gerät noch nicht + Ihr Server gibt keine korrekte Benutzer-ID zurück, bitte kontaktieren Sie einen Administrator + Kann sich nicht auf diesem Server authentifizieren + Das Benutzerkonto ist bis jetzt noch nicht auf dem Gerät vorhanden Als Offline verfügbar markieren - Markierung Offline verfügbar entfernen + Offline verfügbar Markierung entfernen Als Favorit markieren Markierung als Favorit entfernen Umbenennen Entfernen - Möchten Sie %1$s wirklich löschen? + Möchten Sie %1$s wirklich entfernen? Nur lokal Entfernt Entfernen fehlgeschlagen - Geben Sie einen neuen Namen ein - Lokale Kopie konnte nicht umbenannt werden, versuche einen anderen Namen - Konnte dem Server keinen neuen Namen geben - Konnte die entfernte Datei nicht überprüfen + Gib einen neuen Namen ein + Die lokale Kopie konnte nicht umbenannt werden. Versuche es mit einem anderen Namen. + Die Umbenennung konnte nicht abgeschlossen werden. + Die entfernte Datei konnte nicht überprüft werden Dateiinhalte bereits synchronisiert - Konnte den Ordner nicht erstellen + Verzeichnis konnte nicht erstellt werden Verbotene Zeichen: / \\ < > : \" | ? * Der Dateiname enthält mindestens ein ungültiges Zeichen Dateiname darf nicht leer sein Bitte warten... - Prüfe gespeicherte Anmeldeinformationen + Überprüfe gespeicherte Anmeldeinformationen + Ein unerwartetes Problem ist aufgetreten. Bitte versuche, die Datei in einer anderen App zu öffnen Keine Datei gewählt Link senden an … Kopiere Datei vom privatem Speicher Anmelden mit oAuth2 + Verbinde mit dem oAuth2-Server... + Die Identität der Website konnte nicht überprüft werden - Das Zertifikat des Servers ist nicht vertrauenswürdig - Das Zertifikat des Servers ist abgelaufen - Das Gültigkeitsdatum des Serverzertifikats liegt in der Zukunft - - Die Adresse stimmt nicht mit dem im Zertifikat angegebenen Hostnamen überein - Möchten Sie diesem Zertifikat trotzdem vertrauen? + - Die Adresse stimmt nicht mit dem im Zertifikat angegebenen Hostnamen überein + Soll diesem Zertifikat trotzdem vertraut werden? + Das Zertifikat konnte nicht gespeichert werden Details Ausblenden Ausgestellt für: @@ -315,19 +324,20 @@ Unerwarteter Fehler beim Abspielen von %1$s Ort: Gültigkeit: Von: - An: + Bis: Signatur: Algorithmus: - Dieser Hash-Algorithmus ist auf Ihrem Handy nicht Verfügbar. + Dieser Algorithmus-Auszug ist auf Ihrem Handy nicht verfügbar. Fingerabdruck: - Es ist ein Problem beim Laden des Zertifikats aufgetreten. + Beim Laden des Zertifikats ist ein Fehler aufgetreten. Das Zertifikat konnte nicht angezeigt werden. - Keine Informationen über den Fehler Dies ist ein Platzhalter platzhalter.txt + PNG-Bild 389 KB - 18.05.2012 12:23 + 18.5.2012 12:23 12:23:45 Nur über W-Lan hochladen @@ -336,40 +346,49 @@ Unerwarteter Fehler beim Abspielen von %1$s Nur während des Ladens hochladen Nur während des Ladens hochladen /SofortUpload - Dateikonflikt + Dateikonfilikt + Welche Datei soll behalten werden? Wenn Sie beide Versionen wählen, wird der lokalen Datei eine Zahl am Ende des Dateinamens angefügt. Beide behalten - lokale Version - Server-Version + Lokale Version + Serverversion Entschuldigung. Bildvorschau Bild kann nicht angezeigt werden %1$s konnte nicht in den lokalen %2$s Ordner kopiert werden - Pfad zum sofortigen Bilder-Upload - Lokaler Ordner - Server-Ordner - Verwende Unterordner - Speichere in Unterordnern basierend auf Jahr und Monat + Sofort-Upload-Ordner + Lokales Verzeichnis + Entferntes Verzeichnis + Unterordner benutzen + In Unterordnern speichern, basierend auf Jahr und Monat Teilen ist auf Ihrem Server nicht aktiviert. Bitte kontaktieren Sie den Administrator. - Teilen nicht möglich. Prüfen Sie, ob die Datei existiert + Teilen nicht möglich. Prüfe, ob die Datei existiert Es ist ein Fehler beim Freigeben der Datei oder des Ordners aufgetreten. - Entfernen der Freigabe nicht möglich. Prüfen Sie, ob die Datei existiert + Entfernen der Freigabe nicht möglich. Prüfe, dass die Datei existiert Es ist ein Fehler beim Entfernen der Freigabe für diese Datei oder den Ordner aufgetreten. - Aktualisierung der Datei nicht möglich. Prüfen Sie, ob die Datei existiert + Aktualisierung der Datei nicht möglich. Prüfe, ob die Datei existiert Es ist ein Fehler beim Aktualisieren der Freigabe aufgetreten Passwort eingeben - Sie müssen ein Passwort eingeben + Si müssen ein Passwort eingeben Senden Link kopieren In die Zwischenablage kopiert + Kein Text zum Kopieren in die Zwischenablage empfangen Unerwarteter Fehler beim Kopieren in die Zwischenablage Text von %1$s kopiert - Ihnen fehlt die Erlaubnis %s + Kritischer Fehler: Operationen können nicht ausgeführt werden + + Es ist ein Fehler beim Verbinden mit dem Server aufgetreten. + Es ist ein Fehler beim Warten auf den Server aufgetreten, die Operation konnte nicht abgeschlossen werden + Es ist ein Fehler beim Warten auf den Server aufgetreten, die Operationkonnte nicht abgeschlossen werden + Die Operation kann nicht abgeschlossen werden, der Server ist nicht erreichbar + + Dir fehlt die Erlaubnis %s diese Datei umzubenennen diese Datei zu löschen diese Datei zu teilen @@ -395,38 +414,54 @@ Unerwarteter Fehler beim Abspielen von %1$s FEHLER: Datei kann nicht gelesen werden FEHLER: Nextcloud Ordner existiert bereits FEHLER: Migration fehlgeschlagen + FEHLER: Während der Aktualisierung des Indexes + + Datenordner existiert bereits, was soll geschehen? + Überschreiben + Verwende bestehenden + Konten Konto hinzufügen Konten verwalten - Protokolle - Verlauf senden - %1$s Android-App Meldungen - Lade Daten … + Die gesicherte Verbindung wird durch eine ungesicherte Route geleitet. - Authentifizierung erforderlich + Protokolle + versende die Chronik + Es wurde keine App gefunden die Logs verschicken kann. Bitte installiere eine App die E-Mails verschicken kann. + %1$s Android-App Meldungen + Daten werden geladen … + + Legitimierung benötigt Falsches Passwort Verschieben Kopieren + Noch nichts vorhanden. Sie können einen Ordner hinzufügen. Auswählen - Es ist ein Fehler beim Verschieben dieser Datei oder dieses Ordners aufgetreten. + Verschieben nicht möglich. Prüfe, ob die Datei existiert + Es ist nicht möglich, einen Ordner in einen seiner Unterordner zu verschieben + Die Datei ist bereits im Zielordner vorhanden + Es ist ein Fehler beim Verschieben der Datei oder des Ordners aufgetreten. um diese Datei zu verschieben - Kopieren nicht möglich. Bitte überprüfen Sie, ob die Datei existiert - Es ist ein Fehler beim Kopieren dieser Datei oder dieses Ordners aufgetreten - um diese Datei zu kopieren + Kopieren nicht möglich. Prüfe, dass die Datei existiert + Es ist nicht möglich, einen Ordner in einen seiner Unterordner zu kopieren + Die Datei existiert bereits im Zielverzeichnis + Es ist ein Fehler beim Kopieren der Datei oder des Ordners aufgetreten. + diese Datei zu kopieren - Sofortiges Hochladen + sofort hochladen Details - Bei der Synchronisation konnte %1$s Ordner nicht fertig gestellt werden + Video Speicherpfad wählen + Bei der Synchronisation konnte %1$s Ordner nicht fertig gestellt werden geteilt - Mit Ihnen + Mit Dir - %1$s hat \"%2$s\" mit Ihnen geteilt - \"%1$s\" wurde mit Ihnen geteilt + %1$s hat \"%2$s\" mit Dir geteilt + \"%1$s\" wurde mit Dir geteilt Verbindung aktualisieren Serveradresse @@ -444,8 +479,8 @@ Unerwarteter Fehler beim Abspielen von %1$s %1$d Dateien, %2$d Ordner Originaldatei wird… Originaldatei wird… - Datei kopieren - Datei verschieben + kopiere Datei + verschiebe Datei Alle auswählen im Originalordner behalten @@ -455,27 +490,29 @@ Unerwarteter Fehler beim Abspielen von %1$s Allgemein Teilen - %1$s teilen - Mit Benutzern und Gruppen teilen - Bis jetzt hast du noch keine Dateien mit anderen geteilt - Benutzer oder Gruppe hinzufügen + Teile %1$s + Mit Benutzern oder Gruppen teilen + Es wurden noch keine Dateien mit Benutzern geteilt + Füge Benutzer oder Gruppe hinzu Link teilen - Ein Ablaufdatum setzen + Setze ein Ablaufdatum + Passwortschutz Gesichert Bearbeitung erlauben Dateiliste verbergen - Link erstellen - Teilen mit … - Teilen mit %1$s + Link erhalten + Teile mit … + Teile mit %1$s Suche - Nach Benutzern und Gruppen suchen + Nutzer und Gruppen suchen %1$s (Gruppe) - %1$s (entfernte Freigabe) + %1$s (remote) %1$s (E-Mail) - %1$s ( auf %2$s ) + %1$s ( at %2$s ) + Entschuldigung, Ihre Serverversion erlaubt das Teilen mit Nutzern innerhalb der Clients nicht. \nBitte kontaktieren Sie Ihren Administrator kann teilen kann bearbeiten erstellen @@ -484,34 +521,50 @@ Unerwarteter Fehler beim Abspielen von %1$s Freigabe löschen Erledigt + Fehlgeschlagene erneut versuchen Entferne Fehlversuche - Zur Rasteransicht wechseln - Zur Listenansicht wechseln + Entferne erfolgreiche Uploads + Alles aufräumen - Speicher verwalten - Lösche Daten + Rasteransicht + Listenansicht + + Verwalte Speicherplatz + Einstellungen, Datenbank und Server-Zertifikate von %1$s\'s Daten werden dauerhaft gelöscht.\n\nHerunter geladene Dateien bleiben unangetastet.\n\nDieser Vorgang kann eine Zeit dauern. + Daten löschen Einige Dateien konnten nicht gelöscht werden. + Sie haben nicht die erforderlichen Rechte, um Dateien hoch- oder herunterzuladen. + Die Datei wurde im lokalen Dateisystem nicht gefunden Wollen Sie die ausgewählten Einträge wirklich löschen? Wollen Sie die ausgewählten Einträge und deren Inhalte wirklich löschen? + Warte auf das Aufladen des Gerätes Suche Dies ist eine Nextcloud Funktion, bitte updaten. Mehr - Auto-Upload + Automatisches Hochladen Mitmachen + Hilf uns Testen + Fehler gefunden? Komisches Verhalten? Fehler melden auf Github - Testen Sie die Beta-Version - Vorabversionen + Interessiert uns beim Test der nächsten Version zu unterstützen? + Teste die Entwicklerversion + Dies beinhaltet neue Funktionalitäten und ist nicht vollumfänglich qualitätsgesichert. Es können daher Fehler/Bugs auftreten, melde uns diese bitte. + Vorabversion + Eine Vorabversion, auch Release Candidate (RC) genannt, ist ein stabiler Stand der kommenden, finalen Version. Ein Test in der eigenen Umgebung hilft uns diese Stabilität sicherzustellen. Melden Sie sich als Tester im Play Store an oder suchen und installieren Sie die passende Version bei F-Droid unter „Versionen“. Aktiv etwas beitragen - An Diskussionen im IRC teilnehmen: <a href=\"%1$s\">#nextcloud-mobile</a> - Helfen Sie anderen im <a href="%1$s">Forum</a> - Die App <a href=\"%1$s\">übersetzen</a> + An Chats teilnehmen auf IRC: <a href="%1$s">#nextcloud-mobile</a> + Hilf anderen im <a href="%1$s">Forum</a> + Die App <a href="%1$s">Übersetzen</a> + Zum Überprüfen, Ändern und Schreiben von Quellcode schaue bitte unter <a href=\"https://github.com/nextcloud/android/blob/master/CONTRIBUTING.md\">CONTRIBUTING.md</a> für weitere Details. Verschieben nach… Kopieren nach… - Ordner auswählen… - Ordner laden… - Keine Medienordner gefunden. + Wähle Verzeichnis… + Lade Verzeichnisse… + Keine Medienverzeichnisse gefunden. + Einstellungen Auto-Hochladen Einstellungen + Sofortiger Upload wurde vollständig überarbeitet. Bitte über das Hauptmenü zum Auto Upload gehen und neu configurieren. Bitte entschuldige die Unannehmlichkeiten.\n\nViel Vergnügen mit den neuen und erweiterten Möglichkeiten des Auto Uploads. Für %1$s %d ausgewählt @@ -523,13 +576,14 @@ Unerwarteter Fehler beim Abspielen von %1$s Lade Benachrichtigungen… Keine Benachrichtigungen - Bitte sehen Sie später noch einmal nach. + Bitte später noch einmal nachsehen. + Dateinamen und -typ zum Hochladen eingeben Dateiname Dateityp - Schnipsel-Textdatei (.txt) - Website-Verknüpfungsdatei (%s) - Google Maps-Verknüpfungsdatei (%s) + Schnipsel Textdatei (.txt) + Internet Abkürzungs-Datei (%s) + Google Maps Abkürzungs-Datei (%s) Standard SD Karte %1$d @@ -540,6 +594,8 @@ Unerwarteter Fehler beim Abspielen von %1$s Ein sicheres Zuhause für alle Ihre Daten + Zugriff, Freigabe & Schutz Ihrer Dateien zu Hause und in Ihrem Unternehmen. + Mehrfachkonto Verbinden Sie sich mit all Ihren Clouds @@ -553,6 +609,7 @@ Unerwarteter Fehler beim Abspielen von %1$s Vollständiger Name + E-Mail Telefonnummer Adresse Webseite @@ -562,16 +619,23 @@ Unerwarteter Fehler beim Abspielen von %1$s Bislang keine Aktivitäten + Dieser Stream zeigt Ereignisse wie\nHinzugekommenes, Änderungen und Freigaben an Fehler aufgetreten Über + Kontakte-Sicherung + Sicherung jetzt erstellen Letztes Backup wiederherstellen Wiederherstellen Sicherung Adressen-Sicherung Letzte Sicherung + Leseberechtigung auf Kontakte erforderlich + Schreibberechtigung auf Kontakte erforderlich Adressen wiederherstellen Ausgewählte Adressen wiederherstellen + Konto für den Import auswählen + Keine Berechtigung, es wurde nichts importiert! Datum auswählen nie Keine Datei gefunden @@ -580,4 +644,7 @@ Unerwarteter Fehler beim Abspielen von %1$s Neue Benachrichtigung erhalten - + Abmelden + + + diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml index 81cad2d864..9d3e664ec8 100644 --- a/src/main/res/values-de/strings.xml +++ b/src/main/res/values-de/strings.xml @@ -283,7 +283,6 @@ Umbenennen Entfernen Möchtest Du %1$s wirklich entfernen? - Soll %1$s und dessen Inhalt wirklich entfernt werden? Nur lokal Entfernt Entfernen fehlgeschlagen @@ -557,6 +556,7 @@ An Chats teilnehmen auf IRC: <a href="%1$s">#nextcloud-mobile</a> Hilf anderen im <a href="%1$s">Forum</a> Die App <a href="%1$s">Übersetzen</a> + Zum Überprüfen, Ändern und Schreiben von Quellcode schaue bitte unter <a href=\"https://github.com/nextcloud/android/blob/master/CONTRIBUTING.md\">CONTRIBUTING.md</a> für weitere Details. Verschieben nach… Kopieren nach… Wähle Verzeichnis… diff --git a/src/main/res/values-es-rMX/strings.xml b/src/main/res/values-es-rMX/strings.xml index f5a72dc0e6..cd48027639 100644 --- a/src/main/res/values-es-rMX/strings.xml +++ b/src/main/res/values-es-rMX/strings.xml @@ -283,7 +283,6 @@ en los últimos 7 días. Renombrar Eliminar ¿Realmente desea eliminar %1$s? - ¿Desea realmente eliminar %1$s y sus contenidos? Sólo local Eliminado Falla al eliminar diff --git a/src/main/res/values-nl/strings.xml b/src/main/res/values-nl/strings.xml index d580d28513..fe5dd45c5a 100644 --- a/src/main/res/values-nl/strings.xml +++ b/src/main/res/values-nl/strings.xml @@ -46,10 +46,6 @@ Vingerafdrukbeveiliging Er zijn geen vingerafdrukken ingesteld. Verborgen bestanden weergeven - Directe upload van afbeeldingen - Direct uploaden van foto\'s genomen met de camera - Directe upload van video\'s - Direct uploaden van video\'s opgenomen met de camera Logging inschakelen Dit wordt gebruikt om problemen te loggen. Logging-geschiedenis @@ -58,23 +54,15 @@ Synchroniseren agenda & contactpersonen DAVdroid (v1.3.0+) voor huidige account instellen Serveradres voor dit account kon niet worden gevonden voor DAVdroid - Geen Google Play- of F-Droid-app geïnstalleerd - Agenda- & contactpersonensynchronisatie met succes ingesteld + Noch F-droid, noch Google Play is geïnstalleerd Help - Aanbevelen bij een vriend Feedback afdruk - Onthoud de share locatie - Onthoud de laatste upload locatie - - Probeer %1$s op je smartphone! - Ik nodig je uit om eens %1$s op je smartphone te proberen!\nDownload hier: %2$s - - Controleer server + Probeer %1$s op je smartphone! + Controleer server Serveradres https://… Gebruikersnaam Wachtwoord - Heb je nog geen server?\nKlik hier om er een van een provider te krijgen Bestanden Verbinden Uploaden @@ -86,42 +74,29 @@ Niets te uploaden %1$s kan niet een stuk tekst als bestand uploaden. Ontvangen gegevens bevatten geen geldig bestand. - Bestand kan niet worden geüpload + Dit bestand kan niet worden geüpload %1$s heeft geen toestemming om een ontvangen bestand te lezen - Het te uploaden bestand is hier niet. Controleer of het bestand wel bestaat. - Er trad een fout op bij het kopiëren van het bestand naar een tijdelijke map. Probeer het opnieuw te versturen. Uploadoptie: Verplaats bestand naar Nextcloud-map Bewaar het bestand in de bronmap Verwijder bestand uit bronmap seconden geleden - Hier zijn geen bestanden - Upload bestanden of synchroniseer met je apparaten! - Maak enkele bestanden favoriet of synchroniseer met je apparaten! - Bestanden en mappen gemarkeerd als favoriet worden hier getoond - Geen favoriete bestanden gevonden voor je zoekopdracht! + Hier geen bestanden Laden … - Geen app gevonden voor dit bestandsformaat! Er staan geen bestanden in deze map. Geen resultaten in deze map Geen resultaten - Nog geen favorieten + Nog niets als favoriet gemarkeerd Nog niets gedeeld Bestanden en mappen die je deelt, worden hier getoond Geen video\'s Geen foto\'s - In een andere map kijken? - Geen bestanden gevonden die  de laatste 7 dagen zijn gewijzigd - Geen gewijzigde bestanden gevonden voor je zoekopdracht die de laatste 7 dagen zijn gewijzigd! - Geen recent toegevoegde bestanden gevoden - Geen recent toegevoegde bestanden gevonden voor je zoekopdracht! - Upload enkele foto\'s of activeer auto-upload! - Geen foto\'s voor je zoekopdracht gevonden! - Upload enkele videos of activeer auto-upload! - Geen video\'s voor je zoekopdracht gevonden! + Misschien staat het in een andere map? + Geen bestanden gevonden die de afgelopen 7 dagen werden gewijzigd + Je zoekopdracht vond geen bestanden die + in de laatste 7 dagen werden gewijzigd. + Geen recent toegevoegde bestanden gevonden Geen uploads beschikbaar - Upload bestanden of activeer directe uploads! - Upload enkele gegevens of activeer auto upload! map mappen bestand @@ -133,14 +108,12 @@ Aangepast: Downloaden Synchroniseren - Bestand is tijdens het uploaden hernoemd naar %1$s - Lijstoverzicht Delen Ja Nee OK Upload verwijderen - Upload opnieuw proberen + Opnieuw uploaden Synchronisatie annuleren Annuleren Terug @@ -160,10 +133,10 @@ Mapnaam Uploaden … %1$d%% Uploaden van %2$s - Uploaden gelukt + Geüpload %1$s geüpload Uploaden mislukt - Uploaden van %1$s kon niet voltooid worden + Kon %1$s niet uploaden Uploaden mislukt, je moet opnieuw inloggen Uploads Huidige @@ -180,37 +153,32 @@ Lokaal bestand niet gevonden Permissiefout Conflict - App werd gesloten + App afgesloten Onbekende fout - Wachten op wifi-verbinding + Wachten op Wi-Fi verbinding Wachten om te uploaden Downloaden … %1$d%% Downloaden van %2$s - Downloaden gelukt + Gedownload %1$s gedownload. Downloaden mislukt - Downloaden van %1$s kon niet worden voltooid Nog niet gedownload Downloaden mislukt, je moet opnieuw inloggen Account kiezen Synchronisatie mislukt - Synchronisatie mislukt, je moet opnieuw inloggen - Synchronisatie van %1$s kon niet worden voltooid - Ongeldig wachtwoord voor %1$s + Onjuist wachtwoord voor %1$s Conflicten gevonden %1$d gesynchroniseerd te houden bestanden konden niet worden gesynchroniseerd Gesynchroniseerd te houden bestanden mislukt Inhoud van %1$d bestanden kon niet worden gesynchroniseerd (%2$d conflicten) Een paar lokale bestanden werden vergeten %1$d bestanden uit de %2$s-map konden niet worden gekopieerd naar - Vanaf versie 1.3.16 worden bestanden die vanaf dit apparaat worden geüpload ook gekopieerd naar de lokale map %1$s om gegevensverlies te voorkomen als een enkel bestand wordt gesynchroniseerd met meerdere accounts.\n\nDoor deze aanpassing werden alle bestanden die met een eerdere versie zijn geüpload gekopieerd naar de map %2$s. Maar een fout voorkwam het succesvol afronden van deze actie tijdens het synchroniseren. Je kunt de/het bestand(en) laten staan zoals ze nu zijn en de link naar %3$s verwijderen, of je kunt de bestanden verplaatsen naar de map %1$s en de link naar %4$s laten staan.\n\nHieronder staan de lokale bestanden en de externe bestanden in %5$s waar ze naar verwezen. - Map %1$s bestaat niet meer + Map %1$s bestaat niet meer Alles verplaatsen Alle bestanden zijn verplaatst Een paar bestanden konden niet worden verplaatst Lokaal: %1$s Extern: %1$s - Er is niet genoeg ruimte om de geselecteerde bestanden te kopieren naar %1$s. Wilt u ze in plaats daarvan verplaatsen? Voer je toegangscode in Toegangscode invoeren @@ -228,16 +196,8 @@ %1$s afspelen beëindigd Geen mediabestand gevonden Geen account opgegeven - Bestand niet in een geldig account + Het bestand hoort niet bij een geldig account Niet-ondersteunde mediacodec - Mediabestand kon niet worden gelezen - Mediabestand niet goed gecodeerd - Time-out tijdens het spelen - Mediabestand kan niet worden gestreamd - Mediabestand kan niet worden afgespeeld met de standaard mediaplayer - Beveiligingsfout bij afspelen %1$s - Invoerfout bij afspelen %1$1s - Onverwachte fout bij afspelen %1$s Terugpoelknop Speel- of pauzeknop Doorspoelknop @@ -249,31 +209,24 @@ Verbinding tot stand gebracht Verbinding testen Foutieve serverconfiguratie - Er bestaat al een account voor deze gebruiker en server op dit apparaat De opgegeven gebruiker komt niet overeen met de gebruiker van dit account Onbekende fout opgetreden! - Kon host niet vinden - Serverinstantie niet gevonden + Kon server niet vinden + Server niet gevonden De server reageerde niet op tijd - Verkeerd serveradresformaat SSL-initialisatie mislukt - Kon de identiteit van de SSL-server niet verifiëren Niet-herkende serverversie - Kon verbinding niet tot stand brengen Veilige verbinding tot stand gebracht Verkeerde gebruikersnaam of wachtwoord Autorisatie niet succesvol Toegang geweigerd door autorisatieserver - Onverwachte toestand; voer nogmaals het serveradres in Je autorisatie is verstreken. Autoriseer opnieuw Voer het huidige wachtwoord in Je sessie is verstreken. Verbind opnieuw - Verbinden met authenticatieserver … De server ondersteunt deze authenticatiemethode niet %1$s ondersteunt het gebruik van meerdere accounts niet - Je server geeft geen goede userid terug, neem contact op met je beheerder Kan niet autenticeren tegen deze server - Het account bestaat nog niet in dit apparaat + Account bestaan nog niet op dit apparaat Offline beschikbaar maken Niet langer offline beschikbaar maken @@ -282,28 +235,25 @@ Hernoemen Verwijderen Wil je %1$s echt verwijderen? - Wil je %1$s en de inhoud ervan werkelijk verwijderen? Alleen lokaal - Succesvol verwijderd + Verwijderd Verwijderen mislukt Voer een nieuwe naam in - Lokale kopie kon niet worden hernoemd; probeer een andere naam - Hernoemen kon niet worden voltooid - Extern bestand kon niet worden gecontroleerd + Kon de server geen nieuwe naam geven + Kon extern bestand niet controleren Bestandsinhoud is al gesynchroniseerd - Map kon niet worden aangemaakt + Kan map niet aanmaken Verboden tekens: / \\ < > : " | ? * De bestandsnaam bevat ten minste één ongeldig teken Bestandsnaam mag niet leeg zijn - Even geduld + Even geduld... Opgeslagen inloggegevens nakijken - Onverwacht probleem; probeer het bestand met een andere app te selecteren - Er werd geen bestand geselecteerd + Geen bestand geselecteerd Verstuur link naar … Bestand vanaf privéopslag kopiëren Inloggen met oAuth2 - Verbinden met oAuth2-server … + Verbinden met OAuth 2 server… De identiteit van de site kan niet worden gecontroleerd - Het servercertificaat wordt niet vertrouwd @@ -311,7 +261,6 @@ - Het servercertificaat is nog niet geldig - De URL komt niet overeen met de hostname in het certificaat Wil je dit certificaat alsnog vertrouwen? - Het certificaat kon niet worden opgeslagen Details Verbergen Uitgegeven aan: @@ -335,26 +284,25 @@ Dit is een plaatshouder plaatshouder.txt - PNG-afbeelding + PNG afbeelding 389 KB 2012/05/18 12:23 12:23:45 - Alleen via wifi uploaden - Afbeeldingen alleen via WiFi uploaden - Videos alleen via WiFi uploaden - Alleen tijdens opladen uploaden - Alleen tijdens opladen uploaden + Alleen uploaden via Wi-Fi + Alleen afbeeldingen uploaden via Wi-Fi + Alleen video\'s uploaden via Wi-Fi + Alleen uploaden bij opladen + Alleen uploaden bij opladen /InstantUpload Bestandsconflict - Welke bestanden wil je bewaren? Als je beide versies selecteert zal het lokale bestand een volgnummer aan de naam toegevoegd krijgen. Beide bewaren lokale versie serverversie - Sorry hiervoor! + Sorry. Voorvertoning van afbeelding - Afbeelding kan niet worden getoond + Kan afbeelding niet tonen %1$s kon niet worden gekopieerd naar de lokale map %2$s Directe-uploadmap @@ -363,7 +311,6 @@ Gebruik submappen Opslaan in submappen, gebaseerd op jaar en maand - Sorry, delen is niet ingeschakeld op jouw server. Neem contact op met je beheerder. Kan dit niet delen. Controleer of dit bestand wel bestaat Er trad een fout op bij je poging dit bestand of deze map te delen Kan delen niet beëindigen. Ga na of het bestand bestaat @@ -377,56 +324,32 @@ Link kopiëren Gekopieerd naar het klembord - Geen tekst ontvangen om te kopiëren naar het klembord Onverwachte fout bij het kopiëren naar het klembord Tekst gekopieerd uit %1$s - Kritieke fout: kan de acties niet uitvoeren - - Er trad een fout op bij het verbinden met de server. - Er trad een fout op bij het wachten op de server, de verwerking kon niet plaatsvinden - Er trad een fout op bij het wachten op de server, de verwerking kon niet plaatsvinden - De verwerking kon niet plaatsvinden, de server is niet beschikbaar - Je mist autorisatie %s om dit bestand te hernoemen om dit bestand te verwijderen om dit bestand te delen om dit bestand niet meer te delen om deze share bij te werken - om dit bestand te creëren - om dit bestand in deze map te uploaden Dit bestand is niet langer beschikbaar op de server Opslagpad bijwerken Afronden - Voorbereiden van migratie … Doelmap controleren … - Accountconfiguratie opslaan … - Wachten op onvoltooide synchronisaties … Gegevens verplaatsen … Index bijwerken … Opruimen … - Accountconfiguratie herstellen … Afgerond - FOUT: Niet genoeg ruimte - FOUT: Bestand niet beschrijfbaar - FOUT: Bestand niet leesbaar FOUT: Nextcloudmap bestaat al - FOUT: Tijdens migratie - FOUT: Tijdens bijwerken index - - Gegevensmap bestaat al, wat te doen? - Overschrijven - Bestaande gebruiken + Vervangen + Gebruiken Accounts Account toevoegen Accounts beheren - De beveiligde verbinding is omgeleid via een onveilige route. - - Logs + Logs Geschiedenis versturen - Geen applicatie gevonden voor het versturen van de logs. Installeer een e-mailapplicatie. %1$s-Android-app-logs Gegevens laden … @@ -434,27 +357,20 @@ Onjuist wachtwoord Verplaatsen Kopiëren - Het is hier leeg. Je kan een map toevoegen! Kiezen - Kan niet verplaatsen. Ga na of het bestand wel bestaat - De map kan niet naar een onderliggende map worden verplaatst - Het bestand bestaat al in de doelmap Er trad een fout op bij het verplaatsen van dit bestand of deze map om dit bestand te verplaatsen Kan niet kopiëren. Ga na of het bestand wel bestaat - Een map kan niet naar een onderliggende map worden gekopieerd - Het bestand bestaat al in de doelmap Er trad een fout op bij het kopiëren van dit bestand of deze map om dit bestand te kopiëren Direct uploaden Details - Directe-uploadmap voor video\'s - Synchronisatie van map %1$s kon niet worden voltooid + Synchronisatie van map %1$s kon niet worden voltooid gedeeld met jou @@ -495,7 +411,6 @@ Voeg gebruiker of groep toe Deel link Stel vervaldatum in - Beveilig met wachtwoord Beveiligd Bewerken toestaan Verberg bestandsoverzicht @@ -511,7 +426,6 @@ %1$s (email) %1$s ( op %2$s ) - Helaas, je serverversie staat niet toe om binnen clients te delen met gebruikers.\nNeem contact op met je beheerder kan delen kan bewerken creëer @@ -520,50 +434,37 @@ Stop met delen gedaan - Mislukte opnieuw proberen Mislukte opschonen - Gelukte opschonen - Alle voltoooide opschonen - Rasterindeling Lijstindeling Beheer ruimte - Instellingen, database en servercertificaten van de data van %1$s zullen permanent worden verwijderd. \n\nGedownloade bestanden blijven onaangeroerd.\n\nDit proces kan even duren. Gegevens verwijderen Sommige bestanden konden niet worden verwijderd - Aanvullende permessies vereist voor het uploaden en downloaden van bestanden. - Het bestand is niet te vinden binnen het lokale bestandssysteem. Wil je de geselecteerde objecten echt verwijderen? Wil je de geselecteerde objecten en hun inhoud echt verwijderen? - Wachten to apparaat wordt opgeladen Zoeken Dit is een Nextcloud-optie, gelieve te updaten. Meer weten Automatisch uploaden Meedoen - Help ons testen - Foutje gevonden? Of iets raars? + Help bij testen + Bug gevonden? Rare dingen? Meld het op Github - Geïnteresseerd om ons te helpen de volgende versie te testen? Test de dev versie - Dit omvat alle komende opties en is zeer \'bleeding edge\'. Bugs/fouten kunnen voorkomen en in dat geval vragen we je die aan ons te melden. Release candidate - De Release Candidate (RC) is een kopie van de komende release en zou stabiel moeten zijn. Testen van jouw installatie kan ons helpen om dit te bevestigen. Meld je aan om te testen op de Play Store of bekijk handmatig de \"versies\"-sectie op F-Droid. Actief meedoen Doe mee met de chat op IRC: <a href="%1$s">#nextcloud-mobile</a> Help andere gebruikers in de <a href="%1$s">forums</a> <a href="%1$s">Vertaal</a> de app - Doe mee als ontwikkelaar, zie <a href="https://github.com/nextcloud/android/blob/master/CONTRIBUTING.md">CONTRIBUTING.md</a> voor details + Review, voeg toe en schrijf code, bekijk <a href=\"https://github.com/nextcloud/android/blob/master/CONTRIBUTING.md\">CONTRIBUTING.md</a> voor details Verplaats naar … Kopieer naar … Kies map … Mappen laden … Geen mediamappen gevonden. - Voorkeuren voor automatisch uploaden Instellingen - Direct uploaden is helemaal herzien. Bekijk het hoofdmenu en herconfigureer je auto-uploadfunctie. Onze excuses voor het ongemak.\n\nVeel plezier met de nieuwe en meer uitgebreide auto-upload-mogelijkheden! Voor %1$s %d geselecteerd @@ -577,7 +478,6 @@ Geen meldingen Controleer later opnieuw. - Opgeven upload bestandsnaam en bestandstype Bestandsnaam Bestandstype Snippet tekstbestand(.txt) @@ -593,8 +493,6 @@ Een veilige plek voor al je gegevens - Benader, deel & beveilig je gegevens thuis en binnen je organisatie - Meerdere accounts Verbind met al je clouds @@ -618,23 +516,17 @@ Nog geen activiteit - Deze stream laat gebeurtenissen zoals\ntoevoegingen, veranderingen & gedeelde bestanden zien Er heeft zich een fout voorgedaan Over - Contactpersonen backup - Nu backupppen + Nu Herstel de laatste backup Herstellen Backuppen Contactpersonen backup Laatsts backup - Leesrechten voor contactpersonen vereist - Schrijfrechten voor contactpersonen vereist Herstellen contactpersonen Herstel de geselecteerde contactpersonen - Kies een account voor import - Geen permissies, niets geïnporteerd! Kies datum nooit Geen bestand gevonden @@ -643,6 +535,7 @@ Nieuwe meldingen ontvangen + Uitloggen diff --git a/src/main/res/values-pt-rBR/strings.xml b/src/main/res/values-pt-rBR/strings.xml index f2d7de2e20..07f1ced923 100644 --- a/src/main/res/values-pt-rBR/strings.xml +++ b/src/main/res/values-pt-rBR/strings.xml @@ -283,7 +283,6 @@ Renomear Excluir Deseja realmente excluir %1$s? - Quer realmente excluir %1$s de seu conteúdo? Somente local Excluído Erro ao excluir From 13ddc014675c3a2de62ea1996ed2003babd4f7bd Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Sun, 30 Apr 2017 13:02:31 +0200 Subject: [PATCH 37/53] NPE during Activity orientation change --- .../android/ui/activity/ActivitiesListActivity.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/owncloud/android/ui/activity/ActivitiesListActivity.java b/src/main/java/com/owncloud/android/ui/activity/ActivitiesListActivity.java index 0b22e2e40f..59767dd4fb 100644 --- a/src/main/java/com/owncloud/android/ui/activity/ActivitiesListActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/ActivitiesListActivity.java @@ -51,8 +51,8 @@ import com.owncloud.android.lib.common.operations.RemoteOperationResult; import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.lib.resources.activities.GetRemoteActivitiesOperation; import com.owncloud.android.ui.adapter.ActivityListAdapter; -import com.owncloud.android.utils.DisplayUtils; import com.owncloud.android.utils.AnalyticsUtils; +import com.owncloud.android.utils.DisplayUtils; import java.io.IOException; import java.util.ArrayList; @@ -74,10 +74,8 @@ public class ActivitiesListActivity extends FileActivity { @BindView(R.id.empty_list_view) public LinearLayout emptyContentContainer; - @BindView(R.id.swipe_containing_list) public SwipeRefreshLayout swipeListRefreshLayout; - @BindView(R.id.swipe_containing_empty) public SwipeRefreshLayout swipeEmptyListRefreshLayout; @BindView(R.id.empty_list_view_text) @@ -111,9 +109,13 @@ public class ActivitiesListActivity extends FileActivity { setContentView(R.layout.activity_list_layout); unbinder = ButterKnife.bind(this); + // setup toolbar setupToolbar(); + swipeEmptyListRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_containing_empty); + swipeListRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_containing_list); + // setup drawer setupDrawer(R.id.nav_activity); getSupportActionBar().setTitle(getString(R.string.drawer_item_activities)); @@ -197,8 +199,7 @@ public class ActivitiesListActivity extends FileActivity { RemoteOperation getRemoteNotificationOperation = new GetRemoteActivitiesOperation(); Log_OC.d(TAG, "BEFORE getRemoteActivitiesOperation.execute"); - final RemoteOperationResult result = - getRemoteNotificationOperation.execute(mClient); + final RemoteOperationResult result = getRemoteNotificationOperation.execute(mClient); if (result.isSuccess() && result.getData() != null) { final ArrayList activities = result.getData(); From a7eab02d088d7b57bbb5b9f6188a3a16dc4d6df6 Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Sun, 30 Apr 2017 19:40:27 +0200 Subject: [PATCH 38/53] Fix codacy stuff --- .../owncloud/android/datamodel/ArbitraryDataProvider.java | 5 +++-- .../android/ui/activity/ContactsPreferenceActivity.java | 3 --- .../ui/fragment/contactsbackup/ContactsBackupFragment.java | 6 +++--- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/owncloud/android/datamodel/ArbitraryDataProvider.java b/src/main/java/com/owncloud/android/datamodel/ArbitraryDataProvider.java index 4dc4111959..9ea88704dc 100644 --- a/src/main/java/com/owncloud/android/datamodel/ArbitraryDataProvider.java +++ b/src/main/java/com/owncloud/android/datamodel/ArbitraryDataProvider.java @@ -1,9 +1,10 @@ /** * Nextcloud Android client application - *

+ * * Copyright (C) 2017 Tobias Kaminsky + * Copyright (C) 2017 Mario Danic * Copyright (C) 2017 Nextcloud. - *

+ * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE * License as published by the Free Software Foundation; either diff --git a/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java b/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java index b69304a154..3a062faadc 100644 --- a/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java @@ -33,7 +33,6 @@ import com.evernote.android.job.JobManager; import com.evernote.android.job.JobRequest; import com.evernote.android.job.util.support.PersistableBundleCompat; import com.owncloud.android.R; -import com.owncloud.android.datamodel.ArbitraryDataProvider; import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.services.ContactsBackupJob; @@ -56,8 +55,6 @@ public class ContactsPreferenceActivity extends FileActivity implements FileFrag public static final String PREFERENCE_CONTACTS_AUTOMATIC_BACKUP = "PREFERENCE_CONTACTS_AUTOMATIC_BACKUP"; public static final String PREFERENCE_CONTACTS_LAST_BACKUP = "PREFERENCE_CONTACTS_LAST_BACKUP"; - private ArbitraryDataProvider arbitraryDataProvider; - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); diff --git a/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java index ce709d54ea..150826763a 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java @@ -117,7 +117,7 @@ public class ContactsBackupFragment extends FileFragment implements DatePickerDi onCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - if (checkAndAskForContactsReadPermission(PermissionUtil.PERMISSIONS_READ_CONTACTS_AUTOMATIC)) { + if (checkAndAskForContactsReadPermission()) { if (isChecked) { setAutomaticBackup(true); } else { @@ -243,7 +243,7 @@ public class ContactsBackupFragment extends FileFragment implements DatePickerDi @OnClick(R.id.contacts_backup_now) public void backupContacts() { - if (checkAndAskForContactsReadPermission(PermissionUtil.PERMISSIONS_READ_CONTACTS_MANUALLY)) { + if (checkAndAskForContactsReadPermission()) { startContactsBackupJob(); } } @@ -284,7 +284,7 @@ public class ContactsBackupFragment extends FileFragment implements DatePickerDi String.valueOf(bool)); } - private boolean checkAndAskForContactsReadPermission(final int permission) { + private boolean checkAndAskForContactsReadPermission() { final ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity(); // check permissions From e44a5d690ccc9472c1259fba391965c3b9a1aa1b Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Mon, 1 May 2017 00:21:49 +0000 Subject: [PATCH 39/53] [tx-robot] updated from transifex --- src/main/res/values-cs-rCZ/strings.xml | 210 +++++++++---------------- src/main/res/values-de-rDE/strings.xml | 2 +- src/main/res/values-de/strings.xml | 2 +- src/main/res/values-el/strings.xml | 162 +++---------------- src/main/res/values-es-rMX/strings.xml | 1 - src/main/res/values-fr/strings.xml | 52 +++++- src/main/res/values-nb-rNO/strings.xml | 1 - src/main/res/values-nl/strings.xml | 52 +++++- src/main/res/values-pt-rBR/strings.xml | 2 +- src/main/res/values-zh-rCN/strings.xml | 172 ++------------------ 10 files changed, 213 insertions(+), 443 deletions(-) diff --git a/src/main/res/values-cs-rCZ/strings.xml b/src/main/res/values-cs-rCZ/strings.xml index 03aa07a1d9..5c9c7c90a6 100644 --- a/src/main/res/values-cs-rCZ/strings.xml +++ b/src/main/res/values-cs-rCZ/strings.xml @@ -13,10 +13,24 @@ Odeslat Seřadit Seřadit podle + Řadit podle + A - Z + Z - A + První nejnovější + První nejstarší + První největší Všechny soubory + Domů + Oblíbené + Fotky Na přístroji + Nedávno přidané + Nedávno změněné + Sdíleno Nastavení Nahrání + Aktivity + Upozornění %1$s z %2$s použito Zavřít Otevřít @@ -25,11 +39,9 @@ Účty Spravovat účty Zámek bezpečnostního kódu + Zámek otiskemprstu + Nebyly nastaveny žádné otisky prstů. Zobrazit skryté soubory - Okamžité nahrávání obrázků - Okamžitě nahrávat vytvořené fotografie - Okamžité nahrávání videa - Okamžitě odesílat nahrané video Povolit logování Použito k zaznamenávání problémů Historie logu @@ -38,23 +50,15 @@ Synchronizovat kalendář & kontakty Nastavit DAVdroid (v1.3.0+) pro aktuální účet Počítačová adresa konta pro DAVdroid nebyla nalezena - Nenainstalován Google Play store nebo F-Droid app - Synchronizace kalendáře & kontaktů úspěšně dokončena Nápověda - Doporučit přátelům Odezva Imprint Zapamatovat umístění sdílení - Zapamatovat poslední umístění pro nahrání sdílených souborů - - Zkuste %1$s na svém chytrém telefonu! - Chtěl bych vás pozvat k používání %1$s na vašem chytrém telefonu!\nKe stažení zde: %2$s - - Ověřit server + Zkuste %1$s na svém chytrém telefonu! + Ověřit server Adresa serveru https://... Uživatelské jméno Heslo - Ještě nemáte server?\nKlikněte sem a získejte ho od poskytovatele Soubory Připojit Nahrát @@ -66,24 +70,18 @@ Žádný soubor k nahrání %1$s neumí nahrát text jako soubor. Obdržená data neobsahují žádný platný soubor. - Soubor nelze nahrát %1$s nemá oprávnění číst přijatý soubor - Soubor k nahrání nebyl v tomto umístění nalezen. Zkontrolujte prosím zda soubor existuje. - Došlo k chybě při kopírování souboru do dočasného adresáře. Zkuste prosím zopakovat odeslání. Nahrát možnost: Přesunout soubor do Nextcloud adresáře Jen uploadovat Uploadovat a vymazat ze zdroje před pár sekundami - Nejsou zde žádné soubory - Nahrajte nějaký obsah, nebo synchronizujte s vašimi zařízeními! Načítání… - Pro tento typ souboru nebyla nalezena aplikace! V tomto adresáři nejsou žádné soubory. V této složce nebylo nic nalezeno - Zkusit hledat v jiné složce? + Žádné výsledky + Zatím není nic oblíbeno Nic k nahrání - Nahrajte nějaký obsah, nebo aktivujte okamžité nahrání! adresář adresářů soubor @@ -95,14 +93,12 @@ Upraven: Stáhnout Synchronizovat - Soubor byl v průběhu odesílání přejmenován na %1$s - Náhled seznamu + Soubor byl během nahrávání přejmenován na %1$s Sdílet Ano Ne OK Odstranit nahrávání - Opakovat nahrání Zrušit synchronizaci Zrušit Zpět @@ -122,10 +118,10 @@ Název adresáře Odesílám … %1$d%% Odesílám %2$s - Odesílání úspěšné + Nahráno %1$s nahráno Odesílání selhalo - Odesílání %1$s nemohlo být dokončeno + Nepodařilo se nahrát %1$s Nahrání selhalo, je třeba se znovu přihlásit Nahrání Aktuální @@ -142,37 +138,32 @@ Místní soubor nenalezen Chyba oprávnění Konflikt - Aplikace byla ukončena + Aplikace ukončena Neznámá chyba - Čekání na wifi připojení + Čeká se na Wi-Fi připojení Čekání na nahrávání Stahuji … %1$d%% Stahuji %2$s - Stažení úspěšné + Staženo %1$s staženo Stažení selhalo - Stažení %1$s nemohlo být dokončeno + Nepodařilo se stáhnout %1$s Ještě nestaženo Stažení selhalo, je třeba se znovu přihlásit Vybrat účet Synchronizace selhala - Synchronizace selhala, je třeba se znovu přihlásit - Synchronizace %1$s nemohla být dokončena - Chybné heslo pro %1$s + Synchronizace se nezdařila, musíte se znovu přihlásit. Nalezeny konflikty %1$d souborů z automatické synchronizace nelze synchronizovat Automatická synchronizace souborů selhala Obsah %1$d souborů nemohl být synchronizován (počet konfliktů: %2$d) Některé místní soubory byly zapomenuty %1$d souborů z %2$s adresáře se nepodařilo zkopírovat do - Od verze 1.3.16 jsou soubory nahrané z tohoto zařízení kopírovány do místního adresáře %1$s, aby se zabránilo ztrátě dat při synchronizaci jednoho souboru s více účty.\n\nVšechny soubory nahrané předchozími verzemi aplikace byly z tohoto důvodu překopírovány do adresáře %2$s. Bohužel se objevila chyba zabraňující dokončení této operace v průběhu synchronizace účtu. Buď můžete soubor(y) ponechat jak jsou a odebrat odkaz do adresáře %3$s, nebo přesunout soubor(y) do adresáře %1$s a zachovat odkaz na %4$s.\n\nNíže je seznam místních i vzdálených souborů v adresáři %5$s, do kterého byly odkázány. - Adresář %1$s již neexistuje Přesunout vše Všechny soubory byly přesunuty Některé soubory nebylo možno přesunout Místní: %1$s Vzdálené: %1$s - Pro zkopírování vybraných souborů do %1$s adresáře není dostatek volného místa. Chcete je místo toho přesunout? Zadejte prosím svůj bezpečnostní kód Zadejte svůj bezpečnostní kód @@ -190,16 +181,10 @@ %1$s přehrávání dokončeno Nenalezen žádný multimediální soubor Neposkytnut žádný účet - Soubor není v platném účtu Nepodporovaný kodek - Multimediální soubor nelze přečíst - Multimediální soubor není správně kódován - Vypršel čas při pokusu o přehrání - Multimediální soubor nelze proudově odesílat - Multimediální soubor nemůže být přehrán s výchozím přehrávačem - Chyba zabezpečení při pokusu o přehrání %1$s - Chyba vstupu při pokusu o přehrání %1$s - Neočekávaná chyba při pokusu o přehrání %1$s + Nepodařilo se přečíst soubor médií + Soubor médií má neplatné kódování + Při pokusu o přehrání %1$s došlo k bezpečnostní chybě Tlačítko Přetočit Tlačítko Přehrát/Pozastavit Tlačítko Rychle vpřed @@ -211,67 +196,50 @@ Spojení navázáno Testuje se připojení Neplatné nastavení serveru - Účet pro stejného uživatele a server již v zařízení existuje Zadaný uživatel neodpovídá uživateli tohoto účtu Nastala neznámá chyba - Nelze najít hostitele - Instance serveru nenalezena + Server nenalezen Serveru trvalo příliš dlouho odpovědět - Chybný formát adresy serveru Inicializace SSL selhala - Nemohu ověřit SSL identitu serveru Nerozpoznaná verze serveru - Nemohu navázat spojení Zabezpečené spojení navázáno Chybné přihlašovací jméno nebo heslo Neúspěšné přihlášení Přístup zamítnut autorizačním serverem - Neočekávaný stav; zadejte prosím znovu adresu serveru Vaše přihlášení vypršelo. Přihlaste se prosím znovu Zadejte prosím aktuální heslo Vaše přihlášení vypršelo. Přihlaste se prosím znovu - Připojování k ověřovacímu serveru ... Server nepodporuje tuto přihlašovací metodu %1$s nepodporuje více účtů - Váš server nevrací správné přihlašovací ID, kontaktujte prosím svého správce systému Na tomto serveru nelze ověřit - V zařízení není zatím nastaven účet - Nastavit jako dostupné offline Zrušit nastavení dostupnosti offline + Nastavit jako oblíbené + Zrušit jako oblíbené Přejmenovat Odstranit Opravdu chcete odstranit %1$s? - Opravdu chcete odstranit %1$s a jeho obsah? Pouze místní - Úspěšně odstraněno + Odstraněno Odstranění nelze dokončit Zadejte nový název - Místní kopii nelze přejmenovat, zkuste jiný nový název - Přejmenování nelze dokončit - Vzdálený soubor nemohl být zkontrolován + Nepodařilo se zkontrolovat vzdálený soubor Obsah souboru je již synchronizován - Adresář nemohl být vytvořen + Nepodařilo se vytvořit složku Zakázané znaky: / \\ < > : \" | ? * Jméno souboru obsahuje aelspoň jeden neplatný znak Název nemůže být prázdný - Počkejte chvíli Ověřování uložených přihlašovacích údajů - Neočekávaný problém - zkuste zvolit soubor jinou aplikací - Žádný soubor nebyl vybrán Odeslat odkaz … Kopírování souboru z privátního úložiště Přihlásit se s oAuth2 - Připojuji se k oAuth2 serveru... - Identitu stránky nelze ověřit - Certifikát serveru je nedůvěryhodný - Certifikátu serveru vypršela platnost - Datum platnosti certifikátu je v budoucnosti - URL neodpovídá hodnotě hostname certifikátu Přejete si přesto tomuto certifikátu důvěřovat? - Certifikát nelze uložit Detaily Skrýt Vydáno pro: @@ -295,25 +263,21 @@ Zástupný text placeholder.txt - Obrázek PNG 389 KB 2012/05/18 12:23 PM 12:23:45 - Nahrávat pouze přes wifi - Nahrávat obrázky pouze přes wifi - Nahrávat videa pouze přes wifi - Nahrávat pouze při nabíjení + Nahrávat obrázky pouze na Wi-Fi Nahrávat pouze při nabíjení /InstantUpload Konflikt souboru - Které soubory chcete ponechat? Pokud zvolíte obě verze, zkopírovaný soubor bude mít název doplněný o číslo. Ponechat oba místní verze serverová verze - Omlouváme se za to! Náhled obrázku + Nelze zobrazit obrázek + %1$s nelze zkopírovat do místního adresáře %2$s Adresář pro okamžité nahrání Místní adresář @@ -321,7 +285,7 @@ Používat podadresáře Ukládat v podadresářích podle roku a měsíce - Je nám líto, ale sdílení není na vašem serveru povoleno. Kontaktujte svého správce systému. + Sdílení není na vašem serveru povoleno. Prosím, kontaktujte vašeho administrátora. Nelze sdílet. Zkontrolujte prosím že soubor existuje Při pokusu o sdílení tohoto souboru či adresáře nastala chyba Nelze ukončit sdílení. Zkontrolujte prosím že soubor existuje @@ -335,56 +299,36 @@ Zkopírovat odkaz Zkopírováno do schránky - Žádný výběr textu pro kopírování do schránky Neočekávaná chyba při kopírování do schránky Text zkopírován z %1$s - Kritická chyba: operace nelze provést - - Při pokusu o připojení k serveru došlo k chybě. - Při čekání na odpověď serveru se vyskytla chyba, operace nemohla být dokončena - Při čekání na odpověď serveru se vyskytla chyba, operace nemohla být dokončena - Operace nemohla být dokončena, server je nedostupný - Nemáte oprávnění %s + Nemáte oprávnění k %s přejmenovat tento soubor smazat tento soubor sdílet tento soubor zrušit sdílení tohoto souboru pro aktualizaci tohoto sdílení - vytvořit tento soubor - nahrávat do tohoto adresáře Tento soubor již není dostupný na serveru Aktualizace cesty k úložišti Dokončit - Příprava na migraci… Prověřování cílového umístění… - Ukládání konfigurace účtů… - Čekání na nedokončené synchronizace… Přesun dat… Aktualizace indexu… Čištění… - Obnovování konfigurace účtů… Dokončeno - CHYBA: Nedostatek volného prostoru - CHYBA: Do souboru nelze zapisovat - CHYBA: Soubor nelze číst + CHYBA: Nedostatečné místo + CHYBA: Soubor není zapisovatelný CHYBA: Nextcloud adresář již existuje - CHYBA: V průběhu migrace - CHYBA: V průběhu aktualizace indexu - - Datový adresář již existuje, co teď? - Přepsat - Použít existující + Nahradit + Použít Účty Přidat účet Spravovat účty - Zabezpečené spojení je přesměrováváno nezabezpečenou trasou. - - Logy + Logy Historie odesílání - Nenalezena aplikace pro odesílání logů. Nainstalujte prosím emailovou aplikaci. + Nebyla nalezena aplikace k odesílání protokolů. Prosím, nainstalujte e-mailového klienta. %1$s logy aplikace pro Android Nahrávání dat … @@ -392,27 +336,22 @@ Nesprávné heslo Přesunout Kopírovat - Zde nic není. Můžete přidat adresář! Vybrat - Nelze přesunout. Zkontrolujte prosím že soubor existuje - Není možné adresář přesunout do vlastního podadresáře - Soubor již v cílovém adresáři existuje + Soubor již v cílové složce existuje Při pokusu o přesun tohoto souboru či adresáře nastala chyba pro přesun tohoto souboru Nelze zkopírpovat. Zkontrolujte prosím že soubor existuje - Není možné adresář zkopírovat do jeho vlastního podadresáře - Soubor již v cílovém adresáři existuje + Soubor již v cílové složce existuje Při pokusu o zkopírování tohoto souboru či adresáře došlo k chybě pro zkopírování tohoto souboru Okamžitá odesílání Podrobnosti - Adresář pro okamžité nahrání videa - Synchronizaci adresáře %1$s nelze dokončit + Synchronizaci adresáře %1$s nelze dokončit sdílené s vámi @@ -453,7 +392,6 @@ Přidat uživatele nebo skupinu Sdílet odkaz Nastavit datum vypršení platnosti - Chránit heslem Zabezpečeno Povolit úpravy Skrýt seznam souborů @@ -469,7 +407,6 @@ %1$s (e-mail) %1$s ( v %2$s ) - Omlouváme se, verze vašeho serveru neumožňuje v klientské aplikaci sdílení dat mezi uživateli. \nKontaktujte prosím svého administrátora může sdílet lze upravovat vytvořit @@ -478,49 +415,38 @@ Ukončit sdílení dokončeno - Opakování selhalo Vyčištění selhalo - Vyčištění úspěšné - Vyčistit všechny ukončené + Vyčištěno + Vyčistit dokončená nahrávání Zobrazení v mřížce Zobrazení v seznamu Spravovat úložný prostor - Nastavení, databáze a certifikáty serverů z %1$s data budou permanentně smazány. \n\nStažené soubory nebudou rozbaleny.\n\nTento proces může chvíli trvat. Vyčistit data Některé soubory nebylo možno smazat. - Vyžadována dodatečná oprávnění pro nahrávání & stahování souborů. - Soubor nebyl nalezen v místním souborovém systému Opravdu chcete odstranit vybrané položky? Opravdu chcete odstranit vybrané položky a jejich obsah? - Čekání na zahájení nabíjení + Čekání na nabití Hledat Toto je Nextcloud funkce, prosím nahrát Více Automatické nahrávání Zúčastnit se - Pomoz nám testovat - Našel jsi chybu? Něco nefunguje? + Našli jste chybu? Něco podivného? Nahlásit chybu na Github - Chceš nám pomoci testovat další verzi? - Zahrnuje všechny nadcházející funkce a pohybuje se na hraně stability. Mohou se vyskytnout chyby, a pokud ano, nahlašte nám je prosím. Předběžná verze - Předběžná verze nebo také Release Candidate (RC) je stabilní stav připravované, finální verze. Přihlas se jako tester v Play store nebo si najdi a instaluj hodící se verzi z F-Droid pod \"Verze\". Aktivně něčím přispět Diskutovat na IRC: <a href="%1$s">#nextcloud-mobile</a> Pomozte ostatním na <a href="%1$s">fóru</a> <a href="%1$s">Přeložte</a> aplikaci - Přispět jako vývojář, detaily pod <a href="https://github.com/nextcloud/android/blob/master/CONTRIBUTING.md">CONTRIBUTING.md</a> Přesunout do… Kopírovat do… Vybrat adresář… Načítání adresářů… Nebyly nalezeny žádné adresáře médií. - Nastavení automatického nahrávání Nastavení - Okamžité nahrávání dat bylo kompletně předěláno. Navštivte hlavní menu a nakonfigurujte automatické nahrávání svých dat. Omlouváme se za nepříjemnosti.\n\nUžívejte si nové a rozšířené možnosti nahrávání dat! Pro %1$s vybráno %d @@ -528,7 +454,10 @@ vybráno %d - Zadejte jméno a typ souboru k nahrání + Načítání aktivit… + Prosíme, vraťte se později. + + Jméno a typ vstupního souboru k nahrání Jméno souboru Typ souboru Soubor textového úryvku(.txt) @@ -544,7 +473,7 @@ Bezpečné místo pro všechna vaše data - Přistupujte, sdílejte a ochraňte své soubory doma, ale i ve své firmě + Přistupujte, sdílejte a ochraňte své domácí a pracovní soubory Multi účet Připojte se ke všem svým cloudům @@ -554,9 +483,12 @@ Přeskočit + Prosím, naskenujte svůj otisk prstu + Otisk prstu nerozpoznán + Celé jméno - Email + E-mail Telefonní číslo Adresa Webová stránka @@ -564,4 +496,18 @@ Uživatelské informace + + Zatím žádná aktivita + Došlo k chybě + O aplikaci + + Obnovit poslední zálohu + Obnovit + Záloha + Poslední záloha + Je třeba oprávnění ke čtení seznamu kontaktů + Zvolte datum + Nikdy + + Přijato nové upozornění diff --git a/src/main/res/values-de-rDE/strings.xml b/src/main/res/values-de-rDE/strings.xml index f756f0d903..f7688bcbee 100644 --- a/src/main/res/values-de-rDE/strings.xml +++ b/src/main/res/values-de-rDE/strings.xml @@ -283,6 +283,7 @@ Umbenennen Entfernen Möchten Sie %1$s wirklich entfernen? + Wollen Sie %1$s und deren Inhalte wirklich löschen? Nur lokal Entfernt Entfernen fehlgeschlagen @@ -624,7 +625,6 @@ Über Kontakte-Sicherung - Sicherung jetzt erstellen Letztes Backup wiederherstellen Wiederherstellen Sicherung diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml index 9d3e664ec8..02e7d11c1d 100644 --- a/src/main/res/values-de/strings.xml +++ b/src/main/res/values-de/strings.xml @@ -283,6 +283,7 @@ Umbenennen Entfernen Möchtest Du %1$s wirklich entfernen? + Willst Du %1$s deren Inhalte wirklich löschen? Nur lokal Entfernt Entfernen fehlgeschlagen @@ -624,7 +625,6 @@ Über Kontakte-Sicherung - Sicherung jetzt erstellen Letztes Backup wiederherstellen Wiederherstellen Sicherung diff --git a/src/main/res/values-el/strings.xml b/src/main/res/values-el/strings.xml index 9148029045..61e8a5021b 100644 --- a/src/main/res/values-el/strings.xml +++ b/src/main/res/values-el/strings.xml @@ -46,10 +46,10 @@ Κλείδωμα με αποτύπωμα Δεν έχει οριστεί αποτύπωμα Εμφάνιση κρυφών αρχείων - Άμεση μεταφόρτωση εικόνων - Άμεση μεταφόρτωση φωτογραφιών από την κάμερα + Άμεσες μεταφορτώσεις φωτογραφιών + Άμεση μεταφόρτωση φωτογραφιών που λήφθησαν από την φωτογραφική μηχανή Άμεση μεταφόρτωση βίντεο - Άμεση μεταφόρτωση των βίντεο από την κάμερα + Άμεση μεταφόρτωση βίντεο που λήφθησαν από την φωτογραφική μηχανή Ενεργοποίηση καταγραφής ιστορικού Χρησιμοποιείται για την καταγραφή προβλημάτων Καταγραφή ιστορικού @@ -58,23 +58,16 @@ Συγχρονισμός ημερολογίου & επαφών Ρυθμίστε το DAVdroid (v1.3.0+) για τον τρέχον λογαριασμό Η διεύθυνση του διακομιστή για τον λογαριασμό δεν μπορεί να καθοριστεί για το DAVdroid - Δεν είναι εγκατεστημένα το Google Play ή το F-Droid - Επιτυχής ρύθμιση συγχρονισμού ημερολογίου & επαφών + Δεν είναι εγκατεστημένο το F-droid αλλά ούτε και το Google Play Βοήθεια Προτείνετε σε φίλο Aνάδραση Αποτύπωμα - Απομνημόνευση θέσης διαμοιρασμού - Απομνημόνευση τελευταιας τοποθεσίας διαμοιρασμού μεταφορτώσεων - - Δοκιμή %1$s στο κινητό σας! - Θα ήθελα να σε προσκαλέσω να χρησιμοποιήσεις το %1$s στο κινητό σου!\\nΛήψη από εδώ: %2$s - - Έλεγχος διακομιστή + Δοκιμή %1$s στο κινητό σας! + Έλεγχος διακομιστή Διεύθυνση διακομιστή https://… Όνομα χρήστη Συνθηματικό - Δεν έχετε ακόμα διακομιστή;\\nΚάντε κλικ εδώ για να πάρετε έναν από ένα πάροχο Αρχεία Σύνδεση Μεταφόρτωση @@ -88,20 +81,12 @@ Τα ληφθέντα δεδομένα δεν περιλαμβάνουν έγκυρο αρχείο. Το αρχείο δεν μπορεί να μεταφορτωθεί Ο %1$s δεν επιτρέπεται να αναγνώσει ένα ληφθέν αρχείο - Το αρχείο προς αποστολή δεν βρέθηκε στην τοποθεσία. Παρακαλώ ελέγξτε εάν υπάρχει το αρχείο. - Παρουσιάστηκε σφάλμα κατά την αντιγραφή του αρχείου στον προσωρινό φάκελο. Παρακαλούμε δοκιμάστε να στείλετε ξανά. Επιλογή μεταφόρτωσης: Μετακίνηση αρχείου στον φάκελο Nextcloud Διατήρηση του αρχείου στον πηγαίο φάκελο Διαγραφή αρχείου από τον πηγαίο φάκελο δευτερόλεπτα πριν - Δεν υπάρχουν αρχεία - Μεταφόρτωση περιεχομένου ή συγχρονισμός με τις συσκευές σας! - Σημειώστε ως αγαπημένα ορισμένα αρχεία ή συγχρονίστε τα με τις συσκευές σας! - Τα αρχεία ή οι φάκελοι που σημειώσατε ως αγαπημένα θα εμφανιστούν εδώ - Δεν βρέθηκαν αρχεία σημειωμένα ως αγαπημένα για το ερώτημά σας! Φόρτωση… - Δεν βρέθηκε εφαρμογή για τον τύπο αρχείου! Δεν υπάρχουν αρχεία σε αυτό τον φάκελο. Κανενα αποτέλεσμα σε αυτον τον φάκελο Κανένα αποτέλεσμα @@ -109,19 +94,7 @@ Τα αρχεία και οι φάκελοι που διαμοιράζεστε θα εμφανίζονται εδώ Κανένα βίντεο Καμιά φωτογραφία - Θα δοκιμάστε αναζήτηση και σε άλλο φάκελο; - Δεν βρέθηκαν αρχεία που να έχουν τροποποιηθεί τις τελευταίες 7 ημέρες - Δεν βρέθηκαν αρχεία για το αίτημά σας που να έχουν τροποποιηθεί - τις τελευταίες 7 ημέρες! - Δεν βρέθηκαν πρόσφατα προστεθημένα αρχεία - Δεν βρέθηκαν πρόσφατα προστεθημένα αρχεία για το αίτημά σας! - Μεταφόρτωση μερικών φωτογραφιών ή ενεργοποιήστε την αυτόματη μεταφόρτωση! - Δεν βρέθηκαν φωτογραφίες για το αίτημά σας! - Μεταφορτώστε μερικά βίντεο ή ενεργοποιήστε την αυτόματη μεταφόρτωση! - Δεν βρέθηκε βίντεο για το αίτημά σας! Μη διαθέσιμες μεταφορτώσεις - Μεταφορτώστε περιεχόμενο ή ενεργοποιήστε την άμεση μεταφόρτωση! - Μεταφορτώστε περιεχόμενο ή ενεργοποιήστε την αυτόματη μεταφόρτωση! φάκελος φάκελοι αρχείο @@ -133,14 +106,11 @@ Τροποποιήθηκε: Λήψη Συγχρονισμός - Το αρχείο μετονομάστηκε σε %1$s κατά τη μεταφόρτωση - Διάταξη λίστας Διαμοιρασμός Ναι Όχι Εντάξει Αφαίρεση μεταφόρτωσης - Επανάληψη μεταφόρτωσης Ακύρωση συγχρονισμού Ακύρωση Επιστροφή @@ -160,10 +130,9 @@ Όνομα φακέλου Μεταφόρτωση … %1$d%% Μεταφορτώνονται %2$s - Επιτυχημένη μεταφόρτωση + Μεταφορτώθηκε Το %1$s μεταφορτώθηκε Η μεταφόρτωση απέτυχε - Η μεταφόρτωση του %1$s δεν ήταν δυνατόν να ολοκληρωθεί Η μεταφόρτωση απέτυχε, πρέπει να επανασυνδεθείτε Μεταφορτώσεις Τρέχουσα @@ -180,37 +149,29 @@ Δεν βρέθηκε το τοπικό αρχείο Σφάλμα δικαιωμάτων Διένεξη - Η εφαρμογή τερματίστηκε Άγνωστο σφάλμα - Αναμονή για σύνδεση wifi Αναμονή για μεταφόρτωση Λαμβάνονται … %1$d%% Λαμβάνονται %2$s - Επιτυχημένη λήψη + Ληφθέντα %1$s ελήφθησαν Αποτυχημένη λήψη - Η λήψη του %1$s δεν μπόρεσε να ολοκληρωθεί Δεν έχει ληφθεί ακόμα Αποτυχία λήψης, πρέπει να εισέλθετε ξανά Επιλογή λογαριασμού Αποτυχία συγχρονισμού - Αποτυχία συγχρονισμού, χρειάζεται να εισέλθετε ξανά - Ο συγχρονισμός του %1$s δεν μπόρεσε να ολοκληρωθεί - Μη έγκυρο συνθηματικό για %1$s + Εσφαλμένο συνθηματικό για τον %1$s Βρέθηκαν διενέξεις %1$d αρχεία σε αναμονή προς συγχρονισμό δεν μπόρεσαν να συγχρονιστούν Τα αρχεία σε αναμονή προς συγχρονισμού απέτυχαν Τα περιεχόμενα των %1$d αρχείων δεν μπόρεσαν να συγχρονιστούν (%2$d διενέξεις) Ορισμένα τοπικά αρχεία ξεχάστηκαν %1$d αρχεία από τον %2$s φάκελο δεν ήταν δυνατό να αντιγραφούν σε - Από την έκδοση 1.3.16, τα αρχεία που μεταφορτώθηκαν από αυτήν τη συσκευή αντιγράφηκαν στον τοπικό φάκελο %1$s για να αποτραπεί η απώλεια δεδομένων όταν ένα αρχείο είναι συγχρονισμένο με πολλαπλούς λογαριασμούς. \n\nΛόγω αυτής της αλλαγής, όλα τα αρχεία που μεταφορτώθηκαν με προηγούμενες εκδόσεις αυτής της εφαρμογής αντιγράφηκαν στον φάκελο %2$s. Ωστόσο, ένα σφάλμα εμπόδισε την ολοκλήρωση αυτής της λειτουργίας κατά το συγχρονισμό του λογαριασμού. Μπορείτε είτε να αφήσετε το(α) αρχείο(α) όπως είναι και να καταργήσετε τη σύνδεση με το %3$s ή να μετακινήσετε τα αρχεία στο φάκελο %1$s και να διατηρήσετε τη σύνδεση με το %4$s. \n\nΑπαριθμημένα πιο κάτω είναι τα τοπικά αρχεία(ο) και τα απομακρυσμένα αρχεία(ο) στο %5$s με τα οποία συνδέονταν. - Ο φάκελος %1$s δεν υπάρχει πια Μετακίνηση όλων Όλα τα αρχεία μετακινήθηκαν Μερικά αρχεία δεν μπόρεσαν να μετακινηθούν Τοπικά: %1$s Απομακρυσμένα: %1$s - Δεν υπάρχει αρκετός διαθέσιμος αποθηκευτικός χώρος για να αντιγραφούν τα επιλεγμένα αρχεία στον φάκελο %1$s. Θα θέλατε να τα μετακινήσετε αντί αυτού; Παρακαλούμε εισάγετε τον κωδικό πρόσβασης Εισάγετε τον κωδικό πρόσβασης @@ -228,16 +189,9 @@ %1$s αναπαραγωγή τελείωσε Δεν βρέθηκαν αρχεία πολυμέσων Δεν δόθηκε λογαριασμός - Το αρχείο δεν βρίσκεται σε έγκυρο λογαριασμό Δεν υποστηρίζεται η μορφή κωδικοποιήσης πολυμέσων Αδυναμία ανάγνωσης αρχείου πολυμέσων - Εσφαλμένη κωδικοποίηση αρχείου πολυμέσων Λήξη χρόνου κατά την προσπάθεια αναπαραγωγής - Το αρχείο πολυμέσων δεν μπορεί να μεταδοθεί - Το αρχείο πολυμέσων δεν μπορεί να αναπαραχθεί με την παρεχόμενη εφαρμογή αναπαραγωγής πολυμέσων - Σφάλμα ασφαλείας κατά την προσπάθεια αναπαραγωγής του %1$s - Σφάλμα εισόδου κατά την προσπάθεια αναπαραγωγής του %1$s - Απροσδόκητο σφάλμα κατά την προσπάθεια αναπαραγωγής του %1$s Κουμπί ταχείας κίνησης πίσω Κουμπί αναπαραγωγής ή παύσης Κουμπί γρήγορης προώθησης @@ -249,32 +203,24 @@ Εδραίωση σύνδεσης Έλεγχος σύνδεσης Εσφαλμένες ρυθμίσεις διακομιστή - Ένας λογαριασμός για τον ίδιο χρήστη και διακομιστή υπάρχει ήδη στη συσκευή Ο χρήστης που εισάγατε δεν ταιριάζει με το χρήστη αυτού του λογαριασμού Παρουσιάστηκε άγνωστο σφάλμα! - Δεν βρέθηκε κεντρικός υπολογιστής - Δεν βρέθηκε εγκατεστημένος διακομιστής + Αδυναμία εύρεσης κεντρικού υπολογιστή + Δεν βρέθηκε διακομιστής Ο διακομιστής αργεί πολύ να απαντήσει Εσφαλμένη μορφή διεύθυνσης διακομιστή Η αρχικοποίηση του SSL απέτυχε - Αδυναμία επιβεβαίωσης της ταυτότητας του διακομιστή SSL Μη αναγνωρίσιμη έκδοση διακομιστή - Αδυναμία δημιουργίας σύνδεσης Επιτεύχθηκε ασφαλής σύνδεση Εσφαλμένο όνομα χρήστη ή συνθηματικό Ανεπιτυχής πιστοποίηση Άρνηση πρόσβασης από τον διακομιστή πιστοποίησης - Απροσδόκητη κατάσταση, παρακαλoύμε εισάγετε ξανά τη διεύθυνση του διακομιστή Η πιστοποιίησή σας έληξε. Παρακαλούμε εξουσιοδοτήστε ξανά Παρακαλούμε εισάγετε το τρέχον συνθηματικό Η συνεδρία σας έληξε. Παρακαλούμε συνδεθείτε ξανά - Σύνδεση με το διακομιστή πιστοποίησης ... Ο διακομιστής δεν υποστηρίζει αυτή τη μέθοδο πιστοποίησης Ο %1$s δεν υποστηρίζει πολλαπλούς λογαριασμούς - Ο διακομιστής σας δεν επιστρέφει το σωστό αναγνωριστικό χρήστη, παρακαλούμε επικοινωνήστε τον διαχειριστή Αδυαμία πιστοποίησης με αυτόν το διακομιστή - Ο λογαριασμός δεν υπάρχει ακόμα στη συσκευή - Ορισμός ως διαθέσιμο εκτός σύνδεσης Αναίρεση ορισμού ως διαθέσιμο εκτός σύνδεσης Ορισμός ως αγαπημένο @@ -282,36 +228,29 @@ Μετονομασία Αφαίρεση Θέλετε να αφαιρέσετε το %1$s; - Θέλετε να αφαιρέσετε το %1$s και τα περιεχόμενά του; Μόνο τοπικά - Επιτυχής αφαίρεση + Αφαιρέθηκε Αποτυχημένη αφαίρεση Εισάγετε νέο όνομα - Το τοπικό αντίγραφο δεν ήταν δυνατόν να μετονομαστεί. Παρακαλούμε επιλέξτε ένα διαφορετικό όνομα. - Η μετονομασία δεν μπόρεσε να ολοκληρωθεί - Αδυναμία ελέγχου του απομακρυσμένου αρχείου Τα περιεχόμενα του αρχείου έχουν ήδη συγχρονιστεί - Ο φάκελος δεν μπορεί να δημιουργηθεί + Αδυναμία δημιουργίας φακέλου Απαγορευμένοι χαρακτήρες: / \\ < > : \" | ? * Το όνομα αρχείου περιέχει έναν τουλάχιστον μη έγκυρο χαρακτήρα Το όνομα αρχείου δεν μπορεί να είναι κενό - Παρακαλούμε περιμένετε + Παρακαλούμε περιμένετε... Γίνεται έλεγχος αποθηκευμένων διαπιστευτηρίων - Μη αναμενόμενο πρόβλημα, παρακαλώ ελέγξτε το αρχείο από διαφορετική εφαρμογή Δεν επιλέχθηκε αρχείο Αποστολή συνδέσμου σε … Γίνεται αντιγραφή αρχείου από ιδιωτικό αποθηκευτικό χώρο Σύνδεση με oAuth2 - Γίνεται σύνδεση στο διακομιστή oAuth2... - Η ταυτότητα της σελίδας δεν μπορεί να επληθευτεί - Το πιστοποιητικό του διακομιστή δεν είναι έμπιστο - Το πιστοποιητικό του διακομιστή έχει λήξει - Οι έγκυρες ημερομηνίες του πιστοποιητικού του διακομιστή είναι στο μέλλον - Η URL δεν ταιριάζει με το όνομα του συστήματος στο πιστοποιητικό Θέλετε να θεωρείται έμπιστο το πιστοποιητικό παρ\' όλα αυτά; - Το πιστοποιητικό δεν ήταν δυνατόν να αποθηκευτεί + Αδυναμία αποθήκευσης πιστοποιητικού Λεπτομέρειες Απόκρυψη Εκδόθηκε για: @@ -347,12 +286,11 @@ Μεταφόρτωση μόνο κατά τη διάρκεια φόρτισης /InstantUpload Διένεξη αρχείων - Ποια αρχεία θέλετε να διατηρήσετε; Αν επιλέξετε και τις δύο εκδόσεις, θα προστεθεί ένας αριθμός στο όνομα του τοπικού αρχείου. Διατήρηση και των δύο τοπική έκδοση έκδοση διακομιστή - Σας ζητούμε συγγνώμη γι\'αυτό! + Σας ζητούμε συγγνώμη. Προεπισκόπηση εικόνας Αδυναμία προβολής εικόνας @@ -363,7 +301,6 @@ Χρήση υποφακέλων Αποθήκευση σε υποφακέλους με βάση το χρόνο και μήνα - Λυπούμαστε, ο διαμοιρασμός δεν είναι διαθέσιμος στο διακομιστή σας. Παρακαλούμε επικοινωνήστε με τον διαχειριστή. Αδυναμία διαμοιρασμού. Παρακαλούμε ελέγξτε αν υπάρχει ο φάκελος Παρουσιάστηκε σφάλμα κατά την προσπάθεια διαμοιρασμού αυτού του αρχείου ή φακέλου Αδυναμία αναίρεσης κοινής χρήσης. Παρακαλώ ελέγξτε αν το αρχείο υπάρχει @@ -377,56 +314,39 @@ Αντιγραφή συνδέσμου Αντιγράφηκε στο πρόχειρο - Δεν ελήφθη κείμενο για αντιγραφή στο πρόχειρο Μη αναμενόμενο σφάλμα κατά την αντιγραφή στο πρόχειρο Κείμενο που αντιγράφηκε από τον %1$s - Κρίσιμο σφάλμα: αδύνατη η εκτέλεση λειτουργιών - - Παρουσιάστηκε σφάλμα κατά τη σύνδεση με το διακομιστή. - Παρουσιάστηκε σφάλμα κατά την αναμονή για τον διακομιστή. Η λειτουργία δεν μπορεί να ολοκληρωθεί - Παρουσιάστηκε σφάλμα κατά την αναμονή για τον διακομιστή. Η λειτουργία δεν μπορεί να ολοκληρωθεί - Η λειτουργία δεν μπορεί να ολοκληρωθεί. Ο διακομιστής δεν είναι διαθέσιμος - Δεν έχετε δικαιώματα %s για να μετονομάσετε αυτό το αρχείο για να διαγράψετε αυτό το αρχείο για να διαμοιραστείτε αυτό το αρχείο για να αναιρέσετε το διαμοιρασμό αυτού του αρχείου για να ενημερώσετε αυτό τον διαμοιρασμό - για να δημιουργήσετε το αρχείο - για να μεταφορτώσετε σε αυτό το φάκελο + για να δημιουργήσετε αυτό το αρχείο + για να μεταφορτώσετε αυτό το αρχείο Αυτό το αρχείο δεν είναι πια διαθέσιμο στον διακομιστή Ενημέρωση διαδρομής αποθηκευτικού χώρου Ολοκλήρωση - Προετοιμασία για μεταφορά… Γίνεται έλεγχος προορισμού… - Γίνεται αποθήκευση ρυθμίσεων λογαριασμών… - Αναμονή για τους μη ολοκληρωμένους συγχρονισμούς… Γίνεται μετακίνηση δεδομένων… Γίνεται ενημέρωση ευρετηρίου… Γίνεται εκκαθάριση… - Γίνεται επαναφορά ρυθμίσεων λογαριασμών… Ολοκληρώθηκε ΣΦΑΛΜΑ: Ανεπαρκής αποθηκευτικός χώρος ΣΦΑΛΜΑ: Το αρχείο δεν είναι εγγράψιμο ΣΦΑΛΜΑ: Το αρχείο δεν είναι αναγνώσιμο ΣΦΑΛΜΑ: Υπάρχει ήδη ο κατάλογος Nextcloud - ΣΦΑΛΜΑ: Κατά την μεταφορά ΣΦΑΛΜΑ: Κατά την ενημέρωση ευρετηρίου - Ο φάκελος των δεδομένων υπάρχει ήδη, τι να κάνω; Αντικατάσταση - Χρήση υπάρχοντος + Χρήση Λογαριασμοί Προσθήκη λογαριασμού Διαχείριση λογαριασμών - Η ασφαλής σύνδεση ανακατευθύνεται μέσω μιας μη ασφαλούς διαδρομής. - - Αρχεία καταγραφών + Αρχεία καταγραφών Αποστολή ιστορικού - Δεν εντοπίστηκε εφαρμογή αποστολής ιστορικού συστήματος. Παρακαλούμε εγκαταστήστε μια εφαρμογή ηλεκτρονικού ταχυδρομείου. %1$s ιστορικό της εφαρμογής Android Φόρτωση δεδομένων … @@ -434,27 +354,20 @@ Εσφαλμένο συνθηματικό Μετακίνηση Αντιγραφή - Δεν υπάρχει τίποτα εδώ. Μπορείτε να προσθέσετε ένα φάκελο! Επιλέξτε - Αδύνατη η μετακίνηση. Παρακαλώ ελέγξτε αν το αρχείο υπάρχει - Δεν είναι δυνατό να μετακινηθεί ο φάκελος σε έναν απογονικό - Το αρχείο υπάρχει ήδη στο φάκελο προορισμού Παρουσιάστηκε σφάλμα κατά την προσπάθεια μετακίνησης αυτού του αρχείου ή φακέλου για μετακίνηση αυτού του αρχείου Αδυναμία αντιγραφής. Παρακαλούμε ελέγξτε αν το αρχείο υπάρχει - Δεν είναι δυνατό να αντιγραφεί ο φάκελος σε απογονικό - Το αρχείο υπάρχει ήδη στο φάκελο προορισμού Παρουσιάστηκε σφάλμα κατά την προσπάθεια αντιγραφής αυτού του αρχείου ή φακέλου για αντιγραφή αυτού του αρχείου Άμεσες μεταφορτώσεις Λεπτομέρειες - Φάκελος άμεσης μεταφόρτωσης βίντεο - Ο συγχρονισμός του φακέλου %1$s δεν μπόρεσε να ολοκληρωθεί + Ο συγχρονισμός του φακέλου %1$s δεν μπόρεσε να ολοκληρωθεί διαμοιρασμένα με εσάς @@ -495,7 +408,7 @@ Προσθήκη χρήστη ή ομάδας Διαμοιρασμός συνδέσμου Ορισμός ημερομηνίας λήξης - Προστασία συνθηματικού + Προστασία με συνθηματικό Ασφαλίστηκε Επιτρέπεται η επεξεργασία Απόκρυψη λίστας αρχείου @@ -511,7 +424,6 @@ %1$s (ηλ. ταχυδρομείο) %1$s ( στο %2$s ) - Δεν επιτρέπεται ο διαμοιρασμός μεταξύ χρηστών μέσω πελατών, σε αυτή την έκδοση διακομιστή. \nΕπικοινωνήστε με το διαχειριστή δυνατότητα διαμοιρασμού δυνατότητα επεξεργασίας δημιουργία @@ -520,50 +432,34 @@ Διακοπή διαμοιρασμού ολοκληρώθηκε - Αποτυχία επανάληψης Αποτυχία εκκαθάρισης - Επιτυχία εκκαθάρισης - Ολοκλήρωση εκκαθάρισης όλων - Προβολή πλέγματος Προβολή λίστας Διαχείριση χώρου - Τα πιστοποιητικά ρυθμίσεων, βάσης δεδομένων και διακομιστή από τα δεδομένα %1$s\'s θα διαγραφούν μόνιμα.\n\nΤα ληφθέντα αρχεία θα παραμείνουν ανέπαφα.\n\nΑυτή η διαδικασία ενδεχομένως να διαρκέσει αρκετά. Εκκαθάριση δεδομένων Μερικά αρχεία δεν μπορούν να διαγραφούν. - Επιπλέον διακαιώματα απαιτούνται για μεταφόρτωση & λήψη αρχείων. - Το αρχείο δεν βρέθηκε στο τοπικό σύστημα αρχείων Θέλετε να αφαιρέσετε τα επιλεγμένα αντικείμενα; Θέλετε να αφαιρέσετε τα επιλεγμένα αντικείμενα με τα περιεχόμενά τους; - Αναμονή για φόρτιση συσκευής Αναζήτηση Αυτό είναι χαρακτηριστικό του Nextcloud, παρακαλούμε ενημερώστε. Μάθετε περισσότερα Αυτόματη μεταφόρτωση Συμμετοχή - Βοηθήστε μας στις δοκιμές - Βρήκατε σφάλμα; Κάτι σας φαίνεται παράξενο; Αναφέρετε σφάλμα στο Github - Σας ενδιαφέρει να μας βοηθήσετε να δοκιμάσουμε την επόμενη έκδοση; Δοκιμή της εκδοσης προς ανάπτυξη - Αυτή περιέχει όλες τις επερχόμενες λειτουργίες και δαθέτει ότι τελευταίο έχει ενσωματωθεί. Σφάλματα/λάθη μπορεί να προκύψουν. Σας παρακαλούμε να μας τα αναφέρετε. Release candidate - Η υποψήφια κυκλοφορία (RC) είναι ένα στιγμιότυπο της επερχόμενης έκδοσης και αναμένεται να είναι σταθερή. Η δοκιμή της μεμονωμένης εγκατάστασής σας θα βοηθήσει στην εξασφάλιση αυτού. Εγγραφείτε για δοκιμές στο Play store ή χειροκίνητα αναζητείστε στο τμήμα \"εκδόσεις\" στο F-Droid. Ενεργή συνεισφορά Συμμετέχετε στη συνομιλία στο IRC: <a href=\"%1$s\">#nextcloud-mobile</a> Βοηθήστε χρήστες στο <a href=\"%1$s\">forum</a> <a href=\"%1$s\">Μεταφράστε</a> την εφαρμογή - Συνεισφέρετε ως προγραμματιστής, για περισσότερες λεπτομέρειες δείτε <a href=\"https://github.com/nextcloud/android/blob/master/CONTRIBUTING.md\">CONTRIBUTING.md</a> Μετακίνηση σε… Αντιγραφή σε… Επιλογή φακέλου… Φόρτωση φακέλων… Δεν βρέθηκαν φάκελοι πολυμέσων. - Προτιμήσεις αυτόματης μεταφόρτωσης Ρυθμίσεις - Η άμεση μεταφόρτωση έχει ανανεωθεί τελείως. Παρακαλούμε δείτε το κυρίως μενού και ρυθμίστε ξανά την αυτόματη μεταφόρτωση. Σας ζητούμε συγγνώμη για την ενόχληση\n\nΑπολαύστε τις νέες και εκτεταμένες δυνατότητες της αυτόματης μεταφόρτωσης! Για %1$s %d επιλέχθηκε @@ -577,7 +473,6 @@ Καμία ειδοποίηση Παρακαλούμε ελέγξτε ξανά αργότερα. - Εισαγωγή ονόματος και τύπου αρχείου μεταφόρτωσης Όνομα αρχείου Τύπος αρχείου Απόσπασμα αρχείου κειμένου(.txt) @@ -593,8 +488,6 @@ Μια ασφαλής τοποθεσία για όλα σας τα δεδομένα - Πρόσβαση, διαμοιρασμός & προστασία των αρχείων σας στο σπίτι και στην εταιρία σας - Πολλαπλός λογαριασμός Σύνδεση με όλα τα clouds σας @@ -608,7 +501,6 @@ Πλήρες όνομα - Ηλεκτρονικό ταχυδρομείο Αριθμός τηλεφώνου Διεύθυνση Ιστοσελίδα @@ -618,22 +510,16 @@ Καμία δραστηριότητα ακόμα - Σε αυτήν τη ροή θα εμφανιστούν γενονότα όπως\nπροσθήκες, αλλαγές & κοινόχρηστα Παρουσιάστηκε σφάλμα Περί - Αντίγραφο ασφαλείας επαφών - Δημιουργία αντιγράφου ασφαλείας τώρα Επαναφορά τελευταίου αντιγράφου ασφαλείας Επαναφορά Αντίγραφο ασφαλείας Αντίγραφο ασφαλείας επαφών Τελευταίο αντίγραφο ασφαλείας - Απαιτείτούνται δικαιώματα ανάγνωσης για τις επαφές - Απαιτείτούνται δικαιώματα εγγραφής για τις επαφές Επαναφορά επαφών Επαναφορά επιλεγμένων επαφών - Επιλογή λογαριασμού για εισαγωγή Επιλογή ημερομηνίας ποτέ Δεν βρέθηκε αρχείο @@ -642,6 +528,4 @@ Νέα ενημέρωση ελήφθη - - - + diff --git a/src/main/res/values-es-rMX/strings.xml b/src/main/res/values-es-rMX/strings.xml index cd48027639..f4e2520ff4 100644 --- a/src/main/res/values-es-rMX/strings.xml +++ b/src/main/res/values-es-rMX/strings.xml @@ -624,7 +624,6 @@ en los últimos 7 días. Acerca de Respaldar contactos - Ahora Restaurar el último respaldo Restaurar Respaldar diff --git a/src/main/res/values-fr/strings.xml b/src/main/res/values-fr/strings.xml index c92329dbf4..3f309a4b9b 100644 --- a/src/main/res/values-fr/strings.xml +++ b/src/main/res/values-fr/strings.xml @@ -58,15 +58,19 @@ Configurer la synchronisation de l\'agenda et des contacts Configurer DAVdroid (v1.3.0+) pour le compte actuel Une adresse de serveur pour le compte pourrait ne pas être résolue par DAVdroid + Synchronisation de l\'agenda & des contacts configurée Aide Recommander à un ami Nous contacter par mail Mentions Essayez %1$s sur votre smartphone ! - Vérifier le serveur + J\'aimerais vous inviter à utiliser %1$s sur votre smartphone.\nTéléchargez-la ici : %2$s. + + Vérifier le serveur Adresse du serveur https://… Nom d\'utilisateur Mot de passe + Vous n\'avez pas encore un serveur ?\nCliquez ici pour en obtenir un d\'un fournisseur Fichiers Connecter Téléverser @@ -78,21 +82,38 @@ Aucun fichier à téléverser %1$s ne peut téléverser un morceau de texte comme un fichier. Les données reçues n\'incluent aucun fichier valide + Le fichier ne peut pas être téléversé %1$s n\'est pas autorisé à lire un fichier reçu + Le fichier à téléverser n\'a pas été trouvé. Merci de vérifier si ce fichier existe. + Impossible de copier le fichier vers un dossier temporaire. Merci de recommencer votre envoi. Option de téléversement : Déplacer le fichier dans le dossier Nextcloud Conserver le fichier dans le dossier original Supprimer le fichier du dossier original à l\'instant + Aucun fichier ici + Déposez du contenu ou synchronisez vos appareils. + Mettez certains fichiers en favoris ou synchronisez vos appareils. + Les fichiers et dossiers ajoutés à vos favoris apparaîtront ici Chargement… Aucun fichier n\'est présent dans ce dossier. Aucun résultat dans ce dossier Aucun résultat + Rien n\'est mis en favoris pour l\'instant Rien n\'est partagé pour l\'instant Les fichiers et dossiers que vous partagez apparaîtront ici Aucune vidéo Aucune photo + Il se trouve peut-être dans un autre dossier ? + Aucun fichier modifié au cours des 7 derniers jours trouvé + Votre recherche n\'a pas retourné de fichiers modifiés dans les 7 derniers jours. + Aucun fichier ajouté récemment trouvé + Votre recherche n\'a pas renvoyée de fichiers récement ajoutés. + Téléversez des photos ou activez le téléversement automatique. + Téléversez des vidéos ou activez le téléversement automatique. Aucun historique de téléversement + Téléversez du contenu ou activez le téléversement instantané. + Téléversez du contenu ou activez le téléversement automatique. dossier dossiers fichier @@ -104,11 +125,13 @@ Modifié le : Télécharger Synchroniser + Le fichier a été renommé en %1$s pendant le téléversement Partager Oui Non OK Retirer le téléversement + Réessayer le téléversement Annuler la synchronisation Annuler Retour @@ -128,8 +151,10 @@ Nom du dossier Téléversement… Téléversement de %2$s : %1$d%% + Téléversé %1$s téléversé Échec du téléversement + Impossible de téléverser %1$s Le téléversement a échoué, vous devez vous reconnecter Historique des envois Actuellement @@ -146,22 +171,30 @@ Fichier local non trouvé Erreur de permissions Conflit + L\'application a été arrêtée Erreur inconnue + En attente d\'une connexion WiFi En attente de téléversement Téléchargement en cours… Téléchargement de %2$s : %1$d%% effectués + Téléchargé %1$s téléchargé Le téléchargement a échoué + Impossible de télécharger %1$s Pas encore téléchargé Le téléchargement a échoué, vous devez vous reconnecter Choisissez un compte La synchronisation a échoué + La synchronisation a échoué, vous devez vous reconnecter + Impossible de terminer la synchronisation de %1$s + Mauvais mot de passe pour %1$s Des conflits ont été trouvés %1$d fichiers à garder synchronisés n\'ont pu être synchronisés La synchronisation des fichiers a échoué Le contenu de %1$d fichiers n\'a pu être synchronisé (%2$d conflits) Certains fichiers locaux ont été oubliés %1$d fichiers du dossier %2$s n\'ont pas pu être copiés dans + Le dossier %1$s n\'existe plus Tout déplacer Tous les fichiers ont été déplacés Certains fichiers n\'ont pu être déplacés @@ -184,7 +217,11 @@ Lecture de %1$s terminée Aucun fichier média trouvé Aucun compte fourni + Le fichier n\'est pas dans un compte valide Le codec de ce média n\'est pas pris en charge + Impossible de lire le fichier média + Le fichier média n\'est pas correctement encodé + Le fichier média ne peut pas être diffusé Bouton de rembobinage Bouton de lecture ou de pause Bouton d\'avance rapide @@ -219,13 +256,16 @@ Supprimer Voulez-vous vraiment supprimer %1$s ? Local seulement + Supprimé Échec de la suppression Entrez un nouveau nom Le contenu du fichier est déjà synchronisé Caractères interdits : / \\ < > : \" | ? * Le nom de fichier contient au moins un caractère invalide Le nom du fichier ne peut pas être vide + Veuillez patienter... Vérification des identifiants enregistrés + Aucun fichier sélectionné Envoyer le lien vers … Copie du fichier depuis le stockage privé @@ -259,6 +299,7 @@ Ceci est un espace réservé placeholder.txt + Image PNG 389 Ko 18/05/2012 12:23 PM 12:23:45 @@ -269,6 +310,7 @@ version locale version serveur + Désolé. Prévisualisation de l\'image %1$s n\'a pas pu être copié dans le dossier local %2$s Téléversement immédiat du dossier @@ -466,6 +508,7 @@ Nom complet + Adresse e-mail Numéro de téléphone Adresse Site web @@ -481,7 +524,7 @@ Restaurer la dernière copie de sauvegarde Restaurer Copie de sauvegarde - Copie de sauvegarde des contacts + Sauvegarde des contacts Dernière copie de sauvegarde Restaurer les contacts Restaurer les contacts sélectionnés @@ -493,4 +536,7 @@ Nouvelle notification reçue - + Se déconnecter + + + diff --git a/src/main/res/values-nb-rNO/strings.xml b/src/main/res/values-nb-rNO/strings.xml index 6e90552fd5..cca06b033f 100644 --- a/src/main/res/values-nb-rNO/strings.xml +++ b/src/main/res/values-nb-rNO/strings.xml @@ -506,7 +506,6 @@ Feil oppstod Om - Gjenopprett fra siste sikkerhetskopiering Gjenopprett Sikkerhetskopier diff --git a/src/main/res/values-nl/strings.xml b/src/main/res/values-nl/strings.xml index fe5dd45c5a..f485a16070 100644 --- a/src/main/res/values-nl/strings.xml +++ b/src/main/res/values-nl/strings.xml @@ -46,6 +46,10 @@ Vingerafdrukbeveiliging Er zijn geen vingerafdrukken ingesteld. Verborgen bestanden weergeven + Directe upload van afbeeldingen + Direct vanaf camera uploaden van afbeeldingen + Directe upload van video\'s + Direct vanaf de camera uploaden video\'s Logging inschakelen Dit wordt gebruikt om problemen te loggen. Logging-geschiedenis @@ -55,14 +59,23 @@ DAVdroid (v1.3.0+) voor huidige account instellen Serveradres voor dit account kon niet worden gevonden voor DAVdroid Noch F-droid, noch Google Play is geïnstalleerd + Agenda & contactpersonen sync instellingen Help + Aanbevelen bij vriend Feedback afdruk - Probeer %1$s op je smartphone! - Controleer server + Onthoud de share locatie + Onthoud de laatst gebruikte share locatie + + Probeer %1$s op je smartphone! + Ik wil je uitnodigen om %1$s op je smartphone te gebruiken.\nDownload hier: %2$s + + Controleer server Serveradres https://… Gebruikersnaam Wachtwoord + Heb je nog geen server?\n +Kies er eentje van een provider. Bestanden Verbinden Uploaden @@ -76,13 +89,16 @@ Ontvangen gegevens bevatten geen geldig bestand. Dit bestand kan niet worden geüpload %1$s heeft geen toestemming om een ontvangen bestand te lezen + Voor upload geselecteerde bestand niet gevonden. Controleer of het bestaat. Uploadoptie: Verplaats bestand naar Nextcloud-map Bewaar het bestand in de bronmap Verwijder bestand uit bronmap seconden geleden Hier geen bestanden + Upload je inhoud of synchroniseer met je apparaten. Laden … + Er is geen app ingesteld om dit bestandformaat te behandelen. Er staan geen bestanden in deze map. Geen resultaten in deze map Geen resultaten @@ -96,7 +112,14 @@ Je zoekopdracht vond geen bestanden die in de laatste 7 dagen werden gewijzigd. Geen recent toegevoegde bestanden gevonden + Geen recent toegevoegde bestanden gevonden voor je zoekopdracht! + Upload enkele foto\'s of activeer auto-upload. + Geen foto\'s voor je zoekopdracht. + Upload enkele video\'s of activeer auto-upload. + Geen video\'s voor je zoekopdracht. Geen uploads beschikbaar + Upload enkele gegevens of activeer directe upload. + Upload enkele gegevens of activeer auto-upload. map mappen bestand @@ -108,6 +131,7 @@ Aangepast: Downloaden Synchroniseren + Bestand hernoemd naar %1$s tijdens de upload Delen Ja Nee @@ -162,10 +186,13 @@ Gedownload %1$s gedownload. Downloaden mislukt + Kon %1$s niet downloaden Nog niet gedownload Downloaden mislukt, je moet opnieuw inloggen Account kiezen Synchronisatie mislukt + Synchronisatie mislukt, je moet opnieuw inloggen + Synchronisatie van %1$s kon niet worden voltooid Onjuist wachtwoord voor %1$s Conflicten gevonden %1$d gesynchroniseerd te houden bestanden konden niet worden gesynchroniseerd @@ -173,6 +200,7 @@ Inhoud van %1$d bestanden kon niet worden gesynchroniseerd (%2$d conflicten) Een paar lokale bestanden werden vergeten %1$d bestanden uit de %2$s-map konden niet worden gekopieerd naar + Vanaf versie 1.3.16 worden bestanden die vanaf dit apparaat worden geüpload ook gekopieerd naar de lokale map %1$s om gegevensverlies te voorkomen als een enkel bestand wordt gesynchroniseerd met meerdere accounts.\n\nDoor deze aanpassing werden alle bestanden die met een eerdere versie zijn geüpload gekopieerd naar de map %2$s. Maar een fout voorkwam het succesvol afronden van deze actie tijdens het synchroniseren. Je kunt de/het bestand(en) laten staan zoals ze nu zijn en de link naar %3$s verwijderen, of je kunt de bestanden verplaatsen naar map %1$s en de link naar %4$s laten staan.\n\nHieronder staan de lokale bestanden en de externe bestanden in %5$s waar ze naar verwezen. Map %1$s bestaat niet meer Alles verplaatsen Alle bestanden zijn verplaatst @@ -198,6 +226,14 @@ Geen account opgegeven Het bestand hoort niet bij een geldig account Niet-ondersteunde mediacodec + Kon het mediabestand niet lezen + Mediabestand niet goed gecodeerd + Time-out tijdens het afspelen + Mediabestand kan niet worden gestreamd + Mediabestand kan niet worden afgespeeld met de standaard mediaplayer + Beveiligingsfout bij afspelen %1$s + Invoerfout bij afspelen %1$s + Onverwachte fout bij afspelen %1$s Terugpoelknop Speel- of pauzeknop Doorspoelknop @@ -209,22 +245,29 @@ Verbinding tot stand gebracht Verbinding testen Foutieve serverconfiguratie + Er bestaat al een account voor deze gebruiker en server op dit apparaat De opgegeven gebruiker komt niet overeen met de gebruiker van dit account Onbekende fout opgetreden! Kon server niet vinden Server niet gevonden De server reageerde niet op tijd + Verkeerd adresformaat voor server SSL-initialisatie mislukt + Kon de identiteit van de SSL-server niet verifiëren Niet-herkende serverversie + Kon verbinding niet tot stand brengen Veilige verbinding tot stand gebracht Verkeerde gebruikersnaam of wachtwoord Autorisatie niet succesvol Toegang geweigerd door autorisatieserver + Onverwachte toestand; voer het serveradres opnieuw in Je autorisatie is verstreken. Autoriseer opnieuw Voer het huidige wachtwoord in Je sessie is verstreken. Verbind opnieuw + Verbinden met authenticatieserver... De server ondersteunt deze authenticatiemethode niet %1$s ondersteunt het gebruik van meerdere accounts niet + Je server geeft geen goede userid terug, neem contact op met je beheerder Kan niet autenticeren tegen deze server Account bestaan nog niet op dit apparaat @@ -235,10 +278,12 @@ Hernoemen Verwijderen Wil je %1$s echt verwijderen? + Wil je %1$s en de inhoud ervan werkelijk verwijderen? Alleen lokaal Verwijderd Verwijderen mislukt Voer een nieuwe naam in + Lokale kopie kon niet worden hernoemd; probeer een andere naam Kon de server geen nieuwe naam geven Kon extern bestand niet controleren Bestandsinhoud is al gesynchroniseerd @@ -248,6 +293,7 @@ Bestandsnaam mag niet leeg zijn Even geduld... Opgeslagen inloggegevens nakijken + Onverwacht probleem; probeer het bestand met een andere app te selecteren Geen bestand geselecteerd Verstuur link naar … Bestand vanaf privéopslag kopiëren @@ -519,7 +565,6 @@ Er heeft zich een fout voorgedaan Over - Nu Herstel de laatste backup Herstellen Backuppen @@ -527,6 +572,7 @@ Laatsts backup Herstellen contactpersonen Herstel de geselecteerde contactpersonen + Kies een account voor import Kies datum nooit Geen bestand gevonden diff --git a/src/main/res/values-pt-rBR/strings.xml b/src/main/res/values-pt-rBR/strings.xml index 07f1ced923..9495d69ae4 100644 --- a/src/main/res/values-pt-rBR/strings.xml +++ b/src/main/res/values-pt-rBR/strings.xml @@ -283,6 +283,7 @@ Renomear Excluir Deseja realmente excluir %1$s? + Você realmente quer remover %1$s e seu conteúdo? Somente local Excluído Erro ao excluir @@ -624,7 +625,6 @@ Sobre Fazer backup dos contatos - Agora Retornar último backup Retornar Backup diff --git a/src/main/res/values-zh-rCN/strings.xml b/src/main/res/values-zh-rCN/strings.xml index f6046fd8a6..12ef642224 100644 --- a/src/main/res/values-zh-rCN/strings.xml +++ b/src/main/res/values-zh-rCN/strings.xml @@ -46,10 +46,10 @@ 指纹锁 指纹锁没有设置 显示隐藏文件 - 即时图片上传 - 即时上传相机拍摄的图片 - 即时上传视频 - 即时上传由相机拍摄的视频 + 立刻上传图片 + 立刻上传摄像头拍摄的图片 + 立刻上传视频 + 立刻上传摄像头拍摄的视频 开启日志 用于记录问题 历史日志 @@ -58,23 +58,17 @@ 同步日历和通讯录 为现在的用户设置DAVdroid(v1.3.0+) 用户目前的服务器地址对于DAVdroid不能被解析 - 没有安装谷歌或F-Droid的应用商店 - 日历和通讯录的同步设置成功 + F-droid或谷歌商店都没有装 + 日历&联系人同步设置 帮助 推荐给朋友 反馈 版本说明 - 记住共享位置 - 记住上次共享上传的位置 - - 在您的智能手机上试用 %1$s! - 我邀请你在智能手机上使用 %1$s\n下载路径:%2$s - - 检查服务器 + 在您的智能手机上试用 %1$s! + 检查服务器 服务器地址 https://... 用户名 密码 - 还没有服务器吗? \n点击这里从提供商那里获取一个 文件 连接 上传 @@ -86,23 +80,13 @@ 文件没有上传 %1$s不能把一段文字做为文件上传 得到的数据没有包括有效文件 - 文件无法被上传 %1$s 不让读取已经获得的文件 - 要上传的文件没有在本地发现,请检查文件是否存在 - - 当文件复制到临时文件夹时有错误发生,请重新发送 上传选项: 移动文件到Nextcloud文件夹 在原文件夹中保留文件 从原文件夹中删除文件 几秒前 - 这里没有文件 - 上传一些内容或者和你的设备同步 - 收藏一些文件或和你的设备同步! - 收藏的文件和文件夹会在这里显示 - 未找到你要搜索的收藏文件 加载中… - 没有找到程序打开文件格式! 在该文件夹中不存在文件。 此文件夹无结果 没有结果 @@ -110,18 +94,7 @@ 您共享的文件和文件夹将显示在这里 无视频 无照片 - 在其他文件夹找找试试? - 未找到 7 日内有更改的文件 - 未找到你要搜索的 7 日内有更改的文件! - 未找到最近添加的文件 - 未找到你要搜索的最近添加文件 - 上传一些照片或启用自动上传! - 未找到你要搜索的照片! - 上传一些视频或启用自动上传! - 未找到你要搜索的视频! 没有可以上传的 - 上传一些内容或者激活实时上传 - 上传一些内容或启用自动上传! 文件夹 文件夹 文件 @@ -133,14 +106,11 @@ 修改于: 下载 同步 - 上传过程中文件被更名为了 %1$s - 列表布局 共享 确定 移除上传任务 - 重试上传任务 取消同步 取消 返回 @@ -160,10 +130,8 @@ 文件夹名称 上传 … %1$d%% 上传 %2$s - 上传成功 %1$s 上传成功 上传失败 - %1$s 未能成功上传 上传失败,你需要重新登录 上传 当前 @@ -180,37 +148,27 @@ 本地文件未找到 权限错误 冲突 - 应该将被终止 未知错误 - 等待WiFi连接 等待上传... 下载中 … %1$d%% 下载中 %2$s - 下载成功 %1$s 下载成功 下载失败 - %1$s 下载未能完成 未下载完毕 下载失败,你需要重新登录 选择账户 同步失败 - 同步错误;你需要重新登陆 - %1$s 的同步无法完成 - %1$s 的密码错误 发现冲突 %1$d 文件无法同步 文件同步失败 无法同步 %1$d 文件内容(%2$d 冲突) 某些本地文件已被遗忘 %2$s 目录中的 %1$d 个文件不能被复制到 - 从 1.3.16 版起,从此设备上传的文件将被复制到本地的 %1$s 文件夹,以防止某个单一文件在多个账户间同步而造成的数据损失。\n\n 由于此项变化,此应用之前的版本上传的全部文件都已被复制到了 %2$s 文件夹。然而,账户同步期间有一个错误阻止了此操作的完成。您可能想保持文件不动,并移除指向 %3$s 的链接,或将文件移动到 %1$s 文件夹中并保持其到 %4$s 的链接。下面列出的是本地文件,以及它们被链接到的 %5$s 中的远程文件。 - 文件夹%1$s 已经不存在 移动所有 所有文件已被移动 某些文件无法被移动 本地: %1$s 远程:%1$s - 没有足够的空间把选上的文件复制到%1$s目录,你愿意改成转移他们吗? 请输入你的密码 输入您的密码 @@ -228,16 +186,7 @@ %1$s 播放完毕 没有发现播放文件 未提供账号 - 文件不在合法账户 不支持的编码格式 - 文件不可读 - 文件编码错误 - 播放超时 - 文件不支持流播 - 当前媒体播放器不支持。 - 尝试播放%1$s时保护错误 - 尝试播放%1$s时输入错误 - 尝试播放%1$s时未知错误 后退按钮 播放暂停按钮 快进按钮 @@ -249,32 +198,21 @@ 连接已建立。 测试连接 服务器配置不正确 - 此设备中已经存在同名同服务器的帐号 输入用户与此帐户的用户不符 发生未知错误! - 无法找到主机 - 未发现服务器实例 看起来服务器不太给力 - 错误的服务器地址 SSL初始化失败 - 无法验证 SSL 服务器的身份 不可辨识的服务器服务器版本 - 无法建立连接 安全连接已建立 用户名或密码错误 认证不成功 访问被认证服务器拒绝 - 未知状态,请重新输入服务器地址 你的授权已经过期。请重新授权。 请输入当前的密码 您的会话超时了,请重新连接 - 连接认证服务器... 服务器不支持这种验证方式 %1$s不支持多个账户 - 你的服务器没有返回正确的用户ID,请联系管理员 无法连接认证服务器 - 设备中还未存在该帐号 - 可以设置离线 不可以设置离线 加入收藏 @@ -282,36 +220,24 @@ 重命名 删除 你确定要删除%1$s? - 您确定要删除 %1$s 及其内容吗? 仅本地 - 成功删除 无法完成删除 请输出新的名字 - 本地副本无法重命名,请尝试另外的名字 - 重命名未完成 - 无法核实远程文件 文件内容已同步 - 文件夹无法创建 禁用字符: / \\ < > : \" | ? * 文件名中存在至少一个非法字符 文件名不能为空 - 请稍候 检查保存的证书 - 未预见错误,请从其它程序中选取文件 - 未选择文件 发送链接给 … 从私有存储中拷贝文件 使用oAuth2登陆 - 连接oAuth2 服务器... - 站点身份无法验证 - 不受信任的服务器证书 - 服务器证书过期 - 服务器证书时间比当前时间还晚 - 主机名与证书中的记录不匹配 是否信任此证书? - 证书无法保存 详细信息 隐藏 授权给: @@ -335,27 +261,17 @@ 占位符 点位符.txt - PNG图像格式 389字节 2012/05/18 下午12:23 12:23:45 - 只通过wifi上传 - 仅通过 WIFI 上传照片 - 仅通过 WIFI 上传图片。 - 只在充电时上传 - 只在充电时上传 /实时上传 文件冲突 - 您想要保留哪个文件?如果您同时选中了两个版本,本地的文件的文件名将被加上一个数字 保留两者 本地版本 服务器版本 - 对此抱歉! 图片预览 - 无法显示图片 - 无法复制 %1$s 到本地目录 %2$s 实时上传文件夹 本地文件夹 @@ -363,7 +279,6 @@ 使用子文件夹 基于年和月存于子文件夹 - 抱歉,你的服务器无法分享,请联系你的管理员 无法共享。请检查文件是否存在 共享文件或目录出错 无法取消共享。请检查文件是否存在 @@ -377,56 +292,29 @@ 复制链接 复制到剪贴板 - 没有取得文本可以复制到剪贴板 发生未预见的错误当复制到剪贴板 从%1$s复制文本 - 严重错误:无法执行操作 - - 连接到服务器时发生了一个错误。 - 当等待服务器时发生错误,操作不能完成 - 当等待服务器时发生错误,操作不能完成 - 操作无法无成,服务器不可用 - 你没有权限%s 重命名该文件 删除该文件 共享该文件 取消共享该文件 更新共享 - 创建文件 - 在此文件夹上传 该文件在服务器上不可用 更新存储路径 完成 - 正在准备迁移… 检查目的地… - 保存用户设置… - 正在同步,请等候… 正在转移数据… 更新目录… 清除… - 重新装入用户设置… 完成 - 错误:没有足够空间 - 错误:文件不可写 - 错误:文件不可读 错误:Nextcloud目录已经存在 - 错误:等待迁移 - 错误:正在更新目录 - - 数据目录已经存在,怎么办? - 覆盖 - 使用存在 - 账号 添加账号 管理账号 - 安全连接是通过一个非安全路由定向的。 - - 日志 + 日志 发送历史日志 - 无法发送日志,请安装邮箱应用。 %1$s Android 程序日志 加载数据 … @@ -434,27 +322,20 @@ 错误密码 移动 复制 - 这里还什么都没有。上传些东西吧! 选择 - 无法移动。请检查文件是否存在 - 无法把一个目录移动到它的下级 - 该文件已经存在在目标文件夹 尝试移动该文件或文件夹时发生错误 移动该文件 无法复制文件。请检查文件是否存在 - 将一个目录移动到它的子目录是不可能的 - 该文件已经存在在目标文件夹 尝试复制这个文件或文件夹时发生了错误 复制这个文件 即时上传 详细信息 - 实时上传视频目录 - %1$s同步未完成。 + %1$s同步未完成。 已共享 与你 @@ -495,7 +376,6 @@ 添加用户或组 分享链接 设置过期日期 - 密码保护 安全 允许编辑 隐藏文件列表 @@ -511,7 +391,6 @@ %1$s (邮件) %1$s ( 在 %2$s ) - 抱歉,你的服务器版本不允许你分享给用户在客户端,请联系管理员 可共享 可编辑 创建 @@ -520,50 +399,34 @@ 停止共享 完成 - 重试失败 清除失败 - 清除成功 - 清除所有完成任务 - 网格视图 列表视图 管理空间 - 在%1$s的数据中,设置、数据库和服务器认证都会永久性删除,\n\n下载目录会保存。\n\n这个过程会持续些时间。 清除数据 某些文件无法删除。 - 没有权限上传和下载文件。 - 在当地的文件系统中找不到这个文件 你是否真的要删除所选的项目? 你是否真的要删除所选的项目和它们的内容? - 请等待,设备在充电 搜索 这是一个Nextcloud的特征,请更新 学习更多 自动上传 参加 - 帮助我们测试 - 发现一个错误?事情很奇怪? 在GIthub在报告问题 - 有感兴趣帮我们测试下一个版本吗? 检查这个设备的版本 - 这包括所有即将加入的特性,有相当的风险。如果Bug 或错误发生,请向我们报告。 发行候选版本 - 候选发行版(RC)是下一个版本的快照,希望它是稳定的,你可以帮助测试以确认这一点。可以注册登陆在应用商店或手工在F-Droid的版本部分查找,并进行测试。 活跃的候选版 在IRC上加入这个会话: <a href="%1$s">#nextcloud-mobile</a> 帮助他人在 <a href="%1$s">论坛</a> <a href="%1$s">翻译</a> 应用程序 - 做为有贡献的开发者,可以看<a href="https://github.com/nextcloud/android/blob/master/CONTRIBUTING.md">CONTRIBUTING.md</a>的细节 转移到… 复制到 选择文件夹… 加载文件夹… 没有发现媒体文件夹 - 自动上传喜欢的部分 设置 - 即时上传已经被完全更新,请查看主菜单,重新设置你的自动上传,很抱歉给你带来的不便。\n\n享受新的并已扩展的上传功能! 为%1$s %d被选择 @@ -576,7 +439,6 @@ 没有提示 请稍后核对 - 输入上传的文件名和文件类型 文件名 文件类型 片段文本文件(.txt) @@ -592,8 +454,6 @@ 给你所有的数据一个安全的家 - 在家里或公司,访问,分享,保护你的文件 - 多用户 联接你所有的云 @@ -607,7 +467,6 @@ 全名 - 电子邮件 电话号码 地址 网站 @@ -617,23 +476,16 @@ 暂无动态 - 瀑布流中会显示诸如添加\n更改&分享之类的事件 发生错误 关于 - 联系人备份 - 现在备份 恢复上次备份 恢复 备份 联系人备份 上次备份 - 需要联系人的读书权限 - 需要联系人的写权限 恢复联系人 恢复选中的联系人 - 选择客户导入 - 没有权限,无法导入! 选择时间 永远不 没有文件被发现 @@ -642,6 +494,4 @@ 收到新提示 - - - + From d77b446e0dc3d33a4d094f10eb3cfd0e29f7b911 Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Tue, 2 May 2017 00:21:53 +0000 Subject: [PATCH 40/53] [tx-robot] updated from transifex --- src/main/res/values-cs-rCZ/strings.xml | 104 ++++++++++- src/main/res/values-de-rDE/strings.xml | 3 + src/main/res/values-de/strings.xml | 3 + src/main/res/values-es/strings.xml | 246 +++++++++++++++---------- src/main/res/values-fr/strings.xml | 118 +++++++++++- src/main/res/values-nl/strings.xml | 71 ++++++- src/main/res/values-pl/strings.xml | 238 ++++++++++-------------- src/main/res/values-pt-rBR/strings.xml | 3 + src/main/res/values-tr/strings.xml | 138 +++++++------- 9 files changed, 606 insertions(+), 318 deletions(-) diff --git a/src/main/res/values-cs-rCZ/strings.xml b/src/main/res/values-cs-rCZ/strings.xml index 5c9c7c90a6..0f2a756694 100644 --- a/src/main/res/values-cs-rCZ/strings.xml +++ b/src/main/res/values-cs-rCZ/strings.xml @@ -42,6 +42,10 @@ Zámek otiskemprstu Nebyly nastaveny žádné otisky prstů. Zobrazit skryté soubory + Okamžité nahrávání obrázků + Okamžitě nahrávat vytvořené fotografie + Okamžité nahrávání videa + Okamžitě odesílat nahrané video Povolit logování Použito k zaznamenávání problémů Historie logu @@ -50,15 +54,23 @@ Synchronizovat kalendář & kontakty Nastavit DAVdroid (v1.3.0+) pro aktuální účet Počítačová adresa konta pro DAVdroid nebyla nalezena + Nenainstalován Google Play store nebo F-Droid app + Synchronizace kalendáře & kontaktů úspěšně dokončena Nápověda + Doporučit přátelům Odezva Imprint Zapamatovat umístění sdílení - Zkuste %1$s na svém chytrém telefonu! - Ověřit server + Zapamatovat poslední umístění pro nahrání sdílených souborů + + Zkuste %1$s na svém chytrém telefonu! + Chtěl bych vás pozvat k používání %1$s na vašem chytrém telefonu!\nKe stažení zde: %2$s + + Ověřit server Adresa serveru https://... Uživatelské jméno Heslo + Ještě nemáte server?\nKlikněte sem a získejte ho od poskytovatele Soubory Připojit Nahrát @@ -70,18 +82,26 @@ Žádný soubor k nahrání %1$s neumí nahrát text jako soubor. Obdržená data neobsahují žádný platný soubor. + Soubor nelze nahrát %1$s nemá oprávnění číst přijatý soubor + Soubor k nahrání nebyl v tomto umístění nalezen. Zkontrolujte prosím zda soubor existuje. + Došlo k chybě při kopírování souboru do dočasného adresáře. Zkuste prosím zopakovat odeslání. Nahrát možnost: Přesunout soubor do Nextcloud adresáře Jen uploadovat Uploadovat a vymazat ze zdroje před pár sekundami + Nejsou zde žádné soubory + Nahrajte nějaký obsah, nebo synchronizujte s vašimi zařízeními! Načítání… + Pro tento typ souboru nebyla nalezena aplikace! V tomto adresáři nejsou žádné soubory. V této složce nebylo nic nalezeno Žádné výsledky Zatím není nic oblíbeno + Zkusit hledat v jiné složce? Nic k nahrání + Nahrajte nějaký obsah, nebo aktivujte okamžité nahrání! adresář adresářů soubor @@ -94,11 +114,13 @@ Stáhnout Synchronizovat Soubor byl během nahrávání přejmenován na %1$s + Náhled seznamu Sdílet Ano Ne OK Odstranit nahrávání + Opakovat nahrání Zrušit synchronizaci Zrušit Zpět @@ -153,17 +175,22 @@ Vybrat účet Synchronizace selhala Synchronizace se nezdařila, musíte se znovu přihlásit. + Synchronizace %1$s nemohla být dokončena + Chybné heslo pro %1$s Nalezeny konflikty %1$d souborů z automatické synchronizace nelze synchronizovat Automatická synchronizace souborů selhala Obsah %1$d souborů nemohl být synchronizován (počet konfliktů: %2$d) Některé místní soubory byly zapomenuty %1$d souborů z %2$s adresáře se nepodařilo zkopírovat do + Od verze 1.3.16 jsou soubory nahrané z tohoto zařízení kopírovány do místního adresáře %1$s, aby se zabránilo ztrátě dat při synchronizaci jednoho souboru s více účty.\n\nVšechny soubory nahrané předchozími verzemi aplikace byly z tohoto důvodu překopírovány do adresáře %2$s. Bohužel se objevila chyba zabraňující dokončení této operace v průběhu synchronizace účtu. Buď můžete soubor(y) ponechat jak jsou a odebrat odkaz do adresáře %3$s, nebo přesunout soubor(y) do adresáře %1$s a zachovat odkaz na %4$s.\n\nNíže je seznam místních i vzdálených souborů v adresáři %5$s, do kterého byly odkázány. + Adresář %1$s již neexistuje Přesunout vše Všechny soubory byly přesunuty Některé soubory nebylo možno přesunout Místní: %1$s Vzdálené: %1$s + Pro zkopírování vybraných souborů do %1$s adresáře není dostatek volného místa. Chcete je místo toho přesunout? Zadejte prosím svůj bezpečnostní kód Zadejte svůj bezpečnostní kód @@ -181,10 +208,16 @@ %1$s přehrávání dokončeno Nenalezen žádný multimediální soubor Neposkytnut žádný účet + Soubor není v platném účtu Nepodporovaný kodek Nepodařilo se přečíst soubor médií Soubor médií má neplatné kódování + Vypršel čas při pokusu o přehrání + Multimediální soubor nelze proudově odesílat + Multimediální soubor nemůže být přehrán s výchozím přehrávačem Při pokusu o přehrání %1$s došlo k bezpečnostní chybě + Chyba vstupu při pokusu o přehrání %1$s + Neočekávaná chyba při pokusu o přehrání %1$s Tlačítko Přetočit Tlačítko Přehrát/Pozastavit Tlačítko Rychle vpřed @@ -196,22 +229,32 @@ Spojení navázáno Testuje se připojení Neplatné nastavení serveru + Účet pro stejného uživatele a server již v zařízení existuje Zadaný uživatel neodpovídá uživateli tohoto účtu Nastala neznámá chyba + Nelze najít hostitele Server nenalezen Serveru trvalo příliš dlouho odpovědět + Chybný formát adresy serveru Inicializace SSL selhala + Nemohu ověřit SSL identitu serveru Nerozpoznaná verze serveru + Nemohu navázat spojení Zabezpečené spojení navázáno Chybné přihlašovací jméno nebo heslo Neúspěšné přihlášení Přístup zamítnut autorizačním serverem + Neočekávaný stav; zadejte prosím znovu adresu serveru Vaše přihlášení vypršelo. Přihlaste se prosím znovu Zadejte prosím aktuální heslo Vaše přihlášení vypršelo. Přihlaste se prosím znovu + Připojování k ověřovacímu serveru ... Server nepodporuje tuto přihlašovací metodu %1$s nepodporuje více účtů + Váš server nevrací správné přihlašovací ID, kontaktujte prosím svého správce systému Na tomto serveru nelze ověřit + V zařízení není zatím nastaven účet + Nastavit jako dostupné offline Zrušit nastavení dostupnosti offline Nastavit jako oblíbené @@ -219,27 +262,36 @@ Přejmenovat Odstranit Opravdu chcete odstranit %1$s? + Opravdu chcete odstranit %1$s a jeho obsah? Pouze místní Odstraněno Odstranění nelze dokončit Zadejte nový název + Místní kopii nelze přejmenovat, zkuste jiný nový název + Přejmenování nelze dokončit Nepodařilo se zkontrolovat vzdálený soubor Obsah souboru je již synchronizován Nepodařilo se vytvořit složku Zakázané znaky: / \\ < > : \" | ? * Jméno souboru obsahuje aelspoň jeden neplatný znak Název nemůže být prázdný + Počkejte chvíli Ověřování uložených přihlašovacích údajů + Neočekávaný problém - zkuste zvolit soubor jinou aplikací + Žádný soubor nebyl vybrán Odeslat odkaz … Kopírování souboru z privátního úložiště Přihlásit se s oAuth2 + Připojuji se k oAuth2 serveru... + Identitu stránky nelze ověřit - Certifikát serveru je nedůvěryhodný - Certifikátu serveru vypršela platnost - Datum platnosti certifikátu je v budoucnosti - URL neodpovídá hodnotě hostname certifikátu Přejete si přesto tomuto certifikátu důvěřovat? + Certifikát nelze uložit Detaily Skrýt Vydáno pro: @@ -263,14 +315,19 @@ Zástupný text placeholder.txt + Obrázek PNG 389 KB 2012/05/18 12:23 PM 12:23:45 + Nahrávat pouze přes wifi Nahrávat obrázky pouze na Wi-Fi + Nahrávat videa pouze přes wifi + Nahrávat pouze při nabíjení Nahrávat pouze při nabíjení /InstantUpload Konflikt souboru + Které soubory chcete ponechat? Pokud zvolíte obě verze, zkopírovaný soubor bude mít název doplněný o číslo. Ponechat oba místní verze serverová verze @@ -299,34 +356,55 @@ Zkopírovat odkaz Zkopírováno do schránky + Žádný výběr textu pro kopírování do schránky Neočekávaná chyba při kopírování do schránky Text zkopírován z %1$s + Kritická chyba: operace nelze provést + + Při pokusu o připojení k serveru došlo k chybě. + Při čekání na odpověď serveru se vyskytla chyba, operace nemohla být dokončena + Při čekání na odpověď serveru se vyskytla chyba, operace nemohla být dokončena + Operace nemohla být dokončena, server je nedostupný + Nemáte oprávnění k %s přejmenovat tento soubor smazat tento soubor sdílet tento soubor zrušit sdílení tohoto souboru pro aktualizaci tohoto sdílení + vytvořit tento soubor + nahrávat do tohoto adresáře Tento soubor již není dostupný na serveru Aktualizace cesty k úložišti Dokončit + Příprava na migraci… Prověřování cílového umístění… + Ukládání konfigurace účtů… + Čekání na nedokončené synchronizace… Přesun dat… Aktualizace indexu… Čištění… + Obnovování konfigurace účtů… Dokončeno CHYBA: Nedostatečné místo CHYBA: Soubor není zapisovatelný + CHYBA: Soubor nelze číst CHYBA: Nextcloud adresář již existuje + CHYBA: V průběhu migrace + CHYBA: V průběhu aktualizace indexu + + Datový adresář již existuje, co teď? Nahradit Použít Účty Přidat účet Spravovat účty - Logy + Zabezpečené spojení je přesměrováváno nezabezpečenou trasou. + + Logy Historie odesílání Nebyla nalezena aplikace k odesílání protokolů. Prosím, nainstalujte e-mailového klienta. %1$s logy aplikace pro Android @@ -336,14 +414,18 @@ Nesprávné heslo Přesunout Kopírovat + Zde nic není. Můžete přidat adresář! Vybrat + Nelze přesunout. Zkontrolujte prosím že soubor existuje + Není možné adresář přesunout do vlastního podadresáře Soubor již v cílové složce existuje Při pokusu o přesun tohoto souboru či adresáře nastala chyba pro přesun tohoto souboru Nelze zkopírpovat. Zkontrolujte prosím že soubor existuje + Není možné adresář zkopírovat do jeho vlastního podadresáře Soubor již v cílové složce existuje Při pokusu o zkopírování tohoto souboru či adresáře došlo k chybě pro zkopírování tohoto souboru @@ -351,7 +433,8 @@ Okamžitá odesílání Podrobnosti - Synchronizaci adresáře %1$s nelze dokončit + Adresář pro okamžité nahrání videa + Synchronizaci adresáře %1$s nelze dokončit sdílené s vámi @@ -392,6 +475,7 @@ Přidat uživatele nebo skupinu Sdílet odkaz Nastavit datum vypršení platnosti + Chránit heslem Zabezpečeno Povolit úpravy Skrýt seznam souborů @@ -407,6 +491,7 @@ %1$s (e-mail) %1$s ( v %2$s ) + Omlouváme se, verze vašeho serveru neumožňuje v klientské aplikaci sdílení dat mezi uživateli. \nKontaktujte prosím svého administrátora může sdílet lze upravovat vytvořit @@ -415,6 +500,7 @@ Ukončit sdílení dokončeno + Opakování selhalo Vyčištění selhalo Vyčištěno Vyčistit dokončená nahrávání @@ -423,9 +509,12 @@ Zobrazení v seznamu Spravovat úložný prostor + Nastavení, databáze a certifikáty serverů z %1$s data budou permanentně smazány. \n\nStažené soubory nebudou rozbaleny.\n\nTento proces může chvíli trvat. Vyčistit data Některé soubory nebylo možno smazat. + Vyžadována dodatečná oprávnění pro nahrávání & stahování souborů. + Soubor nebyl nalezen v místním souborovém systému Opravdu chcete odstranit vybrané položky? Opravdu chcete odstranit vybrané položky a jejich obsah? Čekání na nabití @@ -434,9 +523,14 @@ Více Automatické nahrávání Zúčastnit se + Pomoz nám testovat Našli jste chybu? Něco podivného? Nahlásit chybu na Github + Chceš nám pomoci testovat další verzi? + Testovat noční verzi + Zahrnuje všechny nadcházející funkce a pohybuje se na hraně stability. Mohou se vyskytnout chyby, a pokud ano, nahlašte nám je prosím. Předběžná verze + Předběžná verze nebo také Release Candidate (RC) je stabilní stav připravované, finální verze. Přihlas se jako tester v Play store nebo si najdi a instaluj hodící se verzi z F-Droid pod \"Verze\". Aktivně něčím přispět Diskutovat na IRC: <a href="%1$s">#nextcloud-mobile</a> Pomozte ostatním na <a href="%1$s">fóru</a> @@ -446,7 +540,9 @@ Vybrat adresář… Načítání adresářů… Nebyly nalezeny žádné adresáře médií. + Nastavení automatického nahrávání Nastavení + Okamžité nahrávání dat bylo kompletně předěláno. Navštivte hlavní menu a nakonfigurujte automatické nahrávání svých dat. Omlouváme se za nepříjemnosti.\n\nUžívejte si nové a rozšířené možnosti nahrávání dat! Pro %1$s vybráno %d diff --git a/src/main/res/values-de-rDE/strings.xml b/src/main/res/values-de-rDE/strings.xml index f7688bcbee..d8eace745d 100644 --- a/src/main/res/values-de-rDE/strings.xml +++ b/src/main/res/values-de-rDE/strings.xml @@ -625,6 +625,8 @@ Über Kontakte-Sicherung + Adressen wiederherstellen + Sicherung jetzt starten Letztes Backup wiederherstellen Wiederherstellen Sicherung @@ -639,6 +641,7 @@ Datum auswählen nie Keine Datei gefunden + Wir können Ihr letztes Backup nicht finden! Sicherung geplant und wird in Kürze starten Import geplant und wird in Kürze starten diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml index 02e7d11c1d..71fca6342c 100644 --- a/src/main/res/values-de/strings.xml +++ b/src/main/res/values-de/strings.xml @@ -625,6 +625,8 @@ Über Kontakte-Sicherung + Adressen wiederherstellen + Sicherung jetzt starten Letztes Backup wiederherstellen Wiederherstellen Sicherung @@ -639,6 +641,7 @@ Datum auswählen nie Keine Datei gefunden + Wir können dein letztes Backup nicht finden! Sicherung geplant und wird in Kürze starten Import geplant und wird in Kürze starten diff --git a/src/main/res/values-es/strings.xml b/src/main/res/values-es/strings.xml index a55d659165..67d4c3b87b 100644 --- a/src/main/res/values-es/strings.xml +++ b/src/main/res/values-es/strings.xml @@ -34,6 +34,7 @@ Ajustes Subidas Actividades + Notificaciones %1$s de %2$s utilizado Cerrar Abrir @@ -42,11 +43,13 @@ Cuentas Gestionar cuentas Contraseña + Bloqueo con huella dactilar + No se han configurado huellas dactilares Mostrar archivos ocultos Subida instantánea de imágenes - Sube instantáneamente las fotos tomadas con la cámara - Subidas instantáneas de video - Sube instantáneamente los vídeos grabados con la cámara + Subir instantáneamente imágenes de la cámara + Subida instantánea de vídeo + Subir instantáneamente vídeos grabajdos con la cámara Habilitar registro Esto es usado para registrar problemas Historial del registro @@ -55,23 +58,23 @@ Sincronizar calendario y contactos Configurar DAVdroid (v1.3.0 +) de la cuenta actual La dirección del Servidor para su cuenta no ha podido ser resuelta por DAVdroid - No está instalada la aplicación de Google Play ni la de F-Droid - Calendario & contactos se ha sincronizado exitosamente + Ni F-Droid ni Google Play están instalados + Sincronización de calendario y contactos configurada Ayuda Recomendar a un amigo Observaciones Pie de imprenta - Recordar la ubicación de los archivos compartidos - Recordar la ubicación de los últimos archivos compartidos subidos + Recordar la localización del compartido + Recordar la localización del compartido más recientemente usado ¡Prueba %1$s en su smarthphone! - ¡Quiero invitarle a usar %1$s en su smartphone!\nDescárgalo aquí: %2$s + Quiero invitarte a usar %1$s en tu móvil.\nDescárgalo aquí: %2$s Verificar servidor Dirección del servidor https://… Nombre de usuario Contraseña - ¿No tiene un servidor aun?\nHaga click aquí para obtener uno desde un proveedor + ¿No tienes todavía un servidor?\Pulsa aquí para conseguir uno de un proveedor Archivos Conectar Subir @@ -83,42 +86,43 @@ Ningún archivo para subir %1$s No se puede subir un texto como si fuera un archivo. No hay ningún archivo válido en los datos recibidos. - No se puede subir el archivo + Este archivo no puede subirse %1$s No está autorizado a leer el archivo. - El archivo a subir no se encuentra. Compruebe que el archivo existe. - Ha ocurrido un error al copiar a la carpeta temporal. Por favor intentelo de nuevo. + No se encuentra el archivo seleccionado para subir. Por favor, comprueba que el archivo existe. + No se pudo copiar el archivo a una carpeta temporal. Intenta volver a enviarlo. Configuraciones de subida: Mover el archivo a la carpeta de Nextcloud Mantener el archivo en la carpeta original Borrar archivo de la carpeta original hace segundos No hay archivos aquí - ¡Suba algun contenido o sincronice con sus dispositivos! - ¡Marque algun archivos como favoritos o sincronice con sus dispositivos! - Los archivos y carpetas que marque como favoritos aparecerán aquí - ¡No se encontraron archivos favoritos en su consulta! + Sube algún contenido o sincroniza con tus dispositivos. + Marca como favoritos algunos archivos o sincronízalos con tus dispositivos. + Los archivos y carpetas que marques como favoritos aparecerán aquí + Tu búsqueda no encontró ningún archivo favorito. Cargando… - ¡Aplicación no encontrada para el tipo de archivo! + No hay una app configurada para manejar este tipo de archivos. No hay archivos en esta carpeta. No hay resultados en esta carpeta Sin resultados + Nada marcado como favorito todavía Aún no hay nada compartido Aquí aparecerán los archivos y carpetas que usted comparta No hay videos No hay fotos - ¿Ha intentado buscar en otra carpeta? - No se modificaron archivos en los últimos 7 días - ¡No se encontraron para su consulta, archivos que - fueran modificados en los últimos 7 días! - No se encontraron archivos agregados recientemente - ¡No se encontraron archivos agregados recientemente para su consulta! - ¡Suba algunos archivos o active la subida automática! - ¡No hay fotos encontradas para su consulta! - ¡Suba unos videos o active la subida automática! - ¡No se encontraron videos para su consulta! + ¿Quizás está en una carpeta diferente? + No se encontraron archivos modificados en los últimos 7 días. + Tu búsqueda no encontró archivos modificados + en los últimos 7 días. + No se encontraron archivos recientemente añadidos + Tu búsqueda no encontró archivos recientemente añadidos. + Sube algunas imágenes o activa la subid automática. + Tu búsqueda no encontró fotos. + Sube algunos vídeos o activa la subida automática. + Tu búsqueda no encontró vídeos. No hay subidas disponibles - ¡Suba algún contenido o active subidas instantáneas! - ¡Suba con tenido o active la subida automática! + Sube algún contenido o activa la subida instantánea. + Sube algún contenido o active la subida automática. carpeta carpetas archivo @@ -130,14 +134,14 @@ Modificado: Descargar Sincronizar - El archivo fue renombrado como %1$s durante la subida - Listar diseño + Archivo renombrado a %1$s durante la subida + Formato de lista Compartir No Aceptar Quitar los datos para subir - Reintentar la subida + Volver a intentar la subida Cancelar sincronización Cancelar Volver @@ -157,10 +161,10 @@ Nombre de la carpeta Subiendo … %1$d%% Subiendo %2$s - Subido con éxito + Subido %1$s subido Error en la subida - La subida de %1$s no se pudo completar + No se pudo subir %1$s Subida fallida, necesita volver a iniciar sesión Subidas Actual @@ -179,29 +183,29 @@ Conflicto La aplicación se ha interrumpido Error desconocido - Esperando a la conexión wifi + Esperando la conexóin Wi-Fi Esperando para subir Descargando … %1$d%% Descargado de %2$s - Descarga completa + Descargado %1$s descargado Falló la descarga - La descarga de %1$s no se pudo completar + No se pudo descargar %1$s No descargado La descarga falló, necesita volver a iniciar sesión Elija una cuenta Sincronización fallida - Sincronización fallida, necesita volver a iniciar sesión - La sincronización de %1$s no pudo ser completada - Contraseña no válida para %1$s + La sincronización falló, tienes que volver a iniciar sesión + No se pudo completar la sincronización de %1$s + Contraseña errónea para %1$s Se encontraron conflictos No se pudo mantener sincronizados los contenidos de %1$d archivos Fallos en la sincronización de contenidos Los contenidos de %1$d archivos no pudieron sincronizarse (%2$d conflictos) Algunos archivos locales se han perdido %1$d archivos en la carpeta %2$s no pudieron ser copiados a - A partir de la versión 1.3.16, los archivos subidos desde este dispositivo se copian en la carpeta local %1$s para evitar la pérdida de datos cuando se sincroniza un único archivo con varias cuentas.\n\nDebido a este cambio, todos los archivos subidos con versiones anteriores de esta aplicación fueron copiados a la carpeta %2$s. Sin embargo, un error impidió que se completara esta operación durante la sincronización de la cuenta. Puede dejar los archivos tal cual como están y eliminar el enlace hacia %3$s o mover los archivos a la carpeta %1$s y mantener el enlace hacia %4$s.\n\nAbajo se muestran los archivos locales y los archivos remotos en %5$s a los que fueron enlazados. - La carpeta local %1$s no existe. + A partir de la versión 1.3.16, los archivos subidos desde este dispositivo se copian en la carpeta local %1$s para evitar la pérdida de datos cuando se sincroniza un único archivo con varias cuentas.\n\nDebido a este cambio, todos los archivos subidos con versiones anteriores de esta aplicación fueron copiados a la carpeta %2$s. Sin embargo, un error impidió que se completara esta operación durante la sincronización de la cuenta. Puede dejar los archivos tal cual como están y eliminar el enlace hacia %3$s o mover los archivos a la carpeta %1$s y mantener el enlace hacia %4$s.\n\nDebajo se muestran los archivos locales y los archivos remotos en %5$s a los que fueron enlazados. + La carpeta %1$s ya no existe Mover todo Todos los archivos fueron movidos No se han podido mover algunos archivos @@ -228,11 +232,11 @@ El archivo no está en una cuenta válida Códec no soportado El archivo de medios no pudo ser leído - Archivo no codificado correctamente + El archivo de medios tiene una codificación incorrecta Tiempo de espera agotado en el intento de reproducción El archivo de medios no puede ser transmitido - El archivo de medios no se puede reproducir con el reproductor de medios por defecto - Error de seguridad al intentar reproducir %1$s + El reproductor por defecto no puede reproducir el archivo de medios + Se encontró un error de seguridad intentando reproducir %1$s Error de entrada al intentar reproducir %1$s Error inesperado al intentar reproducir %1$s Botón de rebobinado @@ -249,28 +253,28 @@ Ya existe una cuenta en este dispositivo con los mismos datos de usuario y servidor El usuario introducido no concuerda con el usuario de esta cuenta Ocurrió un error desconocido - Error: no se pudo encontrar el host - Instancia de servidor no encontrada + No se pudo encontrar el host + Servidor no encontrado El servidor ha tardado demasiado en responder Formato de dirección del servidor incorrecto Falló la inicialización SSL - No fue posible verificar la identidad del servidor SSL + No se ha podido verificar la identidad del servidor SSL No se reconoce la versión del servidor No se ha podido establecer la conexión Conexión segura establecida Nombre de usuario o contraseña incorrectos Autorización fallida Acceso denegado por el servidor de autorización - Estado inesperado; por favor introduzca su dirección de correo de nuevo + Estado inesperado; por favor, introduce de nuevo la dirección del servidor Su autorización ha expirado. Por favor, autorice de nuevo Por favor introduzca su contraseña actual Su sesión ha expirado. Por favor conéctese de nuevo - Conectando al servidor de autentificación + Conectando al servidor de autentificación... El servidor no soporta este método de autenticación %1$s no soporta cuentas múltiples Su servidor no está retornando una identificación de usuario correcta; contacte a un administrador No puede autenticarse a este servidor - Aún no existe la cuenta en el dispositivo + La cuenta no existe todavía en el dispositivo Marcar el modo disponible a desconectado Desmarcar el modo disponible de desconectado @@ -279,23 +283,23 @@ Renombrar Borrar ¿Está seguro que quiere eliminar %1$s? - ¿Realmente desea eliminar %1$s y todo su contenido? + ¿Realmente deseas eliminar %1$s y todo su contenido? Sólo local - Borrado correctamente + Eliminado El borrado no se pudo completar Introduzca un nombre nuevo - No se pudo cambiar el nombre de la copia local, trate con un nombre differente - No se pudo cambiar el nombre + No se ha podido cambiar el nombre de la copia local, prueba un nombre diferente + No se ha podido dar un nombre nuevo al servidor No se ha podido comprobar el archivo remoto Ya está sincronizado - No se pudo crear la carpeta + No se ha podido crear la carpeta Caracteres ilegales: / \\ < > : \" | ? * Nombre de archivo contiene al menos un carácter no válido El nombre de archivo no puede estar vacío - Espere un momento + Espere un momento... Comprobando las credenciales guardadas - Problema inesperado; por favor, pruebe otra app para seleccionar el archivo - No hay archivos seleccionados. + Problema inesperado; por favor, selecciona el archivo en una app diferente + No hay archivos seleccionados Enviar enlace a … Copiando el archivo desde el almacenamiento privado. @@ -308,7 +312,7 @@ - El certificado del servidor es de una fecha que aún no ha llegado - La URL no coincide con el nombre de dominio del certificado ¿Confía de todas formas en este certificado? - No se pudo guardar el certificado + No se ha podido guardar el certificado Detalles Ocultar Emitido para: @@ -337,11 +341,11 @@ 2012/05/18 12:23 PM 12:23:45 - Subir únicamente por WiFi - Subir fotos por wifi únicamente - Subir archivos por wifi únicamente - Subir solo al cargar - Subir solo al cargar + Subir solamente por Wi-Fi + Subir fotos solamente por Wi-Fi + Subir vídeos solamente por Wi-Fi + Subir solamente al cargar + Subir solamente al cargar /InstantUpload Conflicto con archivo ¿Qué archivos desea mantener? Si selecciona ambas versiones, el archivo local tendrá un número añadido a su nombre. @@ -351,7 +355,7 @@ ¡Lo sentimos! Previsualización de imagen - La foto no puede ser mostrada. + No se puede mostrar la imagen %1$s se pudo copiar a la carpeta local %2$s Carpeta para subida instantánea @@ -360,7 +364,7 @@ Usar subcarpetas Archivar en subcarpetas basadas en año y mes. - Lo siento, la función compartir no está activada en su servidor. Contacte a su administrador. + La función Compartir no está activada en su servidor. Contacte a su administrador. No se puede compartir. Revise si el archivo existe Ocurrió un error al tratar de compartir este archivo o carpeta No se puede dejar de compartir. Revise si el archivo existe @@ -378,28 +382,29 @@ Error inesperado al copiar al portapapeles Texto copiado de %1$s - Error crítico: no es posible realizar operaciones + Error crítico: no se puede realizar operaciones Ocurrió un error al conectarse con el servidor. - Ocurrió un error al esperar la respuesta del servidor, la operación no se pudo realizar - Ocurrió un error al esperar la respuesta del servidor, la operación no se pudo realizar - La operación no se pudo completar; el servidor no está disponible + Ha ocurrido un error al esperar la respuesta del servidor. La operación no se ha podido completar. + Ha ocurrido un error al esperar la respuesta del servidor. La operación no se ha podido completar. + La operación no se ha podido completar. El servidor no está disponible + No tiene permiso %s para renombrar este archivo para eliminar este archivo para compartir este archivo para descompartir este archivo para actualizar este comparto - para crear el archivo + para crear este archivo para subir archivos a esta carpeta Este archivo ya no se encuentra en el servidor Actualizando ruta de almacenamiento Terminar - Preparando la migración… + Preparando la migración&@8230; Comprobando destino… Guardando configuración de cuentas… - Esperando sincronizaciones no finalizadas… + Esperando que todas las sincronizaciones terminen… Moviendo datos… Actualizando índice… Limpiando… @@ -409,21 +414,21 @@ ERROR: El archivo no se puede escribir ERROR: El archivo no se puede leer ERROR: El directorio de Nextcloud ya existe - ERROR: Al migrar - ERROR: Al actualizar el índice + ERROR: Fallo durante la migración + ERROR: Fallo al actualizar el índice - La carpeta de datos ya existe. ¿Qué hacer? - Anular - Usar existente + La carpeta de datos ya existe. Escoge una de las opciones: + Reemplazar + Usar Cuentas Agregar cuenta Administrar cuentas - La conexión segura está siendo redirigida por una ruta insegura. + La conexión segura está siendo redirigida a través de una ruta insegura. Registros Mandar historial. - Aplicación para enviar registros no fue encontrada. Por favor instale una aplicación de correo. + No se ha encontrado ningua app para enviar los registros. Por favor, instala un cliente de correo electrónico. Se han encontrado %1$s aplicaciones de registros para Android Cargando datos … @@ -431,26 +436,26 @@ Contraseña incorrecta Mover Copiar - Nada por aquí. ¡Puede agregar una carpeta! + Nada por aquí. Puedes agregar una carpeta. Elegir - No se puede mover. Revise si el archivo existe - No se puede mover una carpeta dentro de una de sus subcarpetas. + No se puede mover el archivo. Comprueba si existe + No se puede mover una carpeta dentro de una de sus propias subcarpetas. El archivo ya existe en la carpeta de destino Hubo un error al tratar de mover este archivo o carpeta mover este archivo No se puede copiar. Revise si existe el archivo - No se puede copiar una carpeta dentro de una de sus subcarpetas. - El archivo ya existe en el directorio de destino + No se puede copiar una carpeta dentro de una de sus propias subcarpetas. + El fichero ya existe en el directorio de destino Hubo un error al tratar de copiar este archivo o carpeta copiar este archivo Subidas instantáneas Detalles - Carpeta para subida instantánea de vídeos + Carpeta para subida instantáneo de vídeos La sincronización de la carpeta %1$s no se pudo completar compartido @@ -508,7 +513,7 @@ %1$s (correo electrónico) %1$s ( en %2$s ) - Lo siento, su versión de servidor no permite compartir con usuarios desde los clientes.\nPor favor, contacte con su administrador + Actualiza la versión del servidor para permitir compartir entre usuarios desde sus clientes.\nPor favor, contacta con tu administrador puede compartir puede editar crear @@ -517,10 +522,10 @@ Parar de compatir hecho - Reintento fallido + Nuevo intento fallido Limpieza fallida Limpieza exitosa - Limpiar todo al finalizar + Limpiar subidas finalizadas Vista en cuadrícula Ver lista @@ -530,8 +535,8 @@ Limpiar datos No se han podido eliminar algunos archivos - Se requieren permisos adicionales para subir & y descargar archivos. - El archivo no se encuentra en el servidor local de archivos. + Se necesitan permisos adicionales para subir y descargar archivos. + El archivo no se encuentra en el sistema de archivos local. ¿Está seguro de que quiere eliminar los elementos seleccionados? ¿Está seguro de que quiere eliminar los elementos seleccionados y sus contenidos? Esperando la carga del dispositivo @@ -541,17 +546,18 @@ Subida automática Participar Ayúdanos a realizar pruebas - ¿Encontró un error? ¿Algo está mal? + ¿Encontraste un error? ¿Algo va mal? Informar de un problema en Github - ¿Está interesado en ayudarnos a probar la próxima versión? - Esto incluye todas las características por llegar y está muy avazado en lo último. Pueden ocurrir fallos y errores, que si sucede, por favor infórmanos. + ¿Estás interesado en ayudarnos a probar la próxima versión? + Probar la versión de desarrollo + Esto incluye todas las características por llegar y está muy avazado en lo último. Pueden ocurrir fallos y errores y, si suceden infórmanos, por favor. Versión a ser liberada - La versión a ser liberada (release candidate - RC) es una instantánea de la próxima versión y se espera que sea estable. Probar su configuración individual podría ayudar a asegurar esto. Regístrese para probarla en Play Store o busque manualmente en la sección \"versiones\" de F-Droid. + La versión a ser liberada (release candidate - RC) es una instantánea de la próxima versión y se espera que sea estable. Probar su configuración individual podría ayudar a asegurar esto. Regístrate para probarla en Play Store o busca manualmente en la sección \"versiones\" de F-Droid. Colabore activamente Únase a la conversación en IRC: <a href=\"%1$s\">#nextcloud-mobile</a> Ayude a otros en el foro <a href=\"%1$s\"></a>. <a href=\"%1$s\">Traducen</a> la app - Contribuya como desarrollador, vea <a href=\"https://github.com/nextcloud/android/blob/master/CONTRIBUTING.md\">CONTRIBUTING.md</a> para más detalles + Revisa, corrige y escribe código, lee <a href=\"https://github.com/nextcloud/android/blob/master/CONTRIBUTING.md\">CONTRIBUTING.md</a> para más detalles Mover a… Copiar a… Elija carpeta… @@ -559,7 +565,7 @@ No se han encnotrado carpetas de medios. Preferencias de subida automática Configuración - La subida instantánea ha sido completamente renovada. Por favor, vaya al menú principal y reconfigure sus subidas instantáneas. Disculpe las molestias.\n\n¡Disfrute las nuevas y extendidas capacidades de la subida automática! + La subida instantánea ha sido completamente renovada. Reconfigura tus subidas instantáneas en el menú principal.\n\n¡Disfruta las nuevas y extendidas capacidades de la subida automática! Durante %1$s %d seleccionado @@ -569,7 +575,11 @@ Cargando actividades… No se encontró actividad. - Ingrese nombre y tipo de archivo de subida + Cargando notificaciones… + No hay notificaciones + Por favor, comprúebalo más tarde. + + Introduce el nombre y tipo de archivo para subir Nombre de archivo Tipo de archivo Archivo de texto recortado (.txt) @@ -585,7 +595,7 @@ Un lugar seguro para tus datos - Acceda, comparta y proteja sus archivos en casa y en su empresa + Accede, comparte y protege tus archivos en casa y en el trabajo Múltiples cuentas Conectar con todas sus nubes @@ -595,6 +605,9 @@ Omitir + Por favor, escanea tu dedo + Dedo no reconocido + Nombre completo Correo electrónico @@ -607,5 +620,34 @@ Aun no hay actividad - Esta secuencia le mostrará eventos como\nagregados, cambios& recursos compartidos - + Esta secuencia le mostrará eventos como\ninclusiones, cambios y archivos compartidos + Ha ocurrido un error + Acerca de + + Copia de seguridad de los contactos + Restaurar los contactos + Realizar la copia de seguridad ahora + Restaurar la última copia de seguridad + Restaurar + Copia de seguridad + Copia de seguridad de los contactos + Última copia de seguridad + Se necesita el permiso para leer la lista de contactos + SE necesita el permiso para cambiar la lista de contactos + Restaurar contactos + Restaurar los contactos seleccionados + Escoge la cuenta para importar + No se han concedido permisos. ¡No se ha importado nada! + Escoge fecha + nunca + No se ha encontrado ningún archivo + ¡No podemos encontrar tu última copia de seguridad! + Copia de seguridad programada. Comenzará en breve + Importación programada. Comenzará en breve + + + Nueva notificación recibida + Desconectar + + + diff --git a/src/main/res/values-fr/strings.xml b/src/main/res/values-fr/strings.xml index 3f309a4b9b..31764c2bd1 100644 --- a/src/main/res/values-fr/strings.xml +++ b/src/main/res/values-fr/strings.xml @@ -58,12 +58,16 @@ Configurer la synchronisation de l\'agenda et des contacts Configurer DAVdroid (v1.3.0+) pour le compte actuel Une adresse de serveur pour le compte pourrait ne pas être résolue par DAVdroid - Synchronisation de l\'agenda & des contacts configurée + Aucune application Google Play store ou F-Droid installée + Synchronisation de l\'agenda & des contacts configurée Aide Recommander à un ami Nous contacter par mail Mentions - Essayez %1$s sur votre smartphone ! + Mémoriser l\'emplacement de partage + Mémoriser le dernier emplacement de téléversement + + Essayez %1$s sur votre smartphone ! J\'aimerais vous inviter à utiliser %1$s sur votre smartphone.\nTéléchargez-la ici : %2$s. Vérifier le serveur @@ -95,7 +99,9 @@ Déposez du contenu ou synchronisez vos appareils. Mettez certains fichiers en favoris ou synchronisez vos appareils. Les fichiers et dossiers ajoutés à vos favoris apparaîtront ici + Auncun fichier mis en favori trouvé qui correspond à votre requête. Chargement… + Aucune application trouvée pour ce type de fichier. Aucun fichier n\'est présent dans ce dossier. Aucun résultat dans ce dossier Aucun résultat @@ -110,7 +116,9 @@ Aucun fichier ajouté récemment trouvé Votre recherche n\'a pas renvoyée de fichiers récement ajoutés. Téléversez des photos ou activez le téléversement automatique. + Aucune photo trouvée qui correspond à votre requête. Téléversez des vidéos ou activez le téléversement automatique. + Aucune vidéo trouvée qui correspond à votre requête. Aucun historique de téléversement Téléversez du contenu ou activez le téléversement instantané. Téléversez du contenu ou activez le téléversement automatique. @@ -126,6 +134,7 @@ Télécharger Synchroniser Le fichier a été renommé en %1$s pendant le téléversement + Affichage en liste Partager Oui Non @@ -194,12 +203,14 @@ Le contenu de %1$d fichiers n\'a pu être synchronisé (%2$d conflits) Certains fichiers locaux ont été oubliés %1$d fichiers du dossier %2$s n\'ont pas pu être copiés dans + Depuis la version 1.3.16, les fichiers envoyés depuis cet appareil sont copiés dans le dossier local %1$s pour éviter une perte de données lorsqu\'un même fichier est synchronisé avec plusieurs comptes.\n\nEn raison de cette modification, tous les fichiers envoyés avec des versions antérieures de cette application ont été copiés dans le dossier %2$s. Cependant, une erreur a empêché l\'achèvement de cette opération pendant la synchronisation du compte. Vous pouvez soit laisser les fichiers tels quels et supprimer le lien vers %3$s, soit déplacer les fichiers dans le dossier %1$s et garder le lien vers %4$s.\n\nCi-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxquels ils étaient liés. Le dossier %1$s n\'existe plus Tout déplacer Tous les fichiers ont été déplacés Certains fichiers n\'ont pu être déplacés Local : %1$s Distant : %1$s + Il n\'y a pas assez d\'espace pour copier les fichiers sélectionnés dans le dossier %1$s. Souhaitez-vous plutôt les déplacer ? Veuillez saisir votre code de sécurité Saisissez votre code de sécurité @@ -221,7 +232,12 @@ Le codec de ce média n\'est pas pris en charge Impossible de lire le fichier média Le fichier média n\'est pas correctement encodé + Délai dépassé pour la lecture du morceau Le fichier média ne peut pas être diffusé + Le fichier média ne peut être lu avec le lecteur intégré + Erreur de sécurité à la lecture de %1$s + Erreur d\'entrée à la lecture de %1$s + Erreur inattendue à la lecture de %1$s Bouton de rembobinage Bouton de lecture ou de pause Bouton d\'avance rapide @@ -233,21 +249,32 @@ Connexion établie Test de connexion en cours Configuration du serveur erronée + Un compte pour les mêmes utilisateur et serveur existe déjà sur cet appareil L\'utilisateur saisi ne correspond pas à l\'utilisateur de ce compte Une erreur inconnue s\'est produite ! + Impossible de trouver l\'hôte + Aucune instance du serveur n\'a été trouvée Le serveur a pris trop de temps à répondre + Adresse du serveur non valable Échec de l\'initialisation SSL + Impossible de vérifier l\'identité du serveur SSL La version du serveur n\'est pas reconnue + Impossible d\'établir la connexion Connexion sécurisée établie Nom d\'utilisateur ou mot de passe incorrect Échec d\'autorisation Accès refusé par le serveur d\'autorisation + Problème inattendu ; veuillez saisir à nouveau l\'adresse du serveur Votre autorisation a expiré. Merci de vous authentifier à nouveau Veuillez saisir le mot de passe actuel Votre session a expiré. Merci de vous reconnecter + Connexion au serveur d\'authentification… Le serveur ne prend pas en charge cette méthode d\'authentification %1$s ne prend pas en charge les comptes multiples + Votre serveur a retourné un identifiant d\'utilisateur incorrect. Veuillez contacter un administrateur Impossible de s\'authentifier sur ce serveur + Le compte n\'existe pas encore sur ce périphérique + Rendre disponible hors-ligne Ne plus rendre disponible hors-ligne Mettre en favori @@ -255,27 +282,36 @@ Renommer Supprimer Voulez-vous vraiment supprimer %1$s ? + Voulez-vous vraiment supprimer %1$s et ses contenus ? Local seulement Supprimé Échec de la suppression Entrez un nouveau nom + La version locale ne peut être renommée ; veuillez réessayer avec un nom différent + Échec du renommage + Le fichier distant n\'a pu être vérifié Le contenu du fichier est déjà synchronisé + Le dossier n\'a pas pu être créé Caractères interdits : / \\ < > : \" | ? * Le nom de fichier contient au moins un caractère invalide Le nom du fichier ne peut pas être vide Veuillez patienter... Vérification des identifiants enregistrés + Problème inattendu ; veuillez sélectionner le fichier depuis une autre application Aucun fichier sélectionné Envoyer le lien vers … Copie du fichier depuis le stockage privé Connexion avec oAuth2 + Connexion au serveur oAuth2… + L\'identité du site ne peut être vérifiée - Le certificat du serveur n\'est pas sûr - Le certificat du serveur a expiré - Le certificat du serveur n\'est pas encore valide - L\'URL ne correspond pas au nom d\'hôte du certificat Voulez-vous tout de même faire confiance à ce certificat ? + Impossible de sauvegarder le certificat Détails Masquer Délivré à : @@ -304,14 +340,22 @@ 18/05/2012 12:23 PM 12:23:45 + Téléverse par wifi uniquement + Téléverser les images via une connexion WiFi uniquement + Téléverser les images via une connexion WiFi uniquement + Téléverser les images uniquement si le chargeur est branché + Téléverser les images uniquement si le chargeur est branché /InstantUpload Conflit de fichiers + Quels fichiers voulez-vous conserver ? Si vous sélectionnez les deux, un chiffre sera ajouté au nom du fichier local. Conserver les deux version locale version serveur Désolé. Prévisualisation de l\'image + L\'image ne peut pas être affichée + %1$s n\'a pas pu être copié dans le dossier local %2$s Téléversement immédiat du dossier Dossier local @@ -319,6 +363,7 @@ Utiliser des sous-dossiers Stocker dans des sous-dossiers basés sur années et mois + Désolé, le partage n\'est pas disponible sur votre serveur. Veuillez contacter votre administrateur. Impossible de partager. Vérifiez que le fichier est bien présent Une erreur est survenue lors de la tentative de partage de ce fichier ou répertoire Impossible de supprimer le partage. Vérifiez que le fichier est bien présent @@ -332,29 +377,57 @@ Copier le lien Copié dans le presse-papier + Aucun texte n\'a été reçu pour copier dans le presse-papier Erreur inattendue lors de la copie vers le presse-papiers Texte copié depuis %1$s + Erreur critique : Impossible de réaliser les opérations + + Une erreur est survenue pendant la connexion au serveur. + Une erreur est survenue pendant l\'attente du serveur. L\'opération n\'a pas pu être effectuée + Une erreur est survenue pendant l\'attente du serveur. L\'opération n\'a pas pu être effectuée + Impossible de réaliser l\'opération. Le serveur n\'est pas accessible + + Vous n\'avez pas la permission %s de renommer ce fichier de supprimer ce fichier de partager ce fichier de cesser le partage de ce fichier de modifier ce partage + de créer ce fichier + de téléverser dans ce dossier Ce fichier n’est plus disponible sur le serveur Mise à jour du chemin de stockage Terminer + Préparation pour la migration… Vérification de la destination… + Enregistrement de la configuration des comptes… + En attente des synchronisations non terminées… Déplacement des données… Mise à jour des indexes… Nettoyage… + Restauration de la configuration des comptes… Terminé + ERREUR : Espace insuffisant + ERREUR : Le fichier n\'est pas modifiable + ERREUR : Le fichier n\'est pas lisible ERREUR : Le dossier Nextcloud existe déjà + ERREUR : Echec lors de la migration + ERREUR : Echec lors de la mise à jour de l\'index + + Le dossier de données existe déjà. Choisissez une des options suivantes : + Remplacer + Conserver le dossier actuel + Comptes Ajouter un compte Gérer les comptes - Journaux + Le connexion sécurisée est redirigée vers une route non-sécurisée. + + Journaux Envoyer le journal + Aucune application n\'a été trouvée pour envoyer les journaux. Merci d\'installer une application de messagerie. Journaux de l\'application Android %1$s Chargement des données … @@ -362,20 +435,27 @@ Mot de passe incorrect Déplacer Copier + Il n\'y a rien ici. Vous pouvez ajouter un dossier. Valider + Impossible de déplacer le fichier. Vérifiez que le fichier existe + Il n\'est pas possible de déplacer un dossier vers un de ses descendants + Le fichier existe déjà dans le dossier de destination Une erreur est survenue lors de la tentative de déplacement de ce fichier ou dossier de déplacer ce fichier Impossible de copier. Vérifiez que le fichier existe + Il n\'est pas possible de copier un dossier vers un de ses descendants + Le fichier existe déjà dans le dossier de destination Une erreur est survenue lors de la copie de ce fichier ou dossier de copier ce fichier Téléversement immédiat Propriétés - La synchronisation du dossier %1$s n\'a pas pu être terminée + Téléversement immédiat du dossier vidéos + La synchronisation du dossier %1$s n\'a pas pu être terminée a partagé avec vous @@ -416,6 +496,7 @@ Ajouter un Utilisateur ou un Groupe Partager par lien public Indiquer une date d\'expiration + Protéger avec un mot de passe Sécurisé Permettre la modification Masquer la liste des fichiers @@ -431,6 +512,7 @@ %1$s (courriel) %1$s (sur %2$s) + Désolé, la version de votre serveur ne permet pas aux applications d\'initier des partages avec d\'autres utilisateurs.\nVeuillez contacter votre administrateur peut partager peut modifier création @@ -439,34 +521,50 @@ Terminer le partage Terminé + Réessayer les téléversements échoués Effacer les échoués + Effacé + Effacer tous les téléversements terminés + Affichage Mosaïque Affichage Liste Gestion de l\'espace + Les paramètres, la base de données et les certificats du serveur provenant de %1$s seront définitivement effacés. \n\nLes fichiers téléchargés ne seront pas impactés.\n\nCette opération peut prendre du temps. Effacer les données Certains fichiers n\'ont pu être supprimés. + Des permissions supplémentaires sont exigées pour téléverser et télécharger des fichiers. + Le fichier n\'a pas été trouvé sur le système de fichier local Voulez-vous vraiment supprimer les éléments sélectionnés ? Voulez-vous vraiment supprimer les éléments sélectionnés et leurs contenus ? + En attente de recharge de l\'appareil Rechercher Il s\'agit d\'une fonctionnalité de Nextcloud ; veuillez mettre à jour.. En apprendre plus Téléversement automatique Participer + Aidez nous en le testant + Vous avez trouvé un bug ? Quelque chose vous semble étrange ? Signaler un problème sur Github + Vous avez envie de nous aider en testant les futures versions ? Testez la version Bêta + La version Beta inclut les dernières fonctionnalités qui sont encore toutes fraîches. Des erreurs peuvent se produire et si c\'est le cas, merci de nous les signaler. Testez la version Release Candidate + La version « release candidate » (RC) est un instantanné de la prochaine version et est supposée stable. Le test de votre configuration pourrait nous aider à nous assurer que cette version est entièrement stable. Inscrivez vous pour être testeur sur le Play store ou allez jeter un œil dans la section \"versions\" de F-Droid. Participez activement Rejoignez la discussion sur IRC <a href=\"%1$s\">#nextcloud-mobile</a>. Aidez les autres sur le <a href=\"%1$s\">forum</a>. <a href=\"%1$s\">Traduisez</a> l\'application. + Vous êtes développeur ? Consultez <a href=\"https://github.com/nextcloud/android/blob/master/CONTRIBUTING.md\">CONTRIBUTING.md</a> pour plus d\'informations Déplacer vers… Copier vers… Sélectionner le dossier… Chargement des dossiers… Aucun dossier média trouvé. + Préférences pour le téléversement automatique Paramètres + Le téléversement immédiat a été complètement réorganisé. Merci de bien vouloir accéder au menu principal et de reconfigurer votre téléversement automatique.\n\nProfitez des nouvelles capacités étendues du téléversement automatique. Pour %1$s %d sélectionné @@ -480,6 +578,7 @@ Aucune notification Veuillez revenir plus tard. + Spécifiez le nom et le type du fichier téléversé Nom de fichier Type de fichier Extrait du fichier texte (.txt) @@ -495,6 +594,8 @@ Un endroit sûr pour toutes vos données + Accédez, partagez et protégez vos fichiers personnels et professionnels + Multi-compte Connectez-vous avec plusieurs comptes clouds @@ -518,19 +619,28 @@ Aucune activité pour le moment + Ce flux liste les événements tels que\nles ajouts, les modifications et les partages Une erreur est survenue À propos + Copie de sauvegarde des contacts + Restaurer les contacts + Sauvegarder maintenant Restaurer la dernière copie de sauvegarde Restaurer Copie de sauvegarde Sauvegarde des contacts Dernière copie de sauvegarde + L\'autorisation de lecture des contacts est nécessaire + L\'autorisation d\'écriture des contacts est nécessaire Restaurer les contacts Restaurer les contacts sélectionnés + Choisissez un compte pour importer + Aucune autorisation, rien d\'importé ! Choisir la date jamais Aucun fichier trouvé + Nous ne trouvons pas votre dernière copie de sauvegarde ! Sauvegarde planifiée et va commencer prochainement Importation planifiée et va commencer prochainement diff --git a/src/main/res/values-nl/strings.xml b/src/main/res/values-nl/strings.xml index f485a16070..9256bbf842 100644 --- a/src/main/res/values-nl/strings.xml +++ b/src/main/res/values-nl/strings.xml @@ -90,6 +90,7 @@ Kies er eentje van een provider. Dit bestand kan niet worden geüpload %1$s heeft geen toestemming om een ontvangen bestand te lezen Voor upload geselecteerde bestand niet gevonden. Controleer of het bestaat. + Er trad een fout op bij het kopiëren van het bestand naar een tijdelijke map. Probeer het opnieuw te versturen. Uploadoptie: Verplaats bestand naar Nextcloud-map Bewaar het bestand in de bronmap @@ -97,7 +98,10 @@ Kies er eentje van een provider. seconden geleden Hier geen bestanden Upload je inhoud of synchroniseer met je apparaten. - Laden … + Maak enkele bestanden favoriet of synchroniseer met je apparaten! + Bestanden en mappen gemarkeerd als favoriet worden hier getoond + Geen favoriete bestanden gevonden voor je zoekopdracht! + Laden… Er is geen app ingesteld om dit bestandformaat te behandelen. Er staan geen bestanden in deze map. Geen resultaten in deze map @@ -132,6 +136,7 @@ Kies er eentje van een provider. Downloaden Synchroniseren Bestand hernoemd naar %1$s tijdens de upload + Lijstoverzicht Delen Ja Nee @@ -207,6 +212,7 @@ Kies er eentje van een provider. Een paar bestanden konden niet worden verplaatst Lokaal: %1$s Extern: %1$s + Er is niet genoeg ruimte om de geselecteerde bestanden te kopieren naar %1$s. Wilt u ze in plaats daarvan verplaatsen? Voer je toegangscode in Toegangscode invoeren @@ -307,6 +313,7 @@ Kies er eentje van een provider. - Het servercertificaat is nog niet geldig - De URL komt niet overeen met de hostname in het certificaat Wil je dit certificaat alsnog vertrouwen? + Het certificaat kon niet worden opgeslagen Details Verbergen Uitgegeven aan: @@ -342,6 +349,7 @@ Kies er eentje van een provider. Alleen uploaden bij opladen /InstantUpload Bestandsconflict + Welke bestanden wil je bewaren? Als je beide versies selecteert zal het lokale bestand een volgnummer aan de naam toegevoegd krijgen. Beide bewaren lokale versie serverversie @@ -357,6 +365,7 @@ Kies er eentje van een provider. Gebruik submappen Opslaan in submappen, gebaseerd op jaar en maand + Sorry, delen is niet ingeschakeld op jouw server. Neem contact op met je beheerder. Kan dit niet delen. Controleer of dit bestand wel bestaat Er trad een fout op bij je poging dit bestand of deze map te delen Kan delen niet beëindigen. Ga na of het bestand bestaat @@ -370,32 +379,57 @@ Kies er eentje van een provider. Link kopiëren Gekopieerd naar het klembord + Geen tekst ontvangen om te kopiëren naar het klembord Onverwachte fout bij het kopiëren naar het klembord Tekst gekopieerd uit %1$s + Kritieke fout: kan de acties niet uitvoeren + + Er trad een fout op bij het verbinden met de server. + Er trad een fout op bij het wachten op de server, de verwerking kon niet plaatsvinden + Er trad een fout op bij het wachten op de server, de verwerking kon niet plaatsvinden + De verwerking kon niet plaatsvinden, de server is niet beschikbaar + + Je mist autorisatie %s om dit bestand te hernoemen om dit bestand te verwijderen om dit bestand te delen om dit bestand niet meer te delen om deze share bij te werken + om dit bestand te creëren + om dit bestand in deze map te uploaden Dit bestand is niet langer beschikbaar op de server Opslagpad bijwerken Afronden + Voorbereiden van migratie… Doelmap controleren … + Accountconfiguratie opslaan… + Wachten op onvoltooide synchronisaties… Gegevens verplaatsen … Index bijwerken … Opruimen … + Accountconfiguratie herstellen… Afgerond + FOUT: Niet genoeg ruimte + FOUT: Bestand niet beschrijfbaar + FOUT: Bestand niet leesbaar FOUT: Nextcloudmap bestaat al + FOUT: Tijdens migratie + FOUT: Tijdens bijwerken index + + Gegevensmap bestaat al, wat te doen? Vervangen Gebruiken Accounts Account toevoegen Accounts beheren - Logs + De beveiligde verbinding is omgeleid via een onveilige route. + + Logs Geschiedenis versturen + Geen applicatie gevonden voor het versturen van de logs. Installeer een e-mailapplicatie. %1$s-Android-app-logs Gegevens laden … @@ -403,20 +437,27 @@ Kies er eentje van een provider. Onjuist wachtwoord Verplaatsen Kopiëren + Het is hier leeg. Je kan een map toevoegen! Kiezen + Kan niet verplaatsen. Ga na of het bestand wel bestaat + De map kan niet naar een onderliggende map worden verplaatst + Het bestand bestaat al in de doelmap Er trad een fout op bij het verplaatsen van dit bestand of deze map om dit bestand te verplaatsen Kan niet kopiëren. Ga na of het bestand wel bestaat + Een map kan niet naar een onderliggende map worden gekopieerd + Het bestand bestaat al in de doelmap Er trad een fout op bij het kopiëren van dit bestand of deze map om dit bestand te kopiëren Direct uploaden Details - Synchronisatie van map %1$s kon niet worden voltooid + Directe-uploadmap voor video\'s + Synchronisatie van map %1$s kon niet worden voltooid gedeeld met jou @@ -457,6 +498,7 @@ Kies er eentje van een provider. Voeg gebruiker of groep toe Deel link Stel vervaldatum in + Beveilig met wachtwoord Beveiligd Bewerken toestaan Verberg bestandsoverzicht @@ -472,6 +514,7 @@ Kies er eentje van een provider. %1$s (email) %1$s ( op %2$s ) + Helaas, je serverversie staat niet toe om binnen clients te delen met gebruikers.\nNeem contact op met je beheerder kan delen kan bewerken creëer @@ -480,16 +523,24 @@ Kies er eentje van een provider. Stop met delen gedaan + Mislukte opnieuw proberen Mislukte opschonen + Gelukte opschonen + Alle voltoooide opschonen + Rasterindeling Lijstindeling Beheer ruimte + Instellingen, database en servercertificaten van de data van %1$s zullen permanent worden verwijderd. \n\nGedownloade bestanden blijven onaangeroerd.\n\nDit proces kan even duren. Gegevens verwijderen Sommige bestanden konden niet worden verwijderd + Aanvullende permessies vereist voor het uploaden en downloaden van bestanden. + Het bestand is niet te vinden binnen het lokale bestandssysteem. Wil je de geselecteerde objecten echt verwijderen? Wil je de geselecteerde objecten en hun inhoud echt verwijderen? + Wachten to apparaat wordt opgeladen Zoeken Dit is een Nextcloud-optie, gelieve te updaten. Meer weten @@ -498,8 +549,11 @@ Kies er eentje van een provider. Help bij testen Bug gevonden? Rare dingen? Meld het op Github + Geïnteresseerd om ons te helpen de volgende versie te testen? Test de dev versie + Dit omvat alle komende opties en is zeer \'bleeding edge\'. Bugs/fouten kunnen voorkomen en in dat geval vragen we je die aan ons te melden. Release candidate + De Release Candidate (RC) is een kopie van de komende release en zou stabiel moeten zijn. Testen van jouw installatie kan ons helpen om dit te bevestigen. Meld je aan om te testen op de Play Store of bekijk handmatig de \"versies\"-sectie op F-Droid. Actief meedoen Doe mee met de chat op IRC: <a href="%1$s">#nextcloud-mobile</a> Help andere gebruikers in de <a href="%1$s">forums</a> @@ -510,7 +564,9 @@ Kies er eentje van een provider. Kies map … Mappen laden … Geen mediamappen gevonden. + Voorkeuren voor automatisch uploaden Instellingen + Direct uploaden is helemaal herzien. Bekijk het hoofdmenu en herconfigureer je auto-uploadfunctie. Onze excuses voor het ongemak.\n\nVeel plezier met de nieuwe en meer uitgebreide auto-upload-mogelijkheden! Voor %1$s %d geselecteerd @@ -524,6 +580,7 @@ Kies er eentje van een provider. Geen meldingen Controleer later opnieuw. + Opgeven upload bestandsnaam en bestandstype Bestandsnaam Bestandstype Snippet tekstbestand(.txt) @@ -539,6 +596,8 @@ Kies er eentje van een provider. Een veilige plek voor al je gegevens + Benader, deel & beveilig je gegevens thuis en binnen je organisatie + Meerdere accounts Verbind met al je clouds @@ -562,17 +621,23 @@ Kies er eentje van een provider. Nog geen activiteit + Deze stream laat gebeurtenissen zoals\ntoevoegingen, veranderingen & gedeelde bestanden zien Er heeft zich een fout voorgedaan Over + Contactpersonen backup + Nu backupppen Herstel de laatste backup Herstellen Backuppen Contactpersonen backup Laatsts backup + Leesrechten voor contactpersonen vereist + Schrijfrechten voor contactpersonen vereist Herstellen contactpersonen Herstel de geselecteerde contactpersonen Kies een account voor import + Geen permissies, niets geïnporteerd! Kies datum nooit Geen bestand gevonden diff --git a/src/main/res/values-pl/strings.xml b/src/main/res/values-pl/strings.xml index 41a82e3dbb..6c9788f4eb 100644 --- a/src/main/res/values-pl/strings.xml +++ b/src/main/res/values-pl/strings.xml @@ -43,11 +43,11 @@ Konta Zarządzaj kontami Blokada hasłem + Blokada odciskiem palca + Brak skonfigurowanych odcisków palców Pokaż ukryte pliki - Natychmiastowa wysyłka obrazów - Wysyłaj od razu zdjęcia zrobione aparatem - Natychmiastowa wysyłka wideo - Wysyłaj od razu filmy nagrane aparatem + Natychmiastowe wysyłanie zdjęć + Natychmiastowe wysyłanie wideo Włącz logowanie To jest używane do logowania problemów Historia logowania @@ -56,19 +56,13 @@ Synchronizuj kalendarz i kontakty Skonfiguruj DAVdroid (v1.3.0+) dla obecnego konta Adres serwera dla konta nie mógł został przekonwertowany do DAVdroid - Brak aplikacji Google Play lub F-Droida - Synchronizacja kontaktów i kalendarza została skonfigurowana pomyślnie Pomoc Poleć znajomemu Opinie Stopka - Zapamiętaj lokalizację udostępnienia - Zapamiętaj ostatnią lokalizację wysyłania - - Wypróbuj %1$s na swoim smartfonie! - Zapraszam do użycia %1$s na swoim smartfonie!\nŚciągnij tutaj: %2$s - - Sprawdź serwer + Zapamiętaj położenie udostępnienia + Wypróbuj %1$s na swoim smartfonie! + Sprawdź serwer Adres serwera https://... Nazwa użytkownika Hasło @@ -84,42 +78,35 @@ Brak plików do przesłania %1$s nie można przesłać części tekstu jako pliku. Odebrane dane nie zawierają prawidłowego pliku. - Plik nie może być przesłany + Ten plik nie może być wysłany %1$s nie jest autoryzowany do odczytu odebranego pliku - Plik do wysłania nie został znaleziony w swojej lokalizacji. Proszę sprawdzić czy w ogóle istnieje. - Wystąpił błąd podczas kopiowania pliku do folderu tymczasowego. Proszę spróbować przesłać go ponownie. + Wybrany plik nie został znaleziony. Proszę sprawdzić czy plik istnieje. + Nie udało się skopiować pliku do folderu tymczasowego. Spróbuj ponownie. Opcja wysłania: Przenieś plik do folderu Nextcloud Zachowaj plik w katalogu źródłowym Skasuj plik z katalogu źródłowego sekund temu - Nie ma tu plików - Wyślij pliki lub zsynchronizuj z twoimi urządzeniami! - Oznacz pliki jako ulubione lub synchrozniuj ze swoimi urządzeniami! - Pliki i foldery oznaczone jako ulubione pokażą się tutaj - Nie znaleziono ulbionych plików dla twojego zapytania! + Brak plików + Wyślij zawartość lub synchronizuj ją ze swoimi urządzeniami + Dodaj pliki do ulubionych lub synchronizuj je ze swoimi urządzeniami + Tutaj znajdziesz pliki i foldery oznaczone jako ulubione Wczytywanie… - Brak aplikacji dla tego typu plików! Nie ma plików w tym folderze. Brak wyników w tym folderze Brak wyników + Brak ulubionych Nic nie jest jeszcze współdzielone Pliki i foldery, które współdzielisz pokażą się tutaj Brak plików wideo Brak zdjęć - Spróbować szukać w innym folderze? - Nie znaleziono plików zmodyfikowanych w ostatnich 7 dniach - Żadne pliki z twojego zapytania, które zostały zmodyfikowane - w ostatnich 7 dniach nie zostały znalezione! - Nie znaleziono żadnych ostatnio dodanych plików - Nie znaleziono żadnych ostatnio dodanych plików dla twojego zapytania! - Wyślij zdjęcia lub aktywuj automatyczne wysyłanie! - Żadnych zdjęć nie znaleziono dla twojego zapytania! - Wyślij wideo lub aktywuj automatycznze wysyłanie! - Żadnych plików wideo nie znaleziono dla twojego zapytania! + NIe znaleziono żadnych ostatnio dodanych plików + Twoje wyszukiwanie nie zwróciło żadnych ostatnio dodanych plików + Wyślij zdjęcia lub włącz automatyczne wysyłanie + Twoje wyszukiwanie nie zwróciło żadnych zdjęć + Wyślij pliki wideo lub włącz automatyczne wysyłanie + Twoje wyszukiwanie nie zwróciło żadnych plików wideo Brak dostępnych danych do wysłania - Wyślij jakieś dane lub włącz wysyłanie natychmiastowe! - Wyślij jakąś zawartość lub aktywuj automatyczne wysyłanie! folder foldery plik @@ -131,14 +118,12 @@ Zmodyfikowano: Pobierz Synchronizuj - Podczas wysyłania nazwa pliku została zmieniona na %1$s - Wygląd listy Udostępnij Tak Nie OK Usuń - Spróbuj przesłać jeszcze raz + Ponów wysyłanie Anuluj synchronizację Anuluj Wróć @@ -158,10 +143,10 @@ Nazwa folderu Wysyłam … %1$d%% Wysyłanie %2$s - Wysyłanie zakończone powodzeniem + Wysłano Wysłano %1$s Wysyłanie nie powiodło się - Wysyłanie %1$s nie powiodło się + Nie udało się wysłać %1$s Błąd przy wysyłaniu zaloguj się ponownie Wysłane Obecny @@ -178,37 +163,35 @@ Nie odnaleziono pliku lokalnego Błąd uprawnień Konflikt - Program został zatrzymany + Aplikacja została zatrzymana Nieznany błąd - Oczekiwanie na połączenie bezprzewodowe + Oczekiwanie na połączenie Wi-Fi Oczekuję na przesyłanie Pobieranie … %1$d%% Pobieranie %2$s - Pobieranie zakończone + Pobrano %1$s pobrano Pobieranie nieudane - Pobieranie %1$s nie powiodło się + Nie udało się pobrać %1$s Jeszcze nie pobrane Błąd podczas pobierania, zaloguj się ponownie Wybierz konto Nieudana synchronizacja - Nieudana synchronizacja, zaloguj się ponownie - Nie udało się zakończyć synchronizacji %1$s - Niepoprawne hasło dla %1$s + Synchronizacja nieudana, zaloguj się ponownie + Nie udało się zsynchronizować %1$s + Błędne hasło dla %1$s Znaleziono konflikty %1$d synchronizowanych plików nie może zostać zsynchronizowanych Synchronizacja plików nie powiodła się Zawartość %1$d plików nie może zostać synchronizowana (%2$d konfliktów) Niektóre lokalne pliki zostały zgubione. %1$d plików z folderu %2$s nie udało się się przekopiować - Od wersji 1.3.16, pliki wysyłane z tego urządzenia są kopiowane do lokalnego folderu %1$s aby zapobiec utracie danych gdy pojedynczy plik jest synchronizowany z wieloma kontami.\n\nZ powodu tej zmiany, wszystkie pliki wysłane za pomocą poprzedniej wersji tej aplikacji były kopiowane do folderu %2$s. Jednakże, błąd uniemożliwiał dokończenie tej operacji podczas synchronizacji konta. Możesz albo pozostawić plik(i) tak jak jest i usunąć link do %3$s lub przenieść plik(i) do folderu %1$s i pozostawić link do %4$s.\n\nPoniżej plik(i) lokalny i plik(i) zdalny w %5$s, do którego zostały zlinkowane. - Folder %1$s nie istnieje. + Folder %1$s nie istnieje Przenieś wszystko Wszystkie pliki zostały przeniesione Niektóre pliki nie mogły być przeniesione Lokalnie: %1$s Zdalnie: %1$s - Nie ma wystarczającego miejsca, aby skopiować wybrane pliki do folderu %1$s. Czy w zamian chciałbyś je tam przenieść? Wymyśl kod PIN. Wpisz kod PIN. @@ -226,16 +209,8 @@ %1$s odtwarzanie zakończone Nie znaleziono plików multimedialnych Nie znaleziono konta - Plik na nieprawidłowym koncie Nieobsługiwany kodek multimediów - Błąd odczytu pliku multimedialnego - Błąd kodowania pliku multimedialnego - Upłynął limit czasu podczas próby odtwarzania - Plik mediów nie może być przesyłany strumieniowo - Plik multimediów nie może być odtworzony we wbudowanym odtwarzaczu - Błąd zabezpieczeń podczas próby odtworzenia %1$s - Błąd wprowadzania podczas próby odtworzenia %1$s - Nieoczekiwany błąd podczas próby odtworzenia %1$s + NIe można odczytać pliku Przycisk przewijania do tyłu Przycisk odtwarzania / pauzowania Przycisk przewijania do przodu @@ -247,32 +222,27 @@ Połączenie nawiązane Testowanie połączenia Uszkodzona konfiguracja serwera - Konto tego samego użytkownika i serwera już istnieje na tym urządzeniu Podany login nie pasuje do użytkowników Wystąpił nieznany błąd! - Nie mogę znaleźć hosta - Nie znaleziono instancji serwer + Nie znaleziono hosta + Nie znaleziono serwera Serwer zbyt długo nie odpowiadał - Nieprawidłowy format adresu serwera + Błędny format adresu serwera Inicjowanie SSL nie powiodło się - Nie można zweryfikować tożsamości SSL serwera + Nie udało się zweryfikować tożsamości serwera SSL Nie rozpoznano wersji serwera - Nie można ustanowić połączenia + Nie udało się ustanowić połączenia Nawiązano bezpieczne połączenie Zła nazwa użytkownika lub hasło Nieudana autoryzacja Dostęp zabroniony przez serwer autoryzacji - Nieoczekiwany stan. Podaj ponownie adres serwera Twoja sesja wygasła. Proszę zaloguj się ponownie Podaj aktualne hasło Twoja sesja wygasła. Proszę zaloguj się ponownie - Łączenie z serwerem poświadczeń... + Łączenie z serwerem uwierzytelniania... Serwer nie obsługuje tej metody autoryzacji %1$s nie wspiera wielu kont - Twój serwer nie zwraca poprawnego identyfikatora użytkownika. Proszę skontaktuj się z administratorem. Błąd autoryzacji na tym serwerze - Konto jeszcze nie istnieje na tym urządzeniu. - Udostępnij w trybie offline Wyłącz udostępnianie w trybie offline Ustaw jako ulubione @@ -280,28 +250,25 @@ Zmień nazwę Usuń Czy naprawdę chcesz usunąć %1$s? - Czy naprawdę chcesz usunąć %1$s i jego zawartość? Tylko lokalnie Usunięto Nie można usunąć Wprowadź nową nazwę - Nie można zmienić nazwy kopii lokalnej; spróbuj wybrać inną nazwę - Zmiana nazwy nie powiodła się - Nie można sprawdzić zdalnego pliku + Nie udało się nadać serwerowi nowej nazwy + Nie udało się sprawdzić zdalnego pliku Zawartość pliku została już synchronizowana - Folder nie może zostać utworzony + Nie udało się utworzyć folderu Znaki zabronione: / \\ < > : \" | ? * Nazwa pliku zawiera co najmniej jeden nieprawidłowy znak Nazwa pliku nie może być pusta. - Poczekaj chwilę + Proszę czekać... Sprawdzanie danych - Nieoczekiwany problem; spróbuj wybrać plik z innej aplikacji - Nie wybrano żadnych plików + Nie wybrano żadnego pliku Wyślij link do … Kopiowanie pliku z prywatnego zasobu Loguj przez oAuth2 - Łączenie z serwerem oAuth2... + Łączenie z serwerem OAuth 2... Nie można zweryfikować tożsamości strony - Certyfikat serwera jest niezaufany @@ -309,7 +276,7 @@ - Certyfikat serwera jest wystawiony w przyszłości - URL nie pasuje do nazwy hosta w certyfikacie Zaakceptować certyfikat mimo wszystko? - Nie można zapisać certyfikatu + Nie udało się zapisac certyfikatu Szczegóły Ukryj Wydany dla: @@ -333,26 +300,25 @@ Tekst zastępczy placeholder.txt - Obraz PNG + obraz PNG 389 KB 2012/05/18 12:23 PM 12:23:45 - Wysyłaj tylko przez WiFi - Wysyłaj zdjęcia tylko przez WiFi - Wysyłaj filmy tylko przez WiFi + Wysyłaj tylko przez Wi-Fi + Wysyłaj zdjęcia tylko przez Wi-Fi + Wysyłaj pliki wideo tylko przez Wi-Fi Wysyłaj tylko podczas ładowania Wysyłaj tylko podczas ładowania /InstantUpload Konflikt pliku - Które pliki chcesz zachować? Jeśli wybierzesz obie wersje, do nazwy pliku lokalnego zostanie dodana liczba. Zatrzymaj oba wersja lokalna wersja zdalna - Przykro mi z tego powodu! + Przykro nam. Podgląd - Obraz nie może być pokazany + Nie można wyświetlić obrazu %1$s nie może zostać skopiowany do lokalnego folderu %2$s Wysyłka obrazów do folderu @@ -361,7 +327,7 @@ Używaj podfolderów Zapisz w podfolderach opartych na roku oraz miesiącu - Przepraszam, ale współdzielenie nie jest dostępne na twoim serwerze. Prosze skontaktuj się z administratorem. + Współdzielenie nie jest włączone na serwerze. Skontaktuj się z administratorem. Nie można udostępnić. Proszę sprawdzić, czy plik istnieje Wystąpił błąd podczas udostępniania tego pliku lub folderu. Nie można wyłączyć udostępniania. Proszę sprawdzić, czy plik istnieje @@ -375,56 +341,53 @@ Skopiuj link Skopiuj do schowka - Nie odebrano tekstu, by skopiować go do schowka Wystąpił błąd podczas kopiowania do schowka Skopiowano tekst z %1$s - Błąd krytyczny: nie można wykonać operacji + Błąd krytyczny: Nie można wykonać operacji - Pojawił się błąd podczas łączenia z serwerem. - Pojawił się błąd podczas oczekiwania na serwer, operacja nie mogła zostać wykonana - Pojawił się błąd podczas oczekiwania na serwer, operacja nie mogła zostać wykonana - Nie można dokończyć operacji, serwer jest niedostępny - Nie masz uprawnień %s + Wystąpił błąd podczas łączenia z serwerem. + Wystąpił błąd podczas oczekiwania na serwer. Operacja nie mogła zostać wykonana. + Wystąpił błąd podczas oczekiwania na serwer. Operacja nie mogła zostać wykonana. + Nie można ukończyć operacji. Serwer jest niedostępny. + + %s nie masz uprawnień do zmiany nazwy tego pliku do usuwania tego pliku do współdzielenia tego pliku do zniesienia współdzielenia tego pliku aby uaktualnić ten udział - do utworzenia tego pliku - do wgrania tego folderu + do stworzenia tego pliku + do wysyłania do tego folderu Ten plik nie jest już dostępny na serwerze Ścieżka przechowywania aktualizacji Koniec - Przygotowanie do migracji… + Przygotowywanie migracji… Sprawdzanie docelowe… Zapisywanie konfiguracji konta… - Oczekiwanie na niedokończone synchronizacje… + Oczekiwanie na zakończenie synchronizacji… Przenoszenie danych… Aktualizacja indeksa… Czyszczenie… Przywracanie konfiguracji konta… Skończone - BŁĄD: Za mało miejsca - BŁĄD: Plik nie jest zapisywalny - BŁĄD: Nie można odczytać pliku + BŁĄD: Brak miejsca + BŁĄD: Plik nie do zapisu + BŁĄD: Plik nie do odczytu BŁĄD: Katalog Nextcloud już istnieje - BŁĄD: Podczas migracji - BŁĄD: Podczas aktualizacji indeksu + BŁĄD: Nieudana migracja + BŁĄD: Nieudana aktualizacja indeksu - Folder danych już istnieje, co zrobić? - Nadpisanie - Użyj istniejącego + Folder z danymi już istnieje. Wybierz jedną z następujących czynności: + Zamień + Użyj Konta Dodaj konto Zarządzaj kontami - Bezpieczne połączenie jest przekierowywane przez niezabezpieczone trasy. - - Logi + Logi Wyślij historię - Brak aplikacji do wysyłania logów. Zainstaluj klienta poczty. %1$s Logi aplikacji Android Ładowanie danych … @@ -432,27 +395,24 @@ Złe hasło Przenieś Skopiuj - Nic tu nie ma. Możesz dodać folder! + Pusto. Możesz dodać folder. Wybierz - Nie można przenieść. Proszę sprawdzić, czy plik istnieje - Nie jest możliwe przeniesienie folderu do potomka - Plik istnieje już w folderze docelowym + Nie można przenieść pliku. Sprawdź, czy plik istnieje. + Plik już istnieje w folderze docelowym Pojawił się błąd podczas próby przeniesienia tego pliku lub folderu aby przenieść ten plik Nie można skopiować. Sprawdź, czy plik istnieje - Nie można skopiować katalogu do jego podkatalogu - Plik istnieje już w folderze docelowym + Plik już istnieje w folderze docelowym Wystąpił błąd podczas próby kopiowania tego pliku lub folderu by skopiować ten plik Automatyczne wysyłanie Szczegóły - Wysyłka wideo do folderu - Synchronizacja folderu %1$s nie może zostać zakończona + Synchronizacja folderu %1$s nie może zostać zakończona udostępniony z tobą @@ -493,7 +453,7 @@ Dodaj użytkownika lub grupę Udostępnij link Ustaw datę wygaśnięcia - Zabezpieczone hasłem + Zabezpiecz hasłem Zabezpieczone Pozwól na edycję Schowaj listę plików @@ -509,7 +469,6 @@ %1$s (email) %1$s ( w %2$s ) - Przepraszam, ale wersja twojego serwera nie pozwala na współdzielenie z użytkownikami poprzez klienta. \nProszę skontaktuj się z administratorem. może współdzielić może edytować utwórz @@ -518,49 +477,34 @@ Cofnij udostępnianie zakończono - Wysyłanie ponowne się nie udało Wyczyść nieudane - Wyczyść udane - Wyszyczść wszystkie zakończone - Widok siatki Widok listy Zarządzaj przestrzenią - Ustawienia, baza danych i certyfikaty serwera %1$s zostaną trwale skasowane.\n\nPobrane pliki pozostaną na swoich miejscach.\n\nTen proces zajmie trochę czasu. Wyczyść dane Nie udało się usunąć niektórych plików. - Dodatkowe uprawnienia do wysyłania i ściągania plików. - Plik nie został znaleziony w lokalnym systemie plików Czy naprawdę chcesz usunąć zaznaczone elementy? Czy naprawdę chcesz usunąć zaznaczone elementy oraz ich zawartość? - Oczekiwanie na ładowanie urządzenia Wyszukaj Ta funkcja jest dostępna w Nextcloud, prosimy wykonać aktualizację Dowiedz się więcej Automatyczne przesyłanie Wspieraj - Pomóż nam testować - Znaleziono błąd? Jest coś dziwnego? Zgłoś błąd na GitHubie - Chcesz pomóc nam testować następną wersję? - Zawiera to w sobie wszystkie nadchodzące funkcjonalności i jest bardzo ryzykowne. Mogą się pojawiać błędy. Jeśli będą proszę je do nas zgłosić. + Sprawdź wersję rozwojową Wydanie kandydujące - Release Candidate (RC) jest zarysem nadchodzącego wydania i oczekujemy że będzie stabilne. Testowanie indywidualnej konfiguracji może pomóc, aby to zapewnić. Zapisz się do testowania w sklepie Play lub ręcznie szukaj w sekcji \"wersje\" na F-Droid. Aktywni członkowie projektu Dołącz do chatu (IRC): <a href="%1$s">#nextcloud-mobile</a> Pomóż innym na <a href="%1$s">forum</a> <a href="%1$s">Tłumacz</a> aplikację - Wspomóż nas jako programista, po więcej szczegółów odwiedź <a href="https://github.com/nextcloud/android/blob/master/CONTRIBUTING.md">CONTRIBUTING.md</a> Przenieś do… Skopiuj do… Wybierz folder… Ładowanie folderów… Nie znaleziono folderów multimedialnych. - Preferencje automatycznego przesyłania Ustawienia - Natychmiastowe wysyłanie zostało kompletnie zmienione. Proszę sprawdzić główne menu i zrekonfigurować automatyczne wysyłanie. Przepraszamy za niedogodności.\n\nCiesz się z nowych i rozbudowanych możliwości automatycznego wysyłania! Dla %1$s %d zaznaczony @@ -576,7 +520,7 @@ Brak powiadomień Proszę sprawdź później - Wprowadź nazwę i typ wysyłanego pliku + Wprowadź nazwę i typ pliku do wysłania Nazwa pliku Typ pliku Wstawka tekstowa file(.txt) @@ -592,7 +536,7 @@ Bezpieczny dom dla wszystkich danych - Przechowuj, współdziel i chroń swoje prywatne i służbowe dane + Dostęp do, współdzielenie i ochrona twoich plików w domu i w pracy Wiele kont Podłączenie się do wszystkich chmur @@ -614,9 +558,25 @@ Brak aktywności - Ten strumień pokaże zdarzenia jak\ndodatki, zmiany & udziały + Wystąpił błąd + O aplikacji + + Utwórz kopię zapasową kontaktów + Przywróć kontakty + Przywróć ostatnią kopię zapasową + Kopia zapasowa kontaktów + Ostatnia kopia zapasowa + Potrzebne uprawnienia do odczytu kontaktów + Potrzebne uprawnienia do modyfikacji kontaktów + Przywróć kontakty + Przywróć wybrane kontakty + Wybierz konto do zaimportiwania + Wybierz datę + nigdy + Nie znaleziono żadnych plików Otrzymano nowe powiadomienie + Wyloguj diff --git a/src/main/res/values-pt-rBR/strings.xml b/src/main/res/values-pt-rBR/strings.xml index 9495d69ae4..c06d316826 100644 --- a/src/main/res/values-pt-rBR/strings.xml +++ b/src/main/res/values-pt-rBR/strings.xml @@ -625,6 +625,8 @@ Sobre Fazer backup dos contatos + Restaurar contatos + Fazer backup agora Retornar último backup Retornar Backup @@ -639,6 +641,7 @@ Escolha a data nunca Nenhum arquivo encontrado + Não foi possível encontrar seu último backup! Backup agendado e irá iniciar em breve Backup importado e irá iniciar em breve diff --git a/src/main/res/values-tr/strings.xml b/src/main/res/values-tr/strings.xml index 59218e18ba..24d9b4e1ec 100644 --- a/src/main/res/values-tr/strings.xml +++ b/src/main/res/values-tr/strings.xml @@ -46,10 +46,10 @@ Parmak izi kilidi Henüz bir parmak izi ayarlanmamış. Gizli dosyaları görüntüle - Fotoğraflar anında yüklensin - Kamera ile çekilen fotoğraflar anında yüklensin - Görüntüler anında yüklensin - Kamera ile çekilen görüntüler anında yüklensin + Anında fotoğraf yükleme + Kamera ile çekilen fotoğraflar anında yüklenir + Anında görüntü yükleme + Kamera ile çekilen görüntüler anında yüklenir Günlük kullanılsın Etkinleştirildiğinde sorunlar günlük dosyasına kaydedilir Günlük geçmişi @@ -58,14 +58,14 @@ Takvim ve kişiler eşitlensin Geçerli hesap için DAVdroid (v1.3.0+) kurulumu Hesabın sunucu adresi DAVdroid tarafından çözümlenemedi - Google Play mağazası yok ya da F-Droid uygulaması kurulmamış - Takvim ve kişi eşitlemesi ayarlandı + F-droid ya da Google Play kurulmamış + Takvim ve kişi eşitlemesi ayarları Yardım - Arkadaşınıza önerin + Arkadaşına öner Geri bildirim İzlenim - Konum paylaşma hatırlansın - Son paylaşma yükleme konumu hatırlansın + Paylaşılacak konum hatırlansın + Son kullanılan konumlar paylaşılmak üzere hatırlanır %1$s uygulamasını akıllı telefonunuzda deneyin! Akıllı telefonunda %1$s kullanmanı öneriyorum!\nBuradan indirebilirsin: %2$s @@ -74,7 +74,7 @@ Sunucu adresi https://… Kullanıcı Adı Parola - Henüz bir sunucunuz yok mu?\nBuraya tıklayarak bir hizmet sağlayıcıdan sunucu edinebilirsiniz + Henüz bir sunucunuz yok mu?\Hizmet sağlayıcılardan yararlanabilirsiniz Dosyalar Bağlan Yükle @@ -86,9 +86,9 @@ Yüklenecek bir dosya yok %1$s bir metin parçasını dosya olarak yükleyemez. Alınan verilerde geçerli bir dosya bulunamadı. - Dosya yüklenemedi + Bu dosya yüklenemez %1$s alınan bir dosyayı okumaya yetkili değil - Karşıya yüklenecek dosya konumunda bulunamadı. Lütfen dosyanın var olduğundan emin olun. + Yüklenmek üzere seçilmiş dosya bulunamadı. Lütfen dosyanın var olup olmadığını denetleyin. Dosya geçici bir klasöre kopyalanırken bir sorun çıktı. Lütfen yeniden göndermeyi deneyin. Yükleme seçeneği: Dosya Nextcloud klasörüne taşınsın @@ -96,31 +96,33 @@ Dosya kaynak klasörden silinsin saniye önce Burada herhangi bir dosya yok - Bazı içerikler yükleyin ya da aygıtlarınızla eşitleyin! - Bazı dosyaları sık kullanılanlara ekleyin ya da aygıtlarınızla paylaşın! + Bazı içerikler yükleyin ya da aygıtlarınızla eşitleyin. + Bazı dosyaları sık kullanılanlara ekleyin ya da aygıtlarınızla paylaşın. Sık kullanılanlara eklediğiniz dosya ve klasörler burada görüntülenir - Arama sonucunda sık kullanılan bir dosya bulunamadı! + Arama sonucunda sık kullanılan bir dosya bulunamadı. Yükleniyor… - Bu dosya türü için uygulama bulunamadı! + Bu dosya türü için uygulama bulunamadı. Bu klasörde herhangi bir dosya yok. Bu klasörde herhangi bir sonuç yok Herhangi bir sonuç bulunamadı + Henüz sık kullanılan bir öge yok Henüz hiçbir şey paylaşılmamış Paylaştığınız dosya ve klasörler burada görüntülenir Herhangi bir görüntü bulunamadı Herhangi bir fotoğraf bulunamadı Başka bir klasöre bakılmasını ister misiniz? Son 7 gün içinde değiştirilmiş herhangi bir dosya bulunamadı - Son 7 gün içinde değiştirilmiş herhangi bir dosya bulunamadı! + Arama sonucunda son 7 gün içinde düzenlenmiş + bir dosya bulunamadı. Geçenlerde eklenmiş herhangi bir dosya bulunamadı - Arama sonucunda geçenlerde eklenmiş bir dosya bulunamadı! - Bazı fotoğraflar yükleyin ya da otomatik yüklemeyi etkinleştirin! - Arama sonucunda herhangi bir fotoğraf bulunamadı! - Bazı görüntüler yükleyin ya da otomatik yüklemeyi etkinleştirin! - Arama sonucunda herhangi bir görüntü bulunamadı! + Arama sonucunda geçenlerde eklenmiş bir dosya bulunamadı. + Bazı fotoğraflar yükleyin ya da otomatik yüklemeyi etkinleştirin. + Arama sonucunda herhangi bir fotoğraf bulunamadı. + Bazı görüntüler yükleyin ya da otomatik yüklemeyi etkinleştirin. + Arama sonucunda herhangi bir görüntü bulunamadı. Herhangi bir yükleme yok - Buraya bazı içerikler yükleyin ya da anında yüklemeyi etkinleştirin! - Bazı içerikler yükleyin ya da otomatik yüklemeyi etkinleştirin! + Bazı içerikler yükleyin ya da anında yüklemeyi etkinleştirin. + Bazı içerikler yükleyin ya da otomatik yüklemeyi etkinleştirin. klasör klasör dosya @@ -202,7 +204,7 @@ %1$d dosya eşitlenemedi (%2$d çakışma) Bazı yerel dosyalar unutulmuş %2$s klasöründeki %1$d dosya şuraya kopyalanamadı - 1.3.16 sürümünden sonra, veri kaybının önlenebilmesi için bu aygıttan yüklenen dosyalar, bir dosya birden fazla hesapla eşitlendiğinde %1$s yerel klasörüne kopyalanır.\n\nBu değişiklikten dolayı, bu uygulamanın yüklenmiş tüm önceki sürümündeki dosyalar %2$s klasörüne kopyalandı. Ancak hesap eşitlemesi sırasında bu işlemin tamamlanmasını engelleyen bir hata oluştu. Dosyaları olduğu gibi bırakabilir ve %3$s bağlantısını kaldırabilir ya da dosyaları %1$s klasörüne taşıyıp %4$s bağlantısını koruyabilirsiniz.\n\nYerel dosyaları ve bağlı oldukları %5$s içindeki uzak dosyaların listesini aşağıda görebilirsiniz. + 1.3.16 sürümünden sonra, veri kaybının önlenebilmesi için bu aygıttan yüklenen dosyalar, bir dosya birden fazla hesapla eşitlendiğinde %1$s yerel klasörüne kopyalanır.\n\nBu değişiklikten dolayı, bu uygulamanın yüklenmiş tüm önceki sürümündeki dosyalar %2$s klasörüne kopyalandı. Ancak hesap eşitlemesi sırasında bu işlemin tamamlanmasını engelleyen bir sorun çıktı. Dosyaları olduğu gibi bırakabilir ve %3$s bağlantısını kaldırabilir ya da dosyaları %1$s klasörüne taşıyıp %4$s bağlantısını koruyabilirsiniz.\n\nYerel dosyaları ve bağlı oldukları %5$s içindeki uzak dosyaların listesini aşağıda görebilirsiniz. %1$s klasörü artık yok Tümünü taşı Tüm dosyalar taşındı @@ -251,8 +253,8 @@ Aygıt üzerinde aynı kullanıcı adı ve sunucu için bir hesap zaten var Yazdığınız kullanıcı adı bu hesabın kullanıcı adı ile eşleşmiyor Bilinmeyen bir sorun çıktı! - Sunucu bulunamadı - Sunucu kopyası bulunamadı + Sunucu adı bulunamadı + Sunucu bulunamadı Sunucu çok geç yanıt veriyor Sunucu adresi biçimi hatalı SSL başlatılamadı @@ -287,22 +289,22 @@ Silinemedi Yeni bir ad yazın Yerel kopya yeniden adlandırılamadı; farklı bir ad deneyin - Yeniden adlandırma tamamlanamadı + Sunucu yeniden adlandırılamadı Uzak dosya denetlenemedi Dosya içerikleri zaten eşitlenmiş Klasör oluşturulamadı İzin verilmeyen karakterler: / \\ < > : \" | ? * Dosya adında en az bir geçersiz karakter var Dosya adı boş olamaz - Biraz bekleyin + Biraz bekleyin... Kayıtlı kimlik bilgileri denetleniyor - Beklenmedik bir sorun çıktı; Lütfen başka bir uygulamadan dosya seçin - Herhangi bir dosya seçilmedi + Beklenmedik bir sorun çıktı, lütfen başka bir uygulamadan dosya seçin + Herhangi bir dosya seçilmemiş Bağlantıyı gönder… Dosya kişisel depolamadan kopyalanıyor oAuth2 ile oturum açın - oAuth2 sunucusuna bağlanılıyor… + OAuth2 sunucusuna bağlanılıyor… Sitenin kimliği doğrulanamadı - Sunucu sertifikasına güvenilmiyor @@ -339,7 +341,7 @@ 2012/05/18 12:23 ÖS 12:23:45 - Yalnız kablosuz ağ bağlıyken yüklensin + Yalnız kablosuz ağ üzerinden yüklensin Fotoğraflar yalnız kablosuz ağ üzerinden yüklensin Görüntüler yalnız kablosuz ağ üzerinden yüklensin Yalnız şarj edilirken yüklensin @@ -351,7 +353,7 @@ yerel sürümü sunucu sürümünü - Bundan dolayı üzgünüz! + Maalesef. Görsel önizleme Görsel görüntülenemedi @@ -362,7 +364,7 @@ Alt klasörler kullanılsın Yıla ve aya göre alt klasörlere kaydedilsin - Maalesef, sunucunuzda paylaşım etkin değil. Lütfen yöneticinizle görüşün. + Sunucunuzda paylaşım etkin değil. Lütfen yöneticinizle görüşün. Paylaşılamadı. Lütfen dosyanın var olup olmadığını denetleyin Bu dosya ya da klasör paylaşılmaya çalışılırken bir sorun çıktı Paylaşımı kaldırılamadı. Lütfen dosyanın var olup olmadığını denetleyin @@ -380,28 +382,29 @@ Panoya kopyalama sırasında beklenmeyen bir sorun çıktı Metin %1$s kaynağından kopyalandı - Ciddi hata: İşlemler gerçekleştirilemiyor + Ciddi sorun: İşlemler gerçekleştirilemiyor Sunucuya bağlanılırken bir sorun çıktı. - Sunucu beklenirken bir sorun çıktı, işlem tamamlanamadı - Sunucu beklenirken bir sorun çıktı; işlem tamamlanamadı - İşlem tamamlanamadı; sunucu kullanılamıyor + Sunucu beklenirken bir sorun çıktı, işlem tamamlanamadı. + Sunucu beklenirken bir sorun çıktı, işlem tamamlanamadı. + İşlem tamamlanamadı, sunucu kullanılamıyor + %s izniniz yok bu dosyayı yeniden adlandırın bu dosyayı silin bu dosyayı paylaşın bu dosyanın paylaşımını kaldırın bu paylaşımı güncelleyin - dosya oluşturun - bu klasöre yükleyin + bu dosyayı oluşturamazsınız + bu klasöre yükleyemezsiniz Bu dosya artık sunucuda yok Depolama yolu güncelleniyor Bitti - Aktarıma hazırlanıyor… + Aktarıma hazırlanılıyor… Hedef denetleniyor… Hesap ayarları kaydediliyor… - Eşitlemelerin tamamlanması bekleniyor… + Tüm eşitlemelerin tamamlanması bekleniyor… Veriler taşınıyor… Dizin güncelleniyor… Temizleniyor… @@ -411,12 +414,12 @@ HATA: Dosya yazılabilir değil HATA: Dosya okunabilir değil HATA: Nextcloud klasörü zaten var - HATA: Aktarımda bir sorun çıktı - HATA: Dizin güncellenirken bir sorun çıktı + HATA: Aktarımda sorun çıktı + HATA: Dizin güncellenirken sorun çıktı - Veri klasörü zaten var, ne yapmak istersiniz? - Üzerine yazılsın - Varolan kullanılsın + Veri klasörü zaten var, yapılacak işlemi seçin: + Değiştirilsin + Kullanılsın Hesaplar Hesap ekle @@ -436,15 +439,15 @@ Burada bir şey yok. Bir klasör ekleyebilirsiniz! Seçin - Taşınamadı. Lütfen dosyanın var olup olmadığını denetleyin - Bir klasör kendi alt klasörüne taşınamaz + Dosya taşınamadı. Lütfen dosyanın var olup olmadığını denetleyin + Bir klasör kendi alt klasörü olarak taşınamaz Dosya hedef klasörde zaten var Bu dosya ya da klasör taşınmaya çalışılırken bir sorun çıktı bu dosyayı taşıyın Kopyalanamadı. Lütfen dosyanın var olup olmadığını denetleyin - Bir klasör kendi alt klasörüne kopyalanamaz + Bir klasör kendi alt klasörü olarak kopyalanamaz Dosya hedef klasörde zaten var Bu dosya ya da klasör kopyalanmaya çalışılırken bir sorun çıktı bu dosyayı kopyalayın @@ -452,7 +455,7 @@ Anında yüklemeler Ayrıntılar - Anında yükleme görüntü klasörü + Anında görüntü yükleme klasörü %1$s klasörünün eşitlemesi tamamlanamadı sizinle @@ -494,7 +497,7 @@ Kullanıcı ya da grup ekle Paylaşım bağlantısı Son kullanma tarihini ayarla - Parola koruması + Parola ile korunsun Güvenli Düzenlenebilsin Dosya listeleme gizlensin @@ -510,7 +513,7 @@ %1$s (E-posta) %1$s (%2$s üzerinde) - Maalesef sunucu sürümünüz istemciler içindeki kullanıcılar ile paylaşıma izin vermiyor.\nLütfen yöneticinizle görüşün + Kullanıcıların istemcileri içinden paylaşım yapabilmesini sağlamak için sunucu sürümünüzü yükseltin.\nLütfen yöneticinizle görüşün paylaşabilir düzenleyebilir oluştur @@ -519,16 +522,16 @@ Paylaşımı durdur bitti - Yeniden denenemedi + Yeni girişim başarısız oldu Temizlenemedi Temizlendi - Tümü temizlendi + Tamamlanmış yüklemeleri temizle Tablo görünümü Liste görünümü Alan yönetimi - %1$s verilerinden ayarlar, veritabanı ve sunucu sertifikaları kalıcı olarak silinecek. \n\nİndirilen dosyalara dokunulmayacak.\n\nBu işlem biraz vakit alabilir. + %1$s verilerinden ayarlar, veritabanı ve sunucu sertifikaları kalıcı olarak silinecek. \n\nİndirilen dosyalara dokunulmayacak.\n\nBu işlem biraz zaman alabilir. Verileri temizle Bazı dosyalar silinemedi. @@ -545,16 +548,16 @@ Denememize yardımcı olun Bir hata mı buldunuz? Bir gariplik mi var? Github üzerinden bir sorun bildirin - Gelecek sürümler için bize yardımcı olmak ister misiniz? + Sonraki sürümü deneyerek bize yardımcı olmak ister misiniz? Geliştirici sürümünü deneyin Bu sürümde tüm yeni özellikler bulunur ve çok taze olduğundan hata ve sorunlar olabilir. Bir hata ya da soruna rastlarsanız bize iletin. Yayın adayı - Yayın adayı (Release Candidate, RC) yayınlanacak sürümün bir kopyasıdır ve kararlı olması beklenir. Kişisel olarak kullanmanız kararlı olduğundan emin olmamızı sağlar. Denemek için Play Store üzerinden kayıt olun ya da el ile F-Droid üzerindeki \"sürümlere\" bakın. + Yayın adayı (Release Candidate, RC) yayınlanacak sürümün bir kopyasıdır ve kararlı olması beklenir. Kişisel olarak kullanmanız kararlı olduğundan emin olmamızı sağlar. Denemek için Play Store üzerinden kayıt olun ya da el ile F-Droid üzerindeki \"sürümler\" bölümüne bakın. Etkin Katkıda Bulunun IRC sohbetine katılın: <a href=\"%1$s\">#nextcloud-mobile</a> <a href=\"%1$s\">forum</a> üzerinde diğer kişilere yardımcı olun Uygulamayı <a href="%1$s">çevirin</a> - Yazılımcı olarak katkıda bulunun! Ayrıntılı bilgi almak için <a href=\"https://github.com/nextcloud/android/blob/master/CONTRIBUTING.md\">KATKIDA BULUNMA</a> sayfasına bakın + Yazılımcı olarak katkıda bulunun! Ayrıntılı bilgi almak için <a href=\"https://github.com/nextcloud/android/blob/master/CONTRIBUTING.md\">KATKIDA BULUNMA.md</a> sayfasına bakın Taşı… Kopyala… Klasör seçin… @@ -562,7 +565,7 @@ Herhangi bir ortam klasörü bulunamadı. Otomatik yükleme ayarları Ayarlar - Anında yükleme tamamen elden geçirildi. Lütfen ama menüye giderek otomatik yükleme ayarlarınızı yeniden yapın. Verdiğimiz rahatsızlık için özür dileriz.\n\nYeni ve geliştirilmiş otomatik yükleme özellklerinin tadını çıkarın! + Anında yükleme tamamen elden geçirildi. Lütfen ama menüye giderek otomatik yükleme ayarlarınızı yeniden yapın.\n\nYeni ve geliştirilmiş otomatik yükleme özellklerinin tadını çıkarın. %1$s için %d seçili @@ -592,7 +595,7 @@ Verileriniz için güvenli bir yer! - Ev ya da iş yerinizdeki dosyalarınıza erişmek, paylaşmak ve korumak için kullanabilirsiniz + Ev ya da iş yerinizdeki dosyalarınıza erişin, paylaşın ve koruyun Birden çok hesap Tüm bulut hesaplarınıza bağlanın @@ -622,26 +625,29 @@ Hakkında Kişileri Yedekle - Şimdi yedekle + Kişileri Geri Yükle + Yedekle Son Yedeği Geri Yükle Geri Yükle Yedekle Kişileri Yedekle Son Yedek - Kişileri okuma izni gerekiyor - Kişilere yazma izni gerekiyor + Kişi listesini okuma izni gerekiyor + Kişi listesini düzenleme izni gerekiyor Kişileri geri yükle Seçilmiş kişileri geri yükle Alınacak hesabı seçin - İzin verilmemiş olduğundan hiçbir şey alınamadı! + Herhangi bir izin verilmemiş olduğundan hiçbir şey alınamadı! Tarih seçin asla Herhangi bir dosya bulunamadı + Son yedeğiniz bulunamadı! Yedekleme zamanlandı ve kısa süre sonra başlatılacak Alma işlemi zamanlandı ve kısa süre sonra başlatılacak Yeni bir bildirim var + Oturumu Kapat From c9a53cb0422426e90b3ecd43445a1add0ff0661f Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Tue, 2 May 2017 06:46:46 +0000 Subject: [PATCH 41/53] [tx-robot] updated from transifex --- src/main/res/values-cs-rCZ/strings.xml | 2 +- src/main/res/values-es/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/res/values-cs-rCZ/strings.xml b/src/main/res/values-cs-rCZ/strings.xml index 0f2a756694..f6d06fb9dd 100644 --- a/src/main/res/values-cs-rCZ/strings.xml +++ b/src/main/res/values-cs-rCZ/strings.xml @@ -513,7 +513,7 @@ Vyčistit data Některé soubory nebylo možno smazat. - Vyžadována dodatečná oprávnění pro nahrávání & stahování souborů. + Vyžadována dodatečná oprávnění pro nahrávání & stahování souborů. Soubor nebyl nalezen v místním souborovém systému Opravdu chcete odstranit vybrané položky? Opravdu chcete odstranit vybrané položky a jejich obsah? diff --git a/src/main/res/values-es/strings.xml b/src/main/res/values-es/strings.xml index 67d4c3b87b..5175f47e0b 100644 --- a/src/main/res/values-es/strings.xml +++ b/src/main/res/values-es/strings.xml @@ -401,7 +401,7 @@ Actualizando ruta de almacenamiento Terminar - Preparando la migración&@8230; + Preparando la migración… Comprobando destino… Guardando configuración de cuentas… Esperando que todas las sincronizaciones terminen… From 9f7ccae575b155026fe466aa4c9c3ef568f2d62c Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Tue, 2 May 2017 09:41:04 +0200 Subject: [PATCH 42/53] do the same for Notification --- .../android/ui/activity/NotificationsActivity.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/owncloud/android/ui/activity/NotificationsActivity.java b/src/main/java/com/owncloud/android/ui/activity/NotificationsActivity.java index e46d52bcb5..b09d41b185 100644 --- a/src/main/java/com/owncloud/android/ui/activity/NotificationsActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/NotificationsActivity.java @@ -52,8 +52,8 @@ import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.lib.resources.notifications.GetRemoteNotificationsOperation; import com.owncloud.android.lib.resources.notifications.models.Notification; import com.owncloud.android.ui.adapter.NotificationListAdapter; -import com.owncloud.android.utils.DisplayUtils; import com.owncloud.android.utils.AnalyticsUtils; +import com.owncloud.android.utils.DisplayUtils; import java.io.IOException; import java.util.List; @@ -74,10 +74,8 @@ public class NotificationsActivity extends FileActivity { @BindView(R.id.empty_list_view) public LinearLayout emptyContentContainer; - @BindView(R.id.swipe_containing_list) public SwipeRefreshLayout swipeListRefreshLayout; - @BindView(R.id.swipe_containing_empty) public SwipeRefreshLayout swipeEmptyListRefreshLayout; @BindView(R.id.empty_list_view_text) @@ -116,6 +114,9 @@ public class NotificationsActivity extends FileActivity { // setup toolbar setupToolbar(); + swipeEmptyListRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_containing_empty); + swipeListRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_containing_list); + // setup drawer setupDrawer(R.id.nav_notifications); getSupportActionBar().setTitle(getString(R.string.drawer_item_notifications)); @@ -296,7 +297,7 @@ public class NotificationsActivity extends FileActivity { } @Override - public void onResume(){ + public void onResume() { super.onResume(); AnalyticsUtils.setCurrentScreenName(this, SCREEN_NAME, TAG); } From 19c031f7227d282187bba89e02e66f87d90d73dd Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Tue, 2 May 2017 12:18:06 +0200 Subject: [PATCH 43/53] do not create a new adapter while rotating --- .../owncloud/android/ui/fragment/OCFileListFragment.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java b/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java index f5bee75bfa..0b92ae6988 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java @@ -654,13 +654,6 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi super.onViewStateRestored(savedInstanceState); if (savedInstanceState != null) { - mAdapter = new FileListListAdapter( - mJustFolders, - getActivity(), - mContainerActivity, - this, - mContainerActivity.getStorageManager()); - searchEvent = Parcels.unwrap(savedInstanceState.getParcelable(SEARCH_EVENT)); } From 7f1739f5f763d67721bac9a4e0f70c8e7f4fdde9 Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Fri, 28 Apr 2017 22:21:40 +0200 Subject: [PATCH 44/53] Improve push / remove push registration --- build.gradle | 4 +- .../firebase/NCFirebaseInstanceIDService.java | 2 - .../activity/ModifiedFileDisplayActivity.java | 10 ++ .../com/owncloud/android/utils/PushUtils.java | 135 ++++++++++++++---- .../datamodel/ArbitraryDataProvider.java | 14 +- .../android/datamodel/PushArbitraryData.java | 81 +++++++++++ .../android/db/PreferenceManager.java | 26 +--- .../android/ui/activity/FileActivity.java | 12 -- .../android/ui/activity/UserInfoActivity.java | 20 +++ 9 files changed, 237 insertions(+), 67 deletions(-) create mode 100644 src/main/java/com/owncloud/android/datamodel/PushArbitraryData.java diff --git a/build.gradle b/build.gradle index 3490f070fb..cf7b8dd07a 100644 --- a/build.gradle +++ b/build.gradle @@ -197,8 +197,8 @@ dependencies { compile 'org.greenrobot:eventbus:3.0.0' compile 'com.googlecode.ez-vcard:ez-vcard:0.10.2' -// uncomment for gplay, modified -// compile 'com.google.android.gms:play-services:10.2.1' + // uncomment for gplay, modified + //compile 'com.google.android.gms:play-services:10.2.4' compile 'org.parceler:parceler-api:1.1.6' annotationProcessor 'org.parceler:parceler:1.1.6' diff --git a/src/gplay/java/com/owncloud/android/services/firebase/NCFirebaseInstanceIDService.java b/src/gplay/java/com/owncloud/android/services/firebase/NCFirebaseInstanceIDService.java index a5ab4d409a..c5f39a5070 100644 --- a/src/gplay/java/com/owncloud/android/services/firebase/NCFirebaseInstanceIDService.java +++ b/src/gplay/java/com/owncloud/android/services/firebase/NCFirebaseInstanceIDService.java @@ -36,8 +36,6 @@ public class NCFirebaseInstanceIDService extends FirebaseInstanceIdService { //You can implement this method to store the token on your server if (!TextUtils.isEmpty(getResources().getString(R.string.push_server_url))) { PreferenceManager.setPushToken(MainApp.getAppContext(), FirebaseInstanceId.getInstance().getToken()); - PreferenceManager.setPushTokenUpdateTime(MainApp.getAppContext(), System.currentTimeMillis()); - PushUtils.pushRegistrationToServer(); } } diff --git a/src/gplay/java/com/owncloud/android/ui/activity/ModifiedFileDisplayActivity.java b/src/gplay/java/com/owncloud/android/ui/activity/ModifiedFileDisplayActivity.java index a2d17ca8ab..71ecfaf958 100644 --- a/src/gplay/java/com/owncloud/android/ui/activity/ModifiedFileDisplayActivity.java +++ b/src/gplay/java/com/owncloud/android/ui/activity/ModifiedFileDisplayActivity.java @@ -20,9 +20,12 @@ package com.owncloud.android.ui.activity; +import android.os.Bundle; + import com.owncloud.android.ui.events.TokenPushEvent; import com.owncloud.android.utils.PushUtils; +import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; @@ -33,4 +36,11 @@ public class ModifiedFileDisplayActivity extends FileDisplayActivity { PushUtils.pushRegistrationToServer(); } + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + // see if there's stuff to push every time we start the app + EventBus.getDefault().post(new TokenPushEvent()); + } + } diff --git a/src/gplay/java/com/owncloud/android/utils/PushUtils.java b/src/gplay/java/com/owncloud/android/utils/PushUtils.java index dd689c1d2a..7336c55ec8 100644 --- a/src/gplay/java/com/owncloud/android/utils/PushUtils.java +++ b/src/gplay/java/com/owncloud/android/utils/PushUtils.java @@ -27,9 +27,12 @@ import android.content.Context; import android.text.TextUtils; import android.util.Base64; +import com.google.gson.Gson; import com.owncloud.android.MainApp; import com.owncloud.android.R; import com.owncloud.android.authentication.AccountUtils; +import com.owncloud.android.datamodel.ArbitraryDataProvider; +import com.owncloud.android.datamodel.PushArbitraryData; import com.owncloud.android.db.PreferenceManager; import com.owncloud.android.lib.common.OwnCloudAccount; import com.owncloud.android.lib.common.OwnCloudClient; @@ -39,8 +42,12 @@ import com.owncloud.android.lib.common.operations.RemoteOperationResult; import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.lib.resources.notifications.RegisterAccountDeviceForNotificationsOperation; import com.owncloud.android.lib.resources.notifications.RegisterAccountDeviceForProxyOperation; +import com.owncloud.android.lib.resources.notifications.UnregisterAccountDeviceForNotificationsOperation; +import com.owncloud.android.lib.resources.notifications.UnregisterAccountDeviceForProxyOperation; import com.owncloud.android.lib.resources.notifications.models.PushResponse; +import org.apache.commons.httpclient.HttpStatus; + import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -65,7 +72,11 @@ public class PushUtils { private static final String KEYPAIR_PRIV_EXTENSION = ".priv"; private static final String KEYPAIR_PUB_EXTENSION = ".pub"; - public static String generateSHA512Hash(String pushToken) { + public static final String KEY_PUSH = "push"; + + private static ArbitraryDataProvider arbitraryDataProvider; + + private static String generateSHA512Hash(String pushToken) { MessageDigest messageDigest = null; try { messageDigest = MessageDigest.getInstance("SHA-512"); @@ -86,7 +97,7 @@ public class PushUtils { return result.toString(); } - public static int generateRsa2048KeyPair() { + private static int generateRsa2048KeyPair() { String keyPath = MainApp.getStoragePath() + File.separator + MainApp.getDataFolder() + File.separator + KEYPAIR_FOLDER; @@ -124,8 +135,58 @@ public class PushUtils { return -2; } + private static void deleteRegistrationForAccount(Account account) { + Context context = MainApp.getAppContext(); + OwnCloudAccount ocAccount = null; + arbitraryDataProvider = new ArbitraryDataProvider(MainApp.getAppContext().getContentResolver()); + + try { + ocAccount = new OwnCloudAccount(account, context); + OwnCloudClient mClient = OwnCloudClientManagerFactory.getDefaultSingleton(). + getClientFor(ocAccount, context); + + RemoteOperation unregisterAccountDeviceForNotificationsOperation = new + UnregisterAccountDeviceForNotificationsOperation(); + + RemoteOperationResult remoteOperationResult = unregisterAccountDeviceForNotificationsOperation. + execute(mClient); + + if (remoteOperationResult.getHttpCode() == HttpStatus.SC_ACCEPTED) { + String arbitraryValue; + if (!TextUtils.isEmpty(arbitraryValue = arbitraryDataProvider.getValue(account, KEY_PUSH))) { + Gson gson = new Gson(); + PushArbitraryData pushArbitraryData = gson.fromJson(arbitraryValue, PushArbitraryData.class); + RemoteOperation unregisterAccountDeviceForProxyOperation = + new UnregisterAccountDeviceForProxyOperation(context.getResources(). + getString(R.string.push_server_url), + pushArbitraryData.getDeviceIdentifier(), + pushArbitraryData.getDeviceIdentifierSignature(), + pushArbitraryData.getUserPublicKey()); + + remoteOperationResult = unregisterAccountDeviceForProxyOperation.execute(mClient); + + if (remoteOperationResult.isSuccess()) { + arbitraryDataProvider.deleteKeyForAccount(account, KEY_PUSH); + } + } + } + + + } catch (com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException e) { + Log_OC.d(TAG, "Failed to find an account"); + } catch (AuthenticatorException e) { + Log_OC.d(TAG, "Failed via AuthenticatorException"); + } catch (IOException e) { + Log_OC.d(TAG, "Failed via IOException"); + } catch (OperationCanceledException e) { + Log_OC.d(TAG, "Failed via OperationCanceledException"); + } + } + public static void pushRegistrationToServer() { String token = PreferenceManager.getPushToken(MainApp.getAppContext()); + arbitraryDataProvider = new ArbitraryDataProvider(MainApp.getAppContext().getContentResolver()); + if (!TextUtils.isEmpty(MainApp.getAppContext().getResources().getString(R.string.push_server_url)) && !TextUtils.isEmpty(token)) { PushUtils.generateRsa2048KeyPair(); @@ -139,42 +200,56 @@ public class PushUtils { publicKey = "-----BEGIN PUBLIC KEY-----\n" + publicKey + "\n-----END PUBLIC KEY-----\n"; Context context = MainApp.getAppContext(); + String providerValue; + Gson gson = new Gson(); for (Account account : AccountUtils.getAccounts(context)) { - try { - OwnCloudAccount ocAccount = new OwnCloudAccount(account, context); - OwnCloudClient mClient = OwnCloudClientManagerFactory.getDefaultSingleton(). - getClientFor(ocAccount, context); + if (!TextUtils.isEmpty(providerValue = arbitraryDataProvider.getValue(account, KEY_PUSH))) { + PushArbitraryData accountPushData = gson.fromJson(providerValue, PushArbitraryData.class); + if (!accountPushData.getPushToken().equals(token) && !accountPushData.isShouldBeDeleted()) { + try { + OwnCloudAccount ocAccount = new OwnCloudAccount(account, context); + OwnCloudClient mClient = OwnCloudClientManagerFactory.getDefaultSingleton(). + getClientFor(ocAccount, context); - RemoteOperation registerAccountDeviceForNotificationsOperation = - new RegisterAccountDeviceForNotificationsOperation(pushTokenHash, - publicKey, - context.getResources().getString(R.string.push_server_url)); + RemoteOperation registerAccountDeviceForNotificationsOperation = + new RegisterAccountDeviceForNotificationsOperation(pushTokenHash, + publicKey, + context.getResources().getString(R.string.push_server_url)); - RemoteOperationResult remoteOperationResult = registerAccountDeviceForNotificationsOperation. - execute(mClient); + RemoteOperationResult remoteOperationResult = registerAccountDeviceForNotificationsOperation. + execute(mClient); - if (remoteOperationResult.isSuccess()) { - PushResponse pushResponse = remoteOperationResult.getPushResponseData(); + if (remoteOperationResult.isSuccess()) { + PushResponse pushResponse = remoteOperationResult.getPushResponseData(); - RemoteOperation registerAccountDeviceForProxyOperation = new - RegisterAccountDeviceForProxyOperation( - context.getResources().getString(R.string.push_server_url), - token, pushResponse.getDeviceIdentifier(), pushResponse.getSignature(), - pushResponse.getPublicKey()); + RemoteOperation registerAccountDeviceForProxyOperation = new + RegisterAccountDeviceForProxyOperation( + context.getResources().getString(R.string.push_server_url), + token, pushResponse.getDeviceIdentifier(), pushResponse.getSignature(), + pushResponse.getPublicKey()); - remoteOperationResult = registerAccountDeviceForProxyOperation.execute(mClient); - PreferenceManager.setPushTokenLastSentTime(MainApp.getAppContext(), - System.currentTimeMillis()); + remoteOperationResult = registerAccountDeviceForProxyOperation.execute(mClient); + if (remoteOperationResult.isSuccess()) { + PushArbitraryData pushArbitraryData = new PushArbitraryData(token, + pushResponse.getDeviceIdentifier(), pushResponse.getSignature(), + pushResponse.getPublicKey(), false); + arbitraryDataProvider.storeOrUpdateKeyValue(account, KEY_PUSH, + gson.toJson(pushArbitraryData)); + } + } + } catch (com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException e) { + Log_OC.d(TAG, "Failed to find an account"); + } catch (AuthenticatorException e) { + Log_OC.d(TAG, "Failed via AuthenticatorException"); + } catch (IOException e) { + Log_OC.d(TAG, "Failed via IOException"); + } catch (OperationCanceledException e) { + Log_OC.d(TAG, "Failed via OperationCanceledException"); + } + } else if (accountPushData.isShouldBeDeleted()) { + deleteRegistrationForAccount(account); } - } catch (com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException e) { - Log_OC.d(TAG, "Failed to find an account"); - } catch (AuthenticatorException e) { - Log_OC.d(TAG, "Failed via AuthenticatorException"); - } catch (IOException e) { - Log_OC.d(TAG, "Failed via IOException"); - } catch (OperationCanceledException e) { - Log_OC.d(TAG, "Failed via OperationCanceledException"); } } } diff --git a/src/main/java/com/owncloud/android/datamodel/ArbitraryDataProvider.java b/src/main/java/com/owncloud/android/datamodel/ArbitraryDataProvider.java index 9ea88704dc..7f12e445da 100644 --- a/src/main/java/com/owncloud/android/datamodel/ArbitraryDataProvider.java +++ b/src/main/java/com/owncloud/android/datamodel/ArbitraryDataProvider.java @@ -47,9 +47,19 @@ public class ArbitraryDataProvider { this.contentResolver = contentResolver; } + public int deleteKeyForAccount(Account account, String key) { + int result = contentResolver.delete( + ProviderMeta.ProviderTableMeta.CONTENT_URI_ARBITRARY_DATA, + ProviderMeta.ProviderTableMeta.ARBITRARY_DATA_CLOUD_ID + " = ? AND " + + ProviderMeta.ProviderTableMeta.ARBITRARY_DATA_KEY + "= ?", + new String[]{account.name, key} + ); + + return result; + } + + public void storeOrUpdateKeyValue(Account account, String key, String newValue) { - - ArbitraryDataSet data = getArbitraryDataSet(account, key); if (data == null) { Log_OC.v(TAG, "Adding arbitrary data with cloud id: " + account.name + " key: " + key diff --git a/src/main/java/com/owncloud/android/datamodel/PushArbitraryData.java b/src/main/java/com/owncloud/android/datamodel/PushArbitraryData.java new file mode 100644 index 0000000000..fa5c86b78c --- /dev/null +++ b/src/main/java/com/owncloud/android/datamodel/PushArbitraryData.java @@ -0,0 +1,81 @@ +/** + * Nextcloud Android client application + * + * @author Mario Danic + * Copyright (C) 2017 Mario Danic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package com.owncloud.android.datamodel; + +public class PushArbitraryData { + public String pushToken; + public String deviceIdentifier; + public String deviceIdentifierSignature; + public String userPublicKey; + public boolean shouldBeDeleted; + + public PushArbitraryData() { + } + + public PushArbitraryData(String pushToken, String deviceIdentifier, String deviceIdentifierSignature, + String userPublicKey, boolean shouldBeDeleted) { + this.pushToken = pushToken; + this.deviceIdentifier = deviceIdentifier; + this.deviceIdentifierSignature = deviceIdentifierSignature; + this.userPublicKey = userPublicKey; + this.shouldBeDeleted = shouldBeDeleted; + } + + public String getPushToken() { + return pushToken; + } + + public void setPushToken(String pushToken) { + this.pushToken = pushToken; + } + + public String getDeviceIdentifier() { + return deviceIdentifier; + } + + public void setDeviceIdentifier(String deviceIdentifier) { + this.deviceIdentifier = deviceIdentifier; + } + + public String getDeviceIdentifierSignature() { + return deviceIdentifierSignature; + } + + public void setDeviceIdentifierSignature(String deviceIdentifierSignature) { + this.deviceIdentifierSignature = deviceIdentifierSignature; + } + + public String getUserPublicKey() { + return userPublicKey; + } + + public void setUserPublicKey(String userPublicKey) { + this.userPublicKey = userPublicKey; + } + + public boolean isShouldBeDeleted() { + return shouldBeDeleted; + } + + public void setShouldBeDeleted(boolean shouldBeDeleted) { + this.shouldBeDeleted = shouldBeDeleted; + } +} diff --git a/src/main/java/com/owncloud/android/db/PreferenceManager.java b/src/main/java/com/owncloud/android/db/PreferenceManager.java index 182ef0a708..78c6402b3c 100644 --- a/src/main/java/com/owncloud/android/db/PreferenceManager.java +++ b/src/main/java/com/owncloud/android/db/PreferenceManager.java @@ -47,33 +47,15 @@ public abstract class PreferenceManager { private static final String PREF__LEGACY_CLEAN = "legacyClean"; private static final String PREF__AUTO_UPLOAD_UPDATE_PATH = "autoUploadPathUpdate"; private static final String PREF__PUSH_TOKEN = "pushToken"; - private static final String PREF__PUSH_TOKEN_UPDATE_TIME = "pushTokenLastUpdated"; - private static final String PREF__PUSH_TOKEN_LAST_REGISTRATION_TIME = "pushTokenLastSent"; - - public static void setPushTokenLastSentTime(Context context, long time) { - saveLongPreference(context, PREF__PUSH_TOKEN_LAST_REGISTRATION_TIME, time); - } - - public static long getPushTokenLastSentTime(Context context) { - return getDefaultSharedPreferences(context).getLong(PREF__PUSH_TOKEN_LAST_REGISTRATION_TIME, -1); - } public static void setPushToken(Context context, String pushToken) { - saveStringPreference(context, PREF__PUSH_TOKEN, pushToken); + saveStringPreferenceNow(context, PREF__PUSH_TOKEN, pushToken); } public static String getPushToken(Context context) { return getDefaultSharedPreferences(context).getString(PREF__PUSH_TOKEN, ""); } - public static void setPushTokenUpdateTime(Context context, long time) { - saveLongPreference(context, PREF__PUSH_TOKEN_UPDATE_TIME, time); - } - - public static long getPushTokenUpdateTime(Context context) { - return getDefaultSharedPreferences(context).getLong(PREF__PUSH_TOKEN_UPDATE_TIME, -1); - } - public static boolean instantPictureUploadEnabled(Context context) { return getDefaultSharedPreferences(context).getBoolean(PREF__INSTANT_UPLOADING, false); } @@ -289,6 +271,12 @@ public abstract class PreferenceManager { appPreferences.apply(); } + private static void saveStringPreferenceNow(Context context, String key, String value) { + SharedPreferences.Editor appPreferences = getDefaultSharedPreferences(context.getApplicationContext()).edit(); + appPreferences.putString(key, value); + appPreferences.commit(); + } + private static void saveIntPreference(Context context, String key, int value) { SharedPreferences.Editor appPreferences = getDefaultSharedPreferences(context.getApplicationContext()).edit(); appPreferences.putInt(key, value); diff --git a/src/main/java/com/owncloud/android/ui/activity/FileActivity.java b/src/main/java/com/owncloud/android/ui/activity/FileActivity.java index 14d77fe7db..7d181d7772 100644 --- a/src/main/java/com/owncloud/android/ui/activity/FileActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/FileActivity.java @@ -162,8 +162,6 @@ public abstract class FileActivity extends DrawerActivity setAccount(account, savedInstanceState != null); - checkContactsBackupJob(); - mOperationsServiceConnection = new OperationsServiceConnection(); bindService(new Intent(this, OperationsService.class), mOperationsServiceConnection, Context.BIND_AUTO_CREATE); @@ -243,16 +241,6 @@ public abstract class FileActivity extends DrawerActivity } } - private void checkContactsBackupJob() { - ArbitraryDataProvider arbitraryDataProvider = new ArbitraryDataProvider(getContentResolver()); - - if (getAccount() != null && arbitraryDataProvider.getBooleanValue(getAccount(), - ContactsPreferenceActivity.PREFERENCE_CONTACTS_AUTOMATIC_BACKUP)) { - ContactsPreferenceActivity.startContactBackupJob(getAccount()); - } - } - - /** * Getter for the main {@link OCFile} handled by the activity. * diff --git a/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java b/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java index a00c56007a..8075cf37b6 100644 --- a/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java @@ -47,17 +47,22 @@ import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.TextView; +import com.google.gson.Gson; import com.owncloud.android.R; import com.owncloud.android.authentication.AccountUtils; import com.owncloud.android.authentication.AuthenticatorActivity; import com.owncloud.android.datamodel.ArbitraryDataProvider; +import com.owncloud.android.datamodel.PushArbitraryData; import com.owncloud.android.lib.common.UserInfo; import com.owncloud.android.lib.common.operations.RemoteOperation; import com.owncloud.android.lib.common.operations.RemoteOperationResult; import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.lib.resources.users.GetRemoteUserInfoOperation; +import com.owncloud.android.ui.events.TokenPushEvent; import com.owncloud.android.utils.DisplayUtils; +import com.owncloud.android.utils.PushUtils; +import org.greenrobot.eventbus.EventBus; import org.parceler.Parcels; import butterknife.BindString; @@ -349,6 +354,21 @@ public class UserInfoActivity extends FileActivity { ContactsPreferenceActivity.PREFERENCE_CONTACTS_AUTOMATIC_BACKUP, "false"); + + String arbitraryDataPushString; + + if (!TextUtils.isEmpty(arbitraryDataPushString = arbitraryDataProvider.getValue( + account, PushUtils.KEY_PUSH))) { + Gson gson = new Gson(); + PushArbitraryData pushArbitraryData = gson.fromJson(arbitraryDataPushString, + PushArbitraryData.class); + pushArbitraryData.setShouldBeDeleted(true); + arbitraryDataProvider.storeOrUpdateKeyValue(account, PushUtils.KEY_PUSH, + gson.toJson(pushArbitraryData)); + EventBus.getDefault().post(new TokenPushEvent()); + } + + if (getActivity() != null && !removeDirectly) { Bundle bundle = new Bundle(); bundle.putParcelable(KEY_ACCOUNT, Parcels.wrap(account)); From 1effc4d23e3a46695d4e285b3f0431e545e4cb6d Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Tue, 2 May 2017 14:15:36 +0200 Subject: [PATCH 45/53] Fix build --- .../com/owncloud/android/utils/PushUtils.java | 25 +++++++++++++++++++ .../android/ui/activity/UserInfoActivity.java | 3 ++- 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 src/generic/java/com/owncloud/android/utils/PushUtils.java diff --git a/src/generic/java/com/owncloud/android/utils/PushUtils.java b/src/generic/java/com/owncloud/android/utils/PushUtils.java new file mode 100644 index 0000000000..08f795f7a1 --- /dev/null +++ b/src/generic/java/com/owncloud/android/utils/PushUtils.java @@ -0,0 +1,25 @@ +/** + * Nextcloud Android client application + * + * @author Mario Danic + * Copyright (C) 2017 Mario Danic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package com.owncloud.android.utils; + +public class PushUtils { + public static final String KEY_PUSH = "push"; +} diff --git a/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java b/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java index 8075cf37b6..19f3d075cd 100644 --- a/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java @@ -358,7 +358,8 @@ public class UserInfoActivity extends FileActivity { String arbitraryDataPushString; if (!TextUtils.isEmpty(arbitraryDataPushString = arbitraryDataProvider.getValue( - account, PushUtils.KEY_PUSH))) { + account, PushUtils.KEY_PUSH)) && + !TextUtils.isEmpty(getResources().getString(R.string.push_server_url))) { Gson gson = new Gson(); PushArbitraryData pushArbitraryData = gson.fromJson(arbitraryDataPushString, PushArbitraryData.class); From 7a117ce1f7e741575b39a1a1a55b2e34cb2ba60b Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Tue, 2 May 2017 16:49:39 +0200 Subject: [PATCH 46/53] prevent crashing if fingerprint is not supported --- .../ui/activity/FingerprintActivity.java | 7 +- .../android/ui/activity/Preferences.java | 68 +++++++++++-------- 2 files changed, 43 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/owncloud/android/ui/activity/FingerprintActivity.java b/src/main/java/com/owncloud/android/ui/activity/FingerprintActivity.java index 815fb476aa..41df82b8b1 100644 --- a/src/main/java/com/owncloud/android/ui/activity/FingerprintActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/FingerprintActivity.java @@ -36,6 +36,7 @@ import android.os.CancellationSignal; import android.security.keystore.KeyGenParameterSpec; import android.security.keystore.KeyPermanentlyInvalidatedException; import android.security.keystore.KeyProperties; +import android.support.annotation.RequiresApi; import android.support.v4.app.ActivityCompat; import android.support.v4.graphics.drawable.DrawableCompat; import android.support.v7.app.AppCompatActivity; @@ -256,7 +257,8 @@ public class FingerprintActivity extends AppCompatActivity { Toast.makeText(this, errorSeq, Toast.LENGTH_LONG).show(); } - final static public boolean isFingerprintCapable(Context context) { + @RequiresApi(api = Build.VERSION_CODES.M) + static public boolean isFingerprintCapable(Context context) { try { FingerprintManager fingerprintManager = (FingerprintManager) context.getSystemService(Context.FINGERPRINT_SERVICE); @@ -274,7 +276,8 @@ public class FingerprintActivity extends AppCompatActivity { return false; } - final static public boolean isFingerprintReady(Context context) { + @RequiresApi(api = Build.VERSION_CODES.M) + static public boolean isFingerprintReady(Context context) { try { FingerprintManager fingerprintManager = (FingerprintManager) context.getSystemService(Context.FINGERPRINT_SERVICE); diff --git a/src/main/java/com/owncloud/android/ui/activity/Preferences.java b/src/main/java/com/owncloud/android/ui/activity/Preferences.java index c730c7c1f1..657ea9a322 100644 --- a/src/main/java/com/owncloud/android/ui/activity/Preferences.java +++ b/src/main/java/com/owncloud/android/ui/activity/Preferences.java @@ -189,41 +189,49 @@ public class Preferences extends PreferenceActivity boolean fPrintEnabled = getResources().getBoolean(R.bool.fingerprint_enabled); fPrint = (CheckBoxPreference) findPreference(FingerprintActivity.PREFERENCE_USE_FINGERPRINT); if (fPrint != null) { - if(FingerprintActivity.isFingerprintCapable(MainApp.getAppContext()) && fPrintEnabled) { - fPrint.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { - @Override - public boolean onPreferenceChange(Preference preference, Object newValue) { - Boolean incoming = (Boolean) newValue; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (FingerprintActivity.isFingerprintCapable(MainApp.getAppContext()) && fPrintEnabled) { + fPrint.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + Boolean incoming = (Boolean) newValue; - if(FingerprintActivity.isFingerprintReady(MainApp.getAppContext())) { - SharedPreferences appPrefs = - PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); - SharedPreferences.Editor editor = appPrefs.edit(); - editor.putBoolean("use_fingerprint", incoming); - editor.commit(); - return true; - } else { - if(incoming) { - Toast.makeText( - MainApp.getAppContext(), - R.string.prefs_fingerprint_notsetup, - Toast.LENGTH_LONG) - .show(); - fPrint.setChecked(false); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (FingerprintActivity.isFingerprintReady(MainApp.getAppContext())) { + SharedPreferences appPrefs = + PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); + SharedPreferences.Editor editor = appPrefs.edit(); + editor.putBoolean("use_fingerprint", incoming); + editor.apply(); + return true; + } else { + if (incoming) { + Toast.makeText( + MainApp.getAppContext(), + R.string.prefs_fingerprint_notsetup, + Toast.LENGTH_LONG) + .show(); + fPrint.setChecked(false); + } + SharedPreferences appPrefs = + PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); + SharedPreferences.Editor editor = appPrefs.edit(); + editor.putBoolean("use_fingerprint", false); + editor.apply(); + return false; + } + } else { + return false; } - SharedPreferences appPrefs = - PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); - SharedPreferences.Editor editor = appPrefs.edit(); - editor.putBoolean("use_fingerprint", false); - editor.commit(); - return false; } + }); + if (!FingerprintActivity.isFingerprintReady(MainApp.getAppContext())) { + fPrint.setChecked(false); } - }); - if(!FingerprintActivity.isFingerprintReady(MainApp.getAppContext())) { - fPrint.setChecked(false); - } + } else { + preferenceCategoryDetails.removePreference(fPrint); + } } else { preferenceCategoryDetails.removePreference(fPrint); } From 1246675b0ef2791507b23af1c9962cc78f81bd2d Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Wed, 3 May 2017 00:21:39 +0000 Subject: [PATCH 47/53] [tx-robot] updated from transifex --- src/main/res/values-el/strings.xml | 11 +++++- src/main/res/values-es-rMX/strings.xml | 4 ++ src/main/res/values-pl/strings.xml | 53 ++++++++++++++++++++++++-- 3 files changed, 64 insertions(+), 4 deletions(-) diff --git a/src/main/res/values-el/strings.xml b/src/main/res/values-el/strings.xml index 61e8a5021b..8457464dcd 100644 --- a/src/main/res/values-el/strings.xml +++ b/src/main/res/values-el/strings.xml @@ -150,6 +150,7 @@ Σφάλμα δικαιωμάτων Διένεξη Άγνωστο σφάλμα + Αναμονή σύνδεσης Wi-Fi Αναμονή για μεταφόρτωση Λαμβάνονται … %1$d%% Λαμβάνονται %2$s @@ -189,6 +190,7 @@ %1$s αναπαραγωγή τελείωσε Δεν βρέθηκαν αρχεία πολυμέσων Δεν δόθηκε λογαριασμός + Το αρχείο δεν είναι έγκυρος λογαριασμός Δεν υποστηρίζεται η μορφή κωδικοποιήσης πολυμέσων Αδυναμία ανάγνωσης αρχείου πολυμέσων Λήξη χρόνου κατά την προσπάθεια αναπαραγωγής @@ -501,6 +503,7 @@ Πλήρες όνομα + E-mail Αριθμός τηλεφώνου Διεύθυνση Ιστοσελίδα @@ -513,6 +516,9 @@ Παρουσιάστηκε σφάλμα Περί + Αντίγραφο ασφαλείας επαφών + Ανάκτηση επαφών + Αντίγραφο ασφαλείας τώρα Επαναφορά τελευταίου αντιγράφου ασφαλείας Επαναφορά Αντίγραφο ασφαλείας @@ -528,4 +534,7 @@ Νέα ενημέρωση ελήφθη - + Έξοδος + + + diff --git a/src/main/res/values-es-rMX/strings.xml b/src/main/res/values-es-rMX/strings.xml index f4e2520ff4..720ed0f44c 100644 --- a/src/main/res/values-es-rMX/strings.xml +++ b/src/main/res/values-es-rMX/strings.xml @@ -283,6 +283,7 @@ en los últimos 7 días. Renombrar Eliminar ¿Realmente desea eliminar %1$s? + ¿Realmente quiere eliminar %1$s y sus contenidos? Sólo local Eliminado Falla al eliminar @@ -624,6 +625,8 @@ en los últimos 7 días. Acerca de Respaldar contactos + Restaurar contactos + Respaldar ahora Restaurar el último respaldo Restaurar Respaldar @@ -638,6 +641,7 @@ en los últimos 7 días. Seleccione una fecha nunca No se encontraron archivos + ¡Su último respaldo no fue encontrado! El respaldo está calendarizado y deberá iniciar en breve La importación está calendarizada y deberá iniciar en breve diff --git a/src/main/res/values-pl/strings.xml b/src/main/res/values-pl/strings.xml index 6c9788f4eb..32e7c2b4ae 100644 --- a/src/main/res/values-pl/strings.xml +++ b/src/main/res/values-pl/strings.xml @@ -47,7 +47,9 @@ Brak skonfigurowanych odcisków palców Pokaż ukryte pliki Natychmiastowe wysyłanie zdjęć + Wyślij zdjęcia z aparatu Natychmiastowe wysyłanie wideo + Wyślij filmy nagrane aparatem Włącz logowanie To jest używane do logowania problemów Historia logowania @@ -56,6 +58,7 @@ Synchronizuj kalendarz i kontakty Skonfiguruj DAVdroid (v1.3.0+) dla obecnego konta Adres serwera dla konta nie mógł został przekonwertowany do DAVdroid + F-droid i Google Play nie są zainstalowane Pomoc Poleć znajomemu Opinie @@ -91,7 +94,9 @@ Wyślij zawartość lub synchronizuj ją ze swoimi urządzeniami Dodaj pliki do ulubionych lub synchronizuj je ze swoimi urządzeniami Tutaj znajdziesz pliki i foldery oznaczone jako ulubione + Twoje wyszukiwanie nie zwróciło żadnych ulubionych plików Wczytywanie… + Brak aplikacji dla tego typu plików. Nie ma plików w tym folderze. Brak wyników w tym folderze Brak wyników @@ -100,6 +105,8 @@ Pliki i foldery, które współdzielisz pokażą się tutaj Brak plików wideo Brak zdjęć + Nie znaleziono żadnych plików zmodyfikowanych w ciągu ostatnich 7 dni + Twoje wyszukiwanie nie zwróciło żądnych plików zmodyfikowanych w ciągu ostatnich 7 dni  NIe znaleziono żadnych ostatnio dodanych plików Twoje wyszukiwanie nie zwróciło żadnych ostatnio dodanych plików Wyślij zdjęcia lub włącz automatyczne wysyłanie @@ -107,6 +114,8 @@ Wyślij pliki wideo lub włącz automatyczne wysyłanie Twoje wyszukiwanie nie zwróciło żadnych plików wideo Brak dostępnych danych do wysłania + Wyślij zawartość lub włącz wysyłanie natychmiastowe. + Wyślij zawartość lub włącz wysyłanie automatyczne. folder foldery plik @@ -118,6 +127,7 @@ Zmodyfikowano: Pobierz Synchronizuj + Podczas wysyłania zmieniono nazwę pliku na %1$s Udostępnij Tak Nie @@ -192,6 +202,7 @@ Niektóre pliki nie mogły być przeniesione Lokalnie: %1$s Zdalnie: %1$s + Brak wystarczającego miejsca, aby skopiować wybrane pliki do folderu %1$s. Czy w zamian chcesz je tam przenieść? Wymyśl kod PIN. Wpisz kod PIN. @@ -211,6 +222,13 @@ Nie znaleziono konta Nieobsługiwany kodek multimediów NIe można odczytać pliku + Nieprawidłowe kodowanie pliku multimedialnego + Upłynął limit czasu podczas próby odtwarzania pliku + Plik multimedialny nie może być przesyłany strumieniowo + Wbudowany odtwarzacz multimediów nie może odtworzyć pliku + Napotkano błąd zabezpieczeń podczas próby odtwarzania %1$s + Błąd danych wejściowych podczas próby odtwarzania %1$s + Nieoczekiwany błąd podczas próby odtworzenia %1$s Przycisk przewijania do tyłu Przycisk odtwarzania / pauzowania Przycisk przewijania do przodu @@ -243,6 +261,8 @@ Serwer nie obsługuje tej metody autoryzacji %1$s nie wspiera wielu kont Błąd autoryzacji na tym serwerze + Konto jeszcze nie istnieje na tym urządzeniu + Udostępnij w trybie offline Wyłącz udostępnianie w trybie offline Ustaw jako ulubione @@ -250,10 +270,12 @@ Zmień nazwę Usuń Czy naprawdę chcesz usunąć %1$s? + Czy na pewno chcesz usunąć %1$s wraz z zawartością? Tylko lokalnie Usunięto Nie można usunąć Wprowadź nową nazwę + Nie można zmienić nazwy kopii lokalne, użyj innej nazwy Nie udało się nadać serwerowi nowej nazwy Nie udało się sprawdzić zdalnego pliku Zawartość pliku została już synchronizowana @@ -263,6 +285,7 @@ Nazwa pliku nie może być pusta. Proszę czekać... Sprawdzanie danych + Nieoczekiwany błąd, prosze wybrać plik z innej aplikacji Nie wybrano żadnego pliku Wyślij link do … Kopiowanie pliku z prywatnego zasobu @@ -312,6 +335,7 @@ Wysyłaj tylko podczas ładowania /InstantUpload Konflikt pliku + Które pliki chcesz zachować? Jeżeli wybierzesz obie wersje, do nazwy pliku lokalnego zostanie dodana liczba. Zatrzymaj oba wersja lokalna wersja zdalna @@ -321,7 +345,7 @@ Nie można wyświetlić obrazu %1$s nie może zostać skopiowany do lokalnego folderu %2$s - Wysyłka obrazów do folderu + Folder natychmiastowego wysyłania Folder lokalny Folder zdalny Używaj podfolderów @@ -388,6 +412,7 @@ Zarządzaj kontami Logi Wyślij historię + Brak aplikacji do wysyłania logów. Zainstaluj klienta poczty e-mail. %1$s Logi aplikacji Android Ładowanie danych … @@ -399,20 +424,23 @@ Wybierz Nie można przenieść pliku. Sprawdź, czy plik istnieje. + Nie można przenieść folderu do jednego z jego podfolderów Plik już istnieje w folderze docelowym Pojawił się błąd podczas próby przeniesienia tego pliku lub folderu aby przenieść ten plik Nie można skopiować. Sprawdź, czy plik istnieje + Nie można skopiować folderu do jednego z jego podfolderów Plik już istnieje w folderze docelowym Wystąpił błąd podczas próby kopiowania tego pliku lub folderu by skopiować ten plik - Automatyczne wysyłanie + Natychmiastowo wysłane Szczegóły - Synchronizacja folderu %1$s nie może zostać zakończona + Folder wideo do natychmiastowego wysyłania + Synchronizacja folderu %1$s nie może zostać zakończona udostępniony z tobą @@ -477,7 +505,11 @@ Cofnij udostępnianie zakończono + Próba nieudana Wyczyść nieudane + Wyczyszczono + Wyczyść zakończone wysyłania + Widok siatki Widok listy @@ -485,8 +517,11 @@ Wyczyść dane Nie udało się usunąć niektórych plików. + Wymagane są dodatkowe uprawnienia do pobierania i wysyłania plików. + Plik nie został znaleziony w lokalnym systemie plików Czy naprawdę chcesz usunąć zaznaczone elementy? Czy naprawdę chcesz usunąć zaznaczone elementy oraz ich zawartość? + Oczekiwanie na ładowanie urządzenia Wyszukaj Ta funkcja jest dostępna w Nextcloud, prosimy wykonać aktualizację Dowiedz się więcej @@ -504,6 +539,7 @@ Wybierz folder… Ładowanie folderów… Nie znaleziono folderów multimedialnych. + Preferencje automatycznego wysyłania Ustawienia Dla %1$s @@ -546,6 +582,9 @@ Pominąć + Umieść palec na czytniku odcisku palca + Nie rozpoznano odcisku palca + Pełna nazwa E-mail @@ -563,7 +602,10 @@ Utwórz kopię zapasową kontaktów Przywróć kontakty + Utwórz kopię zapasową Przywróć ostatnią kopię zapasową + Przywróć + Kopia zapasowa Kopia zapasowa kontaktów Ostatnia kopia zapasowa Potrzebne uprawnienia do odczytu kontaktów @@ -571,9 +613,14 @@ Przywróć kontakty Przywróć wybrane kontakty Wybierz konto do zaimportiwania + Nie nadano uprawnień, nic nie zostało zaimportowane! Wybierz datę nigdy Nie znaleziono żadnych plików + Nie odnaleziono twojej ostatniej kopii zapasowej! + Kopia zapasowa została zaplanowana i wkrótce zostanie uruchomiona + Importowanie zostało zaplanowane i wkrótce zostanie uruchomione + Otrzymano nowe powiadomienie Wyloguj From c1eeea1dcb3a9f782f2afa5d175ae9f6fc25379d Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Wed, 3 May 2017 05:21:17 +0200 Subject: [PATCH 48/53] Change name as requested --- .../{PushArbitraryData.java => PushConfigurationState.java} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/java/com/owncloud/android/datamodel/{PushArbitraryData.java => PushConfigurationState.java} (100%) diff --git a/src/main/java/com/owncloud/android/datamodel/PushArbitraryData.java b/src/main/java/com/owncloud/android/datamodel/PushConfigurationState.java similarity index 100% rename from src/main/java/com/owncloud/android/datamodel/PushArbitraryData.java rename to src/main/java/com/owncloud/android/datamodel/PushConfigurationState.java From 9186839048806c7b3e684edd34b6746b8bbf3f5c Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Wed, 3 May 2017 05:30:37 +0200 Subject: [PATCH 49/53] Fix stuff --- .../com/owncloud/android/utils/PushUtils.java | 10 +- .../datamodel/PushConfigurationState.java | 6 +- .../android/ui/activity/UserInfoActivity.java | 6 +- .../com/owncloud/android/utils/PushUtils.java | 139 ++++++++++++++---- 4 files changed, 120 insertions(+), 41 deletions(-) diff --git a/src/gplay/java/com/owncloud/android/utils/PushUtils.java b/src/gplay/java/com/owncloud/android/utils/PushUtils.java index 7336c55ec8..cbbaacea6d 100644 --- a/src/gplay/java/com/owncloud/android/utils/PushUtils.java +++ b/src/gplay/java/com/owncloud/android/utils/PushUtils.java @@ -32,7 +32,7 @@ import com.owncloud.android.MainApp; import com.owncloud.android.R; import com.owncloud.android.authentication.AccountUtils; import com.owncloud.android.datamodel.ArbitraryDataProvider; -import com.owncloud.android.datamodel.PushArbitraryData; +import com.owncloud.android.datamodel.PushConfigurationState; import com.owncloud.android.db.PreferenceManager; import com.owncloud.android.lib.common.OwnCloudAccount; import com.owncloud.android.lib.common.OwnCloudClient; @@ -155,7 +155,8 @@ public class PushUtils { String arbitraryValue; if (!TextUtils.isEmpty(arbitraryValue = arbitraryDataProvider.getValue(account, KEY_PUSH))) { Gson gson = new Gson(); - PushArbitraryData pushArbitraryData = gson.fromJson(arbitraryValue, PushArbitraryData.class); + PushConfigurationState pushArbitraryData = gson.fromJson(arbitraryValue, + PushArbitraryData.class); RemoteOperation unregisterAccountDeviceForProxyOperation = new UnregisterAccountDeviceForProxyOperation(context.getResources(). getString(R.string.push_server_url), @@ -204,7 +205,8 @@ public class PushUtils { Gson gson = new Gson(); for (Account account : AccountUtils.getAccounts(context)) { if (!TextUtils.isEmpty(providerValue = arbitraryDataProvider.getValue(account, KEY_PUSH))) { - PushArbitraryData accountPushData = gson.fromJson(providerValue, PushArbitraryData.class); + PushConfigurationState accountPushData = gson.fromJson(providerValue, + PushConfigurationState.class); if (!accountPushData.getPushToken().equals(token) && !accountPushData.isShouldBeDeleted()) { try { OwnCloudAccount ocAccount = new OwnCloudAccount(account, context); @@ -231,7 +233,7 @@ public class PushUtils { remoteOperationResult = registerAccountDeviceForProxyOperation.execute(mClient); if (remoteOperationResult.isSuccess()) { - PushArbitraryData pushArbitraryData = new PushArbitraryData(token, + PushConfigurationState pushArbitraryData = new PushConfigurationState(token, pushResponse.getDeviceIdentifier(), pushResponse.getSignature(), pushResponse.getPublicKey(), false); arbitraryDataProvider.storeOrUpdateKeyValue(account, KEY_PUSH, diff --git a/src/main/java/com/owncloud/android/datamodel/PushConfigurationState.java b/src/main/java/com/owncloud/android/datamodel/PushConfigurationState.java index fa5c86b78c..8fffec9584 100644 --- a/src/main/java/com/owncloud/android/datamodel/PushConfigurationState.java +++ b/src/main/java/com/owncloud/android/datamodel/PushConfigurationState.java @@ -20,17 +20,17 @@ package com.owncloud.android.datamodel; -public class PushArbitraryData { +public class PushConfigurationState { public String pushToken; public String deviceIdentifier; public String deviceIdentifierSignature; public String userPublicKey; public boolean shouldBeDeleted; - public PushArbitraryData() { + public PushConfigurationState() { } - public PushArbitraryData(String pushToken, String deviceIdentifier, String deviceIdentifierSignature, + public PushConfigurationState(String pushToken, String deviceIdentifier, String deviceIdentifierSignature, String userPublicKey, boolean shouldBeDeleted) { this.pushToken = pushToken; this.deviceIdentifier = deviceIdentifier; diff --git a/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java b/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java index 19f3d075cd..380dfab126 100644 --- a/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java @@ -52,7 +52,7 @@ import com.owncloud.android.R; import com.owncloud.android.authentication.AccountUtils; import com.owncloud.android.authentication.AuthenticatorActivity; import com.owncloud.android.datamodel.ArbitraryDataProvider; -import com.owncloud.android.datamodel.PushArbitraryData; +import com.owncloud.android.datamodel.PushConfigurationState; import com.owncloud.android.lib.common.UserInfo; import com.owncloud.android.lib.common.operations.RemoteOperation; import com.owncloud.android.lib.common.operations.RemoteOperationResult; @@ -361,8 +361,8 @@ public class UserInfoActivity extends FileActivity { account, PushUtils.KEY_PUSH)) && !TextUtils.isEmpty(getResources().getString(R.string.push_server_url))) { Gson gson = new Gson(); - PushArbitraryData pushArbitraryData = gson.fromJson(arbitraryDataPushString, - PushArbitraryData.class); + PushConfigurationState pushArbitraryData = gson.fromJson(arbitraryDataPushString, + PushConfigurationState.class); pushArbitraryData.setShouldBeDeleted(true); arbitraryDataProvider.storeOrUpdateKeyValue(account, PushUtils.KEY_PUSH, gson.toJson(pushArbitraryData)); diff --git a/src/modified/java/com/owncloud/android/utils/PushUtils.java b/src/modified/java/com/owncloud/android/utils/PushUtils.java index efa8305161..6d9090b27c 100644 --- a/src/modified/java/com/owncloud/android/utils/PushUtils.java +++ b/src/modified/java/com/owncloud/android/utils/PushUtils.java @@ -27,9 +27,12 @@ import android.content.Context; import android.text.TextUtils; import android.util.Base64; +import com.google.gson.Gson; import com.owncloud.android.MainApp; import com.owncloud.android.R; import com.owncloud.android.authentication.AccountUtils; +import com.owncloud.android.datamodel.ArbitraryDataProvider; +import com.owncloud.android.datamodel.PushConfigurationState; import com.owncloud.android.db.PreferenceManager; import com.owncloud.android.lib.common.OwnCloudAccount; import com.owncloud.android.lib.common.OwnCloudClient; @@ -39,8 +42,12 @@ import com.owncloud.android.lib.common.operations.RemoteOperationResult; import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.lib.resources.notifications.RegisterAccountDeviceForNotificationsOperation; import com.owncloud.android.lib.resources.notifications.RegisterAccountDeviceForProxyOperation; +import com.owncloud.android.lib.resources.notifications.UnregisterAccountDeviceForNotificationsOperation; +import com.owncloud.android.lib.resources.notifications.UnregisterAccountDeviceForProxyOperation; import com.owncloud.android.lib.resources.notifications.models.PushResponse; +import org.apache.commons.httpclient.HttpStatus; + import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -65,7 +72,11 @@ public class PushUtils { private static final String KEYPAIR_PRIV_EXTENSION = ".priv"; private static final String KEYPAIR_PUB_EXTENSION = ".pub"; - public static String generateSHA512Hash(String pushToken) { + public static final String KEY_PUSH = "push"; + + private static ArbitraryDataProvider arbitraryDataProvider; + + private static String generateSHA512Hash(String pushToken) { MessageDigest messageDigest = null; try { messageDigest = MessageDigest.getInstance("SHA-512"); @@ -86,7 +97,7 @@ public class PushUtils { return result.toString(); } - public static int generateRsa2048KeyPair() { + private static int generateRsa2048KeyPair() { String keyPath = MainApp.getStoragePath() + File.separator + MainApp.getDataFolder() + File.separator + KEYPAIR_FOLDER; @@ -124,8 +135,59 @@ public class PushUtils { return -2; } + private static void deleteRegistrationForAccount(Account account) { + Context context = MainApp.getAppContext(); + OwnCloudAccount ocAccount = null; + arbitraryDataProvider = new ArbitraryDataProvider(MainApp.getAppContext().getContentResolver()); + + try { + ocAccount = new OwnCloudAccount(account, context); + OwnCloudClient mClient = OwnCloudClientManagerFactory.getDefaultSingleton(). + getClientFor(ocAccount, context); + + RemoteOperation unregisterAccountDeviceForNotificationsOperation = new + UnregisterAccountDeviceForNotificationsOperation(); + + RemoteOperationResult remoteOperationResult = unregisterAccountDeviceForNotificationsOperation. + execute(mClient); + + if (remoteOperationResult.getHttpCode() == HttpStatus.SC_ACCEPTED) { + String arbitraryValue; + if (!TextUtils.isEmpty(arbitraryValue = arbitraryDataProvider.getValue(account, KEY_PUSH))) { + Gson gson = new Gson(); + PushConfigurationState pushArbitraryData = gson.fromJson(arbitraryValue, + PushArbitraryData.class); + RemoteOperation unregisterAccountDeviceForProxyOperation = + new UnregisterAccountDeviceForProxyOperation(context.getResources(). + getString(R.string.push_server_url), + pushArbitraryData.getDeviceIdentifier(), + pushArbitraryData.getDeviceIdentifierSignature(), + pushArbitraryData.getUserPublicKey()); + + remoteOperationResult = unregisterAccountDeviceForProxyOperation.execute(mClient); + + if (remoteOperationResult.isSuccess()) { + arbitraryDataProvider.deleteKeyForAccount(account, KEY_PUSH); + } + } + } + + + } catch (com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException e) { + Log_OC.d(TAG, "Failed to find an account"); + } catch (AuthenticatorException e) { + Log_OC.d(TAG, "Failed via AuthenticatorException"); + } catch (IOException e) { + Log_OC.d(TAG, "Failed via IOException"); + } catch (OperationCanceledException e) { + Log_OC.d(TAG, "Failed via OperationCanceledException"); + } + } + public static void pushRegistrationToServer() { String token = PreferenceManager.getPushToken(MainApp.getAppContext()); + arbitraryDataProvider = new ArbitraryDataProvider(MainApp.getAppContext().getContentResolver()); + if (!TextUtils.isEmpty(MainApp.getAppContext().getResources().getString(R.string.push_server_url)) && !TextUtils.isEmpty(token)) { PushUtils.generateRsa2048KeyPair(); @@ -139,42 +201,57 @@ public class PushUtils { publicKey = "-----BEGIN PUBLIC KEY-----\n" + publicKey + "\n-----END PUBLIC KEY-----\n"; Context context = MainApp.getAppContext(); + String providerValue; + Gson gson = new Gson(); for (Account account : AccountUtils.getAccounts(context)) { - try { - OwnCloudAccount ocAccount = new OwnCloudAccount(account, context); - OwnCloudClient mClient = OwnCloudClientManagerFactory.getDefaultSingleton(). - getClientFor(ocAccount, context); + if (!TextUtils.isEmpty(providerValue = arbitraryDataProvider.getValue(account, KEY_PUSH))) { + PushConfigurationState accountPushData = gson.fromJson(providerValue, + PushConfigurationState.class); + if (!accountPushData.getPushToken().equals(token) && !accountPushData.isShouldBeDeleted()) { + try { + OwnCloudAccount ocAccount = new OwnCloudAccount(account, context); + OwnCloudClient mClient = OwnCloudClientManagerFactory.getDefaultSingleton(). + getClientFor(ocAccount, context); - RemoteOperation registerAccountDeviceForNotificationsOperation = - new RegisterAccountDeviceForNotificationsOperation(pushTokenHash, - publicKey, - context.getResources().getString(R.string.push_server_url)); + RemoteOperation registerAccountDeviceForNotificationsOperation = + new RegisterAccountDeviceForNotificationsOperation(pushTokenHash, + publicKey, + context.getResources().getString(R.string.push_server_url)); - RemoteOperationResult remoteOperationResult = registerAccountDeviceForNotificationsOperation. - execute(mClient); + RemoteOperationResult remoteOperationResult = registerAccountDeviceForNotificationsOperation. + execute(mClient); - if (remoteOperationResult.isSuccess()) { - PushResponse pushResponse = remoteOperationResult.getPushResponseData(); + if (remoteOperationResult.isSuccess()) { + PushResponse pushResponse = remoteOperationResult.getPushResponseData(); - RemoteOperation registerAccountDeviceForProxyOperation = new - RegisterAccountDeviceForProxyOperation( - context.getResources().getString(R.string.push_server_url), - token, pushResponse.getDeviceIdentifier(), pushResponse.getSignature(), - pushResponse.getPublicKey()); + RemoteOperation registerAccountDeviceForProxyOperation = new + RegisterAccountDeviceForProxyOperation( + context.getResources().getString(R.string.push_server_url), + token, pushResponse.getDeviceIdentifier(), pushResponse.getSignature(), + pushResponse.getPublicKey()); - remoteOperationResult = registerAccountDeviceForProxyOperation.execute(mClient); - PreferenceManager.setPushTokenLastSentTime(MainApp.getAppContext(), - System.currentTimeMillis()); + remoteOperationResult = registerAccountDeviceForProxyOperation.execute(mClient); + if (remoteOperationResult.isSuccess()) { + PushConfigurationState pushArbitraryData = new PushConfigurationState(token, + pushResponse.getDeviceIdentifier(), pushResponse.getSignature(), + pushResponse.getPublicKey(), false); + arbitraryDataProvider.storeOrUpdateKeyValue(account, KEY_PUSH, + gson.toJson(pushArbitraryData)); + } + } + } catch (com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException e) { + Log_OC.d(TAG, "Failed to find an account"); + } catch (AuthenticatorException e) { + Log_OC.d(TAG, "Failed via AuthenticatorException"); + } catch (IOException e) { + Log_OC.d(TAG, "Failed via IOException"); + } catch (OperationCanceledException e) { + Log_OC.d(TAG, "Failed via OperationCanceledException"); + } + } else if (accountPushData.isShouldBeDeleted()) { + deleteRegistrationForAccount(account); } - } catch (com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException e) { - Log_OC.d(TAG, "Failed to find an account"); - } catch (AuthenticatorException e) { - Log_OC.d(TAG, "Failed via AuthenticatorException"); - } catch (IOException e) { - Log_OC.d(TAG, "Failed via IOException"); - } catch (OperationCanceledException e) { - Log_OC.d(TAG, "Failed via OperationCanceledException"); } } } @@ -184,7 +261,7 @@ public class PushUtils { public static Key readKeyFromFile(boolean readPublicKey) { String keyPath = MainApp.getStoragePath() + File.separator + MainApp.getDataFolder() + File.separator + KEYPAIR_FOLDER; - ; + String privateKeyPath = keyPath + File.separator + KEYPAIR_FILE_NAME + KEYPAIR_PRIV_EXTENSION; String publicKeyPath = keyPath + File.separator + KEYPAIR_FILE_NAME + KEYPAIR_PUB_EXTENSION; From ec5b97f07a56379330ebed5a3be91ea07857d4b1 Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Wed, 3 May 2017 05:49:41 +0200 Subject: [PATCH 50/53] Fix leftover --- src/modified/java/com/owncloud/android/utils/PushUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modified/java/com/owncloud/android/utils/PushUtils.java b/src/modified/java/com/owncloud/android/utils/PushUtils.java index 6d9090b27c..8f34d08394 100644 --- a/src/modified/java/com/owncloud/android/utils/PushUtils.java +++ b/src/modified/java/com/owncloud/android/utils/PushUtils.java @@ -156,7 +156,7 @@ public class PushUtils { if (!TextUtils.isEmpty(arbitraryValue = arbitraryDataProvider.getValue(account, KEY_PUSH))) { Gson gson = new Gson(); PushConfigurationState pushArbitraryData = gson.fromJson(arbitraryValue, - PushArbitraryData.class); + PushConfigurationState.class); RemoteOperation unregisterAccountDeviceForProxyOperation = new UnregisterAccountDeviceForProxyOperation(context.getResources(). getString(R.string.push_server_url), From 5711f6f0b42610eaad37688a06a4f3c0ef9da67b Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Wed, 3 May 2017 05:59:34 +0200 Subject: [PATCH 51/53] Simplify gplay flavour --- src/gplay/res/values/setup.xml | 130 --------------------------------- 1 file changed, 130 deletions(-) diff --git a/src/gplay/res/values/setup.xml b/src/gplay/res/values/setup.xml index 5f3582a9d6..f2ce5f20ff 100644 --- a/src/gplay/res/values/setup.xml +++ b/src/gplay/res/values/setup.xml @@ -1,135 +1,5 @@ - - false - - - Nextcloud - nextcloud - org.nextcloud - com.nextcloud.android.providers.UsersAndGroupsSearchProvider - com.nextcloud.android.providers.UsersAndGroupsSearchProvider.action.SHARE_WITH - org.nextcloud.documents - org.nextcloud.files - nextcloud.db - nextcloud - nextcloud - nextcloud - Nextcloud - Mozilla/5.0 (Android) ownCloud-android/%1$s - - - - true - - - regular - true - "https://nextcloud.com/providers" - - - - off - off - - - on - true - true - true - true - - - true - /Contacts-Backup - -1 - - - - - - @color/nc_blue - #006AA3 - @color/nc_blue_accent - @color/white - #7fC0E3 - #FFFFFF - #FFFFFF - #FFFFFF - #0082c9 - #0082c9 - @color/nc_blue_accent - @color/white - #D6D7D7 - @color/black - - - #201D2D44 - #40162233 - - - #000000 - - - #757575 - #616161 - #ECECEC - - - true - - - false - false - true - false - - - false - - - true - true - true - false - true - true - false - https://help.nextcloud.com/c/feature - - "mailto:" - "mailto:android@nextcloud.com" - "https://play.google.com/store/apps/details?id=com.nextcloud.client" - https://nextcloud.com/install - - - - - - true - - https://f-droid.org/repository/browse/?fdid=com.nextcloud.android.beta - https://download.nextcloud.com/android/dev/latest.apk - https://play.google.com/apps/testing/com.nextcloud.client - https://f-droid.org/repository/browse/?fdid=com.nextcloud.client - http://webchat.freenode.net?channels=nextcloud-mobile - https://help.nextcloud.com/c/clients/android - https://www.transifex.com/nextcloud/nextcloud/android/ - https://github.com/nextcloud/android/blob/master/CONTRIBUTING.md - https://github.com/nextcloud/android/issues - - - nc - - - - - false - - - false - https://push-notifications.nextcloud.com From 12f53eaf85075426718a3615b798dcf62745779d Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Wed, 3 May 2017 06:14:34 +0200 Subject: [PATCH 52/53] Fix fab stuff --- .../ui/fragment/ExtendedListFragment.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java b/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java index a3b4f10d97..2192c7d636 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java @@ -601,11 +601,18 @@ public class ExtendedListFragment extends Fragment * * @param enabled Desired visibility for the FAB. */ - public void setFabEnabled(boolean enabled) { - if (enabled) { - mFabMain.setVisibility(View.VISIBLE); - } else { - mFabMain.setVisibility(View.GONE); + public void setFabEnabled(final boolean enabled) { + if (getActivity() != null) { + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + if (enabled) { + mFabMain.setVisibility(View.VISIBLE); + } else { + mFabMain.setVisibility(View.GONE); + } + } + }); } } From c6268a609a43e56c16a849bcb8cf3ab0bc6f6e57 Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Wed, 3 May 2017 08:52:25 +0200 Subject: [PATCH 53/53] remove suppressLint Checkerboard on PNG files is only shown in >= M and thus toggle Background is also used in >= M only --- .../ReceiveExternalFilesActivity.java | 4 +- .../android/ui/preview/ImageViewCustom.java | 6 +-- .../ui/preview/PreviewImageActivity.java | 9 ++--- .../ui/preview/PreviewImageFragment.java | 37 ++++++++++--------- 4 files changed, 25 insertions(+), 31 deletions(-) diff --git a/src/main/java/com/owncloud/android/ui/activity/ReceiveExternalFilesActivity.java b/src/main/java/com/owncloud/android/ui/activity/ReceiveExternalFilesActivity.java index 3b0f23f5a6..6949b5569c 100755 --- a/src/main/java/com/owncloud/android/ui/activity/ReceiveExternalFilesActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/ReceiveExternalFilesActivity.java @@ -26,7 +26,6 @@ package com.owncloud.android.ui.activity; import android.accounts.Account; import android.accounts.AccountManager; import android.accounts.AuthenticatorException; -import android.annotation.SuppressLint; import android.app.Dialog; import android.content.BroadcastReceiver; import android.content.Context; @@ -609,7 +608,7 @@ public class ReceiveExternalFilesActivity extends FileActivity @Nullable private File createTempFile(String filename, String text) { - File file = new File(((ReceiveExternalFilesActivity)getActivity()).getCacheDir(), filename); + File file = new File(getActivity().getCacheDir(), filename); FileWriter fw = null; try { fw = new FileWriter(file); @@ -862,7 +861,6 @@ public class ReceiveExternalFilesActivity extends FileActivity finish(); } - @SuppressLint("NewApi") public void uploadFiles() { UriUploader uploader = new UriUploader( diff --git a/src/main/java/com/owncloud/android/ui/preview/ImageViewCustom.java b/src/main/java/com/owncloud/android/ui/preview/ImageViewCustom.java index 167ae59b88..97be7039ef 100644 --- a/src/main/java/com/owncloud/android/ui/preview/ImageViewCustom.java +++ b/src/main/java/com/owncloud/android/ui/preview/ImageViewCustom.java @@ -1,6 +1,5 @@ package com.owncloud.android.ui.preview; -import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; @@ -45,7 +44,6 @@ public class ImageViewCustom extends ImageView { super(context, attrs, defStyle); } - @SuppressLint("NewApi") @Override protected void onDraw(Canvas canvas) { if(IS_ICS_OR_HIGHER && checkIfMaximumBitmapExceed(canvas) || IS_VERSION_BUGGY_ON_RECYCLES ) { @@ -109,10 +107,8 @@ public class ImageViewCustom extends ImageView { * @param canvas Canvas where the view will be drawn into. * @return boolean True means that the bitmap is too big for the canvas. */ - @SuppressLint("NewApi") private boolean checkIfMaximumBitmapExceed(Canvas canvas) { - return mBitmapWidth > canvas.getMaximumBitmapWidth() - || mBitmapHeight > canvas.getMaximumBitmapHeight(); + return mBitmapWidth > canvas.getMaximumBitmapWidth() || mBitmapHeight > canvas.getMaximumBitmapHeight(); } diff --git a/src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.java b/src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.java index 3d4676ce4c..b1bf94f7b6 100644 --- a/src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.java +++ b/src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.java @@ -106,7 +106,6 @@ public class PreviewImageActivity extends FileActivity implements // to keep our UI controls visibility in line with system bars visibility mFullScreenAnchorView.setOnSystemUiVisibilityChangeListener (new View.OnSystemUiVisibilityChangeListener() { - @SuppressLint("InlinedApi") @Override public void onSystemUiVisibilityChange(int flags) { boolean visible = (flags & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0; @@ -230,9 +229,9 @@ public class PreviewImageActivity extends FileActivity implements mUploaderBinder = null; } } - }; - - + } + + @Override public void onStop() { super.onStop(); @@ -427,9 +426,7 @@ public class PreviewImageActivity extends FileActivity implements return true; } - @SuppressLint("InlinedApi") public void toggleFullScreen() { - boolean visible = (mFullScreenAnchorView.getSystemUiVisibility() & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0; diff --git a/src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.java b/src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.java index 59617f349e..d1f983831c 100644 --- a/src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.java +++ b/src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.java @@ -19,7 +19,6 @@ package com.owncloud.android.ui.preview; import android.accounts.Account; -import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.content.res.Resources; @@ -31,6 +30,7 @@ import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; import android.graphics.drawable.PictureDrawable; import android.os.AsyncTask; +import android.os.Build; import android.os.Bundle; import android.support.annotation.DrawableRes; import android.support.annotation.StringRes; @@ -549,7 +549,6 @@ public class PreviewImageFragment extends FileFragment { } } - @SuppressLint("InlinedApi") private void showLoadedImage(LoadImage result) { final ImageViewCustom imageView = mImageViewRef.get(); Bitmap bitmap = result.bitmap; @@ -575,20 +574,23 @@ public class PreviewImageFragment extends FileFragment { } layers[1] = bitmapDrawable; LayerDrawable layerDrawable = new LayerDrawable(layers); - if (result.ocFile.getMimetype().equalsIgnoreCase("image/png") ) { - layerDrawable.setLayerHeight(0, convertDpToPixel(bitmap.getHeight(), getActivity())); - layerDrawable.setLayerHeight(1, convertDpToPixel(bitmap.getHeight(), getActivity())); - layerDrawable.setLayerWidth(0, convertDpToPixel(bitmap.getWidth(), getActivity())); - layerDrawable.setLayerWidth(1, convertDpToPixel(bitmap.getWidth(), getActivity())); - } else { - layerDrawable.setLayerHeight(0, convertDpToPixel(bitmapDrawable.getIntrinsicHeight(), - getActivity())); - layerDrawable.setLayerHeight(1, convertDpToPixel(bitmapDrawable.getIntrinsicHeight(), - getActivity())); - layerDrawable.setLayerWidth(0, convertDpToPixel(bitmapDrawable.getIntrinsicWidth(), - getActivity())); - layerDrawable.setLayerWidth(1, convertDpToPixel(bitmapDrawable.getIntrinsicWidth(), - getActivity())); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (result.ocFile.getMimetype().equalsIgnoreCase("image/png")) { + layerDrawable.setLayerHeight(0, convertDpToPixel(bitmap.getHeight(), getActivity())); + layerDrawable.setLayerHeight(1, convertDpToPixel(bitmap.getHeight(), getActivity())); + layerDrawable.setLayerWidth(0, convertDpToPixel(bitmap.getWidth(), getActivity())); + layerDrawable.setLayerWidth(1, convertDpToPixel(bitmap.getWidth(), getActivity())); + } else { + layerDrawable.setLayerHeight(0, convertDpToPixel(bitmapDrawable.getIntrinsicHeight(), + getActivity())); + layerDrawable.setLayerHeight(1, convertDpToPixel(bitmapDrawable.getIntrinsicHeight(), + getActivity())); + layerDrawable.setLayerWidth(0, convertDpToPixel(bitmapDrawable.getIntrinsicWidth(), + getActivity())); + layerDrawable.setLayerWidth(1, convertDpToPixel(bitmapDrawable.getIntrinsicWidth(), + getActivity())); + } } imageView.setImageDrawable(layerDrawable); } else { @@ -664,7 +666,8 @@ public class PreviewImageFragment extends FileFragment { } private void toggleImageBackground() { - if (getFile() != null && (getFile().getMimetype().equalsIgnoreCase("image/png") || + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && getFile() != null + && (getFile().getMimetype().equalsIgnoreCase("image/png") || getFile().getMimetype().equalsIgnoreCase("image/svg+xml")) && getActivity() != null && getActivity() instanceof PreviewImageActivity && getResources() != null) { PreviewImageActivity previewImageActivity = (PreviewImageActivity) getActivity();