From 4a5718a445194b6f9bbb4b992dd1e8f2b3a23c59 Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Fri, 17 Oct 2014 16:29:38 +0200 Subject: [PATCH 001/133] Added text file preview --- res/layout/file_preview.xml | 66 +- res/layout/text_file_preview.xml | 29 + .../owncloud/android/datamodel/OCFile.java | 145 ++-- .../ui/activity/FileDisplayActivity.java | 686 +++++++++--------- .../ui/fragment/OCFileListFragment.java | 6 +- .../ui/preview/PreviewTextFragment.java | 341 +++++++++ 6 files changed, 845 insertions(+), 428 deletions(-) create mode 100644 res/layout/text_file_preview.xml create mode 100644 src/com/owncloud/android/ui/preview/PreviewTextFragment.java diff --git a/res/layout/file_preview.xml b/res/layout/file_preview.xml index 483a3691b1..0da5363461 100644 --- a/res/layout/file_preview.xml +++ b/res/layout/file_preview.xml @@ -1,5 +1,4 @@ - - + \ No newline at end of file diff --git a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java index d0a678c8af..790cfde649 100644 --- a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java @@ -1,13 +1,15 @@ package com.owncloud.android.ui.preview; import android.accounts.Account; +import android.content.Context; import android.os.AsyncTask; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ListView; import android.widget.ProgressBar; -import android.widget.ScrollView; import android.widget.TextView; import com.actionbarsherlock.view.Menu; @@ -26,6 +28,8 @@ import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.IOException; import java.io.StringWriter; +import java.util.ArrayList; +import java.util.List; import java.util.Scanner; public class PreviewTextFragment extends FileFragment { @@ -34,9 +38,8 @@ public class PreviewTextFragment extends FileFragment { private static final String TAG = PreviewTextFragment.class.getSimpleName(); private Account mAccount; - private TextView mTextPreview; + private ListView mTextPreviewList; private ProgressBar mProgressBar; - private ScrollView mScrollView; /** * Creates an empty fragment for previews. @@ -64,8 +67,8 @@ public class PreviewTextFragment extends FileFragment { View ret = inflater.inflate(R.layout.text_file_preview, container, false); - mScrollView = (ScrollView) ret.findViewById(R.id.text_scrollview); - mTextPreview = (TextView) ret.findViewById(R.id.text_preview); + mTextPreviewList = (ListView) ret.findViewById(R.id.text_preview_list); + mTextPreviewList.setAdapter(new TextLineAdapter()); mProgressBar = (ProgressBar) ret.findViewById(R.id.progress_bar); return ret; @@ -118,44 +121,41 @@ public class PreviewTextFragment extends FileFragment { public void onStart() { super.onStart(); Log_OC.e(TAG, "onStart"); - - loadAndShowTextPreview(getFile().getStoragePath(), mTextPreview); } - private void loadAndShowTextPreview(String location, TextView textView) { - new TextLoadAsyncTask().execute(location, textView); + private void loadAndShowTextPreview() { + new TextLoadAsyncTask().execute(getFile().getStoragePath()); } /** * Reads the file to preview and shows its contents. Too critical to be anonymous. */ - private class TextLoadAsyncTask extends AsyncTask { - TextView mTextView; + private class TextLoadAsyncTask extends AsyncTask { @Override protected void onPreExecute() { - mProgressBar.setVisibility(View.VISIBLE); + ((TextLineAdapter) mTextPreviewList.getAdapter()).clear(); } @Override - protected StringWriter doInBackground(java.lang.Object... params) { - if (params.length != 2) - throw new IllegalArgumentException("The parameters to " + TextLoadAsyncTask.class.getName() + " must be (1) the file location and (2) the text view to update"); + protected Void doInBackground(java.lang.Object... params) { + if (params.length != 1) + throw new IllegalArgumentException("The parameter to " + TextLoadAsyncTask.class.getName() + " must be the file location only"); final String location = (String) params[0]; - mTextView = (TextView) params[1]; FileInputStream inputStream = null; Scanner sc = null; - StringWriter source = new StringWriter(); - BufferedWriter bufferedWriter = new BufferedWriter(source); try { inputStream = new FileInputStream(location); sc = new Scanner(inputStream); while (sc.hasNextLine()) { - bufferedWriter.append(sc.nextLine()); - if (sc.hasNextLine()) bufferedWriter.append("\n"); + StringWriter target = new StringWriter(); + BufferedWriter bufferedWriter = new BufferedWriter(target); + if (sc.hasNextLine()) + bufferedWriter.write(sc.nextLine()); + bufferedWriter.close(); + publishProgress(target); } - bufferedWriter.close(); IOException exc = sc.ioException(); if (exc != null) throw exc; } catch (IOException e) { @@ -172,15 +172,90 @@ public class PreviewTextFragment extends FileFragment { sc.close(); } } - return source; + return null; } @Override - protected void onPostExecute(final StringWriter stringWriter) { - super.onPostExecute(stringWriter); + protected void onProgressUpdate(StringWriter... values) { + super.onProgressUpdate(values); + //Using a ListView allows to show large text without the UI freeze that happens + //when calling TextView#setText() with a large CharSequence + ((TextLineAdapter) mTextPreviewList.getAdapter()).add(values[0].toString()); + } + + @Override + protected void onPostExecute(Void aVoid) { + super.onPostExecute(aVoid); mProgressBar.setVisibility(View.GONE); - mScrollView.setVisibility(View.VISIBLE); - mTextView.setText(new String(stringWriter.getBuffer())); + mTextPreviewList.setVisibility(View.VISIBLE); + } + } + + private class TextLineAdapter extends BaseAdapter { + private static final int LIST_ITEM_LAYOUT = R.layout.text_file_preview_list_item; + private final List items = new ArrayList<>(); + + private void add(String line) { + items.add(line); + notifyDataSetChanged(); + } + + private void clear() { + items.clear(); + notifyDataSetChanged(); + } + + @Override + public int getCount() { + return items.size(); + } + + @Override + public String getItem(int position) { + if (position >= items.size()) + throw new IllegalArgumentException(); + return items.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder viewHolder; + if (convertView == null) { + convertView = + ((LayoutInflater) getActivity().getApplicationContext() + .getSystemService(Context.LAYOUT_INFLATER_SERVICE)) + .inflate( + LIST_ITEM_LAYOUT, null); + viewHolder = new ViewHolder(); + viewHolder.setLineView((TextView) convertView.findViewById(R.id.text_preview)); + convertView.setTag(viewHolder); + } else { + viewHolder = (ViewHolder) convertView.getTag(); + } + + viewHolder.getLineView().setText(items.get(position)); + + return convertView; + } + } + + private static class ViewHolder { + private TextView lineView; + + private ViewHolder() { + } + + public TextView getLineView() { + return lineView; + } + + public void setLineView(TextView lineView) { + this.lineView = lineView; } } @@ -300,6 +375,8 @@ public class PreviewTextFragment extends FileFragment { public void onResume() { super.onResume(); Log_OC.e(TAG, "onResume"); + + loadAndShowTextPreview(); } @Override From cbf2f96a83b3525bc7a8cf23a7dc24ebaaa391aa Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Sun, 19 Oct 2014 08:10:54 +0200 Subject: [PATCH 003/133] Fixed a mistake. --- src/com/owncloud/android/ui/preview/PreviewTextFragment.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java index 790cfde649..e66cc41d52 100644 --- a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java @@ -193,7 +193,7 @@ public class PreviewTextFragment extends FileFragment { private class TextLineAdapter extends BaseAdapter { private static final int LIST_ITEM_LAYOUT = R.layout.text_file_preview_list_item; - private final List items = new ArrayList<>(); + private final List items = new ArrayList(); private void add(String line) { items.add(line); @@ -351,7 +351,7 @@ public class PreviewTextFragment extends FileFragment { /** * Update the file of the fragment with file value * - * @param file + * @param file The new file to set */ public void updateFile(OCFile file) { setFile(file); From bc7bfeec91cc5fd36fc175350f052fcc4e4ba5d4 Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Sun, 19 Oct 2014 08:32:35 +0200 Subject: [PATCH 004/133] Removed any remains of list appearance --- res/layout/text_file_preview_list_item.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/res/layout/text_file_preview_list_item.xml b/res/layout/text_file_preview_list_item.xml index 269765ead2..0ff7570983 100644 --- a/res/layout/text_file_preview_list_item.xml +++ b/res/layout/text_file_preview_list_item.xml @@ -21,4 +21,5 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="@android:color/black" + android:maxLines="1" android:layout_gravity="center" /> \ No newline at end of file From 4e6abd4f0ad9758180c3918ebef2c9ff0afc266c Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Sat, 25 Oct 2014 20:43:11 +0200 Subject: [PATCH 005/133] Minor updates --- res/layout/text_file_preview.xml | 29 ++++++---------------- res/layout/text_file_preview_list_item.xml | 1 - 2 files changed, 8 insertions(+), 22 deletions(-) diff --git a/res/layout/text_file_preview.xml b/res/layout/text_file_preview.xml index d34045c197..1b526bcd9e 100644 --- a/res/layout/text_file_preview.xml +++ b/res/layout/text_file_preview.xml @@ -1,23 +1,10 @@ - - - - - - \ No newline at end of file + android:layout_height="wrap_content" + android:visibility="gone" + android:divider="@null" + android:dividerHeight="0dp" + android:focusable="false" + android:focusableInTouchMode="false" /> \ No newline at end of file diff --git a/res/layout/text_file_preview_list_item.xml b/res/layout/text_file_preview_list_item.xml index 0ff7570983..269765ead2 100644 --- a/res/layout/text_file_preview_list_item.xml +++ b/res/layout/text_file_preview_list_item.xml @@ -21,5 +21,4 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="@android:color/black" - android:maxLines="1" android:layout_gravity="center" /> \ No newline at end of file From 7644f0b5db335b3f285dee3362f676f21a97e196 Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Sat, 25 Oct 2014 20:43:23 +0200 Subject: [PATCH 006/133] Fixed line breaks --- .../ui/preview/PreviewTextFragment.java | 97 +++++++++++++++++-- 1 file changed, 88 insertions(+), 9 deletions(-) diff --git a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java index e66cc41d52..dcdb1d48b4 100644 --- a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java @@ -1,15 +1,22 @@ package com.owncloud.android.ui.preview; import android.accounts.Account; +import android.annotation.SuppressLint; import android.content.Context; +import android.graphics.Paint; +import android.graphics.Rect; import android.os.AsyncTask; import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentTransaction; +import android.util.DisplayMetrics; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ListView; -import android.widget.ProgressBar; import android.widget.TextView; import com.actionbarsherlock.view.Menu; @@ -21,6 +28,7 @@ import com.owncloud.android.files.FileMenuFilter; import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.ui.activity.FileDisplayActivity; import com.owncloud.android.ui.dialog.ConfirmationDialogFragment; +import com.owncloud.android.ui.dialog.LoadingDialog; import com.owncloud.android.ui.dialog.RemoveFileDialogFragment; import com.owncloud.android.ui.fragment.FileFragment; @@ -29,7 +37,9 @@ import java.io.FileInputStream; import java.io.IOException; import java.io.StringWriter; import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; +import java.util.Queue; import java.util.Scanner; public class PreviewTextFragment extends FileFragment { @@ -39,7 +49,6 @@ public class PreviewTextFragment extends FileFragment { private Account mAccount; private ListView mTextPreviewList; - private ProgressBar mProgressBar; /** * Creates an empty fragment for previews. @@ -69,7 +78,6 @@ public class PreviewTextFragment extends FileFragment { mTextPreviewList = (ListView) ret.findViewById(R.id.text_preview_list); mTextPreviewList.setAdapter(new TextLineAdapter()); - mProgressBar = (ProgressBar) ret.findViewById(R.id.progress_bar); return ret; } @@ -131,10 +139,26 @@ public class PreviewTextFragment extends FileFragment { * Reads the file to preview and shows its contents. Too critical to be anonymous. */ private class TextLoadAsyncTask extends AsyncTask { + private int TEXTVIEW_WIDTH; + private float TEXTVIEW_SIZE; + private final Queue accumulatedText = new LinkedList(); + private final String DIALOG_WAIT_TAG = "DIALOG_WAIT"; + private final Rect bounds = new Rect(); + private final Paint paint = new Paint(); + @SuppressLint("InflateParams") @Override protected void onPreExecute() { ((TextLineAdapter) mTextPreviewList.getAdapter()).clear(); + DisplayMetrics displaymetrics = new DisplayMetrics(); + getActivity().getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); + TEXTVIEW_WIDTH = displaymetrics.widthPixels; + TEXTVIEW_SIZE = ((TextView) ((LayoutInflater) getActivity().getApplicationContext() + .getSystemService(Context.LAYOUT_INFLATER_SERVICE)) + .inflate( + R.layout.text_file_preview_list_item, null)).getTextSize(); + showLoadingDialog(); + paint.setTextSize(TEXTVIEW_SIZE); } @Override @@ -172,22 +196,67 @@ public class PreviewTextFragment extends FileFragment { sc.close(); } } + //Add the remaining text, if any + while (!accumulatedText.isEmpty()) { + addLine(); + } return null; } @Override protected void onProgressUpdate(StringWriter... values) { super.onProgressUpdate(values); - //Using a ListView allows to show large text without the UI freeze that happens - //when calling TextView#setText() with a large CharSequence - ((TextLineAdapter) mTextPreviewList.getAdapter()).add(values[0].toString()); + final char[] newTextAsCharArray = values[0].toString().toCharArray(); + for (char c : newTextAsCharArray) { + accumulatedText.add(c); + } + addLine(); + } + + private synchronized void addLine() { + StringBuilder textForThisLine = new StringBuilder(); + do { + Character polled = accumulatedText.poll(); + textForThisLine.append(polled); + } + while (!isTooLarge(textForThisLine.toString()) && !accumulatedText.isEmpty()); + String line = textForThisLine.toString(); + ((TextLineAdapter) mTextPreviewList.getAdapter()).add(line.contentEquals("null") ? "" : line); + } + + private boolean isTooLarge(String text) { + paint.getTextBounds(text, 0, text.length(), bounds); + int lineWidth = (int) Math.ceil(bounds.width()); + return lineWidth / TEXTVIEW_WIDTH > 1; } @Override protected void onPostExecute(Void aVoid) { super.onPostExecute(aVoid); - mProgressBar.setVisibility(View.GONE); mTextPreviewList.setVisibility(View.VISIBLE); + dismissLoadingDialog(); + } + + /** + * Show loading dialog + */ + public void showLoadingDialog() { + // Construct dialog + LoadingDialog loading = new LoadingDialog(getResources().getString(R.string.wait_a_moment)); + FragmentManager fm = getActivity().getSupportFragmentManager(); + FragmentTransaction ft = fm.beginTransaction(); + loading.show(ft, DIALOG_WAIT_TAG); + } + + /** + * Dismiss loading dialog + */ + public void dismissLoadingDialog() { + Fragment frag = getActivity().getSupportFragmentManager().findFragmentByTag(DIALOG_WAIT_TAG); + if (frag != null) { + LoadingDialog loading = (LoadingDialog) frag; + loading.dismiss(); + } } } @@ -197,12 +266,22 @@ public class PreviewTextFragment extends FileFragment { private void add(String line) { items.add(line); - notifyDataSetChanged(); + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + notifyDataSetChanged(); + } + }); } private void clear() { items.clear(); - notifyDataSetChanged(); + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + notifyDataSetChanged(); + } + }); } @Override From 554cd3300f124bc24e276d1b9810f41b6b1b2373 Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Sat, 25 Oct 2014 20:43:45 +0200 Subject: [PATCH 007/133] Added Java 1.5 restriction to match the application standards --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 75231ed9f8..9807d7f270 100644 --- a/build.gradle +++ b/build.gradle @@ -63,8 +63,8 @@ android { compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + sourceCompatibility JavaVersion.VERSION_1_5 + targetCompatibility JavaVersion.VERSION_1_5 } productFlavors { From 2b9176a9cd312e58c429c26a59aa5dab456ef6d3 Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Sat, 25 Oct 2014 21:32:21 +0200 Subject: [PATCH 008/133] Added some margins. --- res/layout/text_file_preview.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/res/layout/text_file_preview.xml b/res/layout/text_file_preview.xml index 1b526bcd9e..f33b3d8046 100644 --- a/res/layout/text_file_preview.xml +++ b/res/layout/text_file_preview.xml @@ -7,4 +7,6 @@ android:divider="@null" android:dividerHeight="0dp" android:focusable="false" - android:focusableInTouchMode="false" /> \ No newline at end of file + android:focusableInTouchMode="false" + android:layout_marginStart="8dp" + android:layout_marginEnd="8dp" /> \ No newline at end of file From 96232b1cceb8d2fbf152dd978ad2f323e499dd5b Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Sat, 25 Oct 2014 21:32:38 +0200 Subject: [PATCH 009/133] Removed unnecessary actions --- .../ui/preview/PreviewTextFragment.java | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java index dcdb1d48b4..07445db55b 100644 --- a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java @@ -11,7 +11,6 @@ import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.util.DisplayMetrics; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -384,6 +383,30 @@ public class PreviewTextFragment extends FileFragment { item.setVisible(false); item.setEnabled(false); } + + item = menu.findItem(R.id.action_settings); + if (item != null) { + item.setVisible(false); + item.setEnabled(false); + } + + item = menu.findItem(R.id.action_logger); + if (item != null) { + item.setVisible(false); + item.setEnabled(false); + } + + item = menu.findItem(R.id.action_sync_file); + if (item != null) { + item.setVisible(false); + item.setEnabled(false); + } + + item = menu.findItem(R.id.action_sync_account); + if (item != null) { + item.setVisible(false); + item.setEnabled(false); + } } /** From 7414d163f00fa02e15dc15cd774266d105df8050 Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Sun, 26 Oct 2014 09:09:59 +0100 Subject: [PATCH 010/133] Solved 'Share with copied link' flow --- .../owncloud/android/ui/activity/FileDisplayActivity.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java index 63ca229bb9..60636df479 100644 --- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -1411,9 +1411,11 @@ public class FileDisplayActivity extends HookActivity implements if (details instanceof PreviewMediaFragment) { // Refresh OCFile of the fragment ((PreviewMediaFragment) details).updateFile(file); - } else { + } else if (details instanceof PreviewTextFragment) { + // Refresh OCFile of the fragment + ((PreviewTextFragment) details).updateFile(file); + } else showDetails(file); - } } invalidateOptionsMenu(); } From afefef9ae3194024dc82c590d632aed5c76e3fd5 Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Sun, 26 Oct 2014 10:45:06 +0100 Subject: [PATCH 011/133] Reverted the text preview system to a single TextView --- res/layout/text_file_preview.xml | 41 ++-- res/layout/text_file_preview_list_item.xml | 24 --- .../ui/preview/PreviewTextFragment.java | 179 +++--------------- 3 files changed, 55 insertions(+), 189 deletions(-) delete mode 100644 res/layout/text_file_preview_list_item.xml diff --git a/res/layout/text_file_preview.xml b/res/layout/text_file_preview.xml index f33b3d8046..aa6cf76c53 100644 --- a/res/layout/text_file_preview.xml +++ b/res/layout/text_file_preview.xml @@ -1,12 +1,31 @@ - - + \ No newline at end of file + android:fillViewport="true"> + + + \ No newline at end of file diff --git a/res/layout/text_file_preview_list_item.xml b/res/layout/text_file_preview_list_item.xml deleted file mode 100644 index 269765ead2..0000000000 --- a/res/layout/text_file_preview_list_item.xml +++ /dev/null @@ -1,24 +0,0 @@ - - \ No newline at end of file diff --git a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java index 07445db55b..1be63998a5 100644 --- a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java @@ -1,21 +1,15 @@ package com.owncloud.android.ui.preview; import android.accounts.Account; -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Paint; -import android.graphics.Rect; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; -import android.util.DisplayMetrics; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.BaseAdapter; -import android.widget.ListView; +import android.widget.ScrollView; import android.widget.TextView; import com.actionbarsherlock.view.Menu; @@ -35,10 +29,6 @@ import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.IOException; import java.io.StringWriter; -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; -import java.util.Queue; import java.util.Scanner; public class PreviewTextFragment extends FileFragment { @@ -47,7 +37,7 @@ public class PreviewTextFragment extends FileFragment { private static final String TAG = PreviewTextFragment.class.getSimpleName(); private Account mAccount; - private ListView mTextPreviewList; + private TextView mTextPreview; /** * Creates an empty fragment for previews. @@ -75,8 +65,7 @@ public class PreviewTextFragment extends FileFragment { View ret = inflater.inflate(R.layout.text_file_preview, container, false); - mTextPreviewList = (ListView) ret.findViewById(R.id.text_preview_list); - mTextPreviewList.setAdapter(new TextLineAdapter()); + mTextPreview = (TextView) ret.findViewById(R.id.text_preview); return ret; } @@ -131,54 +120,40 @@ public class PreviewTextFragment extends FileFragment { } private void loadAndShowTextPreview() { - new TextLoadAsyncTask().execute(getFile().getStoragePath()); + new TextLoadAsyncTask().execute(getFile().getStoragePath(), mTextPreview); } /** * Reads the file to preview and shows its contents. Too critical to be anonymous. */ - private class TextLoadAsyncTask extends AsyncTask { - private int TEXTVIEW_WIDTH; - private float TEXTVIEW_SIZE; - private final Queue accumulatedText = new LinkedList(); + private class TextLoadAsyncTask extends AsyncTask { private final String DIALOG_WAIT_TAG = "DIALOG_WAIT"; - private final Rect bounds = new Rect(); - private final Paint paint = new Paint(); + private TextView mTextView; - @SuppressLint("InflateParams") @Override protected void onPreExecute() { - ((TextLineAdapter) mTextPreviewList.getAdapter()).clear(); - DisplayMetrics displaymetrics = new DisplayMetrics(); - getActivity().getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); - TEXTVIEW_WIDTH = displaymetrics.widthPixels; - TEXTVIEW_SIZE = ((TextView) ((LayoutInflater) getActivity().getApplicationContext() - .getSystemService(Context.LAYOUT_INFLATER_SERVICE)) - .inflate( - R.layout.text_file_preview_list_item, null)).getTextSize(); showLoadingDialog(); - paint.setTextSize(TEXTVIEW_SIZE); } @Override - protected Void doInBackground(java.lang.Object... params) { - if (params.length != 1) - throw new IllegalArgumentException("The parameter to " + TextLoadAsyncTask.class.getName() + " must be the file location only"); + protected StringWriter doInBackground(java.lang.Object... params) { + if (params.length != 2) + throw new IllegalArgumentException("The parameters to " + TextLoadAsyncTask.class.getName() + " must be (1) the file location and (2) the text view to update"); final String location = (String) params[0]; + mTextView = (TextView) params[1]; FileInputStream inputStream = null; Scanner sc = null; + StringWriter source = new StringWriter(); + BufferedWriter bufferedWriter = new BufferedWriter(source); try { inputStream = new FileInputStream(location); sc = new Scanner(inputStream); while (sc.hasNextLine()) { - StringWriter target = new StringWriter(); - BufferedWriter bufferedWriter = new BufferedWriter(target); - if (sc.hasNextLine()) - bufferedWriter.write(sc.nextLine()); - bufferedWriter.close(); - publishProgress(target); + bufferedWriter.append(sc.nextLine()); + if (sc.hasNextLine()) bufferedWriter.append("\n"); } + bufferedWriter.close(); IOException exc = sc.ioException(); if (exc != null) throw exc; } catch (IOException e) { @@ -195,44 +170,13 @@ public class PreviewTextFragment extends FileFragment { sc.close(); } } - //Add the remaining text, if any - while (!accumulatedText.isEmpty()) { - addLine(); - } - return null; + return source; } @Override - protected void onProgressUpdate(StringWriter... values) { - super.onProgressUpdate(values); - final char[] newTextAsCharArray = values[0].toString().toCharArray(); - for (char c : newTextAsCharArray) { - accumulatedText.add(c); - } - addLine(); - } - - private synchronized void addLine() { - StringBuilder textForThisLine = new StringBuilder(); - do { - Character polled = accumulatedText.poll(); - textForThisLine.append(polled); - } - while (!isTooLarge(textForThisLine.toString()) && !accumulatedText.isEmpty()); - String line = textForThisLine.toString(); - ((TextLineAdapter) mTextPreviewList.getAdapter()).add(line.contentEquals("null") ? "" : line); - } - - private boolean isTooLarge(String text) { - paint.getTextBounds(text, 0, text.length(), bounds); - int lineWidth = (int) Math.ceil(bounds.width()); - return lineWidth / TEXTVIEW_WIDTH > 1; - } - - @Override - protected void onPostExecute(Void aVoid) { - super.onPostExecute(aVoid); - mTextPreviewList.setVisibility(View.VISIBLE); + protected void onPostExecute(final StringWriter stringWriter) { + mTextView.setText(new String(stringWriter.getBuffer())); + mTextView.setVisibility(View.VISIBLE); dismissLoadingDialog(); } @@ -259,84 +203,6 @@ public class PreviewTextFragment extends FileFragment { } } - private class TextLineAdapter extends BaseAdapter { - private static final int LIST_ITEM_LAYOUT = R.layout.text_file_preview_list_item; - private final List items = new ArrayList(); - - private void add(String line) { - items.add(line); - getActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - notifyDataSetChanged(); - } - }); - } - - private void clear() { - items.clear(); - getActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - notifyDataSetChanged(); - } - }); - } - - @Override - public int getCount() { - return items.size(); - } - - @Override - public String getItem(int position) { - if (position >= items.size()) - throw new IllegalArgumentException(); - return items.get(position); - } - - @Override - public long getItemId(int position) { - return position; - } - - @Override - public View getView(int position, View convertView, ViewGroup parent) { - ViewHolder viewHolder; - if (convertView == null) { - convertView = - ((LayoutInflater) getActivity().getApplicationContext() - .getSystemService(Context.LAYOUT_INFLATER_SERVICE)) - .inflate( - LIST_ITEM_LAYOUT, null); - viewHolder = new ViewHolder(); - viewHolder.setLineView((TextView) convertView.findViewById(R.id.text_preview)); - convertView.setTag(viewHolder); - } else { - viewHolder = (ViewHolder) convertView.getTag(); - } - - viewHolder.getLineView().setText(items.get(position)); - - return convertView; - } - } - - private static class ViewHolder { - private TextView lineView; - - private ViewHolder() { - } - - public TextView getLineView() { - return lineView; - } - - public void setLineView(TextView lineView) { - this.lineView = lineView; - } - } - /** * {@inheritDoc} */ @@ -515,6 +381,11 @@ public class PreviewTextFragment extends FileFragment { * Finishes the preview */ private void finish() { - getSherlockActivity().onBackPressed(); + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + getSherlockActivity().onBackPressed(); + } + }); } } From 46ff60a9e760a760b478609bac68d45f8728488f Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Sun, 26 Oct 2014 15:38:57 +0100 Subject: [PATCH 012/133] Fixed a bug that would cause the details view to be shown upon turning off and on the screen --- .../owncloud/android/ui/activity/FileDisplayActivity.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java index 60636df479..1bf8365a70 100644 --- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -303,6 +303,8 @@ public class FileDisplayActivity extends HookActivity implements } else { cleanSecondFragment(); + if (file.isDown() && PreviewTextFragment.canBePreviewed(file)) + startTextPreview(file); } } else { @@ -326,9 +328,9 @@ public class FileDisplayActivity extends HookActivity implements boolean autoplay = getIntent().getBooleanExtra(PreviewVideoActivity.EXTRA_AUTOPLAY, true); secondFragment = new PreviewMediaFragment(file, getAccount(), startPlaybackPosition, autoplay); - } else { - secondFragment = new FileDetailFragment(file, getAccount()); - } + } else if (file.isDown() && PreviewTextFragment.canBePreviewed(file)) { + secondFragment = null; + } else secondFragment = new FileDetailFragment(file, getAccount()); } return secondFragment; } From 7cc88a22d183a5bc82ddbd30945789d58e0a753b Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Fri, 17 Oct 2014 16:29:38 +0200 Subject: [PATCH 013/133] Added text file preview --- res/layout/file_preview.xml | 66 +- res/layout/text_file_preview.xml | 29 + .../owncloud/android/datamodel/OCFile.java | 11 +- .../ui/activity/FileDisplayActivity.java | 751 +++++++++--------- .../ui/fragment/OCFileListFragment.java | 6 +- .../ui/preview/PreviewTextFragment.java | 341 ++++++++ 6 files changed, 809 insertions(+), 395 deletions(-) create mode 100644 res/layout/text_file_preview.xml create mode 100644 src/com/owncloud/android/ui/preview/PreviewTextFragment.java diff --git a/res/layout/file_preview.xml b/res/layout/file_preview.xml index 483a3691b1..0da5363461 100644 --- a/res/layout/file_preview.xml +++ b/res/layout/file_preview.xml @@ -1,5 +1,4 @@ - - + \ No newline at end of file diff --git a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java index d0a678c8af..790cfde649 100644 --- a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java @@ -1,13 +1,15 @@ package com.owncloud.android.ui.preview; import android.accounts.Account; +import android.content.Context; import android.os.AsyncTask; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ListView; import android.widget.ProgressBar; -import android.widget.ScrollView; import android.widget.TextView; import com.actionbarsherlock.view.Menu; @@ -26,6 +28,8 @@ import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.IOException; import java.io.StringWriter; +import java.util.ArrayList; +import java.util.List; import java.util.Scanner; public class PreviewTextFragment extends FileFragment { @@ -34,9 +38,8 @@ public class PreviewTextFragment extends FileFragment { private static final String TAG = PreviewTextFragment.class.getSimpleName(); private Account mAccount; - private TextView mTextPreview; + private ListView mTextPreviewList; private ProgressBar mProgressBar; - private ScrollView mScrollView; /** * Creates an empty fragment for previews. @@ -64,8 +67,8 @@ public class PreviewTextFragment extends FileFragment { View ret = inflater.inflate(R.layout.text_file_preview, container, false); - mScrollView = (ScrollView) ret.findViewById(R.id.text_scrollview); - mTextPreview = (TextView) ret.findViewById(R.id.text_preview); + mTextPreviewList = (ListView) ret.findViewById(R.id.text_preview_list); + mTextPreviewList.setAdapter(new TextLineAdapter()); mProgressBar = (ProgressBar) ret.findViewById(R.id.progress_bar); return ret; @@ -118,44 +121,41 @@ public class PreviewTextFragment extends FileFragment { public void onStart() { super.onStart(); Log_OC.e(TAG, "onStart"); - - loadAndShowTextPreview(getFile().getStoragePath(), mTextPreview); } - private void loadAndShowTextPreview(String location, TextView textView) { - new TextLoadAsyncTask().execute(location, textView); + private void loadAndShowTextPreview() { + new TextLoadAsyncTask().execute(getFile().getStoragePath()); } /** * Reads the file to preview and shows its contents. Too critical to be anonymous. */ - private class TextLoadAsyncTask extends AsyncTask { - TextView mTextView; + private class TextLoadAsyncTask extends AsyncTask { @Override protected void onPreExecute() { - mProgressBar.setVisibility(View.VISIBLE); + ((TextLineAdapter) mTextPreviewList.getAdapter()).clear(); } @Override - protected StringWriter doInBackground(java.lang.Object... params) { - if (params.length != 2) - throw new IllegalArgumentException("The parameters to " + TextLoadAsyncTask.class.getName() + " must be (1) the file location and (2) the text view to update"); + protected Void doInBackground(java.lang.Object... params) { + if (params.length != 1) + throw new IllegalArgumentException("The parameter to " + TextLoadAsyncTask.class.getName() + " must be the file location only"); final String location = (String) params[0]; - mTextView = (TextView) params[1]; FileInputStream inputStream = null; Scanner sc = null; - StringWriter source = new StringWriter(); - BufferedWriter bufferedWriter = new BufferedWriter(source); try { inputStream = new FileInputStream(location); sc = new Scanner(inputStream); while (sc.hasNextLine()) { - bufferedWriter.append(sc.nextLine()); - if (sc.hasNextLine()) bufferedWriter.append("\n"); + StringWriter target = new StringWriter(); + BufferedWriter bufferedWriter = new BufferedWriter(target); + if (sc.hasNextLine()) + bufferedWriter.write(sc.nextLine()); + bufferedWriter.close(); + publishProgress(target); } - bufferedWriter.close(); IOException exc = sc.ioException(); if (exc != null) throw exc; } catch (IOException e) { @@ -172,15 +172,90 @@ public class PreviewTextFragment extends FileFragment { sc.close(); } } - return source; + return null; } @Override - protected void onPostExecute(final StringWriter stringWriter) { - super.onPostExecute(stringWriter); + protected void onProgressUpdate(StringWriter... values) { + super.onProgressUpdate(values); + //Using a ListView allows to show large text without the UI freeze that happens + //when calling TextView#setText() with a large CharSequence + ((TextLineAdapter) mTextPreviewList.getAdapter()).add(values[0].toString()); + } + + @Override + protected void onPostExecute(Void aVoid) { + super.onPostExecute(aVoid); mProgressBar.setVisibility(View.GONE); - mScrollView.setVisibility(View.VISIBLE); - mTextView.setText(new String(stringWriter.getBuffer())); + mTextPreviewList.setVisibility(View.VISIBLE); + } + } + + private class TextLineAdapter extends BaseAdapter { + private static final int LIST_ITEM_LAYOUT = R.layout.text_file_preview_list_item; + private final List items = new ArrayList<>(); + + private void add(String line) { + items.add(line); + notifyDataSetChanged(); + } + + private void clear() { + items.clear(); + notifyDataSetChanged(); + } + + @Override + public int getCount() { + return items.size(); + } + + @Override + public String getItem(int position) { + if (position >= items.size()) + throw new IllegalArgumentException(); + return items.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder viewHolder; + if (convertView == null) { + convertView = + ((LayoutInflater) getActivity().getApplicationContext() + .getSystemService(Context.LAYOUT_INFLATER_SERVICE)) + .inflate( + LIST_ITEM_LAYOUT, null); + viewHolder = new ViewHolder(); + viewHolder.setLineView((TextView) convertView.findViewById(R.id.text_preview)); + convertView.setTag(viewHolder); + } else { + viewHolder = (ViewHolder) convertView.getTag(); + } + + viewHolder.getLineView().setText(items.get(position)); + + return convertView; + } + } + + private static class ViewHolder { + private TextView lineView; + + private ViewHolder() { + } + + public TextView getLineView() { + return lineView; + } + + public void setLineView(TextView lineView) { + this.lineView = lineView; } } @@ -300,6 +375,8 @@ public class PreviewTextFragment extends FileFragment { public void onResume() { super.onResume(); Log_OC.e(TAG, "onResume"); + + loadAndShowTextPreview(); } @Override From fac333290088b5650e01a9600aa81ce4309b8c9c Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Sun, 19 Oct 2014 08:10:54 +0200 Subject: [PATCH 015/133] Fixed a mistake. --- src/com/owncloud/android/ui/preview/PreviewTextFragment.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java index 790cfde649..e66cc41d52 100644 --- a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java @@ -193,7 +193,7 @@ public class PreviewTextFragment extends FileFragment { private class TextLineAdapter extends BaseAdapter { private static final int LIST_ITEM_LAYOUT = R.layout.text_file_preview_list_item; - private final List items = new ArrayList<>(); + private final List items = new ArrayList(); private void add(String line) { items.add(line); @@ -351,7 +351,7 @@ public class PreviewTextFragment extends FileFragment { /** * Update the file of the fragment with file value * - * @param file + * @param file The new file to set */ public void updateFile(OCFile file) { setFile(file); From 65e82bff36af6fbfb640b4f77f8c1a9c2a1b5097 Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Sun, 19 Oct 2014 08:32:35 +0200 Subject: [PATCH 016/133] Removed any remains of list appearance --- res/layout/text_file_preview_list_item.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/res/layout/text_file_preview_list_item.xml b/res/layout/text_file_preview_list_item.xml index 269765ead2..0ff7570983 100644 --- a/res/layout/text_file_preview_list_item.xml +++ b/res/layout/text_file_preview_list_item.xml @@ -21,4 +21,5 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="@android:color/black" + android:maxLines="1" android:layout_gravity="center" /> \ No newline at end of file From 3877ddf85aa4edf190b76f7ac6ba07e34cd659c1 Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Sat, 25 Oct 2014 20:43:11 +0200 Subject: [PATCH 017/133] Minor updates --- res/layout/text_file_preview.xml | 29 ++++++---------------- res/layout/text_file_preview_list_item.xml | 1 - 2 files changed, 8 insertions(+), 22 deletions(-) diff --git a/res/layout/text_file_preview.xml b/res/layout/text_file_preview.xml index d34045c197..1b526bcd9e 100644 --- a/res/layout/text_file_preview.xml +++ b/res/layout/text_file_preview.xml @@ -1,23 +1,10 @@ - - - - - - \ No newline at end of file + android:layout_height="wrap_content" + android:visibility="gone" + android:divider="@null" + android:dividerHeight="0dp" + android:focusable="false" + android:focusableInTouchMode="false" /> \ No newline at end of file diff --git a/res/layout/text_file_preview_list_item.xml b/res/layout/text_file_preview_list_item.xml index 0ff7570983..269765ead2 100644 --- a/res/layout/text_file_preview_list_item.xml +++ b/res/layout/text_file_preview_list_item.xml @@ -21,5 +21,4 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="@android:color/black" - android:maxLines="1" android:layout_gravity="center" /> \ No newline at end of file From 1629981256c61b862caa63bf7a1e9c8e2fe0b59d Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Sat, 25 Oct 2014 20:43:23 +0200 Subject: [PATCH 018/133] Fixed line breaks --- .../ui/preview/PreviewTextFragment.java | 97 +++++++++++++++++-- 1 file changed, 88 insertions(+), 9 deletions(-) diff --git a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java index e66cc41d52..dcdb1d48b4 100644 --- a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java @@ -1,15 +1,22 @@ package com.owncloud.android.ui.preview; import android.accounts.Account; +import android.annotation.SuppressLint; import android.content.Context; +import android.graphics.Paint; +import android.graphics.Rect; import android.os.AsyncTask; import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentTransaction; +import android.util.DisplayMetrics; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ListView; -import android.widget.ProgressBar; import android.widget.TextView; import com.actionbarsherlock.view.Menu; @@ -21,6 +28,7 @@ import com.owncloud.android.files.FileMenuFilter; import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.ui.activity.FileDisplayActivity; import com.owncloud.android.ui.dialog.ConfirmationDialogFragment; +import com.owncloud.android.ui.dialog.LoadingDialog; import com.owncloud.android.ui.dialog.RemoveFileDialogFragment; import com.owncloud.android.ui.fragment.FileFragment; @@ -29,7 +37,9 @@ import java.io.FileInputStream; import java.io.IOException; import java.io.StringWriter; import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; +import java.util.Queue; import java.util.Scanner; public class PreviewTextFragment extends FileFragment { @@ -39,7 +49,6 @@ public class PreviewTextFragment extends FileFragment { private Account mAccount; private ListView mTextPreviewList; - private ProgressBar mProgressBar; /** * Creates an empty fragment for previews. @@ -69,7 +78,6 @@ public class PreviewTextFragment extends FileFragment { mTextPreviewList = (ListView) ret.findViewById(R.id.text_preview_list); mTextPreviewList.setAdapter(new TextLineAdapter()); - mProgressBar = (ProgressBar) ret.findViewById(R.id.progress_bar); return ret; } @@ -131,10 +139,26 @@ public class PreviewTextFragment extends FileFragment { * Reads the file to preview and shows its contents. Too critical to be anonymous. */ private class TextLoadAsyncTask extends AsyncTask { + private int TEXTVIEW_WIDTH; + private float TEXTVIEW_SIZE; + private final Queue accumulatedText = new LinkedList(); + private final String DIALOG_WAIT_TAG = "DIALOG_WAIT"; + private final Rect bounds = new Rect(); + private final Paint paint = new Paint(); + @SuppressLint("InflateParams") @Override protected void onPreExecute() { ((TextLineAdapter) mTextPreviewList.getAdapter()).clear(); + DisplayMetrics displaymetrics = new DisplayMetrics(); + getActivity().getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); + TEXTVIEW_WIDTH = displaymetrics.widthPixels; + TEXTVIEW_SIZE = ((TextView) ((LayoutInflater) getActivity().getApplicationContext() + .getSystemService(Context.LAYOUT_INFLATER_SERVICE)) + .inflate( + R.layout.text_file_preview_list_item, null)).getTextSize(); + showLoadingDialog(); + paint.setTextSize(TEXTVIEW_SIZE); } @Override @@ -172,22 +196,67 @@ public class PreviewTextFragment extends FileFragment { sc.close(); } } + //Add the remaining text, if any + while (!accumulatedText.isEmpty()) { + addLine(); + } return null; } @Override protected void onProgressUpdate(StringWriter... values) { super.onProgressUpdate(values); - //Using a ListView allows to show large text without the UI freeze that happens - //when calling TextView#setText() with a large CharSequence - ((TextLineAdapter) mTextPreviewList.getAdapter()).add(values[0].toString()); + final char[] newTextAsCharArray = values[0].toString().toCharArray(); + for (char c : newTextAsCharArray) { + accumulatedText.add(c); + } + addLine(); + } + + private synchronized void addLine() { + StringBuilder textForThisLine = new StringBuilder(); + do { + Character polled = accumulatedText.poll(); + textForThisLine.append(polled); + } + while (!isTooLarge(textForThisLine.toString()) && !accumulatedText.isEmpty()); + String line = textForThisLine.toString(); + ((TextLineAdapter) mTextPreviewList.getAdapter()).add(line.contentEquals("null") ? "" : line); + } + + private boolean isTooLarge(String text) { + paint.getTextBounds(text, 0, text.length(), bounds); + int lineWidth = (int) Math.ceil(bounds.width()); + return lineWidth / TEXTVIEW_WIDTH > 1; } @Override protected void onPostExecute(Void aVoid) { super.onPostExecute(aVoid); - mProgressBar.setVisibility(View.GONE); mTextPreviewList.setVisibility(View.VISIBLE); + dismissLoadingDialog(); + } + + /** + * Show loading dialog + */ + public void showLoadingDialog() { + // Construct dialog + LoadingDialog loading = new LoadingDialog(getResources().getString(R.string.wait_a_moment)); + FragmentManager fm = getActivity().getSupportFragmentManager(); + FragmentTransaction ft = fm.beginTransaction(); + loading.show(ft, DIALOG_WAIT_TAG); + } + + /** + * Dismiss loading dialog + */ + public void dismissLoadingDialog() { + Fragment frag = getActivity().getSupportFragmentManager().findFragmentByTag(DIALOG_WAIT_TAG); + if (frag != null) { + LoadingDialog loading = (LoadingDialog) frag; + loading.dismiss(); + } } } @@ -197,12 +266,22 @@ public class PreviewTextFragment extends FileFragment { private void add(String line) { items.add(line); - notifyDataSetChanged(); + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + notifyDataSetChanged(); + } + }); } private void clear() { items.clear(); - notifyDataSetChanged(); + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + notifyDataSetChanged(); + } + }); } @Override From c9105c61d91f5b9a04fd432d93d84943707b9421 Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Sat, 25 Oct 2014 20:43:45 +0200 Subject: [PATCH 019/133] Added Java 1.5 restriction to match the application standards --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 75231ed9f8..9807d7f270 100644 --- a/build.gradle +++ b/build.gradle @@ -63,8 +63,8 @@ android { compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + sourceCompatibility JavaVersion.VERSION_1_5 + targetCompatibility JavaVersion.VERSION_1_5 } productFlavors { From 0c384167c1fae57b23032269c4e61a9856616c4b Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Sat, 25 Oct 2014 21:32:21 +0200 Subject: [PATCH 020/133] Added some margins. --- res/layout/text_file_preview.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/res/layout/text_file_preview.xml b/res/layout/text_file_preview.xml index 1b526bcd9e..f33b3d8046 100644 --- a/res/layout/text_file_preview.xml +++ b/res/layout/text_file_preview.xml @@ -7,4 +7,6 @@ android:divider="@null" android:dividerHeight="0dp" android:focusable="false" - android:focusableInTouchMode="false" /> \ No newline at end of file + android:focusableInTouchMode="false" + android:layout_marginStart="8dp" + android:layout_marginEnd="8dp" /> \ No newline at end of file From 5aa4d0e6c88940a88069494e5a4d1678ebaac146 Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Sat, 25 Oct 2014 21:32:38 +0200 Subject: [PATCH 021/133] Removed unnecessary actions --- .../ui/preview/PreviewTextFragment.java | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java index dcdb1d48b4..07445db55b 100644 --- a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java @@ -11,7 +11,6 @@ import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.util.DisplayMetrics; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -384,6 +383,30 @@ public class PreviewTextFragment extends FileFragment { item.setVisible(false); item.setEnabled(false); } + + item = menu.findItem(R.id.action_settings); + if (item != null) { + item.setVisible(false); + item.setEnabled(false); + } + + item = menu.findItem(R.id.action_logger); + if (item != null) { + item.setVisible(false); + item.setEnabled(false); + } + + item = menu.findItem(R.id.action_sync_file); + if (item != null) { + item.setVisible(false); + item.setEnabled(false); + } + + item = menu.findItem(R.id.action_sync_account); + if (item != null) { + item.setVisible(false); + item.setEnabled(false); + } } /** From 9bdb2cd17a518059692c2cb2a0408303393ab91f Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Sun, 26 Oct 2014 09:09:59 +0100 Subject: [PATCH 022/133] Solved 'Share with copied link' flow --- .../owncloud/android/ui/activity/FileDisplayActivity.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java index 820ed3e698..58b39967b1 100644 --- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -1446,9 +1446,11 @@ public class FileDisplayActivity extends HookActivity implements if (details instanceof PreviewMediaFragment) { // Refresh OCFile of the fragment ((PreviewMediaFragment) details).updateFile(file); - } else { + } else if (details instanceof PreviewTextFragment) { + // Refresh OCFile of the fragment + ((PreviewTextFragment) details).updateFile(file); + } else showDetails(file); - } } invalidateOptionsMenu(); } From 093bf4fb5caf9045209ed5cf6c6fb70e4eb67da2 Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Sun, 26 Oct 2014 10:45:06 +0100 Subject: [PATCH 023/133] Reverted the text preview system to a single TextView --- res/layout/text_file_preview.xml | 41 ++-- res/layout/text_file_preview_list_item.xml | 24 --- .../ui/preview/PreviewTextFragment.java | 179 +++--------------- 3 files changed, 55 insertions(+), 189 deletions(-) delete mode 100644 res/layout/text_file_preview_list_item.xml diff --git a/res/layout/text_file_preview.xml b/res/layout/text_file_preview.xml index f33b3d8046..aa6cf76c53 100644 --- a/res/layout/text_file_preview.xml +++ b/res/layout/text_file_preview.xml @@ -1,12 +1,31 @@ - - + \ No newline at end of file + android:fillViewport="true"> + + + \ No newline at end of file diff --git a/res/layout/text_file_preview_list_item.xml b/res/layout/text_file_preview_list_item.xml deleted file mode 100644 index 269765ead2..0000000000 --- a/res/layout/text_file_preview_list_item.xml +++ /dev/null @@ -1,24 +0,0 @@ - - \ No newline at end of file diff --git a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java index 07445db55b..1be63998a5 100644 --- a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java @@ -1,21 +1,15 @@ package com.owncloud.android.ui.preview; import android.accounts.Account; -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Paint; -import android.graphics.Rect; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; -import android.util.DisplayMetrics; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.BaseAdapter; -import android.widget.ListView; +import android.widget.ScrollView; import android.widget.TextView; import com.actionbarsherlock.view.Menu; @@ -35,10 +29,6 @@ import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.IOException; import java.io.StringWriter; -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; -import java.util.Queue; import java.util.Scanner; public class PreviewTextFragment extends FileFragment { @@ -47,7 +37,7 @@ public class PreviewTextFragment extends FileFragment { private static final String TAG = PreviewTextFragment.class.getSimpleName(); private Account mAccount; - private ListView mTextPreviewList; + private TextView mTextPreview; /** * Creates an empty fragment for previews. @@ -75,8 +65,7 @@ public class PreviewTextFragment extends FileFragment { View ret = inflater.inflate(R.layout.text_file_preview, container, false); - mTextPreviewList = (ListView) ret.findViewById(R.id.text_preview_list); - mTextPreviewList.setAdapter(new TextLineAdapter()); + mTextPreview = (TextView) ret.findViewById(R.id.text_preview); return ret; } @@ -131,54 +120,40 @@ public class PreviewTextFragment extends FileFragment { } private void loadAndShowTextPreview() { - new TextLoadAsyncTask().execute(getFile().getStoragePath()); + new TextLoadAsyncTask().execute(getFile().getStoragePath(), mTextPreview); } /** * Reads the file to preview and shows its contents. Too critical to be anonymous. */ - private class TextLoadAsyncTask extends AsyncTask { - private int TEXTVIEW_WIDTH; - private float TEXTVIEW_SIZE; - private final Queue accumulatedText = new LinkedList(); + private class TextLoadAsyncTask extends AsyncTask { private final String DIALOG_WAIT_TAG = "DIALOG_WAIT"; - private final Rect bounds = new Rect(); - private final Paint paint = new Paint(); + private TextView mTextView; - @SuppressLint("InflateParams") @Override protected void onPreExecute() { - ((TextLineAdapter) mTextPreviewList.getAdapter()).clear(); - DisplayMetrics displaymetrics = new DisplayMetrics(); - getActivity().getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); - TEXTVIEW_WIDTH = displaymetrics.widthPixels; - TEXTVIEW_SIZE = ((TextView) ((LayoutInflater) getActivity().getApplicationContext() - .getSystemService(Context.LAYOUT_INFLATER_SERVICE)) - .inflate( - R.layout.text_file_preview_list_item, null)).getTextSize(); showLoadingDialog(); - paint.setTextSize(TEXTVIEW_SIZE); } @Override - protected Void doInBackground(java.lang.Object... params) { - if (params.length != 1) - throw new IllegalArgumentException("The parameter to " + TextLoadAsyncTask.class.getName() + " must be the file location only"); + protected StringWriter doInBackground(java.lang.Object... params) { + if (params.length != 2) + throw new IllegalArgumentException("The parameters to " + TextLoadAsyncTask.class.getName() + " must be (1) the file location and (2) the text view to update"); final String location = (String) params[0]; + mTextView = (TextView) params[1]; FileInputStream inputStream = null; Scanner sc = null; + StringWriter source = new StringWriter(); + BufferedWriter bufferedWriter = new BufferedWriter(source); try { inputStream = new FileInputStream(location); sc = new Scanner(inputStream); while (sc.hasNextLine()) { - StringWriter target = new StringWriter(); - BufferedWriter bufferedWriter = new BufferedWriter(target); - if (sc.hasNextLine()) - bufferedWriter.write(sc.nextLine()); - bufferedWriter.close(); - publishProgress(target); + bufferedWriter.append(sc.nextLine()); + if (sc.hasNextLine()) bufferedWriter.append("\n"); } + bufferedWriter.close(); IOException exc = sc.ioException(); if (exc != null) throw exc; } catch (IOException e) { @@ -195,44 +170,13 @@ public class PreviewTextFragment extends FileFragment { sc.close(); } } - //Add the remaining text, if any - while (!accumulatedText.isEmpty()) { - addLine(); - } - return null; + return source; } @Override - protected void onProgressUpdate(StringWriter... values) { - super.onProgressUpdate(values); - final char[] newTextAsCharArray = values[0].toString().toCharArray(); - for (char c : newTextAsCharArray) { - accumulatedText.add(c); - } - addLine(); - } - - private synchronized void addLine() { - StringBuilder textForThisLine = new StringBuilder(); - do { - Character polled = accumulatedText.poll(); - textForThisLine.append(polled); - } - while (!isTooLarge(textForThisLine.toString()) && !accumulatedText.isEmpty()); - String line = textForThisLine.toString(); - ((TextLineAdapter) mTextPreviewList.getAdapter()).add(line.contentEquals("null") ? "" : line); - } - - private boolean isTooLarge(String text) { - paint.getTextBounds(text, 0, text.length(), bounds); - int lineWidth = (int) Math.ceil(bounds.width()); - return lineWidth / TEXTVIEW_WIDTH > 1; - } - - @Override - protected void onPostExecute(Void aVoid) { - super.onPostExecute(aVoid); - mTextPreviewList.setVisibility(View.VISIBLE); + protected void onPostExecute(final StringWriter stringWriter) { + mTextView.setText(new String(stringWriter.getBuffer())); + mTextView.setVisibility(View.VISIBLE); dismissLoadingDialog(); } @@ -259,84 +203,6 @@ public class PreviewTextFragment extends FileFragment { } } - private class TextLineAdapter extends BaseAdapter { - private static final int LIST_ITEM_LAYOUT = R.layout.text_file_preview_list_item; - private final List items = new ArrayList(); - - private void add(String line) { - items.add(line); - getActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - notifyDataSetChanged(); - } - }); - } - - private void clear() { - items.clear(); - getActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - notifyDataSetChanged(); - } - }); - } - - @Override - public int getCount() { - return items.size(); - } - - @Override - public String getItem(int position) { - if (position >= items.size()) - throw new IllegalArgumentException(); - return items.get(position); - } - - @Override - public long getItemId(int position) { - return position; - } - - @Override - public View getView(int position, View convertView, ViewGroup parent) { - ViewHolder viewHolder; - if (convertView == null) { - convertView = - ((LayoutInflater) getActivity().getApplicationContext() - .getSystemService(Context.LAYOUT_INFLATER_SERVICE)) - .inflate( - LIST_ITEM_LAYOUT, null); - viewHolder = new ViewHolder(); - viewHolder.setLineView((TextView) convertView.findViewById(R.id.text_preview)); - convertView.setTag(viewHolder); - } else { - viewHolder = (ViewHolder) convertView.getTag(); - } - - viewHolder.getLineView().setText(items.get(position)); - - return convertView; - } - } - - private static class ViewHolder { - private TextView lineView; - - private ViewHolder() { - } - - public TextView getLineView() { - return lineView; - } - - public void setLineView(TextView lineView) { - this.lineView = lineView; - } - } - /** * {@inheritDoc} */ @@ -515,6 +381,11 @@ public class PreviewTextFragment extends FileFragment { * Finishes the preview */ private void finish() { - getSherlockActivity().onBackPressed(); + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + getSherlockActivity().onBackPressed(); + } + }); } } From b1ef5d94d4c430be3bf7839eff0e7b37a03ed2b7 Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Sun, 26 Oct 2014 15:38:57 +0100 Subject: [PATCH 024/133] Fixed a bug that would cause the details view to be shown upon turning off and on the screen --- .../owncloud/android/ui/activity/FileDisplayActivity.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java index 58b39967b1..627d40cf2f 100644 --- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -304,6 +304,8 @@ public class FileDisplayActivity extends HookActivity implements } else { cleanSecondFragment(); + if (file.isDown() && PreviewTextFragment.canBePreviewed(file)) + startTextPreview(file); } } else { @@ -327,9 +329,9 @@ public class FileDisplayActivity extends HookActivity implements boolean autoplay = getIntent().getBooleanExtra(PreviewVideoActivity.EXTRA_AUTOPLAY, true); secondFragment = new PreviewMediaFragment(file, getAccount(), startPlaybackPosition, autoplay); - } else { - secondFragment = new FileDetailFragment(file, getAccount()); - } + } else if (file.isDown() && PreviewTextFragment.canBePreviewed(file)) { + secondFragment = null; + } else secondFragment = new FileDetailFragment(file, getAccount()); } return secondFragment; } From 244758e8506a438fceb678885ce7e998308e934c Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Tue, 4 Nov 2014 11:20:25 +0100 Subject: [PATCH 025/133] Update Gradle plugin to 0.14 for compatibility with Android Studio 0.9.0 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 9807d7f270..51544bee90 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:0.13.0' + classpath 'com.android.tools.build:gradle:0.14.0' } } From f2020942861b0167ea01edc621bc51f571f0d4b9 Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Tue, 4 Nov 2014 16:23:14 +0100 Subject: [PATCH 026/133] Track right branch --- .gitmodules | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitmodules b/.gitmodules index c069d93b4a..1756096016 100644 --- a/.gitmodules +++ b/.gitmodules @@ -2,3 +2,4 @@ [submodule "owncloud-android-library"] path = owncloud-android-library url = git://github.com/owncloudChalmers/android-library.git + branch = buildsystem/gradle_develop From 1c5416e4cd0db177c92682471a34e7840a17a184 Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Tue, 4 Nov 2014 16:25:55 +0100 Subject: [PATCH 027/133] Cleanup --- src/com/owncloud/android/datamodel/OCFile.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/com/owncloud/android/datamodel/OCFile.java b/src/com/owncloud/android/datamodel/OCFile.java index d568ea3ca7..5e1bd5facd 100644 --- a/src/com/owncloud/android/datamodel/OCFile.java +++ b/src/com/owncloud/android/datamodel/OCFile.java @@ -541,8 +541,7 @@ public class OCFile implements Parcelable, Comparable { * @return 'True' if the file is simple text (e.g. not application-dependent, like .doc or .docx) */ public boolean isText() { - return !isFolder() && !isAudio() && !isVideo() && !isImage() && ((mMimeType != null && mMimeType.startsWith("text/")) || - getMimeTypeFromName().startsWith("text/")); + return ((mMimeType != null && mMimeType.startsWith("text/")) || getMimeTypeFromName().startsWith("text/")); } public String getMimeTypeFromName() { From 6cc391748e6403f7ac17a7ba079c5398900d70b0 Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Wed, 3 Dec 2014 15:11:59 +0100 Subject: [PATCH 028/133] Update submodule --- owncloud-android-library | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/owncloud-android-library b/owncloud-android-library index 7ff0bc0d83..8261865ff2 160000 --- a/owncloud-android-library +++ b/owncloud-android-library @@ -1 +1 @@ -Subproject commit 7ff0bc0d837edea90b075140f8caba308ce7d378 +Subproject commit 8261865ff24c1bfc05be19ae9364a66dac8f26c3 From 1551a5280afc682baf84582c150b3a9a4e47f219 Mon Sep 17 00:00:00 2001 From: Sean Date: Thu, 15 Jan 2015 19:46:44 +0000 Subject: [PATCH 029/133] Trigger media scan after file upload After a successful upload, the uploaded file is saved locally on the device but the media scan was not getting triggered. --- src/com/owncloud/android/files/services/FileUploader.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/com/owncloud/android/files/services/FileUploader.java b/src/com/owncloud/android/files/services/FileUploader.java index 8beff92d2f..eb33b376df 100644 --- a/src/com/owncloud/android/files/services/FileUploader.java +++ b/src/com/owncloud/android/files/services/FileUploader.java @@ -727,6 +727,7 @@ public class FileUploader extends Service } file.setNeedsUpdateThumbnail(true); mStorageManager.saveFile(file); + mStorageManager.triggerMediaScan(file.getStoragePath()); } private void updateOCFile(OCFile file, RemoteFile remoteFile) { From 9a2f6c6c4b2428350eaa52979e816e1cebf08530 Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Wed, 24 Jun 2015 22:12:36 +0200 Subject: [PATCH 030/133] Support margins for API levels pre-17 --- res/layout/text_file_preview.xml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/res/layout/text_file_preview.xml b/res/layout/text_file_preview.xml index aa6cf76c53..b144875a89 100644 --- a/res/layout/text_file_preview.xml +++ b/res/layout/text_file_preview.xml @@ -17,15 +17,17 @@ --> + android:layout_width="match_parent" + android:layout_height="match_parent" + android:fillViewport="true"> + android:layout_marginLeft="8dp" + android:layout_marginRight="8dp" + android:layout_marginStart="8dp" + android:visibility="gone"/> \ No newline at end of file From 4c17d77a6cfb386c6c36348d9d9860d79863a882 Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Wed, 24 Jun 2015 22:14:58 +0200 Subject: [PATCH 031/133] Added braces to single-line if statements --- .../android/ui/preview/PreviewTextFragment.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java index 1be63998a5..107b2a2f56 100644 --- a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java @@ -81,12 +81,13 @@ public class PreviewTextFragment extends FileFragment { Bundle args = getArguments(); - if (file == null) + if (file == null){ file = args.getParcelable(FileDisplayActivity.EXTRA_FILE); + } - if (mAccount == null) + if (mAccount == null) { mAccount = args.getParcelable(FileDisplayActivity.EXTRA_ACCOUNT); - + } if (savedInstanceState == null) { if (file == null) { @@ -137,8 +138,8 @@ public class PreviewTextFragment extends FileFragment { @Override protected StringWriter doInBackground(java.lang.Object... params) { - if (params.length != 2) - throw new IllegalArgumentException("The parameters to " + TextLoadAsyncTask.class.getName() + " must be (1) the file location and (2) the text view to update"); + if (params.length != 2) { + throw new IllegalArgumentException("The parameters to " + TextLoadAsyncTask.class.getName() + " must be (1) the file location and (2) the text view to update");} final String location = (String) params[0]; mTextView = (TextView) params[1]; @@ -195,7 +196,7 @@ public class PreviewTextFragment extends FileFragment { * Dismiss loading dialog */ public void dismissLoadingDialog() { - Fragment frag = getActivity().getSupportFragmentManager().findFragmentByTag(DIALOG_WAIT_TAG); + final Fragment frag = getActivity().getSupportFragmentManager().findFragmentByTag(DIALOG_WAIT_TAG); if (frag != null) { LoadingDialog loading = (LoadingDialog) frag; loading.dismiss(); From 1508e99e9ab6e43de4686ce521e22487ccccfb69 Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Wed, 24 Jun 2015 22:24:39 +0200 Subject: [PATCH 032/133] Added exception logging --- src/com/owncloud/android/ui/preview/PreviewTextFragment.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java index 107b2a2f56..04641198fa 100644 --- a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java @@ -158,12 +158,14 @@ public class PreviewTextFragment extends FileFragment { IOException exc = sc.ioException(); if (exc != null) throw exc; } catch (IOException e) { + Log_OC.e(TAG, e.getMessage(), e); finish(); } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { + Log_OC.e(TAG, e.getMessage(), e); finish(); } } From cc0627db93fbf4566681f0de1dea8c1705524162 Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Wed, 24 Jun 2015 22:38:39 +0200 Subject: [PATCH 033/133] Implementation of the requested changes to the asynctask that loads the text --- .../ui/preview/PreviewTextFragment.java | 35 +++++++++++++------ 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java index 04641198fa..285a56ac16 100644 --- a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java @@ -9,7 +9,6 @@ import android.support.v4.app.FragmentTransaction; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ScrollView; import android.widget.TextView; import com.actionbarsherlock.view.Menu; @@ -29,6 +28,7 @@ import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.IOException; import java.io.StringWriter; +import java.lang.ref.WeakReference; import java.util.Scanner; public class PreviewTextFragment extends FileFragment { @@ -38,6 +38,7 @@ public class PreviewTextFragment extends FileFragment { private Account mAccount; private TextView mTextPreview; + private TextLoadAsyncTask mTextLoadTask; /** * Creates an empty fragment for previews. @@ -81,9 +82,9 @@ public class PreviewTextFragment extends FileFragment { Bundle args = getArguments(); - if (file == null){ + if (file == null) { file = args.getParcelable(FileDisplayActivity.EXTRA_FILE); - } + } if (mAccount == null) { mAccount = args.getParcelable(FileDisplayActivity.EXTRA_ACCOUNT); @@ -121,15 +122,22 @@ public class PreviewTextFragment extends FileFragment { } private void loadAndShowTextPreview() { - new TextLoadAsyncTask().execute(getFile().getStoragePath(), mTextPreview); + mTextLoadTask = new TextLoadAsyncTask(new WeakReference(mTextPreview)); + mTextLoadTask.execute(getFile().getStoragePath()); } + /** * Reads the file to preview and shows its contents. Too critical to be anonymous. */ private class TextLoadAsyncTask extends AsyncTask { private final String DIALOG_WAIT_TAG = "DIALOG_WAIT"; - private TextView mTextView; + private final WeakReference mTextViewReference; + + private TextLoadAsyncTask(WeakReference textView) { + mTextViewReference = textView; + } + @Override protected void onPreExecute() { @@ -138,10 +146,10 @@ public class PreviewTextFragment extends FileFragment { @Override protected StringWriter doInBackground(java.lang.Object... params) { - if (params.length != 2) { - throw new IllegalArgumentException("The parameters to " + TextLoadAsyncTask.class.getName() + " must be (1) the file location and (2) the text view to update");} + if (params.length != 1) { + throw new IllegalArgumentException("The parameter to " + TextLoadAsyncTask.class.getName() + " must be (1) the file location"); + } final String location = (String) params[0]; - mTextView = (TextView) params[1]; FileInputStream inputStream = null; Scanner sc = null; @@ -178,8 +186,13 @@ public class PreviewTextFragment extends FileFragment { @Override protected void onPostExecute(final StringWriter stringWriter) { - mTextView.setText(new String(stringWriter.getBuffer())); - mTextView.setVisibility(View.VISIBLE); + final TextView textView = mTextViewReference.get(); + + if (textView != null) { + textView.setText(new String(stringWriter.getBuffer())); + textView.setVisibility(View.VISIBLE); + } + dismissLoadingDialog(); } @@ -360,6 +373,8 @@ public class PreviewTextFragment extends FileFragment { public void onStop() { super.onStop(); Log_OC.e(TAG, "onStop"); + if (mTextLoadTask != null) + mTextLoadTask.cancel(Boolean.TRUE); } /** From efbab82a6e21eeebe2f25a86d48fd56a4812e26f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Antonio=20D=C3=ADaz-Benito=20Soriano?= Date: Thu, 25 Jun 2015 12:49:45 +0200 Subject: [PATCH 034/133] Moved text load call to onStart --- src/com/owncloud/android/ui/preview/PreviewTextFragment.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java index 285a56ac16..bae32e131c 100644 --- a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java @@ -119,6 +119,8 @@ public class PreviewTextFragment extends FileFragment { public void onStart() { super.onStart(); Log_OC.e(TAG, "onStart"); + + loadAndShowTextPreview(); } private void loadAndShowTextPreview() { @@ -359,8 +361,6 @@ public class PreviewTextFragment extends FileFragment { public void onResume() { super.onResume(); Log_OC.e(TAG, "onResume"); - - loadAndShowTextPreview(); } @Override From a601a0e06ecf5b3216fa5a21009c0f1f3bf16cb2 Mon Sep 17 00:00:00 2001 From: masaaki matsuo Date: Fri, 17 Jul 2015 01:03:49 +0900 Subject: [PATCH 035/133] Dispaly thumbnail when file is image --- .../ui/fragment/FileDetailFragment.java | 25 +++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-) mode change 100644 => 100755 src/com/owncloud/android/ui/fragment/FileDetailFragment.java diff --git a/src/com/owncloud/android/ui/fragment/FileDetailFragment.java b/src/com/owncloud/android/ui/fragment/FileDetailFragment.java old mode 100644 new mode 100755 index 4f099e49d6..4c324d8056 --- a/src/com/owncloud/android/ui/fragment/FileDetailFragment.java +++ b/src/com/owncloud/android/ui/fragment/FileDetailFragment.java @@ -25,6 +25,7 @@ import java.lang.ref.WeakReference; import android.accounts.Account; import android.content.Intent; +import android.graphics.Bitmap; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; @@ -41,6 +42,7 @@ import android.widget.TextView; import com.owncloud.android.R; import com.owncloud.android.datamodel.FileDataStorageManager; import com.owncloud.android.datamodel.OCFile; +import com.owncloud.android.datamodel.ThumbnailsCacheManager; import com.owncloud.android.files.FileMenuFilter; import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder; import com.owncloud.android.files.services.FileUploader.FileUploaderBinder; @@ -343,7 +345,7 @@ public class FileDetailFragment extends FileFragment implements OnClickListener // set file details setFilename(file.getFileName()); - setFiletype(file.getMimetype(), file.getFileName()); + setFiletype(file); setFilesize(file.getFileLength()); setTimeModified(file.getModificationTimestamp()); @@ -395,18 +397,31 @@ public class FileDetailFragment extends FileFragment implements OnClickListener /** * Updates the MIME type in view - * @param mimetype MIME type to set - * @param filename Name of the file, to deduce the icon to use in case the MIME type is not precise enough + * @param file : An {@link OCFile} */ - private void setFiletype(String mimetype, String filename) { + private void setFiletype(OCFile file) { + String mimetype = file.getMimetype(); TextView tv = (TextView) getView().findViewById(R.id.fdType); if (tv != null) { + // mimetype MIME type to set String printableMimetype = DisplayUtils.convertMIMEtoPrettyPrint(mimetype); tv.setText(printableMimetype); } ImageView iv = (ImageView) getView().findViewById(R.id.fdIcon); if (iv != null) { - iv.setImageResource(DisplayUtils.getFileTypeIconId(mimetype, filename)); + Bitmap thumbnail = null; + if (file.isImage()) { + String tagId = String.valueOf(file.getRemoteId()); + thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache(tagId); + } + if (thumbnail != null) { + // Display thumbnail + iv.setImageBitmap(thumbnail); + } else { + // Name of the file, to deduce the icon to use in case the MIME type is not precise enough + String filename = file.getFileName(); + iv.setImageResource(DisplayUtils.getFileTypeIconId(mimetype, filename)); + } } } From d1257b34c035ccbe7971ddde3cea2a1bf7d66410 Mon Sep 17 00:00:00 2001 From: masensio Date: Wed, 5 Aug 2015 17:18:17 +0200 Subject: [PATCH 036/133] Fix problems in PreviewTextFragment related with changes in develop --- .../ui/preview/PreviewTextFragment.java | 23 ++++++------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java index b3384c086c..e9479a3570 100644 --- a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java @@ -7,6 +7,9 @@ import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; @@ -108,8 +111,8 @@ public class PreviewTextFragment extends FileFragment { @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); - outState.putParcelable(PreviewImageFragment.EXTRA_FILE, getFile()); - outState.putParcelable(PreviewImageFragment.EXTRA_ACCOUNT, mAccount); + outState.putParcelable(PreviewTextFragment.EXTRA_FILE, getFile()); + outState.putParcelable(PreviewTextFragment.EXTRA_ACCOUNT, mAccount); } @Override @@ -239,7 +242,7 @@ public class PreviewTextFragment extends FileFragment { getFile(), mContainerActivity.getStorageManager().getAccount(), mContainerActivity, - getSherlockActivity() + getActivity() ); mf.filter(menu); } @@ -265,18 +268,6 @@ public class PreviewTextFragment extends FileFragment { item.setEnabled(false); } - item = menu.findItem(R.id.action_settings); - if (item != null) { - item.setVisible(false); - item.setEnabled(false); - } - - item = menu.findItem(R.id.action_logger); - if (item != null) { - item.setVisible(false); - item.setEnabled(false); - } - item = menu.findItem(R.id.action_sync_file); if (item != null) { item.setVisible(false); @@ -399,7 +390,7 @@ public class PreviewTextFragment extends FileFragment { getActivity().runOnUiThread(new Runnable() { @Override public void run() { - getSherlockActivity().onBackPressed(); + getActivity().onBackPressed(); } }); } From fafc422ca40bfbc590211245bcfb77734f23ac20 Mon Sep 17 00:00:00 2001 From: masensio Date: Wed, 5 Aug 2015 17:40:20 +0200 Subject: [PATCH 037/133] Fix Java version to 1.7 --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 73c094d9f4..a5c0431f79 100644 --- a/build.gradle +++ b/build.gradle @@ -61,8 +61,8 @@ android { compileOptions { - sourceCompatibility JavaVersion.VERSION_1_5 - targetCompatibility JavaVersion.VERSION_1_5 + sourceCompatibility JavaVersion.VERSION_1_7 + targetCompatibility JavaVersion.VERSION_1_7 } productFlavors { From be5dbcbb2e5afef17d47b4cbbf9e0eb08de69da4 Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Thu, 13 Aug 2015 20:11:58 +0200 Subject: [PATCH 038/133] fixed bug caused by rotating the device --- .../ui/preview/PreviewTextFragment.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java index e9479a3570..c1511aae07 100644 --- a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java @@ -202,11 +202,20 @@ public class PreviewTextFragment extends FileFragment { * Show loading dialog */ public void showLoadingDialog() { - // Construct dialog - LoadingDialog loading = new LoadingDialog(getResources().getString(R.string.wait_a_moment)); - FragmentManager fm = getActivity().getSupportFragmentManager(); - FragmentTransaction ft = fm.beginTransaction(); - loading.show(ft, DIALOG_WAIT_TAG); + // only once + Fragment frag = getActivity().getSupportFragmentManager().findFragmentByTag(DIALOG_WAIT_TAG); + LoadingDialog loading = null; + if (frag == null) { + // Construct dialog + loading = new LoadingDialog(getResources().getString(R.string.wait_a_moment)); + FragmentManager fm = getActivity().getSupportFragmentManager(); + FragmentTransaction ft = fm.beginTransaction(); + loading.show(ft, DIALOG_WAIT_TAG); + } else { + loading = (LoadingDialog) frag; + loading.setShowsDialog(true); + } + } /** From f4432afdebe1801d1355ed8de50f2a8696faff22 Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Wed, 22 Oct 2014 19:28:19 +0200 Subject: [PATCH 039/133] Added 'Copy' action --- res/menu/file_actions_menu.xml | 96 +++++++++++++++++++++++++++------- 1 file changed, 78 insertions(+), 18 deletions(-) diff --git a/res/menu/file_actions_menu.xml b/res/menu/file_actions_menu.xml index 9074b98e5c..3e6f4cd4a2 100644 --- a/res/menu/file_actions_menu.xml +++ b/res/menu/file_actions_menu.xml @@ -1,5 +1,4 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + From d9db150a3114edb1763e819e36f2acfa7ba60c01 Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Wed, 22 Oct 2014 19:34:40 +0200 Subject: [PATCH 040/133] Added 'ACTION_COPY_FILES'. --- .../ui/activity/FileDisplayActivity.java | 292 +++++++++--------- 1 file changed, 152 insertions(+), 140 deletions(-) diff --git a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java index a3d9b10495..699107c9ee 100644 --- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -103,6 +103,9 @@ import com.owncloud.android.utils.UriUtils; import java.io.File; +import java.io.File; +import java.io.IOException; + /** * Displays, what files the user has available in his ownCloud. @@ -130,6 +133,7 @@ public class FileDisplayActivity extends HookActivity public static final int ACTION_SELECT_CONTENT_FROM_APPS = 1; public static final int ACTION_SELECT_MULTIPLE_FILES = 2; public static final int ACTION_MOVE_FILES = 3; + public static final int ACTION_COPY_FILES = 4; private static final String TAG = FileDisplayActivity.class.getSimpleName(); @@ -137,7 +141,7 @@ public class FileDisplayActivity extends HookActivity private static final String TAG_SECOND_FRAGMENT = "SECOND_FRAGMENT"; private OCFile mWaitingToPreview; - + private boolean mSyncInProgress = false; private static String DIALOG_UNTRUSTED_CERT = "DIALOG_UNTRUSTED_CERT"; @@ -161,7 +165,7 @@ public class FileDisplayActivity extends HookActivity Intent initObserversIntent = FileObserverService.makeInitIntent(this); startService(initObserversIntent); } - + /// Load of saved instance state if(savedInstanceState != null) { mWaitingToPreview = (OCFile) savedInstanceState.getParcelable( @@ -174,13 +178,13 @@ public class FileDisplayActivity extends HookActivity mWaitingToPreview = null; mSyncInProgress = false; mWaitingToSend = null; - } + } /// USER INTERFACE // Inflate and set the layout view setContentView(R.layout.files); - + // Navigation Drawer initDrawer(); @@ -221,8 +225,8 @@ public class FileDisplayActivity extends HookActivity } /** - * Called when the ownCloud {@link Account} associated to the Activity was just updated. - */ + * Called when the ownCloud {@link Account} associated to the Activity was just updated. + */ @Override protected void onAccountSet(boolean stateWasRecovered) { super.onAccountSet(stateWasRecovered); @@ -250,14 +254,14 @@ public class FileDisplayActivity extends HookActivity file = getStorageManager().getFileByPath(OCFile.ROOT_PATH); // never returns null } setFile(file); - + if (!stateWasRecovered) { Log_OC.d(TAG, "Initializing Fragments in onAccountChanged.."); initFragmentsWithFile(); if (file.isFolder()) { startSyncFolderOperation(file, false); } - + } else { updateFragmentsVisibility(!file.isFolder()); updateActionBarTitleAndHomeButton(file.isFolder() ? null : file); @@ -272,11 +276,11 @@ public class FileDisplayActivity extends HookActivity transaction.add(R.id.left_fragment_container, listOfFiles, TAG_LIST_OF_FILES); transaction.commit(); } - + private void initFragmentsWithFile() { if (getAccount() != null && getFile() != null) { /// First fragment - OCFileListFragment listOfFiles = getListOfFilesFragment(); + OCFileListFragment listOfFiles = getListOfFilesFragment(); if (listOfFiles != null) { listOfFiles.listDirectory(getCurrentDir()); // TODO Enable when "On Device" is recovered @@ -284,9 +288,9 @@ public class FileDisplayActivity extends HookActivity } else { Log_OC.e(TAG, "Still have a chance to lose the initializacion of list fragment >("); } - + /// Second fragment - OCFile file = getFile(); + OCFile file = getFile(); Fragment secondFragment = chooseInitialSecondFragment(file); if (secondFragment != null) { setSecondFragment(secondFragment); @@ -311,7 +315,7 @@ public class FileDisplayActivity extends HookActivity private Fragment chooseInitialSecondFragment(OCFile file) { Fragment secondFragment = null; if (file != null && !file.isFolder()) { - if (file.isDown() && PreviewMediaFragment.canBePreviewed(file) + if (file.isDown() && PreviewMediaFragment.canBePreviewed(file) && file.getLastSyncDateForProperties() > 0 // temporal fix ) { int startPlaybackPosition = @@ -332,10 +336,10 @@ public class FileDisplayActivity extends HookActivity /** * Replaces the second fragment managed by the activity with the received as * a parameter. - * - * Assumes never will be more than two fragments managed at the same time. - * - * @param fragment New second Fragment to set. + *

+ * Assumes never will be more than two fragments managed at the same time. + * + * @param fragment New second Fragment to set. */ private void setSecondFragment(Fragment fragment) { FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); @@ -376,7 +380,7 @@ public class FileDisplayActivity extends HookActivity Fragment listOfFiles = getSupportFragmentManager().findFragmentByTag( FileDisplayActivity.TAG_LIST_OF_FILES); if (listOfFiles != null) { - return (OCFileListFragment)listOfFiles; + return (OCFileListFragment) listOfFiles; } Log_OC.wtf(TAG, "Access to unexisting list of files fragment!!"); return null; @@ -386,7 +390,7 @@ public class FileDisplayActivity extends HookActivity Fragment second = getSupportFragmentManager().findFragmentByTag( FileDisplayActivity.TAG_SECOND_FRAGMENT); if (second != null) { - return (FileFragment)second; + return (FileFragment) second; } return null; } @@ -597,18 +601,24 @@ public class FileDisplayActivity extends HookActivity resultCode == UploadFilesActivity.RESULT_OK_AND_MOVE)) { requestMultipleUpload(data, resultCode); +//<<<<<<< HEAD } else if (requestCode == ACTION_MOVE_FILES && resultCode == RESULT_OK){ +/*======= + } else if (requestCode == ACTION_MOVE_FILES && (resultCode == RESULT_OK || + resultCode == MoveActivity.RESULT_OK_AND_MOVE)) { +>>>>>>> Added 'ACTION_COPY_FILES'. +*/ final Intent fData = data; - final int fResultCode = resultCode; + final int fResultCode = resultCode; getHandler().postDelayed( - new Runnable() { - @Override - public void run() { - requestMoveOperation(fData, fResultCode); - } - }, - DELAY_TO_REQUEST_OPERATION_ON_ACTIVITY_RESULTS + new Runnable() { + @Override + public void run() { + requestMoveOperation(fData, fResultCode); + } + }, + DELAY_TO_REQUEST_OPERATION_ON_ACTIVITY_RESULTS ); } else { @@ -716,9 +726,9 @@ public class FileDisplayActivity extends HookActivity /** * Request the operation for moving the file/folder from one path to another - * - * @param data Intent received - * @param resultCode Result code received + * + * @param data Intent received + * @param resultCode Result code received */ private void requestMoveOperation(Intent data, int resultCode) { OCFile folderToMoveAt = (OCFile) data.getParcelableExtra(FolderPickerActivity.EXTRA_FOLDER); @@ -728,7 +738,7 @@ public class FileDisplayActivity extends HookActivity @Override public void onBackPressed() { - OCFileListFragment listOfFiles = getListOfFilesFragment(); + OCFileListFragment listOfFiles = getListOfFilesFragment(); if (mDualPane || getSecondFragment() == null) { OCFile currentDir = getCurrentDir(); if (currentDir == null || currentDir.getParentId() == FileDataStorageManager.ROOT_PARENT_ID) { @@ -760,7 +770,6 @@ public class FileDisplayActivity extends HookActivity Log_OC.v(TAG, "onSaveInstanceState() end"); } - @Override @@ -797,7 +806,7 @@ public class FileDisplayActivity extends HookActivity downloadIntentFilter.addAction(FileDownloader.getDownloadFinishMessage()); mDownloadFinishReceiver = new DownloadFinishReceiver(); registerReceiver(mDownloadFinishReceiver, downloadIntentFilter); - + Log_OC.v(TAG, "onResume() end"); } @@ -818,7 +827,7 @@ public class FileDisplayActivity extends HookActivity unregisterReceiver(mDownloadFinishReceiver); mDownloadFinishReceiver = null; } - + super.onPause(); Log_OC.v(TAG, "onPause() end"); } @@ -844,10 +853,10 @@ public class FileDisplayActivity extends HookActivity accountName.equals(getAccount().name) && getStorageManager() != null); if (sameAccount) { - + if (FileSyncAdapter.EVENT_FULL_SYNC_START.equals(event)) { mSyncInProgress = true; - + } else { OCFile currentFile = (getFile() == null) ? null : getStorageManager().getFileByPath(getFile().getRemotePath()); @@ -864,7 +873,7 @@ public class FileDisplayActivity extends HookActivity Toast.LENGTH_LONG) .show(); browseToRoot(); - + } else { if (currentFile == null && !getFile().isFolder()) { // currently selected file was removed in the server, and now we @@ -885,7 +894,7 @@ public class FileDisplayActivity extends HookActivity } setFile(currentFile); } - + mSyncInProgress = (!FileSyncAdapter.EVENT_FULL_SYNC_END.equals(event) && !RefreshFolderOperation.EVENT_SINGLE_FOLDER_SHARES_SYNCED .equals(event)); @@ -893,11 +902,11 @@ public class FileDisplayActivity extends HookActivity if (RefreshFolderOperation.EVENT_SINGLE_FOLDER_CONTENTS_SYNCED. equals(event) && /// TODO refactor and make common - synchResult != null && !synchResult.isSuccess() && - (synchResult.getCode() == ResultCode.UNAUTHORIZED || - synchResult.isIdPRedirection() || - (synchResult.isException() && synchResult.getException() - instanceof AuthenticatorException))) { + synchResult != null && !synchResult.isSuccess() && + (synchResult.getCode() == ResultCode.UNAUTHORIZED || + synchResult.isIdPRedirection() || + (synchResult.isException() && synchResult.getException() + instanceof AuthenticatorException))) { try { @@ -935,9 +944,9 @@ public class FileDisplayActivity extends HookActivity /*|| mRefreshSharesInProgress*/); setBackgroundText(); - + } - + if (synchResult != null) { if (synchResult.getCode().equals( RemoteOperationResult.ResultCode.SSL_RECOVERABLE_PEER_UNVERIFIED)) { @@ -951,7 +960,7 @@ public class FileDisplayActivity extends HookActivity } } } - + /** * Show a text message on screen view for notifying user if content is * loading or folder is empty @@ -976,7 +985,8 @@ public class FileDisplayActivity extends HookActivity private class UploadFinishReceiver extends BroadcastReceiver { /** * Once the file upload has finished -> update view - * @author David A. Velasco + * + * @author David A. Velasco * {@link BroadcastReceiver} to enable upload feedback in UI */ @Override @@ -986,23 +996,23 @@ public class FileDisplayActivity extends HookActivity String accountName = intent.getStringExtra(FileUploader.ACCOUNT_NAME); boolean sameAccount = getAccount() != null && accountName.equals(getAccount().name); OCFile currentDir = getCurrentDir(); - boolean isDescendant = (currentDir != null) && (uploadedRemotePath != null) && + boolean isDescendant = (currentDir != null) && (uploadedRemotePath != null) && (uploadedRemotePath.startsWith(currentDir.getRemotePath())); - + if (sameAccount && isDescendant) { refreshListOfFilesFragment(); } - + boolean uploadWasFine = intent.getBooleanExtra(FileUploader.EXTRA_UPLOAD_RESULT, false); boolean renamedInUpload = getFile().getRemotePath(). equals(intent.getStringExtra(FileUploader.EXTRA_OLD_REMOTE_PATH)); - boolean sameFile = getFile().getRemotePath().equals(uploadedRemotePath) || + boolean sameFile = getFile().getRemotePath().equals(uploadedRemotePath) || renamedInUpload; FileFragment details = getSecondFragment(); - boolean detailFragmentIsShown = (details != null && + boolean detailFragmentIsShown = (details != null && details instanceof FileDetailFragment); - + if (sameAccount && sameFile && detailFragmentIsShown) { if (uploadWasFine) { setFile(getStorageManager().getFileByPath(uploadedRemotePath)); @@ -1010,39 +1020,39 @@ public class FileDisplayActivity extends HookActivity if (renamedInUpload) { String newName = (new File(uploadedRemotePath)).getName(); Toast msg = Toast.makeText( - context, + context, String.format( - getString(R.string.filedetails_renamed_in_upload_msg), - newName), + getString(R.string.filedetails_renamed_in_upload_msg), + newName), Toast.LENGTH_LONG); msg.show(); } if (uploadWasFine || getFile().fileExists()) { - ((FileDetailFragment)details).updateFileDetails(false, true); + ((FileDetailFragment) details).updateFileDetails(false, true); } else { cleanSecondFragment(); } - + // Force the preview if the file is an image if (uploadWasFine && PreviewImageFragment.canBePreviewed(getFile())) { startImagePreview(getFile()); } // TODO what about other kind of previews? } - + } finally { if (intent != null) { removeStickyBroadcast(intent); } } - + } - + } /** * Class waiting for broadcast events from the {@link FileDownloader} service. - * + * * Updates the UI when a download is started or finished, provided that it is relevant for the * current folder. */ @@ -1070,7 +1080,7 @@ public class FileDisplayActivity extends HookActivity intent.getBooleanExtra(FileDownloader.EXTRA_DOWNLOAD_RESULT, false) ); } - + if (mWaitingToSend != null) { mWaitingToSend = getStorageManager().getFileByPath(mWaitingToSend.getRemotePath()); @@ -1078,7 +1088,7 @@ public class FileDisplayActivity extends HookActivity sendDownloadedFile(); } } - + } finally { if (intent != null) { removeStickyBroadcast(intent); @@ -1109,10 +1119,10 @@ public class FileDisplayActivity extends HookActivity accountName.equals(getAccount().name)); } } - - + + public void browseToRoot() { - OCFileListFragment listOfFiles = getListOfFilesFragment(); + OCFileListFragment listOfFiles = getListOfFilesFragment(); if (listOfFiles != null) { // should never be null, indeed OCFile root = getStorageManager().getFileByPath(OCFile.ROOT_PATH); listOfFiles.listDirectory(root); @@ -1128,7 +1138,7 @@ public class FileDisplayActivity extends HookActivity /** * {@inheritDoc} - * + *

* Updates action bar and second fragment, if in dual pane mode. */ @Override @@ -1140,10 +1150,10 @@ public class FileDisplayActivity extends HookActivity } /** - * Shows the information of the {@link OCFile} received as a + * Shows the information of the {@link OCFile} received as a * parameter in the second fragment. - * - * @param file {@link OCFile} whose details will be shown + * + * @param file {@link OCFile} whose details will be shown */ @Override public void showDetails(OCFile file) { @@ -1172,7 +1182,9 @@ public class FileDisplayActivity extends HookActivity return new ListServiceConnection(); } - /** Defines callbacks for service binding, passed to bindService() */ + /** + * Defines callbacks for service binding, passed to bindService() + */ private class ListServiceConnection implements ServiceConnection { @Override @@ -1189,7 +1201,7 @@ public class FileDisplayActivity extends HookActivity if (!mWaitingToPreview.isDown()) { requestForDownload(); } - } + } } else if (component.equals(new ComponentName(FileDisplayActivity.this, FileUploader.class))) { @@ -1208,7 +1220,7 @@ public class FileDisplayActivity extends HookActivity } FileFragment secondFragment = getSecondFragment(); if (secondFragment != null && secondFragment instanceof FileDetailFragment) { - FileDetailFragment detailFragment = (FileDetailFragment)secondFragment; + FileDetailFragment detailFragment = (FileDetailFragment) secondFragment; detailFragment.listenForTransferProgress(); detailFragment.updateFileDetails(false, false); } @@ -1226,7 +1238,7 @@ public class FileDisplayActivity extends HookActivity mUploaderBinder = null; } } - }; + } @Override public void onSavedCertificate() { @@ -1250,39 +1262,39 @@ public class FileDisplayActivity extends HookActivity /** * Updates the view associated to the activity after the finish of some operation over files * in the current account. - * - * @param operation Removal operation performed. - * @param result Result of the removal. + * + * @param operation Removal operation performed. + * @param result Result of the removal. */ @Override public void onRemoteOperationFinish(RemoteOperation operation, RemoteOperationResult result) { super.onRemoteOperationFinish(operation, result); - + if (operation instanceof RemoveFileOperation) { onRemoveFileOperationFinish((RemoveFileOperation) operation, result); } else if (operation instanceof RenameFileOperation) { - onRenameFileOperationFinish((RenameFileOperation)operation, result); + onRenameFileOperationFinish((RenameFileOperation) operation, result); } else if (operation instanceof SynchronizeFileOperation) { - onSynchronizeFileOperationFinish((SynchronizeFileOperation)operation, result); + onSynchronizeFileOperationFinish((SynchronizeFileOperation) operation, result); } else if (operation instanceof CreateFolderOperation) { - onCreateFolderOperationFinish((CreateFolderOperation)operation, result); - + onCreateFolderOperationFinish((CreateFolderOperation) operation, result); + } else if (operation instanceof CreateShareOperation) { onCreateShareOperationFinish((CreateShareOperation) operation, result); - + } else if (operation instanceof UnshareLinkOperation) { - onUnshareLinkOperationFinish((UnshareLinkOperation)operation, result); - + onUnshareLinkOperationFinish((UnshareLinkOperation) operation, result); + } else if (operation instanceof MoveFileOperation) { - onMoveFileOperationFinish((MoveFileOperation)operation, result); + onMoveFileOperationFinish((MoveFileOperation) operation, result); } - + } - + private void onCreateShareOperationFinish(CreateShareOperation operation, RemoteOperationResult result) { if (result.isSuccess()) { @@ -1291,36 +1303,36 @@ public class FileDisplayActivity extends HookActivity } } - + private void onUnshareLinkOperationFinish(UnshareLinkOperation operation, RemoteOperationResult result) { if (result.isSuccess()) { refreshShowDetails(); refreshListOfFilesFragment(); - + } else if (result.getCode() == ResultCode.SHARE_NOT_FOUND) { cleanSecondFragment(); refreshListOfFilesFragment(); } } - + private void refreshShowDetails() { FileFragment details = getSecondFragment(); if (details != null) { OCFile file = details.getFile(); if (file != null) { - file = getStorageManager().getFileByPath(file.getRemotePath()); + file = getStorageManager().getFileByPath(file.getRemotePath()); if (details instanceof PreviewMediaFragment) { // Refresh OCFile of the fragment ((PreviewMediaFragment) details).updateFile(file); } else { showDetails(file); - } + } } invalidateOptionsMenu(); - } + } } - + /** * Updates the view associated to the activity after the finish of an operation trying to * remove a file. @@ -1331,18 +1343,18 @@ public class FileDisplayActivity extends HookActivity private void onRemoveFileOperationFinish(RemoveFileOperation operation, RemoteOperationResult result) { dismissLoadingDialog(); - + Toast msg = Toast.makeText(this, ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()), Toast.LENGTH_LONG); msg.show(); - + if (result.isSuccess()) { OCFile removedFile = operation.getFile(); FileFragment second = getSecondFragment(); if (second != null && removedFile.equals(second.getFile())) { if (second instanceof PreviewMediaFragment) { - ((PreviewMediaFragment)second).stopPreview(true); + ((PreviewMediaFragment) second).stopPreview(true); } setFile(getStorageManager().getFileById(removedFile.getParentId())); cleanSecondFragment(); @@ -1358,14 +1370,14 @@ public class FileDisplayActivity extends HookActivity } } } - - + + /** - * Updates the view associated to the activity after the finish of an operation trying to move a + * Updates the view associated to the activity after the finish of an operation trying to move a * file. - * - * @param operation Move operation performed. - * @param result Result of the move operation. + * + * @param operation Move operation performed. + * @param result Result of the move operation. */ private void onMoveFileOperationFinish(MoveFileOperation operation, RemoteOperationResult result) { @@ -1375,13 +1387,13 @@ public class FileDisplayActivity extends HookActivity } else { dismissLoadingDialog(); try { - Toast msg = Toast.makeText(FileDisplayActivity.this, - ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()), - Toast.LENGTH_LONG); + Toast msg = Toast.makeText(FileDisplayActivity.this, + ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()), + Toast.LENGTH_LONG); msg.show(); } catch (NotFoundException e) { - Log_OC.e(TAG, "Error while trying to show fail message " , e); + Log_OC.e(TAG, "Error while trying to show fail message ", e); } } } @@ -1410,14 +1422,14 @@ public class FileDisplayActivity extends HookActivity renamedFile.equals(details.getFile())) { ((PreviewMediaFragment) details).updateFile(renamedFile); if (PreviewMediaFragment.canBePreviewed(renamedFile)) { - int position = ((PreviewMediaFragment)details).getPosition(); + int position = ((PreviewMediaFragment) details).getPosition(); startMediaPreview(renamedFile, position, true); } else { getFileOperationsHelper().openFile(renamedFile); } } } - + if (getStorageManager().getFileById(renamedFile.getParentId()).equals(getCurrentDir())){ refreshListOfFilesFragment(); } @@ -1427,7 +1439,7 @@ public class FileDisplayActivity extends HookActivity ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()), Toast.LENGTH_LONG); msg.show(); - + if (result.isSslRecoverableException()) { mLastSslUntrustedServerResult = result; showUntrustedCertDialog(mLastSslUntrustedServerResult); @@ -1461,18 +1473,18 @@ public class FileDisplayActivity extends HookActivity } else { dismissLoadingDialog(); try { - Toast msg = Toast.makeText(FileDisplayActivity.this, - ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()), - Toast.LENGTH_LONG); + Toast msg = Toast.makeText(FileDisplayActivity.this, + ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()), + Toast.LENGTH_LONG); msg.show(); } catch (NotFoundException e) { - Log_OC.e(TAG, "Error while trying to show fail message " , e); + Log_OC.e(TAG, "Error while trying to show fail message ", e); } } } - + /** * {@inheritDoc} */ @@ -1483,16 +1495,16 @@ public class FileDisplayActivity extends HookActivity if (details != null && details instanceof FileDetailFragment && file.equals(details.getFile()) ) { if (downloading || uploading) { - ((FileDetailFragment)details).updateFileDetails(file, getAccount()); + ((FileDetailFragment) details).updateFileDetails(file, getAccount()); } else { if (!file.fileExists()) { cleanSecondFragment(); } else { - ((FileDetailFragment)details).updateFileDetails(false, true); + ((FileDetailFragment) details).updateFileDetails(false, true); } } } - + } @@ -1521,12 +1533,12 @@ public class FileDisplayActivity extends HookActivity } return null; } - + public void startSyncFolderOperation(OCFile folder, boolean ignoreETag) { - long currentSyncTime = System.currentTimeMillis(); - + long currentSyncTime = System.currentTimeMillis(); + mSyncInProgress = true; - + // perform folder synchronization RemoteOperation synchFolderOp = new RefreshFolderOperation( folder, currentSyncTime, @@ -1545,7 +1557,7 @@ public class FileDisplayActivity extends HookActivity } /** - * Show untrusted cert dialog + * Show untrusted cert dialog */ public void showUntrustedCertDialog(RemoteOperationResult result) { // Show a dialog with the certificate info @@ -1555,7 +1567,7 @@ public class FileDisplayActivity extends HookActivity FragmentTransaction ft = fm.beginTransaction(); dialog.show(ft, DIALOG_UNTRUSTED_CERT); } - + private void requestForDownload(OCFile file) { Account account = getAccount(); if (!mDownloaderBinder.isDownloading(account, mWaitingToPreview)) { @@ -1565,43 +1577,43 @@ public class FileDisplayActivity extends HookActivity startService(i); } } - - private void sendDownloadedFile(){ + + private void sendDownloadedFile() { getFileOperationsHelper().sendDownloadedFile(mWaitingToSend); mWaitingToSend = null; } - + /** * Requests the download of the received {@link OCFile} , updates the UI * to monitor the download progress and prepares the activity to send the file * when the download finishes. - * - * @param file {@link OCFile} to download and preview. + * + * @param file {@link OCFile} to download and preview. */ public void startDownloadForSending(OCFile file) { mWaitingToSend = file; requestForDownload(mWaitingToSend); - boolean hasSecondFragment = (getSecondFragment()!= null); + boolean hasSecondFragment = (getSecondFragment() != null); updateFragmentsVisibility(hasSecondFragment); } - + /** * Opens the image gallery showing the image {@link OCFile} received as parameter. - * - * @param file Image {@link OCFile} to show. + * + * @param file Image {@link OCFile} to show. */ public void startImagePreview(OCFile file) { Intent showDetailsIntent = new Intent(this, PreviewImageActivity.class); showDetailsIntent.putExtra(EXTRA_FILE, file); showDetailsIntent.putExtra(EXTRA_ACCOUNT, getAccount()); startActivity(showDetailsIntent); - + } /** * Stars the preview of an already down media {@link OCFile}. - * + * * @param file Media {@link OCFile} to preview. * @param startPlaybackPosition Media position where the playback will be started, * in milliseconds. @@ -1621,8 +1633,8 @@ public class FileDisplayActivity extends HookActivity * Requests the download of the received {@link OCFile} , updates the UI * to monitor the download progress and prepares the activity to preview * or open the file when the download finishes. - * - * @param file {@link OCFile} to download and preview. + * + * @param file {@link OCFile} to download and preview. */ public void startDownloadForPreview(OCFile file) { Fragment detailFragment = FileDetailFragment.newInstance(file, getAccount()); @@ -1637,7 +1649,7 @@ public class FileDisplayActivity extends HookActivity public void cancelTransference(OCFile file) { getFileOperationsHelper().cancelTransference(file); - if (mWaitingToPreview != null && + if (mWaitingToPreview != null && mWaitingToPreview.getRemotePath().equals(file.getRemotePath())) { mWaitingToPreview = null; } From dc8ceffddc29df73af7a244b81994cc0b7843096 Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Wed, 22 Oct 2014 20:06:44 +0200 Subject: [PATCH 041/133] Fixed 'Move' action --- .../android/ui/activity/CopyActivity.java | 560 ++++++++++++++++++ .../ui/fragment/ExtendedListFragment.java | 4 +- .../ui/fragment/OCFileListFragment.java | 8 + 3 files changed, 570 insertions(+), 2 deletions(-) create mode 100644 src/com/owncloud/android/ui/activity/CopyActivity.java diff --git a/src/com/owncloud/android/ui/activity/CopyActivity.java b/src/com/owncloud/android/ui/activity/CopyActivity.java new file mode 100644 index 0000000000..e031713701 --- /dev/null +++ b/src/com/owncloud/android/ui/activity/CopyActivity.java @@ -0,0 +1,560 @@ +/* ownCloud Android client application + * Copyright (C) 2012-2014 ownCloud Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, + * as published by the Free Software Foundation. + * + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +package com.owncloud.android.ui.activity; + +import android.accounts.Account; +import android.accounts.AccountManager; +import android.accounts.AuthenticatorException; +import android.accounts.OperationCanceledException; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.res.Resources.NotFoundException; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentTransaction; +import android.support.v4.widget.SwipeRefreshLayout; +import android.support.v7.app.ActionBar; +import android.util.Log; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.Window; +import android.widget.Button; +import android.widget.Toast; + +import com.owncloud.android.R; +import com.owncloud.android.datamodel.OCFile; +import com.owncloud.android.lib.common.OwnCloudAccount; +import com.owncloud.android.lib.common.OwnCloudClient; +import com.owncloud.android.lib.common.OwnCloudClientManagerFactory; +import com.owncloud.android.lib.common.OwnCloudCredentials; +import com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException; +import com.owncloud.android.lib.common.operations.RemoteOperation; +import com.owncloud.android.lib.common.operations.RemoteOperationResult; +import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; +import com.owncloud.android.lib.common.utils.Log_OC; +import com.owncloud.android.operations.CreateFolderOperation; +import com.owncloud.android.operations.RefreshFolderOperation; +import com.owncloud.android.operations.SynchronizeFolderOperation; +import com.owncloud.android.syncadapter.FileSyncAdapter; +import com.owncloud.android.ui.dialog.CreateFolderDialogFragment; +import com.owncloud.android.ui.fragment.FileFragment; +import com.owncloud.android.ui.fragment.OCFileListFragment; +import com.owncloud.android.utils.DisplayUtils; +import com.owncloud.android.utils.ErrorMessageAdapter; + +import java.io.IOException; + +public class CopyActivity extends HookActivity implements FileFragment.ContainerActivity, + OnClickListener, SwipeRefreshLayout.OnRefreshListener { + + public static final String EXTRA_CURRENT_FOLDER = UploadFilesActivity.class.getCanonicalName() + ".EXTRA_CURRENT_FOLDER"; + public static final String EXTRA_TARGET_FILE = UploadFilesActivity.class.getCanonicalName() + "EXTRA_TARGET_FILE"; + + public static final int RESULT_OK_AND_MOVE = 1; + + private SyncBroadcastReceiver mSyncBroadcastReceiver; + + private static final String TAG = CopyActivity.class.getSimpleName(); + + private static final String TAG_LIST_OF_FOLDERS = "LIST_OF_FOLDERS"; + + private boolean mSyncInProgress = false; + + private Button mCancelBtn; + private Button mChooseBtn; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + Log_OC.d(TAG, "onCreate() start"); + requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); + + super.onCreate(savedInstanceState); + + setContentView(R.layout.files_folder_picker); + + if (savedInstanceState == null) { + createFragments(); + } + + // sets callback listeners for UI elements + initControls(); + + // Action bar setup + ActionBar actionBar = getSupportActionBar(); + actionBar.setDisplayShowTitleEnabled(true); + actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); + setSupportProgressBarIndeterminateVisibility(mSyncInProgress); + // always AFTER setContentView(...) ; to work around bug in its implementation + + // sets message for empty list of folders + setBackgroundText(); + + Log_OC.d(TAG, "onCreate() end"); + + } + + @Override + protected void onStart() { + super.onStart(); + getSupportActionBar().setIcon(DisplayUtils.getSeasonalIconId()); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + } + + /** + * Called when the ownCloud {@link Account} associated to the Activity was just updated. + */ + @Override + protected void onAccountSet(boolean stateWasRecovered) { + super.onAccountSet(stateWasRecovered); + if (getAccount() != null) { + + updateFileFromDB(); + + OCFile folder = getFile(); + if (folder == null || !folder.isFolder()) { + // fall back to root folder + setFile(getStorageManager().getFileByPath(OCFile.ROOT_PATH)); + folder = getFile(); + } + + if (!stateWasRecovered) { + OCFileListFragment listOfFolders = getListOfFilesFragment(); + listOfFolders.listDirectory(folder); + + startSyncFolderOperation(folder, false); + } + + updateNavigationElementsInActionBar(); + } + } + + private void createFragments() { + OCFileListFragment listOfFiles = new OCFileListFragment(); + Bundle args = new Bundle(); + args.putBoolean(OCFileListFragment.ARG_JUST_FOLDERS, true); + args.putBoolean(OCFileListFragment.ARG_ALLOW_CONTEXTUAL_ACTIONS, false); + listOfFiles.setArguments(args); + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + transaction.add(R.id.fragment_container, listOfFiles, TAG_LIST_OF_FOLDERS); + transaction.commit(); + } + + /** + * Show a text message on screen view for notifying user if content is + * loading or folder is empty + */ + private void setBackgroundText() { + OCFileListFragment listFragment = getListOfFilesFragment(); + if (listFragment != null) { + int message = R.string.file_list_loading; + if (!mSyncInProgress) { + // In case folder list is empty + message = R.string.file_list_empty_moving; + } + listFragment.setMessageForEmptyList(getString(message)); + } else { + Log.e(TAG, "OCFileListFragment is null"); + } + } + + private OCFileListFragment getListOfFilesFragment() { + Fragment listOfFiles = getSupportFragmentManager().findFragmentByTag(CopyActivity.TAG_LIST_OF_FOLDERS); + if (listOfFiles != null) { + return (OCFileListFragment) listOfFiles; + } + Log_OC.wtf(TAG, "Access to unexisting list of files fragment!!"); + return null; + } + + + /** + * {@inheritDoc} + *

+ * Updates action bar and second fragment, if in dual pane mode. + */ + @Override + public void onBrowsedDownTo(OCFile directory) { + setFile(directory); + updateNavigationElementsInActionBar(); + // Sync Folder + startSyncFolderOperation(directory, false); + + } + + + public void startSyncFolderOperation(OCFile folder, boolean ignoreETag) { + long currentSyncTime = System.currentTimeMillis(); + + mSyncInProgress = true; + + // perform folder synchronization + RemoteOperation synchFolderOp = new RefreshFolderOperation(folder, + currentSyncTime, + false, + getFileOperationsHelper().isSharedSupported(), + ignoreETag, + getStorageManager(), + getAccount(), + getApplicationContext() + ); + synchFolderOp.execute(getAccount(), this, null, null); + + setSupportProgressBarIndeterminateVisibility(true); + + setBackgroundText(); + } + + @Override + protected void onResume() { + super.onResume(); + Log_OC.e(TAG, "onResume() start"); + + // refresh list of files + refreshListOfFilesFragment(); + + // Listen for sync messages + IntentFilter syncIntentFilter = new IntentFilter(FileSyncAdapter.EVENT_FULL_SYNC_START); + syncIntentFilter.addAction(FileSyncAdapter.EVENT_FULL_SYNC_END); + syncIntentFilter.addAction(FileSyncAdapter.EVENT_FULL_SYNC_FOLDER_CONTENTS_SYNCED); + syncIntentFilter.addAction(RefreshFolderOperation.EVENT_SINGLE_FOLDER_CONTENTS_SYNCED); + syncIntentFilter.addAction(RefreshFolderOperation.EVENT_SINGLE_FOLDER_SHARES_SYNCED); + mSyncBroadcastReceiver = new SyncBroadcastReceiver(); + registerReceiver(mSyncBroadcastReceiver, syncIntentFilter); + + Log_OC.d(TAG, "onResume() end"); + } + + @Override + protected void onPause() { + Log_OC.e(TAG, "onPause() start"); + if (mSyncBroadcastReceiver != null) { + unregisterReceiver(mSyncBroadcastReceiver); + //LocalBroadcastManager.getInstance(this).unregisterReceiver(mSyncBroadcastReceiver); + mSyncBroadcastReceiver = null; + } + + Log_OC.d(TAG, "onPause() end"); + super.onPause(); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.main_menu, menu); + menu.findItem(R.id.action_upload).setVisible(false); + menu.findItem(R.id.action_sync_account).setVisible(false); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + boolean retval = true; + switch (item.getItemId()) { + case R.id.action_create_dir: { + CreateFolderDialogFragment dialog = + CreateFolderDialogFragment.newInstance(getCurrentFolder()); + dialog.show( + getSupportFragmentManager(), + CreateFolderDialogFragment.CREATE_FOLDER_FRAGMENT + ); + break; + } + case android.R.id.home: { + OCFile currentDir = getCurrentFolder(); + if (currentDir != null && currentDir.getParentId() != 0) { + onBackPressed(); + } + break; + } + default: + retval = super.onOptionsItemSelected(item); + } + return retval; + } + + private OCFile getCurrentFolder() { + OCFile file = getFile(); + if (file != null) { + if (file.isFolder()) { + return file; + } else if (getStorageManager() != null) { + String parentPath = file.getRemotePath().substring(0, file.getRemotePath().lastIndexOf(file.getFileName())); + return getStorageManager().getFileByPath(parentPath); + } + } + return null; + } + + protected void refreshListOfFilesFragment() { + OCFileListFragment fileListFragment = getListOfFilesFragment(); + if (fileListFragment != null) { + fileListFragment.listDirectory(); + } + } + + public void browseToRoot() { + OCFileListFragment listOfFiles = getListOfFilesFragment(); + if (listOfFiles != null) { // should never be null, indeed + OCFile root = getStorageManager().getFileByPath(OCFile.ROOT_PATH); + listOfFiles.listDirectory(root); + setFile(listOfFiles.getCurrentFile()); + updateNavigationElementsInActionBar(); + startSyncFolderOperation(root, false); + } + } + + @Override + public void onBackPressed() { + OCFileListFragment listOfFiles = getListOfFilesFragment(); + if (listOfFiles != null) { // should never be null, indeed + int levelsUp = listOfFiles.onBrowseUp(); + if (levelsUp == 0) { + finish(); + return; + } + setFile(listOfFiles.getCurrentFile()); + updateNavigationElementsInActionBar(); + } + } + + private void updateNavigationElementsInActionBar() { + ActionBar actionBar = getSupportActionBar(); + OCFile currentDir = getCurrentFolder(); + boolean atRoot = (currentDir == null || currentDir.getParentId() == 0); + actionBar.setDisplayHomeAsUpEnabled(!atRoot); + actionBar.setHomeButtonEnabled(!atRoot); + actionBar.setTitle( + atRoot + ? getString(R.string.default_display_name_for_root_folder) + : currentDir.getFileName() + ); + } + + /** + * Set per-view controllers + */ + private void initControls() { + mCancelBtn = (Button) findViewById(R.id.folder_picker_btn_cancel); + mCancelBtn.setOnClickListener(this); + mChooseBtn = (Button) findViewById(R.id.folder_picker_btn_choose); + mChooseBtn.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + if (v == mCancelBtn) { + finish(); + } else if (v == mChooseBtn) { + Intent i = getIntent(); + OCFile targetFile = i.getParcelableExtra(FolderPickerActivity.EXTRA_FILE); + + Intent data = new Intent(); + data.putExtra(EXTRA_CURRENT_FOLDER, getCurrentFolder()); + data.putExtra(EXTRA_TARGET_FILE, targetFile); + setResult(RESULT_OK_AND_MOVE, data); + finish(); + } + } + + + @Override + public void onRemoteOperationFinish(RemoteOperation operation, RemoteOperationResult result) { + super.onRemoteOperationFinish(operation, result); + + if (operation instanceof CreateFolderOperation) { + onCreateFolderOperationFinish((CreateFolderOperation) operation, result); + + } + } + + + /** + * Updates the view associated to the activity after the finish of an operation trying + * to create a new folder. + * + * @param operation Creation operation performed. + * @param result Result of the creation. + */ + private void onCreateFolderOperationFinish( + CreateFolderOperation operation, RemoteOperationResult result + ) { + + if (result.isSuccess()) { + dismissLoadingDialog(); + refreshListOfFilesFragment(); + } else { + dismissLoadingDialog(); + try { + Toast msg = Toast.makeText(CopyActivity.this, + ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()), + Toast.LENGTH_LONG); + msg.show(); + + } catch (NotFoundException e) { + Log_OC.e(TAG, "Error while trying to show fail message ", e); + } + } + } + + + private class SyncBroadcastReceiver extends BroadcastReceiver { + + /** + * {@link BroadcastReceiver} to enable syncing feedback in UI + */ + @Override + public void onReceive(Context context, Intent intent) { + try { + String event = intent.getAction(); + Log_OC.d(TAG, "Received broadcast " + event); + String accountName = intent.getStringExtra(FileSyncAdapter.EXTRA_ACCOUNT_NAME); + String synchFolderRemotePath = intent.getStringExtra(FileSyncAdapter.EXTRA_FOLDER_PATH); + RemoteOperationResult synchResult = (RemoteOperationResult) intent.getSerializableExtra(FileSyncAdapter.EXTRA_RESULT); + boolean sameAccount = (getAccount() != null && accountName.equals(getAccount().name) && getStorageManager() != null); + + if (sameAccount) { + + if (FileSyncAdapter.EVENT_FULL_SYNC_START.equals(event)) { + mSyncInProgress = true; + + } else { + OCFile currentFile = (getFile() == null) ? null : getStorageManager().getFileByPath(getFile().getRemotePath()); + OCFile currentDir = (getCurrentFolder() == null) ? null : getStorageManager().getFileByPath(getCurrentFolder().getRemotePath()); + + if (currentDir == null) { + // current folder was removed from the server + Toast.makeText(CopyActivity.this, + String.format(getString(R.string.sync_current_folder_was_removed), getCurrentFolder().getFileName()), + Toast.LENGTH_LONG) + .show(); + browseToRoot(); + + } else { + if (currentFile == null && !getFile().isFolder()) { + // currently selected file was removed in the server, and now we know it + currentFile = currentDir; + } + + if (synchFolderRemotePath != null && currentDir.getRemotePath().equals(synchFolderRemotePath)) { + OCFileListFragment fileListFragment = getListOfFilesFragment(); + if (fileListFragment != null) { + fileListFragment.listDirectory(currentDir); + } + } + setFile(currentFile); + } + + mSyncInProgress = (!FileSyncAdapter.EVENT_FULL_SYNC_END.equals(event) && !RefreshFolderOperation.EVENT_SINGLE_FOLDER_SHARES_SYNCED.equals(event)); + + if (RefreshFolderOperation.EVENT_SINGLE_FOLDER_CONTENTS_SYNCED. + equals(event) && + /// TODO refactor and make common + synchResult != null && !synchResult.isSuccess() && + (synchResult.getCode() == ResultCode.UNAUTHORIZED || + synchResult.isIdPRedirection() || + (synchResult.isException() && synchResult.getException() + instanceof AuthenticatorException))) { + + try { + OwnCloudClient client; + OwnCloudAccount ocAccount = + new OwnCloudAccount(getAccount(), context); + client = (OwnCloudClientManagerFactory.getDefaultSingleton(). + removeClientFor(ocAccount)); + + if (client != null) { + OwnCloudCredentials cred = client.getCredentials(); + if (cred != null) { + AccountManager am = AccountManager.get(context); + if (cred.authTokenExpires()) { + am.invalidateAuthToken( + getAccount().type, + cred.getAuthToken() + ); + } else { + am.clearPassword(getAccount()); + } + } + } + requestCredentialsUpdate(); + + } catch (AccountNotFoundException e) { + Log_OC.e(TAG, "Account " + getAccount() + " was removed!", e); + } + + } + } + removeStickyBroadcast(intent); + Log_OC.d(TAG, "Setting progress visibility to " + mSyncInProgress); + setSupportProgressBarIndeterminateVisibility(mSyncInProgress /*|| mRefreshSharesInProgress*/); + + setBackgroundText(); + + } + + } catch (RuntimeException e) { + // avoid app crashes after changing the serial id of RemoteOperationResult + // in owncloud library with broadcast notifications pending to process + removeStickyBroadcast(intent); + } + } + } + + + /** + * Shows the information of the {@link OCFile} received as a + * parameter in the second fragment. + * + * @param file {@link OCFile} whose details will be shown + */ + @Override + public void showDetails(OCFile file) { + + } + + /** + * {@inheritDoc} + */ + @Override + public void onTransferStateChanged(OCFile file, boolean downloading, boolean uploading) { + + } + + + @Override + public void onRefresh() { + OCFileListFragment listOfFiles = getListOfFilesFragment(); + if (listOfFiles != null) { + OCFile folder = listOfFiles.getCurrentFile(); + if (folder != null) { + startSyncFolderOperation(folder, true); + } + } + } + +} diff --git a/src/com/owncloud/android/ui/fragment/ExtendedListFragment.java b/src/com/owncloud/android/ui/fragment/ExtendedListFragment.java index 941654b23d..d0e5619901 100644 --- a/src/com/owncloud/android/ui/fragment/ExtendedListFragment.java +++ b/src/com/owncloud/android/ui/fragment/ExtendedListFragment.java @@ -71,7 +71,7 @@ public class ExtendedListFragment extends Fragment private ArrayList mTops; private int mHeightCell = 0; - private OnEnforceableRefreshListener mOnRefreshListener = null; + private SwipeRefreshLayout.OnRefreshListener mOnRefreshListener = null; protected AbsListView mCurrentListView; private ExtendedListView mListView; @@ -352,7 +352,7 @@ public class ExtendedListFragment extends Fragment mRefreshEmptyLayout.setRefreshing(false); if (mOnRefreshListener != null) { - mOnRefreshListener.onRefresh(ignoreETag); + mOnRefreshListener.onRefresh(); } } diff --git a/src/com/owncloud/android/ui/fragment/OCFileListFragment.java b/src/com/owncloud/android/ui/fragment/OCFileListFragment.java index 47d9992576..365d2a0199 100644 --- a/src/com/owncloud/android/ui/fragment/OCFileListFragment.java +++ b/src/com/owncloud/android/ui/fragment/OCFileListFragment.java @@ -43,6 +43,7 @@ import com.owncloud.android.files.FileMenuFilter; import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.lib.resources.status.OwnCloudVersion; import com.owncloud.android.ui.activity.FileActivity; +import com.owncloud.android.ui.activity.CopyActivity; import com.owncloud.android.ui.activity.FileDisplayActivity; import com.owncloud.android.ui.activity.FolderPickerActivity; import com.owncloud.android.ui.activity.OnEnforceableRefreshListener; @@ -349,6 +350,13 @@ public class OCFileListFragment extends ExtendedListFragment { mContainerActivity.getFileOperationsHelper().toggleFavorite(mTargetFile, false); return true; } + case R.id.action_copy: + Intent action = new Intent(getActivity(), CopyActivity.class); + + // Pass mTargetFile that contains info of selected file/folder + action.putExtra(FolderPickerActivity.EXTRA_FILE, mTargetFile); + getActivity().startActivityForResult(action, FileDisplayActivity.ACTION_COPY_FILES); + return true; default: return super.onContextItemSelected(item); } From c7205b8f56298ac79ab9fce1fb760d30d3e8706a Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Thu, 23 Oct 2014 22:34:25 +0200 Subject: [PATCH 042/133] Added CopyActivity --- AndroidManifest.xml | 68 ++++++++----------- .../android/operations/CopyFileOperation.java | 4 ++ 2 files changed, 34 insertions(+), 38 deletions(-) create mode 100644 src/com/owncloud/android/operations/CopyFileOperation.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 5b9fc717fb..85fd586dfc 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1,5 +1,4 @@ - - - + @@ -171,12 +159,12 @@ - + - + @@ -190,7 +178,11 @@ android:name=".ui.activity.FolderPickerActivity" android:label="@string/app_name"/> - + + diff --git a/src/com/owncloud/android/operations/CopyFileOperation.java b/src/com/owncloud/android/operations/CopyFileOperation.java new file mode 100644 index 0000000000..dca51e3060 --- /dev/null +++ b/src/com/owncloud/android/operations/CopyFileOperation.java @@ -0,0 +1,4 @@ +package com.owncloud.android.operations; + +public class CopyFileOperation { +} From fe5b6aa4a81d1878f4b5ad610cb9141e86630b1a Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Thu, 23 Oct 2014 22:34:42 +0200 Subject: [PATCH 043/133] Added copy action --- owncloud-android-library | 2 +- res/values/strings.xml | 8 +- .../datamodel/FileDataStorageManager.java | 315 +++++++++++------- .../android/files/FileOperationsHelper.java | 93 +++--- .../android/operations/CopyFileOperation.java | 101 +++++- .../android/services/OperationsService.java | 164 ++++----- .../android/ui/activity/CopyActivity.java | 10 +- .../android/ui/activity/FileActivity.java | 8 +- .../ui/activity/FileDisplayActivity.java | 58 +++- .../ui/fragment/OCFileListFragment.java | 2 +- .../android/utils/ErrorMessageAdapter.java | 109 +++--- 11 files changed, 559 insertions(+), 311 deletions(-) diff --git a/owncloud-android-library b/owncloud-android-library index dbc8c325d7..b281585c93 160000 --- a/owncloud-android-library +++ b/owncloud-android-library @@ -1 +1 @@ -Subproject commit dbc8c325d74f3f7e8da8236c5abe77a141ae4019 +Subproject commit b281585c93a7eec52e467f51850811f8b0a92955 diff --git a/res/values/strings.xml b/res/values/strings.xml index dd8ce04fc0..7c422201fd 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -331,7 +331,13 @@ An error occurred while trying to move this file or folder to move this file - Instant Uploads + Unable to copy. Please check whether the file exists + It is not possible to copy a folder into a descendant + The file exists already in the destination folder + An error occurred while trying to copy this file or folder + to copy this file + + Instant Uploads Security Upload Video Path diff --git a/src/com/owncloud/android/datamodel/FileDataStorageManager.java b/src/com/owncloud/android/datamodel/FileDataStorageManager.java index c5fc94d1ea..febb3b6951 100644 --- a/src/com/owncloud/android/datamodel/FileDataStorageManager.java +++ b/src/com/owncloud/android/datamodel/FileDataStorageManager.java @@ -50,6 +50,12 @@ import com.owncloud.android.lib.resources.shares.OCShare; import com.owncloud.android.lib.resources.shares.ShareType; import com.owncloud.android.utils.FileStorageUtils; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + public class FileDataStorageManager { public static final int ROOT_PARENT_ID = 0; @@ -60,7 +66,7 @@ public class FileDataStorageManager { private static String TAG = FileDataStorageManager.class.getSimpleName(); - + public FileDataStorageManager(Account account, ContentResolver cr) { mContentProviderClient = null; mContentResolver = cr; @@ -73,7 +79,7 @@ public class FileDataStorageManager { mAccount = account; } - + public void setAccount(Account account) { mAccount = account; } @@ -97,7 +103,7 @@ public class FileDataStorageManager { public ContentProviderClient getContentProviderClient() { return mContentProviderClient; } - + public OCFile getFileByPath(String path) { Cursor c = getCursorForValue(ProviderTableMeta.FILE_PATH, path); @@ -141,7 +147,7 @@ public class FileDataStorageManager { return fileExists(ProviderTableMeta.FILE_PATH, path); } - + public Vector getFolderContent(OCFile f/*, boolean onlyOnDevice*/) { if (f != null && f.isFolder() && f.getFileId() != -1) { // TODO Enable when "On Device" is recovered ? @@ -151,7 +157,7 @@ public class FileDataStorageManager { return new Vector(); } } - + public Vector getFolderImages(OCFile folder/*, boolean onlyOnDevice*/) { Vector ret = new Vector(); @@ -183,7 +189,7 @@ public class FileDataStorageManager { cv.put(ProviderTableMeta.FILE_CONTENT_TYPE, file.getMimetype()); cv.put(ProviderTableMeta.FILE_NAME, file.getFileName()); //if (file.getParentId() != DataStorageManager.ROOT_PARENT_ID) - cv.put(ProviderTableMeta.FILE_PARENT, file.getParentId()); + cv.put(ProviderTableMeta.FILE_PARENT, file.getParentId()); cv.put(ProviderTableMeta.FILE_PATH, file.getRemotePath()); if (!file.isFolder()) cv.put(ProviderTableMeta.FILE_STORAGE_PATH, file.getStoragePath()); @@ -215,12 +221,12 @@ public class FileDataStorageManager { if (getContentResolver() != null) { getContentResolver().update(ProviderTableMeta.CONTENT_URI, cv, ProviderTableMeta._ID + "=?", - new String[] { String.valueOf(file.getFileId()) }); + new String[]{String.valueOf(file.getFileId())}); } else { try { getContentProviderClient().update(ProviderTableMeta.CONTENT_URI, cv, ProviderTableMeta._ID + "=?", - new String[] { String.valueOf(file.getFileId()) }); + new String[]{String.valueOf(file.getFileId())}); } catch (RemoteException e) { Log_OC.e(TAG, "Fail to insert insert file to database " @@ -246,7 +252,7 @@ public class FileDataStorageManager { long new_id = Long.parseLong(result_uri.getPathSegments() .get(1)); file.setFileId(new_id); - } + } } // if (file.isFolder()) { @@ -254,17 +260,17 @@ public class FileDataStorageManager { // } else { // updateFolderSize(file.getParentId()); // } - + return overriden; } /** * Inserts or updates the list of files contained in a given folder. - * + *

* CALLER IS THE RESPONSIBLE FOR GRANTING RIGHT UPDATE OF INFORMATION, NOT THIS METHOD. * HERE ONLY DATA CONSISTENCY SHOULD BE GRANTED - * + * * @param folder * @param updatedFiles * @param filesToRemove @@ -314,9 +320,9 @@ public class FileDataStorageManager { // updating an existing file operations.add(ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI). withValues(cv). - withSelection( ProviderTableMeta._ID + "=?", - new String[] { String.valueOf(file.getFileId()) }) - .build()); + withSelection(ProviderTableMeta._ID + "=?", + new String[]{String.valueOf(file.getFileId())}) + .build()); } else { // adding a new file @@ -324,9 +330,9 @@ public class FileDataStorageManager { withValues(cv).build()); } } - + // prepare operations to remove files in the given folder - String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?" + " AND " + + String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?" + " AND " + ProviderTableMeta.FILE_PATH + "=?"; String [] whereArgs = null; for (OCFile file : filesToRemove) { @@ -360,7 +366,7 @@ public class FileDataStorageManager { } } } - + // update metadata of folder ContentValues cv = new ContentValues(); cv.put(ProviderTableMeta.FILE_MODIFIED, folder.getModificationTimestamp()); @@ -383,12 +389,12 @@ public class FileDataStorageManager { cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, folder.getPublicLink()); cv.put(ProviderTableMeta.FILE_PERMISSIONS, folder.getPermissions()); cv.put(ProviderTableMeta.FILE_REMOTE_ID, folder.getRemoteId()); - + operations.add(ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI). withValues(cv). - withSelection( ProviderTableMeta._ID + "=?", - new String[] { String.valueOf(folder.getFileId()) }) - .build()); + withSelection(ProviderTableMeta._ID + "=?", + new String[]{String.valueOf(folder.getFileId())}) + .build()); // apply operations in batch ContentProviderResult[] results = null; @@ -413,7 +419,7 @@ public class FileDataStorageManager { long newId; Iterator filesIt = updatedFiles.iterator(); OCFile file = null; - for (int i=0; i 0); + success &= (deleted > 0); } String localPath = file.getStoragePath(); if (removeLocalCopy && file.isDown() && localPath != null && success) { @@ -509,12 +515,12 @@ public class FileDataStorageManager { } return success; } - + public boolean removeFolder(OCFile folder, boolean removeDBData, boolean removeLocalContent) { boolean success = true; if (folder != null && folder.isFolder()) { - if (removeDBData && folder.getFileId() != -1) { + if (removeDBData && folder.getFileId() != -1) { success = removeFolderInDb(folder); } if (removeLocalContent && success) { @@ -525,7 +531,7 @@ public class FileDataStorageManager { } private boolean removeFolderInDb(OCFile folder) { - Uri folder_uri = Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_DIR, "" + + Uri folder_uri = Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_DIR, "" + folder.getFileId()); // URI for recursive deletion String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?" + " AND " + ProviderTableMeta.FILE_PATH + "=?"; @@ -538,7 +544,7 @@ public class FileDataStorageManager { e.printStackTrace(); } } else { - deleted = getContentResolver().delete(folder_uri, where, whereArgs); + deleted = getContentResolver().delete(folder_uri, where, whereArgs); } return deleted > 0; } @@ -597,54 +603,54 @@ public class FileDataStorageManager { /** * Updates database and file system for a file or folder that was moved to a different location. - * + * * TODO explore better (faster) implementations * TODO throw exceptions up ! */ public void moveLocalFile(OCFile file, String targetPath, String targetParentPath) { if (file != null && file.fileExists() && !OCFile.ROOT_PATH.equals(file.getFileName())) { - + OCFile targetParent = getFileByPath(targetParentPath); if (targetParent == null) { throw new IllegalStateException("Parent folder of the target path does not exist!!"); } - + /// 1. get all the descendants of the moved element in a single QUERY Cursor c = null; if (getContentProviderClient() != null) { try { c = getContentProviderClient().query( - ProviderTableMeta.CONTENT_URI, - null, - ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " + - ProviderTableMeta.FILE_PATH + " LIKE ? ", - new String[] { - mAccount.name, - file.getRemotePath() + "%" - }, - ProviderTableMeta.FILE_PATH + " ASC " + ProviderTableMeta.CONTENT_URI, + null, + ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " + + ProviderTableMeta.FILE_PATH + " LIKE ? ", + new String[]{ + mAccount.name, + file.getRemotePath() + "%" + }, + ProviderTableMeta.FILE_PATH + " ASC " ); } catch (RemoteException e) { Log_OC.e(TAG, e.getMessage()); } - + } else { c = getContentResolver().query( - ProviderTableMeta.CONTENT_URI, - null, - ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " + - ProviderTableMeta.FILE_PATH + " LIKE ? ", - new String[] { - mAccount.name, - file.getRemotePath() + "%" - }, - ProviderTableMeta.FILE_PATH + " ASC " + ProviderTableMeta.CONTENT_URI, + null, + ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " + + ProviderTableMeta.FILE_PATH + " LIKE ? ", + new String[]{ + mAccount.name, + file.getRemotePath() + "%" + }, + ProviderTableMeta.FILE_PATH + " ASC " ); } /// 2. prepare a batch of update operations to change all the descendants - ArrayList operations = + ArrayList operations = new ArrayList(c.getCount()); String defaultSavePath = FileStorageUtils.getSavePath(mAccount.name); List originalPathsToTriggerMediaScan = new ArrayList(); @@ -656,13 +662,13 @@ public class FileDataStorageManager { ContentValues cv = new ContentValues(); // keep construction in the loop OCFile child = createFileInstance(c); cv.put( - ProviderTableMeta.FILE_PATH, - targetPath + child.getRemotePath().substring(lengthOfOldPath) + ProviderTableMeta.FILE_PATH, + targetPath + child.getRemotePath().substring(lengthOfOldPath) ); - if (child.getStoragePath() != null && + if (child.getStoragePath() != null && child.getStoragePath().startsWith(defaultSavePath)) { // update link to downloaded content - but local move is not done here! - String targetLocalPath = defaultSavePath + targetPath + + String targetLocalPath = defaultSavePath + targetPath + child.getStoragePath().substring(lengthOfOldStoragePath); cv.put(ProviderTableMeta.FILE_STORAGE_PATH, targetLocalPath); @@ -675,17 +681,17 @@ public class FileDataStorageManager { cv.put( ProviderTableMeta.FILE_PARENT, targetParent.getFileId() - ); + ); } operations.add( - ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI). - withValues(cv). - withSelection( - ProviderTableMeta._ID + "=?", - new String[] { String.valueOf(child.getFileId()) } + ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI). + withValues(cv). + withSelection( + ProviderTableMeta._ID + "=?", + new String[]{String.valueOf(child.getFileId())} ) - .build()); - + .build()); + } while (c.moveToNext()); } c.close(); @@ -730,9 +736,60 @@ public class FileDataStorageManager { } } } - + } - + + public void copyLocalFile(OCFile file, String targetPath) { + + if (file != null && file.fileExists() && !OCFile.ROOT_PATH.equals(file.getFileName())) { + String localPath = FileStorageUtils.getDefaultSavePathFor(mAccount.name, file); + File localFile = new File(localPath); + boolean copied = false; + String defaultSavePath = FileStorageUtils.getSavePath(mAccount.name); + if (localFile.exists()) { + File targetFile = new File(defaultSavePath + targetPath); + File targetFolder = targetFile.getParentFile(); + if (!targetFolder.exists()) { + targetFolder.mkdirs(); + } + copied = copyFile(localFile, targetFile); + } + Log_OC.d(TAG, "Local file COPIED : " + copied); + } + } + + private static boolean copyFile(File src, File target) { + boolean ret = true; + + InputStream in = null; + OutputStream out = null; + + try { + in = new FileInputStream(src); + out = new FileOutputStream(target); + byte[] buf = new byte[1024]; + int len; + while ((len = in.read(buf)) > 0) { + out.write(buf, 0, len); + } + } catch (IOException ex) { + ret = false; + } finally { + if (in != null) try { + in.close(); + } catch (IOException e) { + e.printStackTrace(System.err); + } + if (out != null) try { + out.close(); + } catch (IOException e) { + e.printStackTrace(System.err); + } + } + + return ret; + } + private Vector getFolderContent(long parentId/*, boolean onlyOnDevice*/) { @@ -745,17 +802,17 @@ public class FileDataStorageManager { if (getContentProviderClient() != null) { try { - c = getContentProviderClient().query(req_uri, null, - ProviderTableMeta.FILE_PARENT + "=?" , - new String[] { String.valueOf(parentId)}, null); + c = getContentProviderClient().query(req_uri, null, + ProviderTableMeta.FILE_PARENT + "=?", + new String[]{String.valueOf(parentId)}, null); } catch (RemoteException e) { Log_OC.e(TAG, e.getMessage()); return ret; } } else { - c = getContentResolver().query(req_uri, null, - ProviderTableMeta.FILE_PARENT + "=?" , - new String[] { String.valueOf(parentId)}, null); + c = getContentResolver().query(req_uri, null, + ProviderTableMeta.FILE_PARENT + "=?", + new String[]{String.valueOf(parentId)}, null); } if (c.moveToFirst()) { @@ -774,8 +831,8 @@ public class FileDataStorageManager { return ret; } - - + + private OCFile createRootDir() { OCFile file = new OCFile(OCFile.ROOT_PATH); file.setMimetype("DIR"); @@ -793,7 +850,7 @@ public class FileDataStorageManager { cmp_key + "=? AND " + ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?", - new String[] { value, mAccount.name }, null); + new String[]{value, mAccount.name}, null); } else { try { c = getContentProviderClient().query( @@ -801,7 +858,7 @@ public class FileDataStorageManager { null, cmp_key + "=? AND " + ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?", - new String[] { value, mAccount.name }, null); + new String[]{value, mAccount.name}, null); } catch (RemoteException e) { Log_OC.e(TAG, "Couldn't determine file existance, assuming non existance: " @@ -823,14 +880,14 @@ public class FileDataStorageManager { key + "=? AND " + ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?", - new String[] { value, mAccount.name }, null); + new String[]{value, mAccount.name}, null); } else { try { c = getContentProviderClient().query( ProviderTableMeta.CONTENT_URI, null, key + "=? AND " + ProviderTableMeta.FILE_ACCOUNT_OWNER - + "=?", new String[] { value, mAccount.name }, + + "=?", new String[]{value, mAccount.name}, null); } catch (RemoteException e) { Log_OC.e(TAG, "Could not get file details: " + e.getMessage()); @@ -839,7 +896,7 @@ public class FileDataStorageManager { } return c; } - + private OCFile createFileInstance(Cursor c) { OCFile file = null; @@ -893,10 +950,11 @@ public class FileDataStorageManager { } return file; } - + /** * Returns if the file/folder is shared by link or not - * @param path Path of the file/folder + * + * @param path Path of the file/folder * @return */ public boolean isShareByLink(String path) { @@ -908,10 +966,11 @@ public class FileDataStorageManager { c.close(); return file.isShareByLink(); } - + /** * Returns the public link of the file/folder - * @param path Path of the file/folder + * + * @param path Path of the file/folder * @return */ public String getPublicLink(String path) { @@ -923,8 +982,8 @@ public class FileDataStorageManager { c.close(); return file.getPublicLink(); } - - + + // Methods for Shares public boolean saveShare(OCShare share) { boolean overriden = false; @@ -946,19 +1005,19 @@ public class FileDataStorageManager { cv.put(ProviderTableMeta.OCSHARES_USER_ID, share.getUserId()); cv.put(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, share.getIdRemoteShared()); cv.put(ProviderTableMeta.OCSHARES_ACCOUNT_OWNER, mAccount.name); - + if (shareExists(share.getIdRemoteShared())) { // for renamed files overriden = true; if (getContentResolver() != null) { getContentResolver().update(ProviderTableMeta.CONTENT_URI_SHARE, cv, ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED + "=?", - new String[] { String.valueOf(share.getIdRemoteShared()) }); + new String[]{String.valueOf(share.getIdRemoteShared())}); } else { try { getContentProviderClient().update(ProviderTableMeta.CONTENT_URI_SHARE, cv, ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED + "=?", - new String[] { String.valueOf(share.getIdRemoteShared()) }); + new String[]{String.valueOf(share.getIdRemoteShared())}); } catch (RemoteException e) { Log_OC.e(TAG, "Fail to insert insert file to database " @@ -984,7 +1043,7 @@ public class FileDataStorageManager { long new_id = Long.parseLong(result_uri.getPathSegments() .get(1)); share.setId(new_id); - } + } } return overriden; @@ -1000,7 +1059,7 @@ public class FileDataStorageManager { ProviderTableMeta.OCSHARES_PATH + "=? AND " + ProviderTableMeta.OCSHARES_SHARE_TYPE + "=? AND " + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?", - new String[] { path, Integer.toString(type.getValue()), mAccount.name }, + new String[]{path, Integer.toString(type.getValue()), mAccount.name}, null); } else { try { @@ -1010,7 +1069,7 @@ public class FileDataStorageManager { ProviderTableMeta.OCSHARES_PATH + "=? AND " + ProviderTableMeta.OCSHARES_SHARE_TYPE + "=? AND " + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?", - new String[] { path, Integer.toString(type.getValue()), mAccount.name }, + new String[]{path, Integer.toString(type.getValue()), mAccount.name}, null); } catch (RemoteException e) { @@ -1025,7 +1084,7 @@ public class FileDataStorageManager { c.close(); return share; } - + private OCShare createShareInstance(Cursor c) { OCShare share = null; if (c != null) { @@ -1066,7 +1125,7 @@ public class FileDataStorageManager { cmp_key + "=? AND " + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?", - new String[] { value, mAccount.name }, null); + new String[]{value, mAccount.name}, null); } else { try { c = getContentProviderClient().query( @@ -1074,7 +1133,7 @@ public class FileDataStorageManager { null, cmp_key + "=? AND " + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?", - new String[] { value, mAccount.name }, null); + new String[]{value, mAccount.name}, null); } catch (RemoteException e) { Log_OC.e(TAG, "Couldn't determine file existance, assuming non existance: " @@ -1086,7 +1145,7 @@ public class FileDataStorageManager { c.close(); return retval; } - + private boolean shareExists(long remoteId) { return shareExists(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, String.valueOf(remoteId)); } @@ -1096,8 +1155,8 @@ public class FileDataStorageManager { cv.put(ProviderTableMeta.FILE_SHARE_BY_LINK, false); cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, ""); String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?"; - String [] whereArgs = new String[]{mAccount.name}; - + String[] whereArgs = new String[]{mAccount.name}; + if (getContentResolver() != null) { getContentResolver().update(ProviderTableMeta.CONTENT_URI, cv, where, whereArgs); @@ -1117,7 +1176,7 @@ public class FileDataStorageManager { ContentValues cv = new ContentValues(); cv.put(ProviderTableMeta.FILE_SHARE_BY_LINK, false); cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, ""); - String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " + + String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " + ProviderTableMeta.FILE_PARENT + "=?"; String [] whereArgs = new String[] { mAccount.name , String.valueOf(folder.getFileId()) }; @@ -1138,8 +1197,8 @@ public class FileDataStorageManager { private void cleanShares() { String where = ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?"; - String [] whereArgs = new String[]{mAccount.name}; - + String[] whereArgs = new String[]{mAccount.name}; + if (getContentResolver() != null) { getContentResolver().delete(ProviderTableMeta.CONTENT_URI_SHARE, where, whereArgs); @@ -1154,7 +1213,7 @@ public class FileDataStorageManager { } } } - + public void saveShares(Collection shares) { cleanShares(); if (shares != null) { @@ -1203,7 +1262,7 @@ public class FileDataStorageManager { ); } } - + // apply operations in batch if (operations.size() > 0) { @SuppressWarnings("unused") @@ -1219,21 +1278,21 @@ public class FileDataStorageManager { } else { results = getContentProviderClient().applyBatch(operations); } - + } catch (OperationApplicationException e) { Log_OC.e(TAG, "Exception in batch of operations " + e.getMessage()); - + } catch (RemoteException e) { Log_OC.e(TAG, "Exception in batch of operations " + e.getMessage()); } } } - + } - + public void updateSharedFiles(Collection sharedFiles) { cleanSharedFiles(); - + if (sharedFiles != null) { ArrayList operations = new ArrayList(sharedFiles.size()); @@ -1297,7 +1356,7 @@ public class FileDataStorageManager { ); } } - + // apply operations in batch if (operations.size() > 0) { @SuppressWarnings("unused") @@ -1313,21 +1372,21 @@ public class FileDataStorageManager { } else { results = getContentProviderClient().applyBatch(operations); } - + } catch (OperationApplicationException e) { Log_OC.e(TAG, "Exception in batch of operations " + e.getMessage()); - + } catch (RemoteException e) { Log_OC.e(TAG, "Exception in batch of operations " + e.getMessage()); } } } - - } - - public void removeShare(OCShare share){ + + } + + public void removeShare(OCShare share) { Uri share_uri = ProviderTableMeta.CONTENT_URI_SHARE; - String where = ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?" + " AND " + + String where = ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?" + " AND " + ProviderTableMeta.FILE_PATH + "=?"; String [] whereArgs = new String[]{mAccount.name, share.getPath()}; if (getContentProviderClient() != null) { @@ -1337,10 +1396,10 @@ public class FileDataStorageManager { e.printStackTrace(); } } else { - getContentResolver().delete(share_uri, where, whereArgs); + getContentResolver().delete(share_uri, where, whereArgs); } } - + public void saveSharesDB(ArrayList shares) { saveShares(shares); @@ -1351,7 +1410,7 @@ public class FileDataStorageManager { String path = share.getPath(); if (share.isFolder()) { path = path + FileUtils.PATH_SEPARATOR; - } + } // Update OCFile with data from share: ShareByLink and publicLink OCFile file = getFileByPath(path); @@ -1360,18 +1419,18 @@ public class FileDataStorageManager { file.setShareByLink(true); sharedFiles.add(file); } - } + } } - + updateSharedFiles(sharedFiles); } - + public void saveSharesInFolder(ArrayList shares, OCFile folder) { cleanSharedFilesInFolder(folder); ArrayList operations = new ArrayList(); operations = prepareRemoveSharesInFolder(folder, operations); - + if (shares != null) { // prepare operations to insert or update files to save in the given folder for (OCShare share : shares) { @@ -1415,7 +1474,7 @@ public class FileDataStorageManager { //} } } - + // apply operations in batch if (operations.size() > 0) { @SuppressWarnings("unused") @@ -1437,13 +1496,13 @@ public class FileDataStorageManager { } } //} - + } private ArrayList prepareRemoveSharesInFolder( OCFile folder, ArrayList preparedOperations) { if (folder != null) { - String where = ProviderTableMeta.OCSHARES_PATH + "=?" + " AND " + String where = ProviderTableMeta.OCSHARES_PATH + "=?" + " AND " + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?"; String [] whereArgs = new String[]{ "", mAccount.name }; diff --git a/src/com/owncloud/android/files/FileOperationsHelper.java b/src/com/owncloud/android/files/FileOperationsHelper.java index ddee205093..57b766ec65 100644 --- a/src/com/owncloud/android/files/FileOperationsHelper.java +++ b/src/com/owncloud/android/files/FileOperationsHelper.java @@ -21,8 +21,6 @@ package com.owncloud.android.files; -import org.apache.http.protocol.HTTP; - import android.accounts.Account; import android.content.Intent; import android.net.Uri; @@ -35,7 +33,6 @@ import com.owncloud.android.authentication.AccountUtils; import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder; import com.owncloud.android.files.services.FileUploader.FileUploaderBinder; - import com.owncloud.android.lib.common.network.WebdavUtils; import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.lib.resources.status.OwnCloudVersion; @@ -44,20 +41,22 @@ import com.owncloud.android.services.observer.FileObserverService; import com.owncloud.android.ui.activity.FileActivity; import com.owncloud.android.ui.dialog.ShareLinkToDialog; +import org.apache.http.protocol.HTTP; + /** * */ public class FileOperationsHelper { private static final String TAG = FileOperationsHelper.class.getName(); - - private static final String FTAG_CHOOSER_DIALOG = "CHOOSER_DIALOG"; + + private static final String FTAG_CHOOSER_DIALOG = "CHOOSER_DIALOG"; protected FileActivity mFileActivity = null; /// Identifier of operation in progress which result shouldn't be lost private long mWaitingForOpId = Long.MAX_VALUE; - + public FileOperationsHelper(FileActivity fileActivity) { mFileActivity = fileActivity; } @@ -67,7 +66,7 @@ public class FileOperationsHelper { if (file != null) { String storagePath = file.getStoragePath(); String encodedStoragePath = WebdavUtils.encodePath(storagePath); - + Intent intentForSavedMimeType = new Intent(Intent.ACTION_VIEW); intentForSavedMimeType.setDataAndType(Uri.parse("file://"+ encodedStoragePath), file.getMimetype()); intentForSavedMimeType.setFlags( @@ -94,29 +93,29 @@ public class FileOperationsHelper { } else { chooserIntent = Intent.createChooser(intentForSavedMimeType, mFileActivity.getString(R.string.actionbar_open_with)); } - + mFileActivity.startActivity(chooserIntent); - + } else { Log_OC.wtf(TAG, "Trying to open a NULL OCFile"); } } - - + + public void shareFileWithLink(OCFile file) { - + if (isSharedSupported()) { if (file != null) { String link = "https://fake.url"; Intent intent = createShareWithLinkIntent(link); - String[] packagesToExclude = new String[] { mFileActivity.getPackageName() }; + String[] packagesToExclude = new String[]{mFileActivity.getPackageName()}; DialogFragment chooserDialog = ShareLinkToDialog.newInstance(intent, packagesToExclude, file); chooserDialog.show(mFileActivity.getSupportFragmentManager(), FTAG_CHOOSER_DIALOG); - + } else { Log_OC.wtf(TAG, "Trying to share a NULL OCFile"); } - + } else { // Show a Message Toast t = Toast.makeText( @@ -125,13 +124,13 @@ public class FileOperationsHelper { t.show(); } } - + public void shareFileWithLinkToApp(OCFile file, String password, Intent sendIntent) { if (file != null) { mFileActivity.showLoadingDialog(); - + Intent service = new Intent(mFileActivity, OperationsService.class); service.setAction(OperationsService.ACTION_CREATE_SHARE); service.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount()); @@ -144,18 +143,18 @@ public class FileOperationsHelper { Log_OC.wtf(TAG, "Trying to open a NULL OCFile"); } } - - + + private Intent createShareWithLinkIntent(String link) { Intent intentToShareLink = new Intent(Intent.ACTION_SEND); intentToShareLink.putExtra(Intent.EXTRA_TEXT, link); intentToShareLink.setType(HTTP.PLAIN_TEXT_TYPE); - return intentToShareLink; + return intentToShareLink; } - - + + /** - * @return 'True' if the server supports the Share API + * @return 'True' if the server supports the Share API */ public boolean isSharedSupported() { if (mFileActivity.getAccount() != null) { @@ -164,10 +163,10 @@ public class FileOperationsHelper { } return false; } - - + + public void unshareFileWithLink(OCFile file) { - + if (isSharedSupported()) { // Unshare the file Intent service = new Intent(mFileActivity, OperationsService.class); @@ -177,15 +176,15 @@ public class FileOperationsHelper { mWaitingForOpId = mFileActivity.getOperationsServiceBinder().queueNewOperation(service); mFileActivity.showLoadingDialog(); - + } else { // Show a Message Toast t = Toast.makeText(mFileActivity, mFileActivity.getString(R.string.share_link_no_support_share_api), Toast.LENGTH_LONG); t.show(); - + } } - + public void sendDownloadedFile(OCFile file) { if (file != null) { String storagePath = file.getStoragePath(); @@ -197,7 +196,7 @@ public class FileOperationsHelper { sendIntent.putExtra(Intent.ACTION_SEND, true); // Send Action // Show dialog, without the own app - String[] packagesToExclude = new String[] { mFileActivity.getPackageName() }; + String[] packagesToExclude = new String[]{mFileActivity.getPackageName()}; DialogFragment chooserDialog = ShareLinkToDialog.newInstance(sendIntent, packagesToExclude, file); chooserDialog.show(mFileActivity.getSupportFragmentManager(), FTAG_CHOOSER_DIALOG); @@ -205,10 +204,10 @@ public class FileOperationsHelper { Log_OC.wtf(TAG, "Trying to send a NULL OCFile"); } } - - + + public void syncFile(OCFile file) { - + if (!file.isFolder()){ Intent intent = new Intent(mFileActivity, OperationsService.class); intent.setAction(OperationsService.ACTION_SYNC_FILE); @@ -269,8 +268,8 @@ public class FileOperationsHelper { mFileActivity.showLoadingDialog(); } - - + + public void createFolder(String remotePath, boolean createFullPath) { // Create Folder Intent service = new Intent(mFileActivity, OperationsService.class); @@ -317,8 +316,9 @@ public class FileOperationsHelper { /** * Start move file operation - * @param newfile File where it is going to be moved - * @param currentFile File with the previous info + * + * @param newfile File where it is going to be moved + * @param currentFile File with the previous info */ public void moveFile(OCFile newfile, OCFile currentFile) { // Move files @@ -332,6 +332,23 @@ public class FileOperationsHelper { mFileActivity.showLoadingDialog(); } + /** + * Start copy file operation + * + * @param newfile File where it is going to be moved + * @param currentFile File with the previous info + */ + public void copyFile(OCFile newfile, OCFile currentFile) { + // Copy files + Intent service = new Intent(mFileActivity, OperationsService.class); + service.setAction(OperationsService.ACTION_COPY_FILE); + service.putExtra(OperationsService.EXTRA_NEW_PARENT_PATH, newfile.getRemotePath()); + service.putExtra(OperationsService.EXTRA_REMOTE_PATH, currentFile.getRemotePath()); + service.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount()); + mWaitingForOpId = mFileActivity.getOperationsServiceBinder().queueNewOperation(service); + + mFileActivity.showLoadingDialog(); + } public long getOpIdWaitingFor() { return mWaitingForOpId; @@ -341,7 +358,7 @@ public class FileOperationsHelper { public void setOpIdWaitingFor(long waitingForOpId) { mWaitingForOpId = waitingForOpId; } - + /** * @return 'True' if the server doesn't need to check forbidden characters */ diff --git a/src/com/owncloud/android/operations/CopyFileOperation.java b/src/com/owncloud/android/operations/CopyFileOperation.java index dca51e3060..6f0f908138 100644 --- a/src/com/owncloud/android/operations/CopyFileOperation.java +++ b/src/com/owncloud/android/operations/CopyFileOperation.java @@ -1,4 +1,103 @@ +/* ownCloud Android client application + * Copyright (C) 2012-2014 ownCloud Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, + * as published by the Free Software Foundation. + * + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + package com.owncloud.android.operations; -public class CopyFileOperation { +import android.accounts.Account; +import android.util.Log; + +import com.owncloud.android.datamodel.OCFile; +import com.owncloud.android.lib.common.OwnCloudClient; +import com.owncloud.android.lib.common.operations.RemoteOperationResult; +import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; +import com.owncloud.android.lib.resources.files.CopyRemoteFileOperation; +import com.owncloud.android.operations.common.SyncOperation; + + +/** + * Operation copying an {@link OCFile} to a different folder. + * + * @author David A. Velasco + */ +public class CopyFileOperation extends SyncOperation { + + //private static final String TAG = MoveFileOperation.class.getSimpleName(); + + private String mSrcPath; + private String mTargetParentPath; + + private OCFile mFile; + + + /** + * Constructor + * + * @param srcPath Remote path of the {@link OCFile} to move. + * @param targetParentPath Path to the folder where the file will be copied into. + * @param account OwnCloud account containing both the file and the target folder + */ + public CopyFileOperation(String srcPath, String targetParentPath, Account account) { + mSrcPath = srcPath; + mTargetParentPath = targetParentPath; + if (!mTargetParentPath.endsWith(OCFile.PATH_SEPARATOR)) { + mTargetParentPath += OCFile.PATH_SEPARATOR; + } + + mFile = null; + } + + /** + * Performs the operation. + * + * @param client Client object to communicate with the remote ownCloud server. + */ + @Override + protected RemoteOperationResult run(OwnCloudClient client) { + RemoteOperationResult result; + + /// 1. check copy validity + if (mTargetParentPath.startsWith(mSrcPath)) { + return new RemoteOperationResult(ResultCode.INVALID_MOVE_INTO_DESCENDANT); + } + mFile = getStorageManager().getFileByPath(mSrcPath); + if (mFile == null) { + return new RemoteOperationResult(ResultCode.FILE_NOT_FOUND); + } + + /// 2. remote copy + String targetPath = mTargetParentPath + mFile.getFileName(); + if (mFile.isFolder()) { + targetPath += OCFile.PATH_SEPARATOR; + } + CopyRemoteFileOperation operation = new CopyRemoteFileOperation( + mSrcPath, + targetPath, + false + ); + result = operation.execute(client); + + /// 3. local copy + if (result.isSuccess()) { + getStorageManager().copyLocalFile(mFile, targetPath); + } + // TODO handle ResultCode.PARTIAL_COPY_DONE in client Activity, for the moment + + return result; + } + + } diff --git a/src/com/owncloud/android/services/OperationsService.java b/src/com/owncloud/android/services/OperationsService.java index 2514c4de67..f7034f0a39 100644 --- a/src/com/owncloud/android/services/OperationsService.java +++ b/src/com/owncloud/android/services/OperationsService.java @@ -19,11 +19,21 @@ package com.owncloud.android.services; -import java.io.IOException; -import java.util.Iterator; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentLinkedQueue; -import java.util.concurrent.ConcurrentMap; +import android.accounts.Account; +import android.accounts.AccountsException; +import android.accounts.AuthenticatorException; +import android.accounts.OperationCanceledException; +import android.app.Service; +import android.content.Intent; +import android.net.Uri; +import android.os.Binder; +import android.os.Handler; +import android.os.HandlerThread; +import android.os.IBinder; +import android.os.Looper; +import android.os.Message; +import android.os.Process; +import android.util.Pair; import com.owncloud.android.MainApp; import com.owncloud.android.R; @@ -42,7 +52,7 @@ import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.lib.resources.shares.ShareType; import com.owncloud.android.lib.resources.status.OwnCloudVersion; import com.owncloud.android.lib.resources.users.GetRemoteUserNameOperation; -import com.owncloud.android.operations.common.SyncOperation; +import com.owncloud.android.operations.CopyFileOperation; import com.owncloud.android.operations.CreateFolderOperation; import com.owncloud.android.operations.CreateShareOperation; import com.owncloud.android.operations.GetServerInfoOperation; @@ -53,28 +63,18 @@ import com.owncloud.android.operations.RenameFileOperation; import com.owncloud.android.operations.SynchronizeFileOperation; import com.owncloud.android.operations.SynchronizeFolderOperation; import com.owncloud.android.operations.UnshareLinkOperation; +import com.owncloud.android.operations.common.SyncOperation; -import android.accounts.Account; -import android.accounts.AccountManager; -import android.accounts.AccountsException; -import android.accounts.AuthenticatorException; -import android.accounts.OperationCanceledException; -import android.app.Service; -import android.content.Intent; -import android.net.Uri; -import android.os.Binder; -import android.os.Handler; -import android.os.HandlerThread; -import android.os.IBinder; -import android.os.Looper; -import android.os.Message; -import android.os.Process; -import android.util.Pair; +import java.io.IOException; +import java.util.Iterator; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.concurrent.ConcurrentMap; public class OperationsService extends Service { - + private static final String TAG = OperationsService.class.getSimpleName(); - + public static final String EXTRA_ACCOUNT = "ACCOUNT"; public static final String EXTRA_SERVER_URL = "SERVER_URL"; public static final String EXTRA_OAUTH2_QUERY_PARAMETERS = "OAUTH2_QUERY_PARAMETERS"; @@ -90,7 +90,7 @@ public class OperationsService extends Service { public static final String EXTRA_PASSWORD_SHARE = "PASSWORD_SHARE"; public static final String EXTRA_COOKIE = "COOKIE"; - + public static final String ACTION_CREATE_SHARE = "CREATE_SHARE"; public static final String ACTION_UNSHARE = "UNSHARE"; public static final String ACTION_GET_SERVER_INFO = "GET_SERVER_INFO"; @@ -102,22 +102,24 @@ public class OperationsService extends Service { public static final String ACTION_SYNC_FILE = "SYNC_FILE"; public static final String ACTION_SYNC_FOLDER = "SYNC_FOLDER";//for the moment, just to download public static final String ACTION_MOVE_FILE = "MOVE_FILE"; - + public static final String ACTION_COPY_FILE = "COPY_FILE"; + public static final String ACTION_OPERATION_ADDED = OperationsService.class.getName() + ".OPERATION_ADDED"; public static final String ACTION_OPERATION_FINISHED = OperationsService.class.getName() + ".OPERATION_FINISHED"; - private ConcurrentMap> - mUndispatchedFinishedOperations = + + private ConcurrentMap> + mUndispatchedFinishedOperations = new ConcurrentHashMap>(); - + private static class Target { public Uri mServerUrl = null; public Account mAccount = null; public String mCookie = null; - + public Target(Account account, Uri serverUrl, String cookie) { mAccount = account; mServerUrl = serverUrl; @@ -151,11 +153,11 @@ public class OperationsService extends Service { mSyncFolderHandler = new SyncFolderHandler(thread.getLooper(), this); } - + /** * Entry point to add a new operation to the queue of operations. - * - * New operations are added calling to startService(), resulting in a call to this method. + *

+ * New operations are added calling to startService(), resulting in a call to this method. * This ensures the service will keep on working although the caller activity goes away. */ @Override @@ -200,19 +202,13 @@ public class OperationsService extends Service { // Saving cookies try { OwnCloudClientManagerFactory.getDefaultSingleton(). - saveAllClients(this, MainApp.getAccountType()); - + saveAllClients(this, MainApp.getAccountType()); + // TODO - get rid of these exceptions - } catch (AccountNotFoundException e) { - e.printStackTrace(); - } catch (AuthenticatorException e) { - e.printStackTrace(); - } catch (OperationCanceledException e) { - e.printStackTrace(); - } catch (IOException e) { + } catch (AccountNotFoundException | AuthenticatorException | OperationCanceledException | IOException e) { e.printStackTrace(); } - + mUndispatchedFinishedOperations.clear(); mOperationsBinder = null; @@ -227,8 +223,8 @@ public class OperationsService extends Service { } /** - * Provides a binder object that clients can use to perform actions on the queue of operations, - * except the addition of new operations. + * Provides a binder object that clients can use to perform actions on the queue of operations, + * except the addition of new operations. */ @Override public IBinder onBind(Intent intent) { @@ -236,7 +232,7 @@ public class OperationsService extends Service { return mOperationsBinder; } - + /** * Called when ALL the bound clients were unbound. */ @@ -248,19 +244,19 @@ public class OperationsService extends Service { /** - * Binder to let client components to perform actions on the queue of operations. - * - * It provides by itself the available operations. + * Binder to let client components to perform actions on the queue of operations. + *

+ * It provides by itself the available operations. */ public class OperationsServiceBinder extends Binder /* implements OnRemoteOperationListener */ { - + /** * Map of listeners that will be reported about the end of operations from a * {@link OperationsServiceBinder} instance */ - private ConcurrentMap mBoundListeners = + private final ConcurrentMap mBoundListeners = new ConcurrentHashMap(); - + private ServiceHandler mServiceHandler = null; public OperationsServiceBinder(ServiceHandler serviceHandler) { @@ -280,14 +276,14 @@ public class OperationsService extends Service { public void clearListeners() { - + mBoundListeners.clear(); } - + /** * Adds a listener interested in being reported about the end of operations. - * + * * @param listener Object to notify about the end of operations. * @param callbackHandler {@link Handler} to access the listener without * breaking Android threading protection. @@ -298,15 +294,15 @@ public class OperationsService extends Service { mBoundListeners.put(listener, callbackHandler); } } - - + + /** * Removes a listener from the list of objects interested in the being reported about * the end of operations. * * @param listener Object to notify about progress of transfer. */ - public void removeOperationListener (OnRemoteOperationListener listener) { + public void removeOperationListener(OnRemoteOperationListener listener) { synchronized (mBoundListeners) { mBoundListeners.remove(listener); } @@ -314,7 +310,7 @@ public class OperationsService extends Service { /** - * TODO - IMPORTANT: update implementation when more operations are moved into the service + * TODO - IMPORTANT: update implementation when more operations are moved into the service * * @return 'True' when an operation that enforces the user to wait for completion is * in process. @@ -343,7 +339,7 @@ public class OperationsService extends Service { return Long.MAX_VALUE; } } - + public boolean dispatchResultIfFinished(int operationId, OnRemoteOperationListener listener) { @@ -378,7 +374,7 @@ public class OperationsService extends Service { /** - * Operations worker. Performs the pending operations in the order they were requested. + * Operations worker. Performs the pending operations in the order they were requested. * * Created with the Looper of a new thread, started in {@link OperationsService#onCreate()}. */ @@ -388,7 +384,7 @@ public class OperationsService extends Service { OperationsService mService; - + private ConcurrentLinkedQueue> mPendingOperations = new ConcurrentLinkedQueue>(); @@ -412,7 +408,7 @@ public class OperationsService extends Service { Log_OC.d(TAG, "Stopping after command with id " + msg.arg1); mService.stopSelf(msg.arg1); } - + /** * Performs the next operation in the queue @@ -517,7 +513,7 @@ public class OperationsService extends Service { } - + /** * Creates a new operation, as described by operationIntent. @@ -626,7 +622,13 @@ public class OperationsService extends Service { // Move file/folder String remotePath = operationIntent.getStringExtra(EXTRA_REMOTE_PATH); String newParentPath = operationIntent.getStringExtra(EXTRA_NEW_PARENT_PATH); - operation = new MoveFileOperation(remotePath,newParentPath,account); + operation = new MoveFileOperation(remotePath, newParentPath, account); + + } else if (action.equals(ACTION_COPY_FILE)) { + // Copy file/folder + String remotePath = operationIntent.getStringExtra(EXTRA_REMOTE_PATH); + String newParentPath = operationIntent.getStringExtra(EXTRA_NEW_PARENT_PATH); + operation = new CopyFileOperation(remotePath, newParentPath, account); } } @@ -642,11 +644,11 @@ public class OperationsService extends Service { return null; } } - + /** * Sends a broadcast when a new operation is added to the queue. - * + * * Local broadcasts are only delivered to activities in the same process, but can't be * done sticky :\ * @@ -656,43 +658,43 @@ public class OperationsService extends Service { private void sendBroadcastNewOperation(Target target, RemoteOperation operation) { Intent intent = new Intent(ACTION_OPERATION_ADDED); if (target.mAccount != null) { - intent.putExtra(EXTRA_ACCOUNT, target.mAccount); + intent.putExtra(EXTRA_ACCOUNT, target.mAccount); } else { - intent.putExtra(EXTRA_SERVER_URL, target.mServerUrl); + intent.putExtra(EXTRA_SERVER_URL, target.mServerUrl); } //LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this); //lbm.sendBroadcast(intent); sendStickyBroadcast(intent); } - + // TODO - maybe add a notification for real start of operations - + /** * Sends a LOCAL broadcast when an operations finishes in order to the interested activities c * an update their view * * Local broadcasts are only delivered to activities in the same process. - * - * @param target Account or URL pointing to an OC server. - * @param operation Finished operation. - * @param result Result of the operation. + * + * @param target Account or URL pointing to an OC server. + * @param operation Finished operation. + * @param result Result of the operation. */ private void sendBroadcastOperationFinished(Target target, RemoteOperation operation, RemoteOperationResult result) { Intent intent = new Intent(ACTION_OPERATION_FINISHED); intent.putExtra(EXTRA_RESULT, result); if (target.mAccount != null) { - intent.putExtra(EXTRA_ACCOUNT, target.mAccount); + intent.putExtra(EXTRA_ACCOUNT, target.mAccount); } else { - intent.putExtra(EXTRA_SERVER_URL, target.mServerUrl); + intent.putExtra(EXTRA_SERVER_URL, target.mServerUrl); } //LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this); //lbm.sendBroadcast(intent); sendStickyBroadcast(intent); } - + /** * Notifies the currently subscribed listeners about the end of an operation. * @@ -720,9 +722,9 @@ public class OperationsService extends Service { } if (count == 0) { //mOperationResults.put(operation.hashCode(), result); - Pair undispatched = - new Pair(operation, result); - mUndispatchedFinishedOperations.put(operation.hashCode(), undispatched); + Pair undispatched = + new Pair<>(operation, result); + mUndispatchedFinishedOperations.put(((Runnable) operation).hashCode(), undispatched); } Log_OC.d(TAG, "Called " + count + " listeners"); } diff --git a/src/com/owncloud/android/ui/activity/CopyActivity.java b/src/com/owncloud/android/ui/activity/CopyActivity.java index e031713701..c7c4a6cac6 100644 --- a/src/com/owncloud/android/ui/activity/CopyActivity.java +++ b/src/com/owncloud/android/ui/activity/CopyActivity.java @@ -20,7 +20,6 @@ package com.owncloud.android.ui.activity; import android.accounts.Account; import android.accounts.AccountManager; import android.accounts.AuthenticatorException; -import android.accounts.OperationCanceledException; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -54,7 +53,6 @@ import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCo import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.operations.CreateFolderOperation; import com.owncloud.android.operations.RefreshFolderOperation; -import com.owncloud.android.operations.SynchronizeFolderOperation; import com.owncloud.android.syncadapter.FileSyncAdapter; import com.owncloud.android.ui.dialog.CreateFolderDialogFragment; import com.owncloud.android.ui.fragment.FileFragment; @@ -62,15 +60,13 @@ import com.owncloud.android.ui.fragment.OCFileListFragment; import com.owncloud.android.utils.DisplayUtils; import com.owncloud.android.utils.ErrorMessageAdapter; -import java.io.IOException; - public class CopyActivity extends HookActivity implements FileFragment.ContainerActivity, OnClickListener, SwipeRefreshLayout.OnRefreshListener { public static final String EXTRA_CURRENT_FOLDER = UploadFilesActivity.class.getCanonicalName() + ".EXTRA_CURRENT_FOLDER"; public static final String EXTRA_TARGET_FILE = UploadFilesActivity.class.getCanonicalName() + "EXTRA_TARGET_FILE"; - public static final int RESULT_OK_AND_MOVE = 1; + public static final int RESULT_OK_AND_COPY = 1; private SyncBroadcastReceiver mSyncBroadcastReceiver; @@ -371,12 +367,12 @@ public class CopyActivity extends HookActivity implements FileFragment.Container finish(); } else if (v == mChooseBtn) { Intent i = getIntent(); - OCFile targetFile = i.getParcelableExtra(FolderPickerActivity.EXTRA_FILE); + OCFile targetFile = i.getParcelableExtra(CopyActivity.EXTRA_TARGET_FILE); Intent data = new Intent(); data.putExtra(EXTRA_CURRENT_FOLDER, getCurrentFolder()); data.putExtra(EXTRA_TARGET_FILE, targetFile); - setResult(RESULT_OK_AND_MOVE, data); + setResult(RESULT_OK_AND_COPY, data); finish(); } } diff --git a/src/com/owncloud/android/ui/activity/FileActivity.java b/src/com/owncloud/android/ui/activity/FileActivity.java index 4e38c523fa..63f700c3d3 100644 --- a/src/com/owncloud/android/ui/activity/FileActivity.java +++ b/src/com/owncloud/android/ui/activity/FileActivity.java @@ -76,8 +76,6 @@ import com.owncloud.android.ui.NavigationDrawerItem; import com.owncloud.android.ui.adapter.NavigationDrawerListAdapter; import com.owncloud.android.ui.dialog.LoadingDialog; import com.owncloud.android.ui.dialog.SharePasswordDialogFragment; -import com.owncloud.android.ui.fragment.FileDetailFragment; -import com.owncloud.android.ui.fragment.FileFragment; import com.owncloud.android.utils.ErrorMessageAdapter; import java.util.ArrayList; @@ -473,7 +471,7 @@ public class FileActivity extends ActionBarActivity */ private void swapToDefaultAccount() { // default to the most recently used account - Account newAccount = AccountUtils.getCurrentOwnCloudAccount(getApplicationContext()); + Account newAccount = AccountUtils.getCurrentOwnCloudAccount(getApplicationContext()); if (newAccount == null) { /// no account available: force account creation createFirstAccount(); @@ -561,7 +559,7 @@ public class FileActivity extends ActionBarActivity } /** - * @return 'True' when the Activity is finishing to enforce the setup of a new account. + * @return 'True' when the Activity is finishing to enforce the setup of a new account. */ protected boolean isRedirectingToSetupAccount() { return mRedirectingToSetupAccount; @@ -816,7 +814,7 @@ public class FileActivity extends ActionBarActivity /** * Dismiss loading dialog */ - public void dismissLoadingDialog(){ + public void dismissLoadingDialog() { Fragment frag = getSupportFragmentManager().findFragmentByTag(DIALOG_WAIT_TAG); if (frag != null) { LoadingDialog loading = (LoadingDialog) frag; diff --git a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java index 699107c9ee..ee81254756 100644 --- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -74,6 +74,7 @@ import com.owncloud.android.lib.common.operations.RemoteOperation; import com.owncloud.android.lib.common.operations.RemoteOperationResult; import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; import com.owncloud.android.lib.common.utils.Log_OC; +import com.owncloud.android.operations.CopyFileOperation; import com.owncloud.android.operations.CreateFolderOperation; import com.owncloud.android.operations.CreateShareOperation; import com.owncloud.android.operations.MoveFileOperation; @@ -103,9 +104,6 @@ import com.owncloud.android.utils.UriUtils; import java.io.File; -import java.io.File; -import java.io.IOException; - /** * Displays, what files the user has available in his ownCloud. @@ -621,6 +619,21 @@ public class FileDisplayActivity extends HookActivity DELAY_TO_REQUEST_OPERATION_ON_ACTIVITY_RESULTS ); + } else if (requestCode == ACTION_COPY_FILES && (resultCode == RESULT_OK || + resultCode == CopyActivity.RESULT_OK_AND_COPY)) { + + final Intent fData = data; + final int fResultCode = resultCode; + getHandler().postDelayed( + new Runnable() { + @Override + public void run() { + requestCopyOperation(fData, fResultCode); + } + }, + DELAY_TO_REQUEST_OPERATION_ON_ACTIVITY_RESULTS + ); + } else { super.onActivityResult(requestCode, resultCode, data); } @@ -736,6 +749,18 @@ public class FileDisplayActivity extends HookActivity getFileOperationsHelper().moveFile(folderToMoveAt, targetFile); } + /** + * Request the operation for copying the file/folder from one path to another + * + * @param data Intent received + * @param resultCode Result code received + */ + private void requestCopyOperation(Intent data, int resultCode) { + OCFile folderToMoveAt = data.getParcelableExtra(CopyActivity.EXTRA_CURRENT_FOLDER); + OCFile targetFile = data.getParcelableExtra(CopyActivity.EXTRA_TARGET_FILE); + getFileOperationsHelper().copyFile(folderToMoveAt, targetFile); + } + @Override public void onBackPressed() { OCFileListFragment listOfFiles = getListOfFilesFragment(); @@ -1290,6 +1315,9 @@ public class FileDisplayActivity extends HookActivity } else if (operation instanceof MoveFileOperation) { onMoveFileOperationFinish((MoveFileOperation) operation, result); + + } else if (operation instanceof CopyFileOperation) { + onCopyFileOperationFinish((CopyFileOperation) operation, result); } } @@ -1398,6 +1426,30 @@ public class FileDisplayActivity extends HookActivity } } + /** + * Updates the view associated to the activity after the finish of an operation trying to copy a + * file. + * + * @param operation Copy operation performed. + * @param result Result of the copy operation. + */ + private void onCopyFileOperationFinish(CopyFileOperation operation, RemoteOperationResult result) { + if (result.isSuccess()) { + dismissLoadingDialog(); + refreshListOfFilesFragment(); + } else { + dismissLoadingDialog(); + try { + Toast msg = Toast.makeText(FileDisplayActivity.this, + ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()), + Toast.LENGTH_LONG); + msg.show(); + + } catch (NotFoundException e) { + Log_OC.e(TAG, "Error while trying to show fail message ", e); + } + } + } /** * Updates the view associated to the activity after the finish of an operation trying to rename diff --git a/src/com/owncloud/android/ui/fragment/OCFileListFragment.java b/src/com/owncloud/android/ui/fragment/OCFileListFragment.java index 365d2a0199..6e4d756566 100644 --- a/src/com/owncloud/android/ui/fragment/OCFileListFragment.java +++ b/src/com/owncloud/android/ui/fragment/OCFileListFragment.java @@ -354,7 +354,7 @@ public class OCFileListFragment extends ExtendedListFragment { Intent action = new Intent(getActivity(), CopyActivity.class); // Pass mTargetFile that contains info of selected file/folder - action.putExtra(FolderPickerActivity.EXTRA_FILE, mTargetFile); + action.putExtra(CopyActivity.EXTRA_TARGET_FILE, mTargetFile); getActivity().startActivityForResult(action, FileDisplayActivity.ACTION_COPY_FILES); return true; default: diff --git a/src/com/owncloud/android/utils/ErrorMessageAdapter.java b/src/com/owncloud/android/utils/ErrorMessageAdapter.java index 75736e5357..c86346b3dd 100644 --- a/src/com/owncloud/android/utils/ErrorMessageAdapter.java +++ b/src/com/owncloud/android/utils/ErrorMessageAdapter.java @@ -21,17 +21,13 @@ package com.owncloud.android.utils; -import java.io.File; -import java.net.SocketTimeoutException; - -import org.apache.commons.httpclient.ConnectTimeoutException; - import android.content.res.Resources; import com.owncloud.android.R; import com.owncloud.android.lib.common.operations.RemoteOperation; import com.owncloud.android.lib.common.operations.RemoteOperationResult; import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; +import com.owncloud.android.operations.CopyFileOperation; import com.owncloud.android.operations.CreateFolderOperation; import com.owncloud.android.operations.CreateShareOperation; import com.owncloud.android.operations.DownloadFileOperation; @@ -43,6 +39,11 @@ import com.owncloud.android.operations.SynchronizeFolderOperation; import com.owncloud.android.operations.UnshareLinkOperation; import com.owncloud.android.operations.UploadFileOperation; +import org.apache.commons.httpclient.ConnectTimeoutException; + +import java.io.File; +import java.net.SocketTimeoutException; + /** * Class to choose proper error messages to show to the user depending on the results of operations, * always following the same policy @@ -51,16 +52,16 @@ import com.owncloud.android.operations.UploadFileOperation; public class ErrorMessageAdapter { public ErrorMessageAdapter() { - + } public static String getErrorCauseMessage(RemoteOperationResult result, RemoteOperation operation, Resources res) { String message = null; - + if (operation instanceof UploadFileOperation) { - + if (result.isSuccess()) { message = String.format( res.getString(R.string.uploader_upload_succeeded_content_single), @@ -76,7 +77,7 @@ public class ErrorMessageAdapter { } else if (result.getCode() == ResultCode.QUOTA_EXCEEDED) { message = res.getString(R.string.failed_upload_quota_exceeded_text); */ - + } else if (result.getCode() == ResultCode.FORBIDDEN) { message = String.format(res.getString(R.string.forbidden_permissions), res.getString(R.string.uploader_upload_forbidden_permissions)); @@ -90,14 +91,14 @@ public class ErrorMessageAdapter { ((UploadFileOperation) operation).getFileName()); } } - + } else if (operation instanceof DownloadFileOperation) { - + if (result.isSuccess()) { message = String.format( res.getString(R.string.downloader_download_succeeded_content), new File(((DownloadFileOperation) operation).getSavePath()).getName()); - + } else { if (result.getCode() == ResultCode.FILE_NOT_FOUND) { message = res.getString(R.string.downloader_download_file_not_found); @@ -108,11 +109,11 @@ public class ErrorMessageAdapter { ((DownloadFileOperation) operation).getSavePath()).getName()); } } - + } else if (operation instanceof RemoveFileOperation) { if (result.isSuccess()) { message = res.getString(R.string.remove_success_msg); - + } else { if (result.getCode().equals(ResultCode.FORBIDDEN)) { // Error --> No permissions @@ -120,7 +121,7 @@ public class ErrorMessageAdapter { res.getString(R.string.forbidden_permissions_delete)); } else if (isNetworkError(result.getCode())) { message = getErrorMessage(result, res); - + } else { message = res.getString(R.string.remove_fail_msg); } @@ -140,19 +141,19 @@ public class ErrorMessageAdapter { } else if (isNetworkError(result.getCode())) { message = getErrorMessage(result, res); - + } else if (result.getCode() == ResultCode.INVALID_CHARACTER_DETECT_IN_SERVER) { message = res.getString(R.string.filename_forbidden_charaters_from_server); } else { - message = res.getString(R.string.rename_server_fail_msg); + message = res.getString(R.string.rename_server_fail_msg); } - + } else if (operation instanceof SynchronizeFileOperation) { if (!((SynchronizeFileOperation) operation).transferWasRequested()) { message = res.getString(R.string.sync_file_nothing_to_do_msg); } - + } else if (operation instanceof CreateFolderOperation) { if (result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME) { message = res.getString(R.string.filename_forbidden_characters); @@ -163,7 +164,7 @@ public class ErrorMessageAdapter { } else if (isNetworkError(result.getCode())) { message = getErrorMessage(result, res); - + } else if (result.getCode() == ResultCode.INVALID_CHARACTER_DETECT_IN_SERVER) { message = res.getString(R.string.filename_forbidden_charaters_from_server); } else { @@ -172,7 +173,7 @@ public class ErrorMessageAdapter { } else if (operation instanceof CreateShareOperation) { if (result.getCode() == ResultCode.SHARE_NOT_FOUND) { // Error --> SHARE_NOT_FOUND message = res.getString(R.string.share_link_file_no_exist); - + } else if (result.getCode() == ResultCode.SHARE_FORBIDDEN) { // Error --> No permissions message = String.format(res.getString(R.string.forbidden_permissions), @@ -180,17 +181,17 @@ public class ErrorMessageAdapter { } else if (isNetworkError(result.getCode())) { message = getErrorMessage(result, res); - + } else { // Generic error // Show a Message, operation finished without success message = res.getString(R.string.share_link_file_error); } - + } else if (operation instanceof UnshareLinkOperation) { - + if (result.getCode() == ResultCode.SHARE_NOT_FOUND) { // Error --> SHARE_NOT_FOUND message = res.getString(R.string.unshare_link_file_no_exist); - + } else if (result.getCode() == ResultCode.SHARE_FORBIDDEN) { // Error --> No permissions message = String.format(res.getString(R.string.forbidden_permissions), @@ -198,7 +199,7 @@ public class ErrorMessageAdapter { } else if (isNetworkError(result.getCode())) { message = getErrorMessage(result, res); - + } else { // Generic error // Show a Message, operation finished without success message = res.getString(R.string.unshare_link_file_error); @@ -207,8 +208,8 @@ public class ErrorMessageAdapter { if (result.getCode() == ResultCode.FILE_NOT_FOUND) { message = res.getString(R.string.move_file_not_found); - - } else if (result.getCode() == ResultCode.INVALID_MOVE_INTO_DESCENDANT) { + + } else if (result.getCode() == ResultCode.INVALID_MOVE_INTO_DESCENDANT) { message = res.getString(R.string.move_file_invalid_into_descendent); } else if (result.getCode() == ResultCode.INVALID_OVERWRITE) { @@ -240,44 +241,62 @@ public class ErrorMessageAdapter { folderPathName); } } + } else if (operation instanceof CopyFileOperation) { + + if (result.getCode() == ResultCode.FILE_NOT_FOUND) { + message = res.getString(R.string.copy_file_not_found); + + } else if (result.getCode() == ResultCode.INVALID_MOVE_INTO_DESCENDANT) { + message = res.getString(R.string.copy_file_invalid_into_descendent); + + } else if (result.getCode() == ResultCode.INVALID_OVERWRITE) { + message = res.getString(R.string.copy_file_invalid_overwrite); + + } else if (result.getCode() == ResultCode.FORBIDDEN) { + message = String.format(res.getString(R.string.forbidden_permissions), + res.getString(R.string.forbidden_permissions_copy)); + + } else { // Generic error + // Show a Message, operation finished without success + message = res.getString(R.string.copy_file_error); + } } - + return message; } - - private static String getErrorMessage(RemoteOperationResult result , Resources res) { - + + private static String getErrorMessage(RemoteOperationResult result, Resources res) { + String message = null; - + if (!result.isSuccess()) { - + if (result.getCode() == ResultCode.WRONG_CONNECTION) { message = res.getString(R.string.network_error_socket_exception); - + } else if (result.getCode() == ResultCode.TIMEOUT) { message = res.getString(R.string.network_error_socket_exception); - + if (result.getException() instanceof SocketTimeoutException) { message = res.getString(R.string.network_error_socket_timeout_exception); - } else if(result.getException() instanceof ConnectTimeoutException) { + } else if (result.getException() instanceof ConnectTimeoutException) { message = res.getString(R.string.network_error_connect_timeout_exception); - } - + } + } else if (result.getCode() == ResultCode.HOST_NOT_AVAILABLE) { message = res.getString(R.string.network_host_not_available); } } - + return message; } - + private static boolean isNetworkError(RemoteOperationResult.ResultCode code) { - if (code == ResultCode.WRONG_CONNECTION || - code == ResultCode.TIMEOUT || + if (code == ResultCode.WRONG_CONNECTION || + code == ResultCode.TIMEOUT || code == ResultCode.HOST_NOT_AVAILABLE) { return true; - } - else + } else return false; } } From 7c19fcdc94e44170c44b2a75267a8fe7cffcd7b1 Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Thu, 23 Oct 2014 23:19:11 +0200 Subject: [PATCH 044/133] Added error messages for copy action. English only. --- res/values/strings.xml | 94 +++++++++++++++++++----------------------- 1 file changed, 43 insertions(+), 51 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 7c422201fd..cd1fd3f28a 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -121,14 +121,14 @@ Synchronization failed, you need to relogin Synchronization of %1$s could not be completed Invalid password for %1$s - Conflicts found - %1$d kept-in-sync files could not be sync\'ed + Conflicts found + %1$d kept-in-sync files could not be sync\'ed Kept-in-sync files failed Contents of %1$d files could not be sync\'ed (%2$d conflicts) Some local files were forgotten %1$d files out of the %2$s folder could not be copied into As of version 1.3.16, files uploaded from this device are copied into the local %1$s folder to prevent data loss when a single file is synced with multiple accounts.\n\nDue to this change, all files uploaded in previous versions of this app were copied into the %2$s folder. However, an error prevented the completion of this operation during account synchronization. You may either leave the file(s) as is and remove the link to %3$s, or move the file(s) into the %1$s folder and retain the link to %4$s.\n\nListed below are the local file(s), and the remote file(s) in %5$s they were linked to. - Folder %1$s does not exist anymore + Folder %1$s does not exist anymore "Move all" "All files were moved" "Some files could not be moved" @@ -151,20 +151,20 @@ "%1$s (loading)" "%1$s playback finished" No media file found - No account provided - File not in a valid account - Unsupported media codec - Media file could not be read - Media file not correctly encoded - Timed out while trying to play - Media file cannot be streamed - Media file cannot be played with the stock media player - Security error trying to play %1$s - Input error trying to play %1$s - Unexpected error trying to play %1$s - Rewind button - Play or pause button - Fast forward button + No account provided + File not in a valid account + Unsupported media codec + Media file could not be read + Media file not correctly encoded + Timed out while trying to play + Media file cannot be streamed + Media file cannot be played with the stock media player + Security error trying to play %1$s + Input error trying to play %1$s + Unexpected error trying to play %1$s + Rewind button + Play or pause button + Fast forward button Getting authorization… Trying to login… @@ -249,19 +249,19 @@ Location: Validity: From: - To: - Signature: - Algorithm: - The certificate could not be shown. - - No information about the error - + To: + Signature: + Algorithm: + The certificate could not be shown. + - No information about the error + This is a placeholder placeholder.txt PNG Image 389 KB 2012/05/18 12:23 PM 12:23:45 - + Upload pictures via WiFi only Upload videos via WiFi only /InstantUpload @@ -273,7 +273,7 @@ Image preview This image cannot be shown - + %1$s could not be copied to %2$s local folder Upload Path @@ -286,28 +286,20 @@ Enter a password You must enter a password - Send + An error occurred while connecting with the server. + An error occurred while waiting for the server, the operation couldn\'t have been done + An error occurred while waiting for the server, the operation couldn\'t have been done + The operation couldn\'t be completed, server is unavailable + - Copy link - Copied to clipboard - - Critical error: cannot perform operations - - An error occurred while connecting with the server. - An error occurred while waiting for the server, the operation couldn\'t have been done - An error occurred while waiting for the server, the operation couldn\'t have been done - The operation couldn\'t be completed, server is unavailable - - - - You do not have permission %s - to rename this file - to delete this file - to share this file - to unshare this file - to create the file - to upload in this folder - The file is no longer available on the server + You do not have permission %s + to rename this file + to delete this file + to share this file + to unshare this file + to create the file + to upload in this folder + The file is no longer available on the server Accounts Add account @@ -325,11 +317,11 @@ Nothing in here. You can add a folder! Choose - Unable to move. Please check whether the file exists - It is not possible to move a folder into a descendant - The file exists already in the destination folder - An error occurred while trying to move this file or folder - to move this file + Unable to move. Please check whether the file exists + It is not possible to move a folder into a descendant + The file exists already in the destination folder + An error occurred while trying to move this file or folder + to move this file Unable to copy. Please check whether the file exists It is not possible to copy a folder into a descendant From b843bc43875cc29db95fe19a0a3752b0655a9766 Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Thu, 23 Oct 2014 23:44:03 +0200 Subject: [PATCH 045/133] Updated submodule to point to the branch with the additional stuff for the copy action --- .gitmodules | 1 - owncloud-android-library | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index 7ccbef0351..882f3c2769 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,3 @@ - [submodule "owncloud-android-library"] path = owncloud-android-library url = git://github.com/owncloud/android-library.git diff --git a/owncloud-android-library b/owncloud-android-library index b281585c93..b15fb19399 160000 --- a/owncloud-android-library +++ b/owncloud-android-library @@ -1 +1 @@ -Subproject commit b281585c93a7eec52e467f51850811f8b0a92955 +Subproject commit b15fb19399270dab59251b4abb36037d2c435366 From 91f027fd06ba79e7edc86102e7418fbe0f085cea Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Fri, 24 Oct 2014 10:21:27 +0200 Subject: [PATCH 046/133] Make oC-android-library track the copy_operation branch --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index 882f3c2769..4c3344caec 100644 --- a/.gitmodules +++ b/.gitmodules @@ -5,4 +5,4 @@ [submodule "ocdoc"] path = user_manual/ocdoc url = https://github.com/owncloud/documentation - branch = master + branch = master \ No newline at end of file From dcffd79b60b3cc6faa24b829e20bf8183e0f425e Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Fri, 24 Oct 2014 10:44:03 +0200 Subject: [PATCH 047/133] Tweaks for source 1.5 --- build.gradle | 6 ----- .../android/services/OperationsService.java | 23 +++++++++++-------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/build.gradle b/build.gradle index a5c0431f79..8a2521f2d9 100644 --- a/build.gradle +++ b/build.gradle @@ -58,12 +58,6 @@ android { abortOnError false } } - - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 - } productFlavors { } diff --git a/src/com/owncloud/android/services/OperationsService.java b/src/com/owncloud/android/services/OperationsService.java index f7034f0a39..90fc2f00fc 100644 --- a/src/com/owncloud/android/services/OperationsService.java +++ b/src/com/owncloud/android/services/OperationsService.java @@ -205,7 +205,13 @@ public class OperationsService extends Service { saveAllClients(this, MainApp.getAccountType()); // TODO - get rid of these exceptions - } catch (AccountNotFoundException | AuthenticatorException | OperationCanceledException | IOException e) { + } catch (AccountNotFoundException e) { + e.printStackTrace(); + } catch (AuthenticatorException e) { + e.printStackTrace(); + } catch (OperationCanceledException e) { + e.printStackTrace(); + } catch (IOException e) { e.printStackTrace(); } @@ -511,7 +517,7 @@ public class OperationsService extends Service { } - + } @@ -531,7 +537,7 @@ public class OperationsService extends Service { if (!operationIntent.hasExtra(EXTRA_ACCOUNT) && !operationIntent.hasExtra(EXTRA_SERVER_URL)) { Log_OC.e(TAG, "Not enough information provided in intent"); - + } else { Account account = operationIntent.getParcelableExtra(EXTRA_ACCOUNT); String serverUrl = operationIntent.getStringExtra(EXTRA_SERVER_URL); @@ -552,7 +558,7 @@ public class OperationsService extends Service { ShareType.PUBLIC_LINK, "", false, password, 1, sendIntent); } - + } else if (action.equals(ACTION_UNSHARE)) { // Unshare file String remotePath = operationIntent.getStringExtra(EXTRA_REMOTE_PATH); if (remotePath.length() > 0) { @@ -564,7 +570,7 @@ public class OperationsService extends Service { } else if (action.equals(ACTION_GET_SERVER_INFO)) { // check OC server and get basic information from it operation = new GetServerInfoOperation(serverUrl, OperationsService.this); - + } else if (action.equals(ACTION_OAUTH2_GET_ACCESS_TOKEN)) { /// GET ACCESS TOKEN to the OAuth server String oauth2QueryParameters = @@ -574,7 +580,7 @@ public class OperationsService extends Service { getString(R.string.oauth2_redirect_uri), getString(R.string.oauth2_grant_type), oauth2QueryParameters); - + } else if (action.equals(ACTION_GET_USER_NAME)) { // Get User Name operation = new GetRemoteUserNameOperation(); @@ -598,7 +604,7 @@ public class OperationsService extends Service { boolean createFullPath = operationIntent.getBooleanExtra(EXTRA_CREATE_FULL_PATH, true); operation = new CreateFolderOperation(remotePath, createFullPath); - + } else if (action.equals(ACTION_SYNC_FILE)) { // Sync file String remotePath = operationIntent.getStringExtra(EXTRA_REMOTE_PATH); @@ -630,7 +636,6 @@ public class OperationsService extends Service { String newParentPath = operationIntent.getStringExtra(EXTRA_NEW_PARENT_PATH); operation = new CopyFileOperation(remotePath, newParentPath, account); } - } } catch (IllegalArgumentException e) { @@ -723,7 +728,7 @@ public class OperationsService extends Service { if (count == 0) { //mOperationResults.put(operation.hashCode(), result); Pair undispatched = - new Pair<>(operation, result); + new Pair(operation, result); mUndispatchedFinishedOperations.put(((Runnable) operation).hashCode(), undispatched); } Log_OC.d(TAG, "Called " + count + " listeners"); From db40d1ad68f11f1429c2fd544410b38501ecffd0 Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Wed, 22 Oct 2014 19:34:40 +0200 Subject: [PATCH 048/133] Added 'ACTION_COPY_FILES'. --- .../owncloud/android/ui/activity/FileDisplayActivity.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java index ee81254756..45ac0f5feb 100644 --- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -1734,15 +1734,15 @@ public class FileDisplayActivity extends HookActivity } } - private void sortByDate(boolean ascending){ + private void sortByDate(boolean ascending) { getListOfFilesFragment().sortByDate(ascending); } - private void sortBySize(boolean ascending){ + private void sortBySize(boolean ascending) { getListOfFilesFragment().sortBySize(ascending); } - private void sortByName(boolean ascending){ + private void sortByName(boolean ascending) { getListOfFilesFragment().sortByName(ascending); } From bc50129881e8b32dcc6f569b4676c5079ee29f90 Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Wed, 22 Oct 2014 20:06:44 +0200 Subject: [PATCH 049/133] Fixed 'Move' action --- src/com/owncloud/android/ui/activity/CopyActivity.java | 1 + src/com/owncloud/android/ui/fragment/ExtendedListFragment.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/owncloud/android/ui/activity/CopyActivity.java b/src/com/owncloud/android/ui/activity/CopyActivity.java index c7c4a6cac6..abae9baf3e 100644 --- a/src/com/owncloud/android/ui/activity/CopyActivity.java +++ b/src/com/owncloud/android/ui/activity/CopyActivity.java @@ -60,6 +60,7 @@ import com.owncloud.android.ui.fragment.OCFileListFragment; import com.owncloud.android.utils.DisplayUtils; import com.owncloud.android.utils.ErrorMessageAdapter; + public class CopyActivity extends HookActivity implements FileFragment.ContainerActivity, OnClickListener, SwipeRefreshLayout.OnRefreshListener { diff --git a/src/com/owncloud/android/ui/fragment/ExtendedListFragment.java b/src/com/owncloud/android/ui/fragment/ExtendedListFragment.java index d0e5619901..24767cf254 100644 --- a/src/com/owncloud/android/ui/fragment/ExtendedListFragment.java +++ b/src/com/owncloud/android/ui/fragment/ExtendedListFragment.java @@ -72,7 +72,7 @@ public class ExtendedListFragment extends Fragment private int mHeightCell = 0; private SwipeRefreshLayout.OnRefreshListener mOnRefreshListener = null; - + protected AbsListView mCurrentListView; private ExtendedListView mListView; private View mListFooterView; From ccf8741fab3c7fe8c6468679ed736b65833225e1 Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Thu, 23 Oct 2014 22:34:42 +0200 Subject: [PATCH 050/133] Added copy action --- .../datamodel/FileDataStorageManager.java | 71 ++++++------------- .../android/files/FileOperationsHelper.java | 2 +- .../android/services/OperationsService.java | 16 ++--- .../android/ui/activity/FileActivity.java | 1 + 4 files changed, 31 insertions(+), 59 deletions(-) diff --git a/src/com/owncloud/android/datamodel/FileDataStorageManager.java b/src/com/owncloud/android/datamodel/FileDataStorageManager.java index febb3b6951..10b7698c17 100644 --- a/src/com/owncloud/android/datamodel/FileDataStorageManager.java +++ b/src/com/owncloud/android/datamodel/FileDataStorageManager.java @@ -158,7 +158,7 @@ public class FileDataStorageManager { } } - + public Vector getFolderImages(OCFile folder/*, boolean onlyOnDevice*/) { Vector ret = new Vector(); if (folder != null) { @@ -206,8 +206,7 @@ public class FileDataStorageManager { cv.put(ProviderTableMeta.FILE_IS_DOWNLOADING, file.isDownloading()); boolean sameRemotePath = fileExists(file.getRemotePath()); - if (sameRemotePath || - fileExists(file.getFileId()) ) { // for renamed files + if (sameRemotePath || fileExists(file.getFileId())) { // for renamed files; no more delete and create OCFile oldFile = null; if (sameRemotePath) { @@ -357,7 +356,7 @@ public class FileDataStorageManager { ProviderTableMeta.CONTENT_URI_FILE, file.getFileId() ) ).withSelection(where, whereArgs).build()); - + if (file.isDown()) { String path = file.getStoragePath(); new File(path).delete(); @@ -480,13 +479,10 @@ public class FileDataStorageManager { } else { if (removeDBData) { - Uri file_uri = ContentUris.withAppendedId( - ProviderTableMeta.CONTENT_URI_FILE, - file.getFileId() - ); - String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?" + " AND " + - ProviderTableMeta.FILE_PATH + "=?"; - String [] whereArgs = new String[]{mAccount.name, file.getRemotePath()}; + //Uri file_uri = Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_FILE, ""+file.getFileId()); + Uri file_uri = ContentUris.withAppendedId(ProviderTableMeta.CONTENT_URI_FILE, file.getFileId()); + String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?" + " AND " + ProviderTableMeta.FILE_PATH + "=?"; + String[] whereArgs = new String[]{mAccount.name, file.getRemotePath()}; int deleted = 0; if (getContentProviderClient() != null) { try { @@ -1006,8 +1002,7 @@ public class FileDataStorageManager { cv.put(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, share.getIdRemoteShared()); cv.put(ProviderTableMeta.OCSHARES_ACCOUNT_OWNER, mAccount.name); - if (shareExists(share.getIdRemoteShared())) { // for renamed files - + if (shareExists(share.getIdRemoteShared())) { // for renamed files; no more delete and create overriden = true; if (getContentResolver() != null) { getContentResolver().update(ProviderTableMeta.CONTENT_URI_SHARE, cv, @@ -1106,12 +1101,9 @@ public class FileDataStorageManager { share.setSharedWithDisplayName(c.getString(c .getColumnIndex(ProviderTableMeta.OCSHARES_SHARE_WITH_DISPLAY_NAME))); share.setIsFolder(c.getInt( - c.getColumnIndex(ProviderTableMeta.OCSHARES_IS_DIRECTORY)) == 1 ? true : false); + c.getColumnIndex(ProviderTableMeta.OCSHARES_IS_DIRECTORY)) == 1); share.setUserId(c.getLong(c.getColumnIndex(ProviderTableMeta.OCSHARES_USER_ID))); - share.setIdRemoteShared( - c.getLong(c.getColumnIndex(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED)) - ); - + share.setIdRemoteShared(c.getLong(c.getColumnIndex(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED))); } return share; } @@ -1162,10 +1154,7 @@ public class FileDataStorageManager { } else { try { - getContentProviderClient().update( - ProviderTableMeta.CONTENT_URI, cv, where, whereArgs - ); - + getContentProviderClient().update(ProviderTableMeta.CONTENT_URI, cv, where, whereArgs); } catch (RemoteException e) { Log_OC.e(TAG, "Exception in cleanSharedFiles" + e.getMessage()); } @@ -1185,10 +1174,7 @@ public class FileDataStorageManager { } else { try { - getContentProviderClient().update( - ProviderTableMeta.CONTENT_URI, cv, where, whereArgs - ); - + getContentProviderClient().update(ProviderTableMeta.CONTENT_URI, cv, where, whereArgs); } catch (RemoteException e) { Log_OC.e(TAG, "Exception in cleanSharedFilesInFolder " + e.getMessage()); } @@ -1204,10 +1190,7 @@ public class FileDataStorageManager { } else { try { - getContentProviderClient().delete( - ProviderTableMeta.CONTENT_URI_SHARE, where, whereArgs - ); - + getContentProviderClient().delete(ProviderTableMeta.CONTENT_URI_SHARE, where, whereArgs); } catch (RemoteException e) { Log_OC.e(TAG, "Exception in cleanShares" + e.getMessage()); } @@ -1246,13 +1229,9 @@ public class FileDataStorageManager { operations.add( ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI_SHARE). withValues(cv). - withSelection( - ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED + "=?", - new String[] { String.valueOf(share.getIdRemoteShared()) } - ). - build() - ); - + withSelection(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED + "=?", + new String[]{String.valueOf(share.getIdRemoteShared())}) + .build()); } else { // adding a new file operations.add( @@ -1271,10 +1250,7 @@ public class FileDataStorageManager { " operations to FileContentProvider"); try { if (getContentResolver() != null) { - results = getContentResolver().applyBatch( - MainApp.getAuthority(), operations - ); - + results = getContentResolver().applyBatch(MainApp.getAuthority(), operations); } else { results = getContentProviderClient().applyBatch(operations); } @@ -1341,11 +1317,9 @@ public class FileDataStorageManager { operations.add( ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI). withValues(cv). - withSelection( - ProviderTableMeta._ID + "=?", - new String[] { String.valueOf(file.getFileId()) } - ).build() - ); + withSelection(ProviderTableMeta._ID + "=?", + new String[]{String.valueOf(file.getFileId())}) + .build()); } else { // adding a new file @@ -1365,10 +1339,7 @@ public class FileDataStorageManager { " operations to FileContentProvider"); try { if (getContentResolver() != null) { - results = getContentResolver().applyBatch( - MainApp.getAuthority(), operations - ); - + results = getContentResolver().applyBatch(MainApp.getAuthority(), operations); } else { results = getContentProviderClient().applyBatch(operations); } diff --git a/src/com/owncloud/android/files/FileOperationsHelper.java b/src/com/owncloud/android/files/FileOperationsHelper.java index 57b766ec65..223702896b 100644 --- a/src/com/owncloud/android/files/FileOperationsHelper.java +++ b/src/com/owncloud/android/files/FileOperationsHelper.java @@ -125,7 +125,7 @@ public class FileOperationsHelper { } } - + public void shareFileWithLinkToApp(OCFile file, String password, Intent sendIntent) { if (file != null) { diff --git a/src/com/owncloud/android/services/OperationsService.java b/src/com/owncloud/android/services/OperationsService.java index 90fc2f00fc..099bd087ff 100644 --- a/src/com/owncloud/android/services/OperationsService.java +++ b/src/com/owncloud/android/services/OperationsService.java @@ -256,14 +256,14 @@ public class OperationsService extends Service { */ public class OperationsServiceBinder extends Binder /* implements OnRemoteOperationListener */ { - /** + /** * Map of listeners that will be reported about the end of operations from a * {@link OperationsServiceBinder} instance */ private final ConcurrentMap mBoundListeners = new ConcurrentHashMap(); - private ServiceHandler mServiceHandler = null; + private ServiceHandler mServiceHandler = null; public OperationsServiceBinder(ServiceHandler serviceHandler) { mServiceHandler = serviceHandler; @@ -290,7 +290,7 @@ public class OperationsService extends Service { /** * Adds a listener interested in being reported about the end of operations. * - * @param listener Object to notify about the end of operations. + * @param listener Object to notify about the end of operations. * @param callbackHandler {@link Handler} to access the listener without * breaking Android threading protection. */ @@ -317,7 +317,7 @@ public class OperationsService extends Service { /** * TODO - IMPORTANT: update implementation when more operations are moved into the service - * + * * @return 'True' when an operation that enforces the user to wait for completion is * in process. */ @@ -346,7 +346,7 @@ public class OperationsService extends Service { } } - + public boolean dispatchResultIfFinished(int operationId, OnRemoteOperationListener listener) { Pair undispatched = @@ -381,7 +381,7 @@ public class OperationsService extends Service { /** * Operations worker. Performs the pending operations in the order they were requested. - * + * * Created with the Looper of a new thread, started in {@link OperationsService#onCreate()}. */ private static class ServiceHandler extends Handler { @@ -391,7 +391,7 @@ public class OperationsService extends Service { OperationsService mService; - + private ConcurrentLinkedQueue> mPendingOperations = new ConcurrentLinkedQueue>(); private RemoteOperation mCurrentOperation = null; @@ -477,7 +477,7 @@ public class OperationsService extends Service { } else { result = mCurrentOperation.execute(mOwnCloudClient); } - + } catch (AccountsException e) { if (mLastTarget.mAccount == null) { Log_OC.e(TAG, "Error while trying to get authorization for a NULL account", diff --git a/src/com/owncloud/android/ui/activity/FileActivity.java b/src/com/owncloud/android/ui/activity/FileActivity.java index 63f700c3d3..e2667e8c9b 100644 --- a/src/com/owncloud/android/ui/activity/FileActivity.java +++ b/src/com/owncloud/android/ui/activity/FileActivity.java @@ -709,6 +709,7 @@ public class FileActivity extends ActionBarActivity } + private void onCreateShareOperationFinish(CreateShareOperation operation, RemoteOperationResult result) { dismissLoadingDialog(); From eb1e41bc76378f2749e01376d6349de4e82c4c18 Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Thu, 23 Oct 2014 23:19:11 +0200 Subject: [PATCH 051/133] Added error messages for copy action. English only. --- res/values/strings.xml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index cd1fd3f28a..ee4e5b3c27 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -301,9 +301,9 @@ to upload in this folder The file is no longer available on the server - Accounts - Add account - Secure connection is redirected to an unsecured route. + Accounts + Add account + Secure connection is redirected through an unsecured route. Logs Send History @@ -323,6 +323,7 @@ An error occurred while trying to move this file or folder to move this file + Unable to copy. Please check whether the file exists It is not possible to copy a folder into a descendant The file exists already in the destination folder From fb423bf71940907a20e8b34254ca2938b3d1ee2d Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Thu, 23 Oct 2014 23:44:03 +0200 Subject: [PATCH 052/133] Updated submodule to point to the branch with the additional stuff for the copy action --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index 4c3344caec..882f3c2769 100644 --- a/.gitmodules +++ b/.gitmodules @@ -5,4 +5,4 @@ [submodule "ocdoc"] path = user_manual/ocdoc url = https://github.com/owncloud/documentation - branch = master \ No newline at end of file + branch = master From 4fc0ef5abbd5c1316e24060bcb1c8857fa93922c Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Tue, 4 Nov 2014 16:13:59 +0100 Subject: [PATCH 053/133] Updated copy action --- src/com/owncloud/android/operations/CopyFileOperation.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/owncloud/android/operations/CopyFileOperation.java b/src/com/owncloud/android/operations/CopyFileOperation.java index 6f0f908138..77d2458f33 100644 --- a/src/com/owncloud/android/operations/CopyFileOperation.java +++ b/src/com/owncloud/android/operations/CopyFileOperation.java @@ -18,7 +18,7 @@ package com.owncloud.android.operations; import android.accounts.Account; -import android.util.Log; +import android.content.Context; import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.lib.common.OwnCloudClient; From 3b2f51b5a550313ea634fc97674821e2dae7cc8e Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Wed, 3 Dec 2014 20:35:33 +0100 Subject: [PATCH 054/133] Refactored functionality to use the new FolderPickerActivity class --- AndroidManifest.xml | 4 - .../android/ui/activity/CopyActivity.java | 557 ------------------ .../ui/activity/FileDisplayActivity.java | 14 +- .../ui/fragment/OCFileListFragment.java | 131 ++-- 4 files changed, 69 insertions(+), 637 deletions(-) delete mode 100644 src/com/owncloud/android/ui/activity/CopyActivity.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 85fd586dfc..720fe38ed0 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -178,10 +178,6 @@ android:name=".ui.activity.FolderPickerActivity" android:label="@string/app_name"/> - - diff --git a/src/com/owncloud/android/ui/activity/CopyActivity.java b/src/com/owncloud/android/ui/activity/CopyActivity.java deleted file mode 100644 index abae9baf3e..0000000000 --- a/src/com/owncloud/android/ui/activity/CopyActivity.java +++ /dev/null @@ -1,557 +0,0 @@ -/* ownCloud Android client application - * Copyright (C) 2012-2014 ownCloud Inc. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2, - * as published by the Free Software Foundation. - * - * 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - -package com.owncloud.android.ui.activity; - -import android.accounts.Account; -import android.accounts.AccountManager; -import android.accounts.AuthenticatorException; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.content.res.Resources.NotFoundException; -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentTransaction; -import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v7.app.ActionBar; -import android.util.Log; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.View.OnClickListener; -import android.view.Window; -import android.widget.Button; -import android.widget.Toast; - -import com.owncloud.android.R; -import com.owncloud.android.datamodel.OCFile; -import com.owncloud.android.lib.common.OwnCloudAccount; -import com.owncloud.android.lib.common.OwnCloudClient; -import com.owncloud.android.lib.common.OwnCloudClientManagerFactory; -import com.owncloud.android.lib.common.OwnCloudCredentials; -import com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException; -import com.owncloud.android.lib.common.operations.RemoteOperation; -import com.owncloud.android.lib.common.operations.RemoteOperationResult; -import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; -import com.owncloud.android.lib.common.utils.Log_OC; -import com.owncloud.android.operations.CreateFolderOperation; -import com.owncloud.android.operations.RefreshFolderOperation; -import com.owncloud.android.syncadapter.FileSyncAdapter; -import com.owncloud.android.ui.dialog.CreateFolderDialogFragment; -import com.owncloud.android.ui.fragment.FileFragment; -import com.owncloud.android.ui.fragment.OCFileListFragment; -import com.owncloud.android.utils.DisplayUtils; -import com.owncloud.android.utils.ErrorMessageAdapter; - - -public class CopyActivity extends HookActivity implements FileFragment.ContainerActivity, - OnClickListener, SwipeRefreshLayout.OnRefreshListener { - - public static final String EXTRA_CURRENT_FOLDER = UploadFilesActivity.class.getCanonicalName() + ".EXTRA_CURRENT_FOLDER"; - public static final String EXTRA_TARGET_FILE = UploadFilesActivity.class.getCanonicalName() + "EXTRA_TARGET_FILE"; - - public static final int RESULT_OK_AND_COPY = 1; - - private SyncBroadcastReceiver mSyncBroadcastReceiver; - - private static final String TAG = CopyActivity.class.getSimpleName(); - - private static final String TAG_LIST_OF_FOLDERS = "LIST_OF_FOLDERS"; - - private boolean mSyncInProgress = false; - - private Button mCancelBtn; - private Button mChooseBtn; - - - @Override - protected void onCreate(Bundle savedInstanceState) { - Log_OC.d(TAG, "onCreate() start"); - requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); - - super.onCreate(savedInstanceState); - - setContentView(R.layout.files_folder_picker); - - if (savedInstanceState == null) { - createFragments(); - } - - // sets callback listeners for UI elements - initControls(); - - // Action bar setup - ActionBar actionBar = getSupportActionBar(); - actionBar.setDisplayShowTitleEnabled(true); - actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); - setSupportProgressBarIndeterminateVisibility(mSyncInProgress); - // always AFTER setContentView(...) ; to work around bug in its implementation - - // sets message for empty list of folders - setBackgroundText(); - - Log_OC.d(TAG, "onCreate() end"); - - } - - @Override - protected void onStart() { - super.onStart(); - getSupportActionBar().setIcon(DisplayUtils.getSeasonalIconId()); - } - - @Override - protected void onDestroy() { - super.onDestroy(); - } - - /** - * Called when the ownCloud {@link Account} associated to the Activity was just updated. - */ - @Override - protected void onAccountSet(boolean stateWasRecovered) { - super.onAccountSet(stateWasRecovered); - if (getAccount() != null) { - - updateFileFromDB(); - - OCFile folder = getFile(); - if (folder == null || !folder.isFolder()) { - // fall back to root folder - setFile(getStorageManager().getFileByPath(OCFile.ROOT_PATH)); - folder = getFile(); - } - - if (!stateWasRecovered) { - OCFileListFragment listOfFolders = getListOfFilesFragment(); - listOfFolders.listDirectory(folder); - - startSyncFolderOperation(folder, false); - } - - updateNavigationElementsInActionBar(); - } - } - - private void createFragments() { - OCFileListFragment listOfFiles = new OCFileListFragment(); - Bundle args = new Bundle(); - args.putBoolean(OCFileListFragment.ARG_JUST_FOLDERS, true); - args.putBoolean(OCFileListFragment.ARG_ALLOW_CONTEXTUAL_ACTIONS, false); - listOfFiles.setArguments(args); - FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); - transaction.add(R.id.fragment_container, listOfFiles, TAG_LIST_OF_FOLDERS); - transaction.commit(); - } - - /** - * Show a text message on screen view for notifying user if content is - * loading or folder is empty - */ - private void setBackgroundText() { - OCFileListFragment listFragment = getListOfFilesFragment(); - if (listFragment != null) { - int message = R.string.file_list_loading; - if (!mSyncInProgress) { - // In case folder list is empty - message = R.string.file_list_empty_moving; - } - listFragment.setMessageForEmptyList(getString(message)); - } else { - Log.e(TAG, "OCFileListFragment is null"); - } - } - - private OCFileListFragment getListOfFilesFragment() { - Fragment listOfFiles = getSupportFragmentManager().findFragmentByTag(CopyActivity.TAG_LIST_OF_FOLDERS); - if (listOfFiles != null) { - return (OCFileListFragment) listOfFiles; - } - Log_OC.wtf(TAG, "Access to unexisting list of files fragment!!"); - return null; - } - - - /** - * {@inheritDoc} - *

- * Updates action bar and second fragment, if in dual pane mode. - */ - @Override - public void onBrowsedDownTo(OCFile directory) { - setFile(directory); - updateNavigationElementsInActionBar(); - // Sync Folder - startSyncFolderOperation(directory, false); - - } - - - public void startSyncFolderOperation(OCFile folder, boolean ignoreETag) { - long currentSyncTime = System.currentTimeMillis(); - - mSyncInProgress = true; - - // perform folder synchronization - RemoteOperation synchFolderOp = new RefreshFolderOperation(folder, - currentSyncTime, - false, - getFileOperationsHelper().isSharedSupported(), - ignoreETag, - getStorageManager(), - getAccount(), - getApplicationContext() - ); - synchFolderOp.execute(getAccount(), this, null, null); - - setSupportProgressBarIndeterminateVisibility(true); - - setBackgroundText(); - } - - @Override - protected void onResume() { - super.onResume(); - Log_OC.e(TAG, "onResume() start"); - - // refresh list of files - refreshListOfFilesFragment(); - - // Listen for sync messages - IntentFilter syncIntentFilter = new IntentFilter(FileSyncAdapter.EVENT_FULL_SYNC_START); - syncIntentFilter.addAction(FileSyncAdapter.EVENT_FULL_SYNC_END); - syncIntentFilter.addAction(FileSyncAdapter.EVENT_FULL_SYNC_FOLDER_CONTENTS_SYNCED); - syncIntentFilter.addAction(RefreshFolderOperation.EVENT_SINGLE_FOLDER_CONTENTS_SYNCED); - syncIntentFilter.addAction(RefreshFolderOperation.EVENT_SINGLE_FOLDER_SHARES_SYNCED); - mSyncBroadcastReceiver = new SyncBroadcastReceiver(); - registerReceiver(mSyncBroadcastReceiver, syncIntentFilter); - - Log_OC.d(TAG, "onResume() end"); - } - - @Override - protected void onPause() { - Log_OC.e(TAG, "onPause() start"); - if (mSyncBroadcastReceiver != null) { - unregisterReceiver(mSyncBroadcastReceiver); - //LocalBroadcastManager.getInstance(this).unregisterReceiver(mSyncBroadcastReceiver); - mSyncBroadcastReceiver = null; - } - - Log_OC.d(TAG, "onPause() end"); - super.onPause(); - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.main_menu, menu); - menu.findItem(R.id.action_upload).setVisible(false); - menu.findItem(R.id.action_sync_account).setVisible(false); - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - boolean retval = true; - switch (item.getItemId()) { - case R.id.action_create_dir: { - CreateFolderDialogFragment dialog = - CreateFolderDialogFragment.newInstance(getCurrentFolder()); - dialog.show( - getSupportFragmentManager(), - CreateFolderDialogFragment.CREATE_FOLDER_FRAGMENT - ); - break; - } - case android.R.id.home: { - OCFile currentDir = getCurrentFolder(); - if (currentDir != null && currentDir.getParentId() != 0) { - onBackPressed(); - } - break; - } - default: - retval = super.onOptionsItemSelected(item); - } - return retval; - } - - private OCFile getCurrentFolder() { - OCFile file = getFile(); - if (file != null) { - if (file.isFolder()) { - return file; - } else if (getStorageManager() != null) { - String parentPath = file.getRemotePath().substring(0, file.getRemotePath().lastIndexOf(file.getFileName())); - return getStorageManager().getFileByPath(parentPath); - } - } - return null; - } - - protected void refreshListOfFilesFragment() { - OCFileListFragment fileListFragment = getListOfFilesFragment(); - if (fileListFragment != null) { - fileListFragment.listDirectory(); - } - } - - public void browseToRoot() { - OCFileListFragment listOfFiles = getListOfFilesFragment(); - if (listOfFiles != null) { // should never be null, indeed - OCFile root = getStorageManager().getFileByPath(OCFile.ROOT_PATH); - listOfFiles.listDirectory(root); - setFile(listOfFiles.getCurrentFile()); - updateNavigationElementsInActionBar(); - startSyncFolderOperation(root, false); - } - } - - @Override - public void onBackPressed() { - OCFileListFragment listOfFiles = getListOfFilesFragment(); - if (listOfFiles != null) { // should never be null, indeed - int levelsUp = listOfFiles.onBrowseUp(); - if (levelsUp == 0) { - finish(); - return; - } - setFile(listOfFiles.getCurrentFile()); - updateNavigationElementsInActionBar(); - } - } - - private void updateNavigationElementsInActionBar() { - ActionBar actionBar = getSupportActionBar(); - OCFile currentDir = getCurrentFolder(); - boolean atRoot = (currentDir == null || currentDir.getParentId() == 0); - actionBar.setDisplayHomeAsUpEnabled(!atRoot); - actionBar.setHomeButtonEnabled(!atRoot); - actionBar.setTitle( - atRoot - ? getString(R.string.default_display_name_for_root_folder) - : currentDir.getFileName() - ); - } - - /** - * Set per-view controllers - */ - private void initControls() { - mCancelBtn = (Button) findViewById(R.id.folder_picker_btn_cancel); - mCancelBtn.setOnClickListener(this); - mChooseBtn = (Button) findViewById(R.id.folder_picker_btn_choose); - mChooseBtn.setOnClickListener(this); - } - - @Override - public void onClick(View v) { - if (v == mCancelBtn) { - finish(); - } else if (v == mChooseBtn) { - Intent i = getIntent(); - OCFile targetFile = i.getParcelableExtra(CopyActivity.EXTRA_TARGET_FILE); - - Intent data = new Intent(); - data.putExtra(EXTRA_CURRENT_FOLDER, getCurrentFolder()); - data.putExtra(EXTRA_TARGET_FILE, targetFile); - setResult(RESULT_OK_AND_COPY, data); - finish(); - } - } - - - @Override - public void onRemoteOperationFinish(RemoteOperation operation, RemoteOperationResult result) { - super.onRemoteOperationFinish(operation, result); - - if (operation instanceof CreateFolderOperation) { - onCreateFolderOperationFinish((CreateFolderOperation) operation, result); - - } - } - - - /** - * Updates the view associated to the activity after the finish of an operation trying - * to create a new folder. - * - * @param operation Creation operation performed. - * @param result Result of the creation. - */ - private void onCreateFolderOperationFinish( - CreateFolderOperation operation, RemoteOperationResult result - ) { - - if (result.isSuccess()) { - dismissLoadingDialog(); - refreshListOfFilesFragment(); - } else { - dismissLoadingDialog(); - try { - Toast msg = Toast.makeText(CopyActivity.this, - ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()), - Toast.LENGTH_LONG); - msg.show(); - - } catch (NotFoundException e) { - Log_OC.e(TAG, "Error while trying to show fail message ", e); - } - } - } - - - private class SyncBroadcastReceiver extends BroadcastReceiver { - - /** - * {@link BroadcastReceiver} to enable syncing feedback in UI - */ - @Override - public void onReceive(Context context, Intent intent) { - try { - String event = intent.getAction(); - Log_OC.d(TAG, "Received broadcast " + event); - String accountName = intent.getStringExtra(FileSyncAdapter.EXTRA_ACCOUNT_NAME); - String synchFolderRemotePath = intent.getStringExtra(FileSyncAdapter.EXTRA_FOLDER_PATH); - RemoteOperationResult synchResult = (RemoteOperationResult) intent.getSerializableExtra(FileSyncAdapter.EXTRA_RESULT); - boolean sameAccount = (getAccount() != null && accountName.equals(getAccount().name) && getStorageManager() != null); - - if (sameAccount) { - - if (FileSyncAdapter.EVENT_FULL_SYNC_START.equals(event)) { - mSyncInProgress = true; - - } else { - OCFile currentFile = (getFile() == null) ? null : getStorageManager().getFileByPath(getFile().getRemotePath()); - OCFile currentDir = (getCurrentFolder() == null) ? null : getStorageManager().getFileByPath(getCurrentFolder().getRemotePath()); - - if (currentDir == null) { - // current folder was removed from the server - Toast.makeText(CopyActivity.this, - String.format(getString(R.string.sync_current_folder_was_removed), getCurrentFolder().getFileName()), - Toast.LENGTH_LONG) - .show(); - browseToRoot(); - - } else { - if (currentFile == null && !getFile().isFolder()) { - // currently selected file was removed in the server, and now we know it - currentFile = currentDir; - } - - if (synchFolderRemotePath != null && currentDir.getRemotePath().equals(synchFolderRemotePath)) { - OCFileListFragment fileListFragment = getListOfFilesFragment(); - if (fileListFragment != null) { - fileListFragment.listDirectory(currentDir); - } - } - setFile(currentFile); - } - - mSyncInProgress = (!FileSyncAdapter.EVENT_FULL_SYNC_END.equals(event) && !RefreshFolderOperation.EVENT_SINGLE_FOLDER_SHARES_SYNCED.equals(event)); - - if (RefreshFolderOperation.EVENT_SINGLE_FOLDER_CONTENTS_SYNCED. - equals(event) && - /// TODO refactor and make common - synchResult != null && !synchResult.isSuccess() && - (synchResult.getCode() == ResultCode.UNAUTHORIZED || - synchResult.isIdPRedirection() || - (synchResult.isException() && synchResult.getException() - instanceof AuthenticatorException))) { - - try { - OwnCloudClient client; - OwnCloudAccount ocAccount = - new OwnCloudAccount(getAccount(), context); - client = (OwnCloudClientManagerFactory.getDefaultSingleton(). - removeClientFor(ocAccount)); - - if (client != null) { - OwnCloudCredentials cred = client.getCredentials(); - if (cred != null) { - AccountManager am = AccountManager.get(context); - if (cred.authTokenExpires()) { - am.invalidateAuthToken( - getAccount().type, - cred.getAuthToken() - ); - } else { - am.clearPassword(getAccount()); - } - } - } - requestCredentialsUpdate(); - - } catch (AccountNotFoundException e) { - Log_OC.e(TAG, "Account " + getAccount() + " was removed!", e); - } - - } - } - removeStickyBroadcast(intent); - Log_OC.d(TAG, "Setting progress visibility to " + mSyncInProgress); - setSupportProgressBarIndeterminateVisibility(mSyncInProgress /*|| mRefreshSharesInProgress*/); - - setBackgroundText(); - - } - - } catch (RuntimeException e) { - // avoid app crashes after changing the serial id of RemoteOperationResult - // in owncloud library with broadcast notifications pending to process - removeStickyBroadcast(intent); - } - } - } - - - /** - * Shows the information of the {@link OCFile} received as a - * parameter in the second fragment. - * - * @param file {@link OCFile} whose details will be shown - */ - @Override - public void showDetails(OCFile file) { - - } - - /** - * {@inheritDoc} - */ - @Override - public void onTransferStateChanged(OCFile file, boolean downloading, boolean uploading) { - - } - - - @Override - public void onRefresh() { - OCFileListFragment listOfFiles = getListOfFilesFragment(); - if (listOfFiles != null) { - OCFile folder = listOfFiles.getCurrentFile(); - if (folder != null) { - startSyncFolderOperation(folder, true); - } - } - } - -} diff --git a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java index 45ac0f5feb..616c068df9 100644 --- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -599,14 +599,7 @@ public class FileDisplayActivity extends HookActivity resultCode == UploadFilesActivity.RESULT_OK_AND_MOVE)) { requestMultipleUpload(data, resultCode); -//<<<<<<< HEAD } else if (requestCode == ACTION_MOVE_FILES && resultCode == RESULT_OK){ -/*======= - } else if (requestCode == ACTION_MOVE_FILES && (resultCode == RESULT_OK || - resultCode == MoveActivity.RESULT_OK_AND_MOVE)) { ->>>>>>> Added 'ACTION_COPY_FILES'. -*/ - final Intent fData = data; final int fResultCode = resultCode; getHandler().postDelayed( @@ -619,8 +612,7 @@ public class FileDisplayActivity extends HookActivity DELAY_TO_REQUEST_OPERATION_ON_ACTIVITY_RESULTS ); - } else if (requestCode == ACTION_COPY_FILES && (resultCode == RESULT_OK || - resultCode == CopyActivity.RESULT_OK_AND_COPY)) { + } else if (requestCode == ACTION_COPY_FILES && resultCode == RESULT_OK) { final Intent fData = data; final int fResultCode = resultCode; @@ -756,8 +748,8 @@ public class FileDisplayActivity extends HookActivity * @param resultCode Result code received */ private void requestCopyOperation(Intent data, int resultCode) { - OCFile folderToMoveAt = data.getParcelableExtra(CopyActivity.EXTRA_CURRENT_FOLDER); - OCFile targetFile = data.getParcelableExtra(CopyActivity.EXTRA_TARGET_FILE); + OCFile folderToMoveAt = data.getParcelableExtra(FolderPickerActivity.EXTRA_FOLDER); + OCFile targetFile = data.getParcelableExtra(FolderPickerActivity.EXTRA_FILE); getFileOperationsHelper().copyFile(folderToMoveAt, targetFile); } diff --git a/src/com/owncloud/android/ui/fragment/OCFileListFragment.java b/src/com/owncloud/android/ui/fragment/OCFileListFragment.java index 6e4d756566..1fdc49d741 100644 --- a/src/com/owncloud/android/ui/fragment/OCFileListFragment.java +++ b/src/com/owncloud/android/ui/fragment/OCFileListFragment.java @@ -22,8 +22,6 @@ */ package com.owncloud.android.ui.fragment; -import java.io.File; - import android.app.Activity; import android.content.Intent; import android.os.Bundle; @@ -43,7 +41,6 @@ import com.owncloud.android.files.FileMenuFilter; import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.lib.resources.status.OwnCloudVersion; import com.owncloud.android.ui.activity.FileActivity; -import com.owncloud.android.ui.activity.CopyActivity; import com.owncloud.android.ui.activity.FileDisplayActivity; import com.owncloud.android.ui.activity.FolderPickerActivity; import com.owncloud.android.ui.activity.OnEnforceableRefreshListener; @@ -55,25 +52,28 @@ import com.owncloud.android.ui.preview.PreviewImageFragment; import com.owncloud.android.ui.preview.PreviewMediaFragment; import com.owncloud.android.utils.FileStorageUtils; +import java.io.File; +import java.util.Vector; + /** * A Fragment that lists all files and folders in a given path. - * + * * TODO refactor to get rid of direct dependency on FileDisplayActivity */ public class OCFileListFragment extends ExtendedListFragment { - + private static final String TAG = OCFileListFragment.class.getSimpleName(); private static final String MY_PACKAGE = OCFileListFragment.class.getPackage() != null ? OCFileListFragment.class.getPackage().getName() : "com.owncloud.android.ui.fragment"; - + public final static String ARG_JUST_FOLDERS = MY_PACKAGE + ".JUST_FOLDERS"; public final static String ARG_ALLOW_CONTEXTUAL_ACTIONS = MY_PACKAGE + ".ALLOW_CONTEXTUAL"; - + private static final String KEY_FILE = MY_PACKAGE + ".extra.FILE"; private FileFragment.ContainerActivity mContainerActivity; - + private OCFile mFile = null; private FileListListAdapter mAdapter; private boolean mJustFolders; @@ -91,21 +91,21 @@ public class OCFileListFragment extends ExtendedListFragment { Log_OC.e(TAG, "onAttach"); try { mContainerActivity = (FileFragment.ContainerActivity) activity; - + } catch (ClassCastException e) { - throw new ClassCastException(activity.toString() + " must implement " + + throw new ClassCastException(activity.toString() + " must implement " + FileFragment.ContainerActivity.class.getSimpleName()); } try { setOnRefreshListener((OnEnforceableRefreshListener) activity); } catch (ClassCastException e) { - throw new ClassCastException(activity.toString() + " must implement " + + throw new ClassCastException(activity.toString() + " must implement " + SwipeRefreshLayout.OnRefreshListener.class.getSimpleName()); } } - + @Override public void onDetach() { setOnRefreshListener(null); @@ -137,7 +137,7 @@ public class OCFileListFragment extends ExtendedListFragment { mJustFolders, getActivity(), mContainerActivity - ); + ); setListAdapter(mAdapter); registerForContextMenu(); @@ -147,31 +147,31 @@ public class OCFileListFragment extends ExtendedListFragment { * Saves the current listed folder. */ @Override - public void onSaveInstanceState (Bundle outState) { + public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putParcelable(KEY_FILE, mFile); } - + /** * Call this, when the user presses the up button. - * - * Tries to move up the current folder one level. If the parent folder was removed from the + *

+ * Tries to move up the current folder one level. If the parent folder was removed from the * database, it continues browsing up until finding an existing folders. - * + *

* return Count of folder levels browsed up. */ public int onBrowseUp() { OCFile parentDir = null; int moveCount = 0; - - if(mFile != null){ + + if (mFile != null) { FileDataStorageManager storageManager = mContainerActivity.getStorageManager(); - + String parentPath = null; if (mFile.getParentId() != FileDataStorageManager.ROOT_PARENT_ID) { parentPath = new File(mFile.getRemotePath()).getParent(); - parentPath = parentPath.endsWith(OCFile.PATH_SEPARATOR) ? parentPath : - parentPath + OCFile.PATH_SEPARATOR; + parentPath = parentPath.endsWith(OCFile.PATH_SEPARATOR) ? parentPath : + parentPath + OCFile.PATH_SEPARATOR; parentDir = storageManager.getFileByPath(parentPath); moveCount++; } else { @@ -179,8 +179,8 @@ public class OCFileListFragment extends ExtendedListFragment { } while (parentDir == null) { parentPath = new File(parentPath).getParent(); - parentPath = parentPath.endsWith(OCFile.PATH_SEPARATOR) ? parentPath : - parentPath + OCFile.PATH_SEPARATOR; + parentPath = parentPath.endsWith(OCFile.PATH_SEPARATOR) ? parentPath : + parentPath + OCFile.PATH_SEPARATOR; parentDir = storageManager.getFileByPath(parentPath); moveCount++; } // exit is granted because storageManager.getFileByPath("/") never returns null @@ -190,20 +190,20 @@ public class OCFileListFragment extends ExtendedListFragment { listDirectory(mFile /*, MainApp.getOnlyOnDevice()*/); onRefresh(false); - + // restore index and top position restoreIndexAndTopPosition(); - + } // else - should never happen now - + return moveCount; } - + @Override public void onItemClick(AdapterView l, View v, int position, long id) { OCFile file = (OCFile) mAdapter.getItem(position); if (file != null) { - if (file.isFolder()) { + if (file.isFolder()) { // update state and view of this fragment // TODO Enable when "On Device" is recovered ? listDirectory(file/*, MainApp.getOnlyOnDevice()*/); @@ -211,49 +211,49 @@ public class OCFileListFragment extends ExtendedListFragment { mContainerActivity.onBrowsedDownTo(file); // save index and top position saveIndexAndTopPosition(position); - + } else { /// Click on a file if (PreviewImageFragment.canBePreviewed(file)) { // preview image - it handles the download, if needed - ((FileDisplayActivity)mContainerActivity).startImagePreview(file); - + ((FileDisplayActivity) mContainerActivity).startImagePreview(file); + } else if (file.isDown()) { if (PreviewMediaFragment.canBePreviewed(file)) { // media preview - ((FileDisplayActivity)mContainerActivity).startMediaPreview(file, 0, true); + ((FileDisplayActivity) mContainerActivity).startMediaPreview(file, 0, true); } else { mContainerActivity.getFileOperationsHelper().openFile(file); } - + } else { // automatic download, preview on finish - ((FileDisplayActivity)mContainerActivity).startDownloadForPreview(file); + ((FileDisplayActivity) mContainerActivity).startDownloadForPreview(file); } - + } - + } else { Log_OC.d(TAG, "Null object in ListAdapter!!"); } - + } - + /** * {@inheritDoc} */ @Override - public void onCreateContextMenu ( + public void onCreateContextMenu( ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); Bundle args = getArguments(); - boolean allowContextualActions = - (args == null) ? true : args.getBoolean(ARG_ALLOW_CONTEXTUAL_ACTIONS, true); + boolean allowContextualActions = + (args == null) ? true : args.getBoolean(ARG_ALLOW_CONTEXTUAL_ACTIONS, true); if (allowContextualActions) { MenuInflater inflater = getActivity().getMenuInflater(); inflater.inflate(R.menu.file_actions_menu, menu); AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo; OCFile targetFile = (OCFile) mAdapter.getItem(info.position); - + if (mContainerActivity.getStorageManager() != null) { FileMenuFilter mf = new FileMenuFilter( targetFile, @@ -277,16 +277,16 @@ public class OCFileListFragment extends ExtendedListFragment { } } } - - + + /** * {@inhericDoc} */ @Override - public boolean onContextItemSelected (MenuItem item) { - AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); + public boolean onContextItemSelected(MenuItem item) { + AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); mTargetFile = (OCFile) mAdapter.getItem(info.position); - switch (item.getItemId()) { + switch (item.getItemId()) { case R.id.action_share_file: { mContainerActivity.getFileOperationsHelper().shareFileWithLink(mTargetFile); return true; @@ -309,14 +309,14 @@ public class OCFileListFragment extends ExtendedListFragment { dialog.show(getFragmentManager(), ConfirmationDialogFragment.FTAG_CONFIRMATION); return true; } - case R.id.action_download_file: + case R.id.action_download_file: case R.id.action_sync_file: { mContainerActivity.getFileOperationsHelper().syncFile(mTargetFile); return true; } case R.id.action_cancel_download: case R.id.action_cancel_upload: { - ((FileDisplayActivity)mContainerActivity).cancelTransference(mTargetFile); + ((FileDisplayActivity) mContainerActivity).cancelTransference(mTargetFile); return true; } case R.id.action_see_details: { @@ -327,8 +327,8 @@ public class OCFileListFragment extends ExtendedListFragment { // Obtain the file if (!mTargetFile.isDown()) { // Download the file Log_OC.d(TAG, mTargetFile.getRemotePath() + " : File must be downloaded"); - ((FileDisplayActivity)mContainerActivity).startDownloadForSending(mTargetFile); - + ((FileDisplayActivity) mContainerActivity).startDownloadForSending(mTargetFile); + } else { mContainerActivity.getFileOperationsHelper().sendDownloadedFile(mTargetFile); } @@ -351,14 +351,14 @@ public class OCFileListFragment extends ExtendedListFragment { return true; } case R.id.action_copy: - Intent action = new Intent(getActivity(), CopyActivity.class); + Intent action = new Intent(getActivity(), FolderPickerActivity.class); // Pass mTargetFile that contains info of selected file/folder - action.putExtra(CopyActivity.EXTRA_TARGET_FILE, mTargetFile); + action.putExtra(FolderPickerActivity.EXTRA_FILE, mTargetFile); getActivity().startActivityForResult(action, FileDisplayActivity.ACTION_COPY_FILES); return true; default: - return super.onContextItemSelected(item); + return super.onContextItemSelected(item); } } @@ -366,12 +366,13 @@ public class OCFileListFragment extends ExtendedListFragment { /** * Use this to query the {@link OCFile} that is currently * being displayed by this fragment + * * @return The currently viewed OCFile */ - public OCFile getCurrentFile(){ + public OCFile getCurrentFile() { return mFile; } - + /** * Calls {@link OCFileListFragment#listDirectory(OCFile)} with a null parameter */ @@ -385,12 +386,12 @@ public class OCFileListFragment extends ExtendedListFragment { // TODO Enable when "On Device" is recovered ? listDirectory(getCurrentFile()/*, MainApp.getOnlyOnDevice()*/); } - + /** * Lists the given directory on the view. When the input parameter is null, * it will either refresh the last known directory. list the root * if there never was a directory. - * + * * @param directory File to be listed */ public void listDirectory(OCFile directory/*, boolean onlyOnDevice*/) { @@ -398,18 +399,18 @@ public class OCFileListFragment extends ExtendedListFragment { if (storageManager != null) { // Check input parameters for null - if(directory == null){ - if(mFile != null){ + if (directory == null) { + if (mFile != null) { directory = mFile; } else { directory = storageManager.getFileByPath("/"); if (directory == null) return; // no files, wait for sync } } - - + + // If that's not a directory -> List its parent - if(!directory.isFolder()){ + if (!directory.isFolder()) { Log_OC.w(TAG, "You see, that is not a directory -> " + directory.toString()); directory = storageManager.getFileById(directory.getParentId()); } From 97625170fa20dc0c470f97bfbaf1030264012018 Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Fri, 5 Dec 2014 11:27:56 +0100 Subject: [PATCH 055/133] Taken out old activity --- AndroidManifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 720fe38ed0..fa3dd70678 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -174,7 +174,7 @@ android:label="@string/copy_link" android:icon="@drawable/copy_link"/> - From 21c391c0b2767d9487db8d532d0719eacf1dc3e8 Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Sat, 14 Feb 2015 15:32:40 +0100 Subject: [PATCH 056/133] Removes a static modifier that sneaked in --- src/com/owncloud/android/datamodel/FileDataStorageManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/owncloud/android/datamodel/FileDataStorageManager.java b/src/com/owncloud/android/datamodel/FileDataStorageManager.java index 10b7698c17..29a11c4280 100644 --- a/src/com/owncloud/android/datamodel/FileDataStorageManager.java +++ b/src/com/owncloud/android/datamodel/FileDataStorageManager.java @@ -754,7 +754,7 @@ public class FileDataStorageManager { } } - private static boolean copyFile(File src, File target) { + private boolean copyFile(File src, File target) { boolean ret = true; InputStream in = null; From 97da4d5c8a771bffe239d9d10a237909a8b32574 Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Mon, 17 Aug 2015 18:10:21 +0200 Subject: [PATCH 057/133] Fixes the last reported bugs --- .../android/files/FileMenuFilter.java | 65 +++-- .../android/operations/CopyFileOperation.java | 2 +- .../ui/fragment/FileDetailFragment.java | 138 +++++---- .../ui/preview/FileDownloadFragment.java | 89 +++--- .../ui/preview/PreviewImageFragment.java | 99 ++++--- .../ui/preview/PreviewMediaFragment.java | 276 ++++++++++-------- .../android/utils/ErrorMessageAdapter.java | 13 +- 7 files changed, 365 insertions(+), 317 deletions(-) diff --git a/src/com/owncloud/android/files/FileMenuFilter.java b/src/com/owncloud/android/files/FileMenuFilter.java index 2c2754cc1a..f7fee626c5 100644 --- a/src/com/owncloud/android/files/FileMenuFilter.java +++ b/src/com/owncloud/android/files/FileMenuFilter.java @@ -39,7 +39,7 @@ import com.owncloud.android.services.OperationsService.OperationsServiceBinder; import com.owncloud.android.ui.activity.ComponentsGetter; /** - * Filters out the file actions available in a given {@link Menu} for a given {@link OCFile} + * Filters out the file actions available in a given {@link Menu} for a given {@link OCFile} * according to the current state of the latest. */ public class FileMenuFilter { @@ -48,10 +48,10 @@ public class FileMenuFilter { private ComponentsGetter mComponentsGetter; private Account mAccount; private Context mContext; - + /** * Constructor - * + * * @param targetFile {@link OCFile} target of the action to filter in the {@link Menu}. * @param account ownCloud {@link Account} holding targetFile. * @param cg Accessor to app components, needed to access the @@ -64,20 +64,20 @@ public class FileMenuFilter { mComponentsGetter = cg; mContext = context; } - - + + /** * Filters out the file actions available in the passed {@link Menu} taken into account * the state of the {@link OCFile} held by the filter. - * + * * @param menu Options or context menu to filter. */ public void filter(Menu menu) { - List toShow = new ArrayList(); - List toHide = new ArrayList(); - + List toShow = new ArrayList(); + List toHide = new ArrayList(); + filter(toShow, toHide); - + MenuItem item = null; for (int i : toShow) { item = menu.findItem(i); @@ -86,7 +86,7 @@ public class FileMenuFilter { item.setEnabled(true); } } - + for (int i : toHide) { item = menu.findItem(i); if (item != null) { @@ -99,10 +99,10 @@ public class FileMenuFilter { /** * Performs the real filtering, to be applied in the {@link Menu} by the caller methods. - * + * * Decides what actions must be shown and hidden. - * - * @param toShow List to save the options that must be shown in the menu. + * + * @param toShow List to save the options that must be shown in the menu. * @param toHide List to save the options that must be shown in the menu. */ private void filter(List toShow, List toHide) { @@ -116,71 +116,72 @@ public class FileMenuFilter { FileUploaderBinder uploaderBinder = mComponentsGetter.getFileUploaderBinder(); uploading = (uploaderBinder != null && uploaderBinder.isUploading(mAccount, mFile)); } - + /// decision is taken for each possible action on a file in the menu - + // DOWNLOAD if (mFile == null || mFile.isDown() || downloading || uploading) { toHide.add(R.id.action_download_file); - + } else { toShow.add(R.id.action_download_file); } - + // RENAME if (mFile == null || downloading || uploading) { toHide.add(R.id.action_rename_file); - + } else { toShow.add(R.id.action_rename_file); } - // MOVE + // MOVE & COPY if (mFile == null || downloading || uploading) { toHide.add(R.id.action_move); - + toHide.add(R.id.action_copy); } else { toShow.add(R.id.action_move); + toShow.add(R.id.action_copy); } - + // REMOVE if (mFile == null || downloading || uploading) { toHide.add(R.id.action_remove_file); - + } else { toShow.add(R.id.action_remove_file); } - + // OPEN WITH (different to preview!) if (mFile == null || mFile.isFolder() || !mFile.isDown() || downloading || uploading) { toHide.add(R.id.action_open_file_with); - + } else { toShow.add(R.id.action_open_file_with); } - - + + // CANCEL DOWNLOAD if (mFile == null || !downloading) { toHide.add(R.id.action_cancel_download); } else { toShow.add(R.id.action_cancel_download); } - + // CANCEL UPLOAD if (mFile == null || !uploading || mFile.isFolder()) { toHide.add(R.id.action_cancel_upload); } else { toShow.add(R.id.action_cancel_upload); } - + // SYNC FILE CONTENTS if (mFile == null || mFile.isFolder() || !mFile.isDown() || downloading || uploading) { toHide.add(R.id.action_sync_file); } else { toShow.add(R.id.action_sync_file); } - + // SHARE FILE // TODO add check on SHARE available on server side? boolean shareAllowed = (mContext != null && @@ -190,7 +191,7 @@ public class FileMenuFilter { } else { toShow.add(R.id.action_share_file); } - + // UNSHARE FILE // TODO add check on SHARE available on server side? if ( !shareAllowed || (mFile == null || !mFile.isShareByLink())) { @@ -205,7 +206,7 @@ public class FileMenuFilter { } else { toShow.add(R.id.action_see_details); } - + // SEND boolean sendAllowed = (mContext != null && mContext.getString(R.string.send_files_to_other_apps).equalsIgnoreCase("on")); diff --git a/src/com/owncloud/android/operations/CopyFileOperation.java b/src/com/owncloud/android/operations/CopyFileOperation.java index 77d2458f33..77a9a07187 100644 --- a/src/com/owncloud/android/operations/CopyFileOperation.java +++ b/src/com/owncloud/android/operations/CopyFileOperation.java @@ -71,7 +71,7 @@ public class CopyFileOperation extends SyncOperation { /// 1. check copy validity if (mTargetParentPath.startsWith(mSrcPath)) { - return new RemoteOperationResult(ResultCode.INVALID_MOVE_INTO_DESCENDANT); + return new RemoteOperationResult(ResultCode.INVALID_COPY_INTO_DESCENDANT); } mFile = getStorageManager().getFileByPath(mSrcPath); if (mFile == null) { diff --git a/src/com/owncloud/android/ui/fragment/FileDetailFragment.java b/src/com/owncloud/android/ui/fragment/FileDetailFragment.java index 9916a3d00f..b5fce44e84 100644 --- a/src/com/owncloud/android/ui/fragment/FileDetailFragment.java +++ b/src/com/owncloud/android/ui/fragment/FileDetailFragment.java @@ -21,10 +21,7 @@ */ package com.owncloud.android.ui.fragment; -import java.lang.ref.WeakReference; - import android.accounts.Account; -import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; @@ -46,13 +43,14 @@ import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder; import com.owncloud.android.files.services.FileUploader.FileUploaderBinder; import com.owncloud.android.lib.common.network.OnDatatransferProgressListener; import com.owncloud.android.lib.common.utils.Log_OC; -import com.owncloud.android.services.observer.FileObserverService; import com.owncloud.android.ui.activity.FileActivity; import com.owncloud.android.ui.activity.FileDisplayActivity; import com.owncloud.android.ui.dialog.RemoveFileDialogFragment; import com.owncloud.android.ui.dialog.RenameFileDialogFragment; import com.owncloud.android.utils.DisplayUtils; +import java.lang.ref.WeakReference; + /** * This Fragment is used to display the details about a file. @@ -62,9 +60,9 @@ public class FileDetailFragment extends FileFragment implements OnClickListener private int mLayout; private View mView; private Account mAccount; - + public ProgressListener mProgressListener; - + private static final String TAG = FileDetailFragment.class.getSimpleName(); public static final String FTAG_CONFIRMATION = "REMOVE_CONFIRMATION_FRAGMENT"; public static final String FTAG_RENAME_FILE = "RENAME_FILE_FRAGMENT"; @@ -103,14 +101,14 @@ public class FileDetailFragment extends FileFragment implements OnClickListener mLayout = R.layout.file_details_empty; mProgressListener = null; } - + @Override public void onActivityCreated(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); } - + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, @@ -120,14 +118,14 @@ public class FileDetailFragment extends FileFragment implements OnClickListener mAccount = getArguments().getParcelable(ARG_ACCOUNT); if (savedInstanceState != null) { - setFile((OCFile)savedInstanceState.getParcelable(FileActivity.EXTRA_FILE)); + setFile((OCFile) savedInstanceState.getParcelable(FileActivity.EXTRA_FILE)); mAccount = savedInstanceState.getParcelable(FileActivity.EXTRA_ACCOUNT); } - - if(getFile() != null && mAccount != null) { + + if (getFile() != null && mAccount != null) { mLayout = R.layout.file_details_fragment; } - + mView = inflater.inflate(mLayout, null); if (mLayout == R.layout.file_details_fragment) { @@ -153,20 +151,20 @@ public class FileDetailFragment extends FileFragment implements OnClickListener super.onStart(); listenForTransferProgress(); } - + @Override public void onStop() { leaveTransferProgress(); super.onStop(); } - + @Override public View getView() { return super.getView() == null ? mView : super.getView(); } - + /** * {@inheritDoc} */ @@ -174,16 +172,16 @@ public class FileDetailFragment extends FileFragment implements OnClickListener public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.file_actions_menu, menu); - } + } + - /** * {@inheritDoc} */ @Override - public void onPrepareOptionsMenu (Menu menu) { + public void onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); - + if (mContainerActivity.getStorageManager() != null) { FileMenuFilter mf = new FileMenuFilter( getFile(), @@ -193,7 +191,7 @@ public class FileDetailFragment extends FileFragment implements OnClickListener ); mf.filter(menu); } - + // additional restriction for this fragment MenuItem item = menu.findItem(R.id.action_see_details); if (item != null) { @@ -207,9 +205,16 @@ public class FileDetailFragment extends FileFragment implements OnClickListener item.setVisible(false); item.setEnabled(false); } + + // additional restriction for this fragment + item = menu.findItem(R.id.action_copy); + if (item != null) { + item.setVisible(false); + item.setEnabled(false); + } } - + /** * {@inheritDoc} */ @@ -240,10 +245,10 @@ public class FileDetailFragment extends FileFragment implements OnClickListener } case R.id.action_cancel_download: case R.id.action_cancel_upload: { - ((FileDisplayActivity)mContainerActivity).cancelTransference(getFile()); + ((FileDisplayActivity) mContainerActivity).cancelTransference(getFile()); return true; } - case R.id.action_download_file: + case R.id.action_download_file: case R.id.action_sync_file: { mContainerActivity.getFileOperationsHelper().syncFile(getFile()); return true; @@ -252,9 +257,10 @@ public class FileDetailFragment extends FileFragment implements OnClickListener // Obtain the file if (!getFile().isDown()) { // Download the file Log_OC.d(TAG, getFile().getRemotePath() + " : File must be downloaded"); - ((FileDisplayActivity)mContainerActivity).startDownloadForSending(getFile()); - - } else { + ((FileDisplayActivity) mContainerActivity).startDownloadForSending(getFile()); + + } + else { mContainerActivity.getFileOperationsHelper().sendDownloadedFile(getFile()); } return true; @@ -281,7 +287,7 @@ public class FileDetailFragment extends FileFragment implements OnClickListener break; } case R.id.fdCancelBtn: { - ((FileDisplayActivity)mContainerActivity).cancelTransference(getFile()); + ((FileDisplayActivity) mContainerActivity).cancelTransference(getFile()); break; } default: @@ -292,17 +298,17 @@ public class FileDetailFragment extends FileFragment implements OnClickListener /** * Check if the fragment was created with an empty layout. An empty fragment can't show file details, must be replaced. - * - * @return True when the fragment was created with the empty layout. + * + * @return True when the fragment was created with the empty layout. */ public boolean isEmpty() { return (mLayout == R.layout.file_details_empty || getFile() == null || mAccount == null); } - + /** * Use this method to signal this Activity that it shall update its view. - * + * * @param file : An {@link OCFile} */ public void updateFileDetails(OCFile file, Account ocAccount) { @@ -313,14 +319,13 @@ public class FileDetailFragment extends FileFragment implements OnClickListener /** * Updates the view with all relevant details about that file. + *

+ * TODO Remove parameter when the transferring state of files is kept in database. * - * TODO Remove parameter when the transferring state of files is kept in database. - * - * @param transferring Flag signaling if the file should be considered as downloading or uploading, - * although {@link FileDownloaderBinder#isDownloading(Account, OCFile)} and - * {@link FileUploaderBinder#isUploading(Account, OCFile)} return false. - * - * @param refresh If 'true', try to refresh the whole file from the database + * @param transferring Flag signaling if the file should be considered as downloading or uploading, + * although {@link FileDownloaderBinder#isDownloading(Account, OCFile)} and + * {@link FileUploaderBinder#isUploading(Account, OCFile)} return false. + * @param refresh If 'true', try to refresh the whole file from the database */ public void updateFileDetails(boolean transferring, boolean refresh) { if (readyToShow()) { @@ -329,7 +334,7 @@ public class FileDetailFragment extends FileFragment implements OnClickListener setFile(storageManager.getFileByPath(getFile().getRemotePath())); } OCFile file = getFile(); - + // set file details setFilename(file.getFileName()); setFiletype(file.getMimetype(), file.getFileName()); @@ -348,7 +353,7 @@ public class FileDetailFragment extends FileFragment implements OnClickListener (uploaderBinder != null && uploaderBinder.isUploading(mAccount, file)) ) { setButtonsForTransferring(); - + } else if (file.isDown()) { setButtonsForDown(); @@ -361,25 +366,27 @@ public class FileDetailFragment extends FileFragment implements OnClickListener } getView().invalidate(); } - + /** * Checks if the fragment is ready to show details of a OCFile - * - * @return 'True' when the fragment is ready to show details of a file + * + * @return 'True' when the fragment is ready to show details of a file */ private boolean readyToShow() { - return (getFile() != null && mAccount != null && mLayout == R.layout.file_details_fragment); + return (getFile() != null && mAccount != null && mLayout == R.layout.file_details_fragment); } /** * Updates the filename in view + * * @param filename to set */ private void setFilename(String filename) { TextView tv = (TextView) getView().findViewById(R.id.fdFilename); - if (tv != null) + if (tv != null) { tv.setText(filename); + } } /** @@ -401,25 +408,28 @@ public class FileDetailFragment extends FileFragment implements OnClickListener /** * Updates the file size in view + * * @param filesize in bytes to set */ private void setFilesize(long filesize) { TextView tv = (TextView) getView().findViewById(R.id.fdSize); - if (tv != null) + if (tv != null) { tv.setText(DisplayUtils.bytesToHumanReadable(filesize)); + } } - + /** * Updates the time that the file was last modified + * * @param milliseconds Unix time to set */ - private void setTimeModified(long milliseconds){ + private void setTimeModified(long milliseconds) { TextView tv = (TextView) getView().findViewById(R.id.fdModified); - if(tv != null){ + if (tv != null) { tv.setText(DisplayUtils.unixTimeToHumanReadable(milliseconds)); } } - + /** * Enables or disables buttons for a file being downloaded */ @@ -430,21 +440,24 @@ public class FileDetailFragment extends FileFragment implements OnClickListener // show the progress bar for the transfer getView().findViewById(R.id.fdProgressBlock).setVisibility(View.VISIBLE); - TextView progressText = (TextView)getView().findViewById(R.id.fdProgressText); + TextView progressText = (TextView) getView().findViewById(R.id.fdProgressText); progressText.setVisibility(View.VISIBLE); FileDownloaderBinder downloaderBinder = mContainerActivity.getFileDownloaderBinder(); FileUploaderBinder uploaderBinder = mContainerActivity.getFileUploaderBinder(); //if (getFile().isDownloading()) { if (downloaderBinder != null && downloaderBinder.isDownloading(mAccount, getFile())) { progressText.setText(R.string.downloader_download_in_progress_ticker); - } else if (uploaderBinder != null && uploaderBinder.isUploading(mAccount, getFile())) { - progressText.setText(R.string.uploader_upload_in_progress_ticker); + } + else { + if (uploaderBinder != null && uploaderBinder.isUploading(mAccount, getFile())) { + progressText.setText(R.string.uploader_upload_in_progress_ticker); + } } } } /** - * Enables or disables buttons for a file locally available + * Enables or disables buttons for a file locally available */ private void setButtonsForDown() { if (!isEmpty()) { @@ -452,13 +465,13 @@ public class FileDetailFragment extends FileFragment implements OnClickListener // hides the progress bar getView().findViewById(R.id.fdProgressBlock).setVisibility(View.GONE); - TextView progressText = (TextView)getView().findViewById(R.id.fdProgressText); + TextView progressText = (TextView) getView().findViewById(R.id.fdProgressText); progressText.setVisibility(View.GONE); } } /** - * Enables or disables buttons for a file not locally available + * Enables or disables buttons for a file not locally available */ private void setButtonsForRemote() { if (!isEmpty()) { @@ -466,11 +479,11 @@ public class FileDetailFragment extends FileFragment implements OnClickListener // hides the progress bar getView().findViewById(R.id.fdProgressBlock).setVisibility(View.GONE); - TextView progressText = (TextView)getView().findViewById(R.id.fdProgressText); + TextView progressText = (TextView) getView().findViewById(R.id.fdProgressText); progressText.setVisibility(View.GONE); } } - + public void listenForTransferProgress() { if (mProgressListener != null) { @@ -484,8 +497,8 @@ public class FileDetailFragment extends FileFragment implements OnClickListener } } } - - + + public void leaveTransferProgress() { if (mProgressListener != null) { if (mContainerActivity.getFileDownloaderBinder() != null) { @@ -500,7 +513,6 @@ public class FileDetailFragment extends FileFragment implements OnClickListener } - /** * Helper class responsible for updating the progress bar shown for file uploading or * downloading @@ -508,11 +520,11 @@ public class FileDetailFragment extends FileFragment implements OnClickListener private class ProgressListener implements OnDatatransferProgressListener { int mLastPercent = 0; WeakReference mProgressBar = null; - + ProgressListener(ProgressBar progressBar) { mProgressBar = new WeakReference(progressBar); } - + @Override public void onTransferProgress(long progressRate, long totalTransferredSoFar, long totalToTransfer, String filename) { diff --git a/src/com/owncloud/android/ui/preview/FileDownloadFragment.java b/src/com/owncloud/android/ui/preview/FileDownloadFragment.java index 631a8367da..957d338431 100644 --- a/src/com/owncloud/android/ui/preview/FileDownloadFragment.java +++ b/src/com/owncloud/android/ui/preview/FileDownloadFragment.java @@ -36,8 +36,13 @@ import android.view.ViewGroup; import android.widget.ProgressBar; import android.widget.TextView; +import com.owncloud.android.R; +import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.lib.common.network.OnDatatransferProgressListener; import com.owncloud.android.lib.common.utils.Log_OC; +import com.owncloud.android.ui.fragment.FileFragment; + +import java.lang.ref.WeakReference; /** @@ -58,9 +63,9 @@ public class FileDownloadFragment extends FileFragment implements OnClickListene public ProgressListener mProgressListener; private boolean mListening; - + private static final String TAG = FileDownloadFragment.class.getSimpleName(); - + private boolean mIgnoreFirstSavedState; private boolean mError; @@ -117,30 +122,31 @@ public class FileDownloadFragment extends FileFragment implements OnClickListene mIgnoreFirstSavedState = args.getBoolean(ARG_IGNORE_FIRST); mAccount = args.getParcelable(ARG_ACCOUNT); } - + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { + Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); - + if (savedInstanceState != null) { if (!mIgnoreFirstSavedState) { - setFile((OCFile)savedInstanceState.getParcelable(FileDownloadFragment.EXTRA_FILE)); + setFile((OCFile) savedInstanceState.getParcelable(FileDownloadFragment.EXTRA_FILE)); mAccount = savedInstanceState.getParcelable(FileDownloadFragment.EXTRA_ACCOUNT); mError = savedInstanceState.getBoolean(FileDownloadFragment.EXTRA_ERROR); - } else { + } + else { mIgnoreFirstSavedState = false; } } - + View view = null; view = inflater.inflate(R.layout.file_download_fragment, container, false); mView = view; - - ProgressBar progressBar = (ProgressBar)mView.findViewById(R.id.progressBar); + + ProgressBar progressBar = (ProgressBar) mView.findViewById(R.id.progressBar); mProgressListener = new ProgressListener(progressBar); - + (mView.findViewById(R.id.cancelBtn)).setOnClickListener(this); (mView.findViewById(R.id.fileDownloadLL)).setOnClickListener(new OnClickListener() { @@ -152,13 +158,14 @@ public class FileDownloadFragment extends FileFragment implements OnClickListene if (mError) { setButtonsForRemote(); - } else { + } + else { setButtonsForTransferring(); } - + return view; } - + @Override public void onSaveInstanceState(Bundle outState) { @@ -173,7 +180,7 @@ public class FileDownloadFragment extends FileFragment implements OnClickListene super.onStart(); listenForTransferProgress(); } - + @Override public void onResume() { super.onResume(); @@ -185,19 +192,19 @@ public class FileDownloadFragment extends FileFragment implements OnClickListene super.onPause(); } - + @Override public void onStop() { leaveTransferProgress(); super.onStop(); } - + @Override public void onDestroy() { super.onDestroy(); } - - + + @Override public View getView() { if (!mListening) { @@ -206,7 +213,7 @@ public class FileDownloadFragment extends FileFragment implements OnClickListene return super.getView() == null ? mView : super.getView(); } - + @Override public void onClick(View v) { switch (v.getId()) { @@ -220,53 +227,52 @@ public class FileDownloadFragment extends FileFragment implements OnClickListene } } - + /** * Enables or disables buttons for a file being downloaded */ private void setButtonsForTransferring() { getView().findViewById(R.id.cancelBtn).setVisibility(View.VISIBLE); - + // show the progress bar for the transfer getView().findViewById(R.id.progressBar).setVisibility(View.VISIBLE); - TextView progressText = (TextView)getView().findViewById(R.id.progressText); + TextView progressText = (TextView) getView().findViewById(R.id.progressText); progressText.setText(R.string.downloader_download_in_progress_ticker); progressText.setVisibility(View.VISIBLE); - + // hides the error icon getView().findViewById(R.id.errorText).setVisibility(View.GONE); getView().findViewById(R.id.error_image).setVisibility(View.GONE); } - /** - * Enables or disables buttons for a file locally available + * Enables or disables buttons for a file locally available */ private void setButtonsForDown() { getView().findViewById(R.id.cancelBtn).setVisibility(View.GONE); - + // hides the progress bar getView().findViewById(R.id.progressBar).setVisibility(View.GONE); - + // updates the text message - TextView progressText = (TextView)getView().findViewById(R.id.progressText); + TextView progressText = (TextView) getView().findViewById(R.id.progressText); progressText.setText(R.string.common_loading); progressText.setVisibility(View.VISIBLE); - + // hides the error icon getView().findViewById(R.id.errorText).setVisibility(View.GONE); getView().findViewById(R.id.error_image).setVisibility(View.GONE); } - + /** - * Enables or disables buttons for a file not locally available - * + * Enables or disables buttons for a file not locally available + *

* Currently, this is only used when a download was failed */ private void setButtonsForRemote() { getView().findViewById(R.id.cancelBtn).setVisibility(View.GONE); - + // hides the progress bar and message getView().findViewById(R.id.progressBar).setVisibility(View.GONE); getView().findViewById(R.id.progressText).setVisibility(View.GONE); @@ -275,7 +281,7 @@ public class FileDownloadFragment extends FileFragment implements OnClickListene getView().findViewById(R.id.errorText).setVisibility(View.VISIBLE); getView().findViewById(R.id.error_image).setVisibility(View.VISIBLE); } - + public void listenForTransferProgress() { if (mProgressListener != null && !mListening) { @@ -288,8 +294,8 @@ public class FileDownloadFragment extends FileFragment implements OnClickListene } } } - - + + public void leaveTransferProgress() { if (mProgressListener != null) { if (mContainerActivity.getFileDownloaderBinder() != null) { @@ -308,11 +314,11 @@ public class FileDownloadFragment extends FileFragment implements OnClickListene private class ProgressListener implements OnDatatransferProgressListener { int mLastPercent = 0; WeakReference mProgressBar = null; - + ProgressListener(ProgressBar progressBar) { mProgressBar = new WeakReference(progressBar); } - + @Override public void onTransferProgress( long progressRate, long totalTransferredSoFar, long totalToTransfer, String filename @@ -333,8 +339,9 @@ public class FileDownloadFragment extends FileFragment implements OnClickListene public void setError(boolean error) { mError = error; - }; - + } + + ; } diff --git a/src/com/owncloud/android/ui/preview/PreviewImageFragment.java b/src/com/owncloud/android/ui/preview/PreviewImageFragment.java index 7ca1cfbb56..6dd1865860 100644 --- a/src/com/owncloud/android/ui/preview/PreviewImageFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewImageFragment.java @@ -74,11 +74,11 @@ public class PreviewImageFragment extends FileFragment { private ProgressBar mProgressWheel; public Bitmap mBitmap = null; - + private static final String TAG = PreviewImageFragment.class.getSimpleName(); private boolean mIgnoreFirstSavedState; - + private LoadBitmapTask mLoadBitmapTask = null; @@ -105,7 +105,7 @@ public class PreviewImageFragment extends FileFragment { return frag; } - + /** * Creates an empty fragment for image previews. @@ -119,8 +119,8 @@ public class PreviewImageFragment extends FileFragment { public PreviewImageFragment() { mIgnoreFirstSavedState = false; } - - + + /** * {@inheritDoc} */ @@ -135,14 +135,14 @@ public class PreviewImageFragment extends FileFragment { mIgnoreFirstSavedState = args.getBoolean(ARG_IGNORE_FIRST); setHasOptionsMenu(true); } - + /** * {@inheritDoc} */ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { + Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); View view = inflater.inflate(R.layout.preview_image_fragment, container, false); mImageView = (TouchImageViewCustom) view.findViewById(R.id.image); @@ -182,7 +182,7 @@ public class PreviewImageFragment extends FileFragment { throw new IllegalStateException("There is no local file to preview"); } } - + /** * {@inheritDoc} @@ -192,7 +192,7 @@ public class PreviewImageFragment extends FileFragment { super.onSaveInstanceState(outState); outState.putParcelable(PreviewImageFragment.EXTRA_FILE, getFile()); } - + @Override public void onStart() { @@ -203,8 +203,8 @@ public class PreviewImageFragment extends FileFragment { mLoadBitmapTask.execute(getFile().getStoragePath()); } } - - + + @Override public void onStop() { Log_OC.d(TAG, "onStop starts"); @@ -214,7 +214,7 @@ public class PreviewImageFragment extends FileFragment { } super.onStop(); } - + /** * {@inheritDoc} */ @@ -230,11 +230,11 @@ public class PreviewImageFragment extends FileFragment { @Override public void onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); - + if (mContainerActivity.getStorageManager() != null) { // Update the file setFile(mContainerActivity.getStorageManager().getFileById(getFile().getFileId())); - + FileMenuFilter mf = new FileMenuFilter( getFile(), mContainerActivity.getStorageManager().getAccount(), @@ -243,7 +243,7 @@ public class PreviewImageFragment extends FileFragment { ); mf.filter(menu); } - + // additional restriction for this fragment // TODO allow renaming in PreviewImageFragment MenuItem item = menu.findItem(R.id.action_rename_file); @@ -251,7 +251,7 @@ public class PreviewImageFragment extends FileFragment { item.setVisible(false); item.setEnabled(false); } - + // additional restriction for this fragment // TODO allow refresh file in PreviewImageFragment item = menu.findItem(R.id.action_sync_file); @@ -266,11 +266,17 @@ public class PreviewImageFragment extends FileFragment { item.setVisible(false); item.setEnabled(false); } - + + // additional restriction for this fragment + item = menu.findItem(R.id.action_copy); + if (item != null) { + item.setVisible(false); + item.setEnabled(false); + } + } - - + /** * {@inheritDoc} */ @@ -318,10 +324,10 @@ public class PreviewImageFragment extends FileFragment { return false; } } - + private void seeDetails() { - mContainerActivity.showDetails(getFile()); + mContainerActivity.showDetails(getFile()); } @@ -348,7 +354,7 @@ public class PreviewImageFragment extends FileFragment { super.onDestroy(); } - + /** * Opens the previewed image with an external application. */ @@ -356,8 +362,8 @@ public class PreviewImageFragment extends FileFragment { mContainerActivity.getFileOperationsHelper().openFile(getFile()); finish(); } - - + + private class LoadBitmapTask extends AsyncTask { /** @@ -376,7 +382,7 @@ public class PreviewImageFragment extends FileFragment { */ private final WeakReference mMessageViewRef; - + /** * Weak reference to the target {@link ProgressBar} shown while the load is in progress. * @@ -385,17 +391,17 @@ public class PreviewImageFragment extends FileFragment { */ private final WeakReference mProgressWheelRef; - + /** - * Error message to show when a load fails + * Error message to show when a load fails */ private int mErrorMessageId; - - + + /** * Constructor. - * - * @param imageView Target {@link ImageView} where the bitmap will be loaded into. + * + * @param imageView Target {@link ImageView} where the bitmap will be loaded into. */ public LoadBitmapTask(ImageViewCustom imageView, TextView messageView, ProgressBar progressWheel) { @@ -403,8 +409,8 @@ public class PreviewImageFragment extends FileFragment { mMessageViewRef = new WeakReference(messageView); mProgressWheelRef = new WeakReference(progressWheel); } - - + + @Override protected Bitmap doInBackground(String... params) { Bitmap result = null; @@ -454,18 +460,18 @@ public class PreviewImageFragment extends FileFragment { } catch (NoSuchFieldError e) { mErrorMessageId = R.string.common_error_unknown; - Log_OC.e(TAG, "Error from access to unexisting field despite protection; file " - + storagePath, e); - + Log_OC.e(TAG, "Error from access to unexisting field despite protection; file " + + storagePath, e); + } catch (Throwable t) { mErrorMessageId = R.string.common_error_unknown; Log_OC.e(TAG, "Unexpected error loading " + getFile().getStoragePath(), t); - + } - + return result; } - + @Override protected void onCancelled(Bitmap result) { if (result != null) { @@ -478,7 +484,8 @@ public class PreviewImageFragment extends FileFragment { hideProgressWheel(); if (result != null) { showLoadedImage(result); - } else { + } + else { showErrorMessage(); } if (result != null && mBitmap != result) { @@ -486,7 +493,7 @@ public class PreviewImageFragment extends FileFragment { result.recycle(); } } - + @SuppressLint("InlinedApi") private void showLoadedImage(Bitmap result) { final ImageViewCustom imageView = mImageViewRef.get(); @@ -503,7 +510,7 @@ public class PreviewImageFragment extends FileFragment { messageView.setVisibility(View.GONE); } // else , silently finish, the fragment was destroyed } - + private void showErrorMessage() { final ImageView imageView = mImageViewRef.get(); if (imageView != null) { @@ -517,14 +524,14 @@ public class PreviewImageFragment extends FileFragment { messageView.setVisibility(View.VISIBLE); } // else , silently finish, the fragment was destroyed } - + private void hideProgressWheel() { final ProgressBar progressWheel = mProgressWheelRef.get(); if (progressWheel != null) { progressWheel.setVisibility(View.GONE); } } - + } /** @@ -538,7 +545,7 @@ public class PreviewImageFragment extends FileFragment { return (file != null && file.isImage()); } - + /** * Finishes the preview */ @@ -546,7 +553,7 @@ public class PreviewImageFragment extends FileFragment { Activity container = getActivity(); container.finish(); } - + public TouchImageViewCustom getImageView() { return mImageView; } diff --git a/src/com/owncloud/android/ui/preview/PreviewMediaFragment.java b/src/com/owncloud/android/ui/preview/PreviewMediaFragment.java index d87b82cbec..02aebd0c00 100644 --- a/src/com/owncloud/android/ui/preview/PreviewMediaFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewMediaFragment.java @@ -64,7 +64,7 @@ import com.owncloud.android.ui.fragment.FileFragment; /** * This fragment shows a preview of a downloaded media file (audio or video). - * + * * Trying to get an instance with NULL {@link OCFile} or ownCloud {@link Account} values will * produce an {@link IllegalStateException}. * @@ -84,46 +84,46 @@ public class PreviewMediaFragment extends FileFragment implements private ImageView mImagePreview; private VideoView mVideoPreview; private int mSavedPlaybackPosition; - + private MediaServiceBinder mMediaServiceBinder = null; private MediaControlView mMediaController = null; private MediaServiceConnection mMediaServiceConnection = null; private VideoHelper mVideoHelper; private boolean mAutoplay; public boolean mPrepared; - + private static final String TAG = PreviewMediaFragment.class.getSimpleName(); - + /** * Creates a fragment to preview a file. - * + *

* When 'fileToDetail' or 'ocAccount' are null - * - * @param fileToDetail An {@link OCFile} to preview in the fragment - * @param ocAccount An ownCloud account; needed to start downloads + * + * @param fileToDetail An {@link OCFile} to preview in the fragment + * @param ocAccount An ownCloud account; needed to start downloads */ public PreviewMediaFragment( - OCFile fileToDetail, - Account ocAccount, - int startPlaybackPosition, + OCFile fileToDetail, + Account ocAccount, + int startPlaybackPosition, boolean autoplay) { - + super(fileToDetail); mAccount = ocAccount; mSavedPlaybackPosition = startPlaybackPosition; mAutoplay = autoplay; } - - + + /** - * Creates an empty fragment for previews. - * - * MUST BE KEPT: the system uses it when tries to reinstantiate a fragment automatically - * (for instance, when the device is turned a aside). - * - * DO NOT CALL IT: an {@link OCFile} and {@link Account} must be provided for a successful - * construction + * Creates an empty fragment for previews. + *

+ * MUST BE KEPT: the system uses it when tries to reinstantiate a fragment automatically + * (for instance, when the device is turned a aside). + *

+ * DO NOT CALL IT: an {@link OCFile} and {@link Account} must be provided for a successful + * construction */ public PreviewMediaFragment() { super(); @@ -131,8 +131,8 @@ public class PreviewMediaFragment extends FileFragment implements mSavedPlaybackPosition = 0; mAutoplay = true; } - - + + /** * {@inheritDoc} */ @@ -141,29 +141,29 @@ public class PreviewMediaFragment extends FileFragment implements super.onCreate(savedInstanceState); setHasOptionsMenu(true); } - + /** * {@inheritDoc} */ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { + Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); Log_OC.e(TAG, "onCreateView"); - + mView = inflater.inflate(R.layout.file_preview, container, false); - - mImagePreview = (ImageView)mView.findViewById(R.id.image_preview); - mVideoPreview = (VideoView)mView.findViewById(R.id.video_preview); + + mImagePreview = (ImageView) mView.findViewById(R.id.image_preview); + mVideoPreview = (VideoView) mView.findViewById(R.id.video_preview); mVideoPreview.setOnTouchListener(this); - - mMediaController = (MediaControlView)mView.findViewById(R.id.media_controller); - + + mMediaController = (MediaControlView) mView.findViewById(R.id.media_controller); + return mView; } - + /** * {@inheritDoc} @@ -184,30 +184,32 @@ public class PreviewMediaFragment extends FileFragment implements if (!file.isDown()) { throw new IllegalStateException("There is no local file to preview"); } - - } else { - file = (OCFile)savedInstanceState.getParcelable(PreviewMediaFragment.EXTRA_FILE); + + } + else { + file = (OCFile) savedInstanceState.getParcelable(PreviewMediaFragment.EXTRA_FILE); setFile(file); mAccount = savedInstanceState.getParcelable(PreviewMediaFragment.EXTRA_ACCOUNT); - mSavedPlaybackPosition = + mSavedPlaybackPosition = savedInstanceState.getInt(PreviewMediaFragment.EXTRA_PLAY_POSITION); mAutoplay = savedInstanceState.getBoolean(PreviewMediaFragment.EXTRA_PLAYING); - + } if (file != null && file.isDown()) { if (file.isVideo()) { mVideoPreview.setVisibility(View.VISIBLE); mImagePreview.setVisibility(View.GONE); prepareVideo(); - - } else { + + } + else { mVideoPreview.setVisibility(View.GONE); mImagePreview.setVisibility(View.VISIBLE); } } - + } - + /** * {@inheritDoc} @@ -216,24 +218,25 @@ public class PreviewMediaFragment extends FileFragment implements public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); Log_OC.e(TAG, "onSaveInstanceState"); - + outState.putParcelable(PreviewMediaFragment.EXTRA_FILE, getFile()); outState.putParcelable(PreviewMediaFragment.EXTRA_ACCOUNT, mAccount); - + if (getFile().isVideo()) { mSavedPlaybackPosition = mVideoPreview.getCurrentPosition(); mAutoplay = mVideoPreview.isPlaying(); - outState.putInt(PreviewMediaFragment.EXTRA_PLAY_POSITION , mSavedPlaybackPosition); - outState.putBoolean(PreviewMediaFragment.EXTRA_PLAYING , mAutoplay); - } else { + outState.putInt(PreviewMediaFragment.EXTRA_PLAY_POSITION, mSavedPlaybackPosition); + outState.putBoolean(PreviewMediaFragment.EXTRA_PLAYING, mAutoplay); + } + else { outState.putInt( - PreviewMediaFragment.EXTRA_PLAY_POSITION , + PreviewMediaFragment.EXTRA_PLAY_POSITION, mMediaServiceBinder.getCurrentPosition()); outState.putBoolean( - PreviewMediaFragment.EXTRA_PLAYING , mMediaServiceBinder.isPlaying()); + PreviewMediaFragment.EXTRA_PLAYING, mMediaServiceBinder.isPlaying()); } } - + @Override public void onStart() { @@ -242,17 +245,20 @@ public class PreviewMediaFragment extends FileFragment implements OCFile file = getFile(); if (file != null && file.isDown()) { - if (file.isAudio()) { - bindMediaService(); - - } else if (file.isVideo()) { - stopAudio(); - playVideo(); - } + if (file.isAudio()) { + bindMediaService(); + + } + else { + if (file.isVideo()) { + stopAudio(); + playVideo(); + } + } } } - - + + private void stopAudio() { Intent i = new Intent(getActivity(), MediaService.class); i.setAction(MediaService.ACTION_STOP_ALL); @@ -276,7 +282,7 @@ public class PreviewMediaFragment extends FileFragment implements @Override public void onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); - + if (mContainerActivity.getStorageManager() != null) { FileMenuFilter mf = new FileMenuFilter( getFile(), @@ -301,9 +307,16 @@ public class PreviewMediaFragment extends FileFragment implements item.setVisible(false); item.setEnabled(false); } + + // additional restriction for this fragment + item = menu.findItem(R.id.action_copy); + if (item != null) { + item.setVisible(false); + item.setEnabled(false); + } } - - + + /** * {@inheritDoc} */ @@ -353,26 +366,26 @@ public class PreviewMediaFragment extends FileFragment implements return false; } } - /** * Update the file of the fragment with file value + * * @param file */ - public void updateFile(OCFile file){ + public void updateFile(OCFile file) { setFile(file); } - + private void sendFile() { stopPreview(false); mContainerActivity.getFileOperationsHelper().sendDownloadedFile(getFile()); - + } private void seeDetails() { stopPreview(false); - mContainerActivity.showDetails(getFile()); + mContainerActivity.showDetails(getFile()); } @@ -383,77 +396,80 @@ public class PreviewMediaFragment extends FileFragment implements mVideoPreview.setOnCompletionListener(mVideoHelper); mVideoPreview.setOnErrorListener(mVideoHelper); } - + @SuppressWarnings("static-access") private void playVideo() { // create and prepare control panel for the user mMediaController.setMediaPlayer(mVideoPreview); - + // load the video file in the video player ; // when done, VideoHelper#onPrepared() will be called Uri uri = Uri.parse(getFile().getStoragePath()); mVideoPreview.setVideoPath(uri.encode(getFile().getStoragePath())); } - + private class VideoHelper implements OnCompletionListener, OnPreparedListener, OnErrorListener { - - /** + + /** * Called when the file is ready to be played. - * + *

* Just starts the playback. - * + * * @param vp {@link MediaPlayer} instance performing the playback. */ @Override public void onPrepared(MediaPlayer vp) { Log_OC.e(TAG, "onPrepared"); mVideoPreview.seekTo(mSavedPlaybackPosition); - if (mAutoplay) { + if (mAutoplay) { mVideoPreview.start(); } mMediaController.setEnabled(true); mMediaController.updatePausePlay(); mPrepared = true; } - - + + /** * Called when the file is finished playing. - * + *

* Finishes the activity. - * - * @param mp {@link MediaPlayer} instance performing the playback. + * + * @param mp {@link MediaPlayer} instance performing the playback. */ @Override - public void onCompletion(MediaPlayer mp) { + public void onCompletion(MediaPlayer mp) { Log_OC.e(TAG, "completed"); if (mp != null) { mVideoPreview.seekTo(0); // next lines are necessary to work around undesired video loops if (Build.VERSION.SDK_INT == Build.VERSION_CODES.GINGERBREAD) { - mVideoPreview.pause(); - - } else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.GINGERBREAD_MR1) { - // mVideePreview.pause() is not enough - - mMediaController.setEnabled(false); - mVideoPreview.stopPlayback(); - mAutoplay = false; - mSavedPlaybackPosition = 0; - mVideoPreview.setVideoPath(getFile().getStoragePath()); + mVideoPreview.pause(); + + } + else { + if (Build.VERSION.SDK_INT == Build.VERSION_CODES.GINGERBREAD_MR1) { + // mVideePreview.pause() is not enough + + mMediaController.setEnabled(false); + mVideoPreview.stopPlayback(); + mAutoplay = false; + mSavedPlaybackPosition = 0; + mVideoPreview.setVideoPath(getFile().getStoragePath()); + } } } // else : called from onError() mMediaController.updatePausePlay(); } - - + + /** * Called when an error in playback occurs. - * - * @param mp {@link MediaPlayer} instance performing the playback. - * @param what Type of error - * @param extra Extra code specific to the error + * + * @param mp {@link MediaPlayer} instance performing the playback. + * @param what Type of error + * @param extra Extra code specific to the error */ @Override public boolean onError(MediaPlayer mp, int what, int extra) { @@ -474,28 +490,28 @@ public class PreviewMediaFragment extends FileFragment implements } return true; } - + } - + @Override public void onPause() { Log_OC.e(TAG, "onPause"); super.onPause(); } - + @Override public void onResume() { super.onResume(); Log_OC.e(TAG, "onResume"); } - + @Override public void onDestroy() { Log_OC.e(TAG, "onDestroy"); super.onDestroy(); } - + @Override public void onStop() { Log_OC.e(TAG, "onStop"); @@ -510,10 +526,10 @@ public class PreviewMediaFragment extends FileFragment implements mMediaServiceConnection = null; mMediaServiceBinder = null; } - + super.onStop(); } - + @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN && v == mVideoPreview) { @@ -526,7 +542,7 @@ public class PreviewMediaFragment extends FileFragment implements return false; } - + private void startFullScreenVideo() { Intent i = new Intent(getActivity(), PreviewVideoActivity.class); i.putExtra(FileActivity.EXTRA_ACCOUNT, mAccount); @@ -538,29 +554,30 @@ public class PreviewMediaFragment extends FileFragment implements } @Override - public void onConfigurationChanged (Configuration newConfig) { + public void onConfigurationChanged(Configuration newConfig) { Log_OC.e(TAG, "onConfigurationChanged " + this); } - + @Override - public void onActivityResult (int requestCode, int resultCode, Intent data) { + public void onActivityResult(int requestCode, int resultCode, Intent data) { Log_OC.e(TAG, "onActivityResult " + this); super.onActivityResult(requestCode, resultCode, data); if (resultCode == Activity.RESULT_OK) { mSavedPlaybackPosition = data.getExtras().getInt( PreviewVideoActivity.EXTRA_START_POSITION); - mAutoplay = data.getExtras().getBoolean(PreviewVideoActivity.EXTRA_AUTOPLAY); + mAutoplay = data.getExtras().getBoolean(PreviewVideoActivity.EXTRA_AUTOPLAY); } } - + private void playAudio() { OCFile file = getFile(); if (!mMediaServiceBinder.isPlaying(file)) { Log_OC.d(TAG, "starting playback of " + file.getStoragePath()); mMediaServiceBinder.start(mAccount, file, mAutoplay, mSavedPlaybackPosition); - - } else { + + } + else { if (!mMediaServiceBinder.isPlaying() && mAutoplay) { mMediaServiceBinder.start(); mMediaController.updatePausePlay(); @@ -597,7 +614,8 @@ public class PreviewMediaFragment extends FileFragment implements Log_OC.d(TAG, "Successfully bound to MediaService, MediaController ready"); - } else { + } + else { Log_OC.e(TAG, "Unexpected response from MediaService while binding"); } } @@ -619,7 +637,8 @@ public class PreviewMediaFragment extends FileFragment implements Log_OC.e(TAG, "Media service suddenly disconnected"); if (mMediaController != null) { mMediaController.setMediaPlayer(null); - } else { + } + else { Toast.makeText( getActivity(), "No media controller to release when disconnected from media service", @@ -629,9 +648,8 @@ public class PreviewMediaFragment extends FileFragment implements mMediaServiceConnection = null; } } - } + } - /** * Opens the previewed file with an external application. @@ -641,31 +659,33 @@ public class PreviewMediaFragment extends FileFragment implements mContainerActivity.getFileOperationsHelper().openFile(getFile()); finish(); } - + /** * Helper method to test if an {@link OCFile} can be passed to a {@link PreviewMediaFragment} - * to be previewed. - * - * @param file File to test if can be previewed. - * @return 'True' if the file can be handled by the fragment. + * to be previewed. + * + * @param file File to test if can be previewed. + * @return 'True' if the file can be handled by the fragment. */ public static boolean canBePreviewed(OCFile file) { return (file != null && (file.isAudio() || file.isVideo())); } - + public void stopPreview(boolean stopAudio) { OCFile file = getFile(); if (file.isAudio() && stopAudio) { mMediaServiceBinder.pause(); - - } else if (file.isVideo()) { - mVideoPreview.stopPlayback(); + + } + else { + if (file.isVideo()) { + mVideoPreview.stopPlayback(); + } } } - /** * Finishes the preview */ @@ -681,12 +701,12 @@ public class PreviewMediaFragment extends FileFragment implements Log_OC.e(TAG, "getting position: " + mSavedPlaybackPosition); return mSavedPlaybackPosition; } - + public boolean isPlaying() { if (mPrepared) { mAutoplay = mVideoPreview.isPlaying(); } return mAutoplay; } - + } diff --git a/src/com/owncloud/android/utils/ErrorMessageAdapter.java b/src/com/owncloud/android/utils/ErrorMessageAdapter.java index c86346b3dd..b80cc573a1 100644 --- a/src/com/owncloud/android/utils/ErrorMessageAdapter.java +++ b/src/com/owncloud/android/utils/ErrorMessageAdapter.java @@ -206,9 +206,10 @@ public class ErrorMessageAdapter { } } else if (operation instanceof MoveFileOperation) { - if (result.getCode() == ResultCode.FILE_NOT_FOUND) { + if(isNetworkError(result.getCode())){ + message = getErrorMessage(result, res); + } else if (result.getCode() == ResultCode.FILE_NOT_FOUND) { message = res.getString(R.string.move_file_not_found); - } else if (result.getCode() == ResultCode.INVALID_MOVE_INTO_DESCENDANT) { message = res.getString(R.string.move_file_invalid_into_descendent); @@ -242,11 +243,11 @@ public class ErrorMessageAdapter { } } } else if (operation instanceof CopyFileOperation) { - - if (result.getCode() == ResultCode.FILE_NOT_FOUND) { + if(isNetworkError(result.getCode())){ + message = getErrorMessage(result, res); + } else if (result.getCode() == ResultCode.FILE_NOT_FOUND) { message = res.getString(R.string.copy_file_not_found); - - } else if (result.getCode() == ResultCode.INVALID_MOVE_INTO_DESCENDANT) { + } else if (result.getCode() == ResultCode.INVALID_COPY_INTO_DESCENDANT) { message = res.getString(R.string.copy_file_invalid_into_descendent); } else if (result.getCode() == ResultCode.INVALID_OVERWRITE) { From 47512499b11ca1631abcdb29c3dd5d3bb81b0217 Mon Sep 17 00:00:00 2001 From: "David A. Velasco" Date: Tue, 18 Aug 2015 18:06:57 +0200 Subject: [PATCH 058/133] Removed dependency on Context in CopyFileOperation --- owncloud-android-library | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/owncloud-android-library b/owncloud-android-library index b15fb19399..5ac5c80809 160000 --- a/owncloud-android-library +++ b/owncloud-android-library @@ -1 +1 @@ -Subproject commit b15fb19399270dab59251b4abb36037d2c435366 +Subproject commit 5ac5c808099e90b43c1c3343135e77bf07030e90 From ae0e116ffc620bb9c5c94f1a9a24a5500e89bd8f Mon Sep 17 00:00:00 2001 From: Jorge Antonio Diaz-Benito Soriano Date: Wed, 19 Aug 2015 21:07:14 +0200 Subject: [PATCH 059/133] Fixes the text preview issue --- src/com/owncloud/android/datamodel/OCFile.java | 8 -------- .../android/ui/preview/PreviewTextFragment.java | 10 +++++++++- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/com/owncloud/android/datamodel/OCFile.java b/src/com/owncloud/android/datamodel/OCFile.java index f9882fa483..5b843805ad 100644 --- a/src/com/owncloud/android/datamodel/OCFile.java +++ b/src/com/owncloud/android/datamodel/OCFile.java @@ -548,14 +548,6 @@ public class OCFile implements Parcelable, Comparable { getMimeTypeFromName().startsWith("image/")); } - /** - * @return 'True' if the file is simple text (e.g. not application-dependent, like .doc or .docx) - */ - public boolean isText() { - return ((mMimeType != null && mMimeType.startsWith("text/")) || - getMimeTypeFromName().startsWith("text/")); - } - public String getMimeTypeFromName() { String extension = ""; int pos = mRemotePath.lastIndexOf('.'); diff --git a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java index c1511aae07..4f4a65a68f 100644 --- a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java @@ -29,6 +29,8 @@ import java.io.FileInputStream; import java.io.IOException; import java.io.StringWriter; import java.lang.ref.WeakReference; +import java.util.LinkedList; +import java.util.List; import java.util.Scanner; public class PreviewTextFragment extends FileFragment { @@ -389,7 +391,13 @@ public class PreviewTextFragment extends FileFragment { * @return 'True' if the file can be handled by the fragment. */ public static boolean canBePreviewed(OCFile file) { - return (file != null && file.isDown() && file.isText()); + final List supportedTypes = new LinkedList(); + supportedTypes.add("text/plain"); + supportedTypes.add("text/html"); + supportedTypes.add("text/css"); + supportedTypes.add("text/csv"); + + return (file != null && file.isDown() && supportedTypes.contains(file.getMimetype())); } /** From 6df6548ee7cb1d8f8c9716fa8de085f9a27332ae Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Tue, 25 Aug 2015 14:40:16 +0200 Subject: [PATCH 060/133] try fix #1113 --- src/com/owncloud/android/ui/adapter/FileListListAdapter.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java index 0c72052a92..7a82fb5690 100644 --- a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java +++ b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java @@ -335,6 +335,8 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { } else { // Folder + fileIcon.setBackground(null); + if (checkIfFileIsSharedWithMe(file)) { fileIcon.setImageResource(R.drawable.shared_with_me_folder); } else if (file.isShareByLink()) { From 69e78694cddeb2ecb2115f02cabd58ffd435e7ce Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Tue, 25 Aug 2015 14:43:36 +0200 Subject: [PATCH 061/133] to be sure ;) --- src/com/owncloud/android/ui/adapter/FileListListAdapter.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java index 7a82fb5690..321a9e0cdd 100644 --- a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java +++ b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java @@ -326,6 +326,8 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { Drawable backrepeat = mContext.getResources(). getDrawable(R.drawable.backrepeat); fileIcon.setBackground(backrepeat); + } else { + fileIcon.setBackground(null); } } else { From 54a4263eeba20fe9fe3d3afed5ef266c9bb88cb2 Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Tue, 25 Aug 2015 15:55:45 +0200 Subject: [PATCH 062/133] fix #1110: accents not sorted --- .../android/utils/FileStorageUtils.java | 2 +- .../daveKoeller/AlphanumComparator.java | 36 ++++++++----------- 2 files changed, 16 insertions(+), 22 deletions(-) diff --git a/src/com/owncloud/android/utils/FileStorageUtils.java b/src/com/owncloud/android/utils/FileStorageUtils.java index e70302fc2e..2b6d68b3f9 100644 --- a/src/com/owncloud/android/utils/FileStorageUtils.java +++ b/src/com/owncloud/android/utils/FileStorageUtils.java @@ -254,7 +254,7 @@ public class FileStorageUtils { Collections.sort(files, new Comparator() { public int compare(OCFile o1, OCFile o2) { if (o1.isFolder() && o2.isFolder()) { - return val * o1.getRemotePath().toLowerCase().compareTo(o2.getRemotePath().toLowerCase()); + return val * new AlphanumComparator().compare(o1, o2); } else if (o1.isFolder()) { return -1; } else if (o2.isFolder()) { diff --git a/src/third_parties/daveKoeller/AlphanumComparator.java b/src/third_parties/daveKoeller/AlphanumComparator.java index e6bd6f3824..e86c3c4791 100644 --- a/src/third_parties/daveKoeller/AlphanumComparator.java +++ b/src/third_parties/daveKoeller/AlphanumComparator.java @@ -23,6 +23,7 @@ */ package third_parties.daveKoeller; +import java.text.Collator; import java.util.Comparator; import com.owncloud.android.datamodel.OCFile; @@ -48,14 +49,12 @@ public class AlphanumComparator implements Comparator } /** Length of string is passed in for improved efficiency (only need to calculate it once) **/ - private final String getChunk(String s, int slength, int marker) - { + private final String getChunk(String s, int slength, int marker){ StringBuilder chunk = new StringBuilder(); char c = s.charAt(marker); chunk.append(c); marker++; - if (isDigit(c)) - { + if (isDigit(c)){ while (marker < slength) { c = s.charAt(marker); @@ -64,8 +63,7 @@ public class AlphanumComparator implements Comparator chunk.append(c); marker++; } - } else - { + } else { while (marker < slength) { c = s.charAt(marker); @@ -78,8 +76,7 @@ public class AlphanumComparator implements Comparator return chunk.toString(); } - public int compare(OCFile o1, OCFile o2) - { + public int compare(OCFile o1, OCFile o2){ String s1 = (String)o1.getRemotePath().toLowerCase(); String s2 = (String)o2.getRemotePath().toLowerCase(); @@ -88,8 +85,7 @@ public class AlphanumComparator implements Comparator int s1Length = s1.length(); int s2Length = s2.length(); - while (thisMarker < s1Length && thatMarker < s2Length) - { + while (thisMarker < s1Length && thatMarker < s2Length) { String thisChunk = getChunk(s1, s1Length, thisMarker); thisMarker += thisChunk.length(); @@ -98,26 +94,24 @@ public class AlphanumComparator implements Comparator // If both chunks contain numeric characters, sort them numerically int result = 0; - if (isDigit(thisChunk.charAt(0)) && isDigit(thatChunk.charAt(0))) - { + if (isDigit(thisChunk.charAt(0)) && isDigit(thatChunk.charAt(0))) { // Simple chunk comparison by length. int thisChunkLength = thisChunk.length(); result = thisChunkLength - thatChunk.length(); // If equal, the first different number counts - if (result == 0) - { - for (int i = 0; i < thisChunkLength; i++) - { + if (result == 0) { + for (int i = 0; i < thisChunkLength; i++) { result = thisChunk.charAt(i) - thatChunk.charAt(i); - if (result != 0) - { + if (result != 0) { return result; } } } - } else - { - result = thisChunk.compareTo(thatChunk); + } else { + Collator collator = Collator.getInstance(); + collator.setStrength(Collator.PRIMARY); + result = collator.compare(thisChunk, thatChunk); +// result = thisChunk.compareTo(thatChunk); } if (result != 0) From d1c18cac1299c3488098d983422ee1c6780293b5 Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Tue, 25 Aug 2015 15:57:10 +0200 Subject: [PATCH 063/133] removed commented code --- src/third_parties/daveKoeller/AlphanumComparator.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/third_parties/daveKoeller/AlphanumComparator.java b/src/third_parties/daveKoeller/AlphanumComparator.java index e86c3c4791..47cf14371c 100644 --- a/src/third_parties/daveKoeller/AlphanumComparator.java +++ b/src/third_parties/daveKoeller/AlphanumComparator.java @@ -111,7 +111,6 @@ public class AlphanumComparator implements Comparator Collator collator = Collator.getInstance(); collator.setStrength(Collator.PRIMARY); result = collator.compare(thisChunk, thatChunk); -// result = thisChunk.compareTo(thatChunk); } if (result != 0) From ca2892bdf1928c67e5fcb6dbfa80262fcedb3117 Mon Sep 17 00:00:00 2001 From: masensio Date: Fri, 28 Aug 2015 18:50:43 +0200 Subject: [PATCH 064/133] Remove transparent background in icons --- .../datamodel/ThumbnailsCacheManager.java | 18 +++++------------- .../ui/adapter/FileListListAdapter.java | 13 +++++-------- 2 files changed, 10 insertions(+), 21 deletions(-) diff --git a/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java b/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java index 362106e6e3..e0d0fcc963 100644 --- a/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java +++ b/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java @@ -34,8 +34,8 @@ import android.graphics.Bitmap; import android.graphics.Bitmap.CompressFormat; import android.graphics.BitmapFactory; import android.graphics.Canvas; -import android.graphics.Shader; import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.media.ThumbnailUtils; import android.net.Uri; @@ -290,9 +290,6 @@ public class ThumbnailsCacheManager { GetMethod get = new GetMethod(uri); int status = mClient.executeMethod(get); if (status == HttpStatus.SC_OK) { -// byte[] bytes = get.getResponseBody(); -// Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, -// bytes.length); InputStream inputStream = get.getResponseBodyAsStream(); Bitmap bitmap = BitmapFactory.decodeStream(inputStream); thumbnail = ThumbnailUtils.extractThumbnail(bitmap, px, px); @@ -326,15 +323,10 @@ public class ThumbnailsCacheManager { px, Bitmap.Config.ARGB_8888); Canvas c = new Canvas(resultBitmap); - Bitmap checker = BitmapFactory.decodeResource(MainApp.getAppContext().getResources(), - R.drawable.checker_16_16); - - BitmapDrawable background; - background = new BitmapDrawable(MainApp.getAppContext().getResources(), checker); - - background.setBounds(0, 0, px, px); - background.setTileModeXY(Shader.TileMode.REPEAT, Shader.TileMode.REPEAT); - background.draw(c); + ColorDrawable backgroundColor = + new ColorDrawable(MainApp.getAppContext().getResources(). + getColor(R.color.background_color)); + backgroundColor.draw(c); c.drawBitmap(bitmap, 0, 0, null); diff --git a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java index 321a9e0cdd..27fc8c15c3 100644 --- a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java +++ b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java @@ -4,6 +4,7 @@ * @author Bartek Przybylski * @author Tobias Kaminsky * @author David A. Velasco + * @author masensio * Copyright (C) 2011 Bartek Przybylski * Copyright (C) 2015 ownCloud Inc. * @@ -30,7 +31,6 @@ import android.accounts.Account; import android.content.Context; import android.content.SharedPreferences; import android.graphics.Bitmap; -import android.graphics.drawable.Drawable; import android.os.Build; import android.preference.PreferenceManager; import android.text.format.DateUtils; @@ -322,14 +322,12 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { } } - if (file.getMimetype().equalsIgnoreCase("image/png")){ - Drawable backrepeat = mContext.getResources(). - getDrawable(R.drawable.backrepeat); - fileIcon.setBackground(backrepeat); - } else { - fileIcon.setBackground(null); + if (file.getMimetype().equalsIgnoreCase("image/png")) { + fileIcon.setBackgroundColor(mContext.getResources() + .getColor(R.color.background_color)); } + } else { fileIcon.setImageResource(DisplayUtils.getFileTypeIconId(file.getMimetype(), file.getFileName())); @@ -337,7 +335,6 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { } else { // Folder - fileIcon.setBackground(null); if (checkIfFileIsSharedWithMe(file)) { fileIcon.setImageResource(R.drawable.shared_with_me_folder); From 313df93e953f7b849228678b450bf56bcf74d73d Mon Sep 17 00:00:00 2001 From: masensio Date: Mon, 31 Aug 2015 16:40:04 +0200 Subject: [PATCH 065/133] Set background color as background for png with tranparency --- .../owncloud/android/datamodel/ThumbnailsCacheManager.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java b/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java index e0d0fcc963..ce8bfd4a7e 100644 --- a/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java +++ b/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java @@ -323,11 +323,9 @@ public class ThumbnailsCacheManager { px, Bitmap.Config.ARGB_8888); Canvas c = new Canvas(resultBitmap); - ColorDrawable backgroundColor = - new ColorDrawable(MainApp.getAppContext().getResources(). - getColor(R.color.background_color)); - backgroundColor.draw(c); + c.drawColor(MainApp.getAppContext().getResources(). + getColor(R.color.background_color)); c.drawBitmap(bitmap, 0, 0, null); return resultBitmap; From 502ff0a216e728b1552af5c55aad964ed3b87399 Mon Sep 17 00:00:00 2001 From: Marc Plano-Lesay Date: Mon, 31 Aug 2015 19:15:36 +0200 Subject: [PATCH 066/133] Use new filetype icons --- res/drawable-hdpi/file.png | Bin 1210 -> 1406 bytes res/drawable-hdpi/file_doc.png | Bin 4135 -> 1516 bytes res/drawable-hdpi/file_image.png | Bin 2974 -> 2310 bytes res/drawable-hdpi/file_movie.png | Bin 11719 -> 1145 bytes res/drawable-hdpi/file_pdf.png | Bin 16047 -> 5719 bytes res/drawable-hdpi/file_ppt.png | Bin 5785 -> 904 bytes res/drawable-hdpi/file_sound.png | Bin 6506 -> 3580 bytes res/drawable-hdpi/file_xls.png | Bin 2113 -> 1512 bytes res/drawable-hdpi/file_zip.png | Bin 4668 -> 1083 bytes res/drawable-hdpi/folder_public.png | Bin 7572 -> 3860 bytes res/drawable-hdpi/ic_menu_archive.png | Bin 4077 -> 1088 bytes res/drawable-hdpi/shared_with_me_folder.png | Bin 7037 -> 3583 bytes res/drawable-ldpi/file.png | Bin 385 -> 306 bytes res/drawable-ldpi/file_doc.png | Bin 925 -> 380 bytes res/drawable-ldpi/file_image.png | Bin 982 -> 486 bytes res/drawable-ldpi/file_movie.png | Bin 2013 -> 318 bytes res/drawable-ldpi/file_pdf.png | Bin 2082 -> 877 bytes res/drawable-ldpi/file_ppt.png | Bin 1249 -> 259 bytes res/drawable-mdpi/file.png | Bin 874 -> 935 bytes res/drawable-mdpi/file_doc.png | Bin 2878 -> 1058 bytes res/drawable-mdpi/file_image.png | Bin 2054 -> 1570 bytes res/drawable-mdpi/file_movie.png | Bin 7117 -> 853 bytes res/drawable-mdpi/file_pdf.png | Bin 9919 -> 3811 bytes res/drawable-mdpi/file_ppt.png | Bin 3950 -> 651 bytes res/drawable-mdpi/file_sound.png | Bin 4025 -> 2489 bytes res/drawable-mdpi/file_xls.png | Bin 1567 -> 1014 bytes res/drawable-mdpi/file_zip.png | Bin 3004 -> 673 bytes res/drawable-mdpi/folder_public.png | Bin 4926 -> 2631 bytes res/drawable-mdpi/ic_menu_archive.png | Bin 2634 -> 739 bytes res/drawable-mdpi/shared_with_me_folder.png | Bin 4585 -> 2406 bytes res/drawable-xhdpi/file.png | Bin 1584 -> 1860 bytes res/drawable-xhdpi/file_doc.png | Bin 5022 -> 2019 bytes res/drawable-xhdpi/file_image.png | Bin 3996 -> 3085 bytes res/drawable-xhdpi/file_movie.png | Bin 17023 -> 1545 bytes res/drawable-xhdpi/file_pdf.png | Bin 22294 -> 7832 bytes res/drawable-xhdpi/file_ppt.png | Bin 7574 -> 1223 bytes res/drawable-xhdpi/file_sound.png | Bin 9331 -> 4919 bytes res/drawable-xhdpi/file_xls.png | Bin 2684 -> 2003 bytes res/drawable-xhdpi/file_zip.png | Bin 6441 -> 1342 bytes res/drawable-xhdpi/folder_public.png | Bin 10439 -> 5369 bytes res/drawable-xhdpi/ic_menu_archive.png | Bin 5722 -> 1462 bytes res/drawable-xhdpi/shared_with_me_folder.png | Bin 9723 -> 4905 bytes res/drawable-xxhdpi/file.png | Bin 2455 -> 2977 bytes res/drawable-xxhdpi/file_doc.png | Bin 7601 -> 3160 bytes res/drawable-xxhdpi/file_image.png | Bin 6214 -> 4765 bytes res/drawable-xxhdpi/file_movie.png | Bin 27140 -> 2400 bytes res/drawable-xxhdpi/file_pdf.png | Bin 35119 -> 12156 bytes res/drawable-xxhdpi/file_ppt.png | Bin 11595 -> 1931 bytes res/drawable-xxhdpi/file_sound.png | Bin 14368 -> 7332 bytes res/drawable-xxhdpi/file_xls.png | Bin 3743 -> 3167 bytes res/drawable-xxhdpi/file_zip.png | Bin 10131 -> 2115 bytes res/drawable-xxhdpi/folder_public.png | Bin 15970 -> 8525 bytes res/drawable-xxhdpi/ic_menu_archive.png | Bin 9005 -> 2304 bytes res/drawable-xxhdpi/shared_with_me_folder.png | Bin 15209 -> 7555 bytes 54 files changed, 0 insertions(+), 0 deletions(-) diff --git a/res/drawable-hdpi/file.png b/res/drawable-hdpi/file.png index b8ee720772dbc45c070b6639b192b45b99e8c98c..409d202302e38287285ceafb0439a9d58e638c53 100644 GIT binary patch literal 1406 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 xDBOCb;F-N?{H>o)7fzgc|sIa#;WX literal 4135 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 W&-?nyewR?~J9%mbD0B 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 diff --git a/res/drawable-hdpi/file_movie.png b/res/drawable-hdpi/file_movie.png index a621ffa4c640525934f324dd3eb7d300251e9928..09520e449b60f1c77c6e1c10851e19fe53f6dd4f 100644 GIT binary patch literal 1145 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvE4M+yv$zcalEX7WqAsj$Z!;#Vf4nJ zERz6X#=6pzy+A?964!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq!<{Ozj?Yi zhE&XXd)Ky0HC5#J!{TmER^~!cwZ4@KYQ;QQN{$>1C^kwXM{G-&R=Jv0E85io8PSI~q+>v9sj_<*nH*XfN zdtKMxvF>T3LG$aNQ+pF7_N}*FBUgC6lt1cSg4^AP1wY>X`SWM)tHW*WwU-K*i>v<^ zSkweoUlBU6o7cR6=X(}^6jR2(XB=tY9N#vc|Mcc$^;UMK1pig`b2%EWusCEfDQvYa zwqNkR`o7e~9GT-r&(D9ChDw++PMF2u;mfc@jUh;wVI?Q=!rtNsEc*8MJ^pd?())u} zOSl!3?D{(5TO3@@G0YQWTFG4D#?i_7z*12~rC~a!q9Eg*c>+QL2X1pF9%m^icDkX+ zct!Y7AIE~Z0%Z;i+tpimg%6apY;a_nF;BqEh2gW{AvTVLI;RLjMwxzrFb{^~>Mf#z z2Z~xYFfm2U6A)8r_$qLSiDiSGlZ6uFn&|?44h*l=TO>IXtXmA28FTst)KnVY3LRo$ z*--1WgO%}3yMPo&LVZhsBg1di7HNS4|2QA=vP@_fh;wB4$?=et>4Z0jBEzJ11%{yA zo4;^x*l}O!(d>Qi<@Nt6c?&qit!)3_!|=)Qk2r?{|KWO|aq}PUZ)Es(`a`}0!|&uD zqAVNa+wMCs+)n?oU7_Kv(H~BZgle98C#D;GhvzpkTs!|E9q3-8Kgt3Jeo6cj*T zsb>Uw!)e1mq5=m#O8)EOcu>Jp-^yZOe>mQd@yziL<_-*(jsNfp9w_0dZ)Pc| zZrh*8l#%|!TA`t;ZNDVh8^y#KB4y`ST>x46Uo@ALKk@~vsFpX3fq6XZudFrl3NSKfH6P^Z|QIqD}b zD22gIyC&3-UmCIcRqi&H5B`UF&#asBY0I}|stxm{^AgJ14?kRfYxXOKb?ev5yB*oT zwcKFy>Y!7HZ!Lbs;OFoEzo+B3U}0!AxAD$byWagX;HkeVXI9I7<@;a$*z0$DJ5G13 y_;-g@xKc`R`qC-<{(gRSF~3q#^C6JeaQmlx+}^gZc6+@;AW2VGKbLh*2~7Y`?Z4Lm literal 11719 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�$g^iN)^|(91h8gCZAV^0D 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 JM%*aqe*h1wDQy4% diff --git a/res/drawable-hdpi/file_pdf.png b/res/drawable-hdpi/file_pdf.png index bd457209f2c9d63d1e8a4baf06d97f0b824b1f6a..6af2ec2758aaf667a9e9680952b6e1db0a77fdc8 100644 GIT binary patch literal 5719 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 literal 16047 zcmcIrRZv__u--)%cXtS~IKdqjcUaurf?IG{+%<~?2)+>9AwY141eYW@gkZrTK!RNU z`+gs9otl|bQ*};tcXiKnf8Cv+t*L~ANr?#n0B}^4<)JTY|9=C7_A*1)T+v?^G#fP~ zdBF33PjOG>yO$jdPi14DmoHZS8$bwKe!$Bny040c0{SKz88#8)Y^CEg06-5=k(bpA z_;C{I|M``n-!FeTeZLS;Mk=x8HiZ3xU@)XJ)DYXoMD-?*GNA{0Aft-))B z^4cYVj@&lcxS`3Yp~+vRd6>O8UVtg(l1+WtDbwNC-YMqo#$%b7-sxHc-Su3}ZT;VgbN@*BADwT_es`(l&ZYeF!NXH(l8wd+{)?k8I=vr{X(>Ft zUkguy?!oTftT&07pa?IN+dW$OVT)k?J%J`8vMTdu4TT~(<{l+|+M4JyB>34$$xJX^ zP@&<*6`PE*C{K9-zuW%Zc4v%R+Nt!Xlk^t#(n`tc97Z3vwi|QrkvyVK#`|MXTh?FFDgSNQ0dNpCiOn?9`Pg>M=1E<;Ln}$LQ z$(tfJ21RArA3&td{k#h_9Za@)<@JScDt7vDv)`eq|(Z$^nrCdq#W&Q0v*Hrjai->mIwrf zgUb-Ufm$3pw;-`0<%Pt5yMa>$fPe%PL*?w>E972bi8Oieq)K%VwJ4<-SQtX9dU%Q+ ziljpxz8Aqa8-TZM;w()f3NV%cs}7srL7L9YAT@38nWmFeDA-7NHg0PL{3z17ge?3*(?VlXOw&dm1j z8VkG>Lbiokc7dw8yA3jqMD;gw_=E;FJ3yVD#gDk2`uZ7*_6(E^PpSB9CPJVE-hgcd zUV{cV2n92!#9TLo0fkx#pjr}eKo56DpU=l!bl56TM41Paq3oOak+eUbqyHx&u!?2i zk5T`y+mf;8W@0Q?)N}Q2PMKA}xtP@&5F215EhZq9scCMu{Hd;?3qT2k8)I|Wan7(d zfwf{#RP~TS>0Kc5K01*fx`0NQ?$ld{prv6{`>(W=6eC;Xyn0PW`mSk_HQFqhi|RgIMNHPJ@^3u- z&Tca)RaIw2$d6K(-x$qBIu8&Kj)E&~e%=^HRZtd5@X&@3wA^k+O@!Z0Pn(2-t-rVD zzrQ>h+8#=`k0Q%uN(a2MlQ(JoTUav3hnpQuB_NPi+4-~G5Z4SeSuL(~efRp`baV1(Gb||Ry2S(2CL`XFYP>6XmW(sk( zmYeHu%&?1LzV}{ z-9=oF4VTQ-HeLGQLm6!;=}9fUui{mj%lJGnq)yMx{U~5lbp|sddj{kSHz`Bb;J5tE z#5v)I)e4pci!fL8_V6dH^z0a2p6*&EiOptCqwEiNz2C{+G9YyO{CFfQ5W#2+TLmI$ z%0MZxQ-35?Yfmcxx~grRj}!&MMG_Tud18}{n;qDtNCLNyja1|lPD=b0MBIjn)CZ}V zw>4zd%M#Bb*2|KT+X8C6!q;1ZDSfW29;=QdC~{0dl?M>(C~MDQx_!s}m7_kZj#jhj zPt)vJxU?uK(&a|g9)6MZLR(3lsWmoEoBqAVLbRKBR;vSNt_Bg-zdyE&Ik+kBBazC! z>=O+C<}~8A3^hHBP^>TE9fAT7JaI3ADrlcgQ~Atw{Rj`m9zR@ zp9c}*Z#DgrkI8(}N2UdW=t!#T*dVH3$katrhtIPNtsho4a0lDEvc7P1_dbXIe&~MQ z{~cR!?@cg?{ri*kZ7f=W_KcY?#{q{E4CV}l~xL0qiFSIB?@nxP{kyUuL3QTalam>zAj zv-ymUZ5d|2AosX->ppPxe2yoDs*;w*(DznD4d~wF1d0E}Vn&8bEtBZeca$@hgU<`S z0g#yIJl$5sf3w~L(1Vb6fU@+n7e3E#wy1VaO110@#L4L_3R*yNcn|NZnbV50w1Mdj6Gvu|wk@8>S?Lu)VB3wAXo<^rMx4=}a^6 z%M{FOHy(%9W=_@^;sPXm+EioU22}w23yIVUc^%^dD_5B3qyR3cw>Bf^EVwfSg&c`A zNxodBj1!hlc%`Nwf=S+abVD9~+(uv9DWaK6N_)RU=HbaW_5!Hwk<2WTrE8HORmEG`!Z$mx+#K%URz>Zv(@=zmb5*ha|+DP?%4s}4@8 zKM2bN&gZ_0J^m*t=ef}zz7R=do6XeNXcvi#ZFBNZI{wQtf1Z}y^p~A&tx(LC?zb@( zRO98mV(F+e4%W3|ZS`hhlHjkgbqLDvH&oyTfnIn5&3u z@%&9r`?Ofe+xIM^3|91}z}}k&5YHbA4Qm#I5mu{0oKx=IJ300jTWaokx-t6-Y%o<4 zf5yE8whSXKU=-p0DUb_+%0) zz9C_uV!1kjT%^yf?b==4oKeywyO7gDwtYM?N79GhQ%^Iv97w6vG+6X-CR$$TDdEaF zE|xtkopDu4m$gU`9K-eZ%eJ@$$`i-em2^r8W!?lweab5ogKaUKP7d9KS}^2}B)ngP z614PSp$bpE6aPnD8?@`B_E*P_#BXKQ6Y;8b2jIgze>Q0jcsn zwY%{B9d$9WX#Vuv9zH^3`AUAPCa$^i=s_r2Vr{hadJEY%Q4H{-WWbA!8S!$JFV_!s z;f0Wof@@5ugc;6%uJombc5F}vrSK){GX*;B5x+U?03ocfFxvi5JnN(=wBZKNYLh>J;eaTR$2a0HpQ});@ z(JEOXKt?HU^4>SGViPAtg#U_u0dAcUtm!js;^&jE&k|FQ+Rdf08-@VhaS>2aH4-S*MHj%Qo zdQ}v`j6z-Y=1V8w@102Y0_r!PmMzZO2Y`&Mi}$15o~88_U^1WM7FtROg2;eI&=9ri zWis(q$d^~)9<}&5v9IaZ6pn-v+oPIX!cc8J!l*vhci1QYc{&&iIHKAF*#{BBTuqdO zY>N*>{7fNk-rmNNFi~+VgXu8T16*eIjAPb!p-X&5{&1wKTyVtS&$8HDssM=1GTSo8 zFbv4OV)@^7Vr%p-|4hj}s7nL6?0jwWS+cNuFI#)alz{}T#rY>x46Y}r)B&}9Hx-G< z=|Jw`mquUjR$nqjQF2lbYRTSd=nsV9Hzr8GI|!F#6pAlVXoCUdxnRx!>?~}&M!i;R zm4rEAvy_Vt%T=M8GvdT=Ub`tG5B-l>`_WL(au;kCG=5%@hRvg_4ZCEXh8uK%<6GPy z>={RS1-k$}re8iW4iSLxI@3tucr?g|2kG>IiyofpMTUyC?`?lcll5zwwvku#`6b-a z5oJmj=Z;b-osz*N#8w;_Rc2k4I*AF})B>tR&K|0}ylz0$@ZO@ddIC_P6~#>;Di1jvDKR@Ll8g86UtyaUe+Dgk zs?G0J;p4{h;KJs;sR$(c)ZS!;S1R3$HNnP1Kvt?wZkISUT`EPJ1dsRg=SdIK^ccqU zIk^?tqvpTtCKvjS1hd~2E-ap+K=kR}74gFkNjnj+aqs;+iveUbQ{@-7l5eOQFN8PK zu48ddbU_SOBuN3kT`Y&5Rz1=}X0(M;N|Fg&eh~vqpkW4iR)kOm7P8ioJ%r4k-)0k0 zF}4zzd9D{kbx*1|k@|XK@MznpOr(E7)k~<+@wGa{k`QuiC>v)UOSHSy15ICQlduKO zpa~r&cpa@Nl}WoGeGk#Y~g4TK#L$TTU=R(lViGA^SrJuIR*J5P`MrT4g6AL^m z9xhlm%RuCEp*&PYzi+4ErwM&HfSQ165eWh|r# zSBOpd)zXDOpdoIbW3$eD&Uw}oP-}y{rA+@3@E+TU9O|f(e+VLWi;0-x9?I+J?Lq7% zxZ{POr!qZgl)(p2!|%x?Zr9IZSvmkRj@Y|V6qd54a3?rJ&is%bE{yo~gK>r26dorB zpxkZ15O{i@lBLop5|iq})oHU(9KRp9?Eo#8qJL$VV$*{JP-5pa5lYsmv_9z$L;lWU z=+udMCIh1Q4%WzJDf~O-u{F|tn)ndHjj$ESN!-92z#^PZ*Eq}w4Fvjo6mMPqot1HX zi*RKFwX0!m3^mMsa?SIf`;nkOxJbdw_Q zf7sMEY3W)`a5;R(;znw*mZs$Xi2#e|G_CX>`D8g?x)5YrS>)?P#=M{wr^^?R9x2}3T^#;xBLUvu|W3Mb`0<#*d&NNB?g_o%PKK2aK z0Im=wOiQo(?1ajvqx=^)xkwR@6OlXaSbR@5s0fR;>7QM*>KHx3W48YpY~)^y4zLDZ$+QSdkj6x2rejYog*mCB)C2N!y>3h?tmZ5RTtyEu!h0pNF6A0Vhy9Kbn8N#;Q zO%_91`#8~@)yb$HBiw~G9XH~v_)72+Sr*tx1Jnh6Uondo^!Te^zS61TfbgyhG~Pz& zr9<26xW?7|*ArO#E;K}9Ag?y*)DgVtOOJh$I~xuHIN%R)J2^kCQ!W7C&Bkh2jxPXB zl$uA{A^IF=eT3pes4ChrIdk;*aA+en2CH=Zn!Vu`oTDCviZU8bsHPUv&K{&)doL<+ zf77sg{)jgWExZV+Xa&nZ1cG3$RTY(U!R+PoizozC2;_dgy420JoYP(+ zt+3sOZBDLHZQ9r-*NWlY-8vEk3Ub%BP`n$`N2nqPGL_jAIlaz%xlxS~=IAh4w)ESI zED}h6hf2Z8-qtHu`d0u`<=F|a-3tbx+t3Nh^KWm#qTMt$8RXx568f_lW|}O>O0HVT zn_j<;6Ui3|H1{Wq>yRD$T&Ov<;*XmtZ@DzL%~aOjKZ3*-VWK;lUCcPP@3Em`NqVXck&L(Wc09tm_zW14yeOkLpzr61F-To~JE8uTK z-`-{*vnK(?2U~%6f3ypotcW1#f+D`lh1S^wKV;cZr|fcQ0PxY-f?O7=60F1K9e)ul zVvj#DQ0*###vAnmDj~*hKaTl)Etl2IA%mZ@$hW(P9w9^{?^tb+zeTi0473vTkTrHZ z#X$YNliEFWQZlVitPVLrB}QQ=!(aW=b3K(5G<^NnX?$ymA#506;&0y@Q0OSos3;?) zB#?xJaBW?wp_tc+FK207W$*pU9Ac`FbH+&sN6t3mb_fgfLB|fKE@e-&npkUMwnd=m zIDxO6vVs2}QQh6^dWKU~>_{@M?&ckrOY<|uhD1^Rs1KV@?WX;t@A}ZzAnh5x?ABO! zM?KRApPS`u+Sb*M|DLTY&-o*_^Z)_bnoHW>P?G4{E^E|!n#2}qx_&4&k|~IhzJ1)4 zwqB8b=9h0G57)&Q@??ogo*wd#K#@d|ot{;dJYNmp--+C}0KtH;qpD~H9(Ie1N02gL zLUoN^Zi(!~U-v(_r|^Dx)5?8wWBAtI4`*mkrepL>coL32A?u|^OYgvGEY$rQtPQY= zrFA}0fm_s|sed-v4vh$sBgS3#m$tauxaIBe_b9c2s`BP(c0b+@@qK>oK^Z@y4zeE` z+tP3=!h*+hFWX8&BAnPsG<+b7y~4zOL&R)mn5|~szNWeogtI9Uv2+pz$A<~wF1$EbK#^3CL>LAn>>r@$X1&w}VO2|1@-SUeAB zXSQL_Pv^PlnCdvAyak%F`(L8A06^)L-l=@8e%iyXE2#@?gG~cW*rnfT~>9c!BU)O6f2BnU{8d-5>&8B#! zTWMI2^b?=v?=^~Ff_#6Z%lNPnx~C4)e&=M9Anz`N_jCG!)0<#!4%=y^g{s0%R*9l0 z5&%qmV$VHu9lq1>jVn{EKMam9^5?)-B;eLuy*X>PC&k4WlaKlm_q<&5A~pvO)w36xbMNLs?FGgy==J*F7oh z{A`)o-dgwHot3;DD3CP1#iOTJ_DL;)Z=cpGXR47;@*EY=mt8@zh?WW*YEH3P)o$?t zim@ecV;P1FoIinh$ziafS55!OkwR-NTKcp5lkIVj~)7JMZ8h>RcXQ8;7z+eG!Q^OvMbd!f3 zPlCR19O00+u`<12=|;k+O>ptryVL1in5n~pml8ba^d2n*nPVs^Q?g31qQ<$2FFso zv!OZGk5Zv8Wrx06#DiHQxw-MJ*NhGWA%VYfR5MCB!+tNSuF{v$qUsRHoJS74TV4^B zQ`{YQGFgJ8H|t-UCbQ8K;Cm`&EF1YTIi86v<*IPZC)@b<{~h}Zye51E0^B_Df1HDU z6R{%wGa)V`#Ln*gN!JvFh38j?FYdT1s9FPc0XRjhG`iYHJ zd13z*gH&-T_bW4wRj(k5y!5&n(9?LHO85@AwYsDjL5P&XdwvO>6B&6{NB|yTQYNg5 zOOH@srwmzfF20UmY;L5L;Z-d0IV!AF_al^$FYAv_;u2%_BF?+cMF+sXblv0z2Xvp^ zsv=}CigkYlowJP?R_Cj>+nbnpL69xg^_m|Wy# z>*`k_Afkw0h zjjG*WS1ic4V5Kw-!ruoNVvM*&qsuT67w8eRm1Jwx_HB#P=>SJiJMt11%xRP{KOCa9yeq=AdynnsI9xc%!r0HiNzD6-5Tf&JCk|FTidiNUupymCq7T{cUiUxm7BRWF}E~~97 zi-BtE?j1SuwOfD?la-(;aJ!MQ?8aI4$a4M2!?a?kpL(jO@`p#pLm-hvF}>C8?TlLz3Z$MD&e2f)FwAD z_(oa#eF89F`^L@8uco4`IDIXb(;1h+@H<25=cIuH+u6z92ql(IfD8U^+}b?kxp-d3 zNe@qmpTclECR~dfTcq~tkny*zKFL}M*stezBU-PoCcBUEKcy{v=WKqju5cf$@`Cc( z{K=pZ+<~3v5*LVkx)nmrTwF&UP5CMz%#=To-A?a^l|Q+fp(?93kk(C+3B??}Ls|ZO zCT+80xEaZ``OI4I`I!44S?>jAOGS{#MB`{j^*cd3rc|jPgk|-crWzKYZ8fEsoP)s! zhs10p>l0)`Y~R1;%h@uqlhm;j|7J(ceXV$J=q~7#6`qZNhzCCOe(rQ7WukjzBMsl9 z{QdlAv-JGSg0dIx*M&4CR9#QMUq|{Wf$eOetORKZN)fWk2R_4c8e$~Ey6Z9xszD2* z_#-dWvKuGdd=7F`J>!m{PyP^@{=SO5Z z94$3Q`v?r^D*r<-%hJuhHHm+Hp?ADqFH|)FZd9jaoMll^CV3<2tcsCYeEwlrMyaf< z{lOE$8+5-Xa!eJT(A4onNlG2Tyvi+@2(dZKZFZ^q^rYV)qjze135l{y7 zI$t>MG=k}|a5IxoGZ5XAL?cCPQnL{feT1eNIuqz@xC}EA2OrA19-t=fu`f%f{AIbEo}gLpY~#LL>^~)X#_bSi5DIxENmv6{NL=dTB74EbJ&)Dn&B~A+b&CR4sx}`f0;ny(dv^mX*F|5t zcHe3^9Lg<-loH#a;$R>lrOBwht_}`^y)}C5CUi~d+fK>tJ!C1L5h3!aKwaSPpEKyz zOr6I`-HcSS@1aJ?ah`QH<=Ev`qo5m8GS*oKHeM_4iHb=sw_bJBi^uVaCM-N(Yc>6q zJd>3r`0_s6aR*^By?JnUHoX_~+9HcSx2)0}KPM zdK@au?*ZR|cl6OXhHPKWvas?w=CS?ITt|NYqq|GGW^X91r<{x4a%d+%XhGP1Z^4H{JgdNl0)1!0aS5wdP0j zAc)p(HsPbLyf&Zw==)jpbSCV~me)J*+>A7cJMPOOF`BSje}7loEIOL_{ts-L%lx|ukl#xQGc+`IN7FrS6BL;*&j&!ZhHg*^AlvJD~t-{4O zsQurrxc6CPJ&~r-DLL2>+U^&o=;xS4R~hzEenw9E%=&a9IPSKdNcQv_?F*e4N)&&& znkfzQ(cNp;s6}PK+VM-+(db5%?Zy=TgOu~+$8I+z1Brmaj9|m{v}Z(D=$Uj*D(%42 zs{7c>Kwt7pE(*pqunePEHVb49pz1EP7jhlEenIsmg*TIlZr9OEUNz^%exe=rJN6S^ z-W~O1FLjnQ1Rjwvpd>1^KvcYr>%#Ep%PU_u{}ICG-~iP#Ibg^7%{P1gEQxD+jOE!? z^5`Q?TMyy?C1G07&d&L6;Fnei(y`PX0|>(BXmY9%AK%zDap9u!d&5fdH?SPeMx0bA zb9b#hZ0epvjvHwU4`)Uls4k={Oh;=WBfEHbev)zzp7Gdm?E4oia(Uj~{@6Yt{D`Uf z{M&H=9lg=&J1+5fHXCW^2gd6QFY;ZYUY%@h{0&AClClDt zX_mKaIMpFUcY+J0URPSG+XsJ?JZHwj=sJ4N9s@4wyMNe(T`f3T|LxmM{=Lj)F|b+@l# zwsZN@<0D1~dSj#o4j0`eVnue;h#Q@_2rxf0s6qoe#R-p}@}gEFs4?Zio=5Hw$wEzA zeW9ofc!b`EjqPtt;^zx^VdPq&#~$?REp2*-ONO?`bkBTFEGY_8kb(Bc?8*ef63vy! z$UnH~gpgvRUD^X8B3{MOhX_ySgmQM{pi*LN$eXvAma@d4UdBpo$`O7nWl;Jyw(TKt z#cK-eBQX(%1Ox3{(!!_d&Fy9X9(11d;Bd7(p}WZ|-q4{OD|Pka0}!Xt+s`Um$tK+q zn5euzi1wsZ*@f4Q$AWzp9D`))RFiDt1RRF*Y8XA*D^s! zXwWM3H*8Vgk^nCOBeA2h*O7bh@LE(3)s}oj2^zicB(DQGxfaDNImY+VOJtWY;A-E) ze!#hIQEVr#CB=(F!$dhYy7@?>-gE!e6FyvEKa~B(I2&!aFz2eGzRvvldn(RCJLTVG zDM5@-yJ1K9coc!1TfcR9>R04hXuecg>#boTznvdWR9EWfdWJHubJbuXePMcNfi>fY z(fE?6KnGR5e(&FXyW9`gJ!fMVtVOQVNjiysE9P-2boU@)`&?nJZ;)4)&zd4Y3iNh+ z>_`M$Flxhy=X}!8fU~FDgS@UGtHQ+V3UJ|v{8GvWXRP#k(O_@NxKXF#j&KQb5UjSs zn*GBltUltdW3h%hX)JZ;H0_D@?Q;>GP$qikH_j&K-|30#}^K( zTq&z^KYwcEbnUxPTzf_jM{%((sd6Fjykji5_&yU^!Ee+|lZ$h{q3K0G^1T_{=d}G7 zeOi(X-Wfcab=G`>Q`&9jsnG3*_eg}8BU1s%Ci4CC!wJ;zv5hTn$(kOJ&Ym7< zF~;`zzN0Gvwzp^f;?C1qVZQM6>8D1rzZF8IxptK356V@M;1D^>0=PU<^fL3y>5rHq zi(3Zj^(STBoJ?sS$_2|O!qzzg;^-)aRooHU54k9*L51h1&|-stK0|Etu>(}HXd70J zZ@8ffGsv&%j%%0xFapq0pg#q1M9phlV$%s$sIV!5{IFQ?LYp1-&s)+$sd*k2Zu6%+ z>x`ogsoY_Ff~X4_My&<&h_|uNHQx%^UXWAM?Z>5IlDPU~@}Q;rl7FY|O3BcWv<^!! zAl~w4!P+_Vgt#XF8Sz_3QfAzRTKACHx2P2UT5)ioEZmET_Ib+VQ+% z`y@^&oJ2rg*8_6CKy5+PmH7Wj)ysLIUv%(pO;e-Q7m&2!$zku{sLshRIJO zi_i>i?c&RwYy)O{@)Eba*y(Wl_(HK%kiZC(CJnud42AXb3FRyu0MZ0qcA@nwzGV_> zG{7`IMH|;KE|tTRh!+q4$HeRCkY6Te>1~UorpyUH&_2N|`t%%0Wc}v5gp7DVU;W`0 z0r20f3pYy1)4yM3vgWF&ewF0)(;I0F)#XRKiq50y3$2OXWA?fN5MJX{EF_-7wR_If zr}a&Ri@Su;V5`)W-Q<}Nw7=sZ*KM@XlNwaU3qBci-NJVJp(fLATty0O$*%CKY&x0K zk5^;7ufS6Hs!N|_jkWIdS58P`P+na+s z+e0bc_qtjm*EqtT=+g;Nm0I06yJ=9=z}6-w+m9-*gC<<$gjcf%{g*geMcqZ1^46Yv zfHJQFFpy%BM>D_+QQzt#QOdx`a)@cnjT|yux>3oZyH|<){3#11x|&{OYx`HcH0Tw( ztwJ^L@s)hNRqVt+YO%BYx||%3X}DO4ELr3#O?o%bx@%&2t0tH?&1g{>WdW%q4xCo& z&K&EG`dnc>JS)dB`|Ho|0h*O(N8(gEkGpyPWpB0Od>iZXK*a+#fUfgW9 z|GAU&*e472&rr`niITnxLhc#_b_GG-7QwzXB(hVw2On+0im5(h|7q->YcAA$)GuQIRJ^Lm97t`z`J9 zUEbEPi!(kxPH@7d=Ia86ug0ZgyyPPvt)rLA|5s5S?^qe~*^u%-|Dvo7yzMRl__u$m zqM|Bub!vDrtw7ywHP~`=>gx9LM=nxnFi*PfYI|}`Ke7;O z0y!7&zQ{Q&p6hi>B{tt-RkBnA{5~y)ybRU0`{UU^tPUBZIYFZCV!cE7PPg=W}gQD$Eb99V74mi}z zI6_^I$%j6cFe$gw^&C1-hwoIyjzuFDzFj7yMZFPIuWXg|iev8}5v`BWG6qaS91kb*-y7E5qmzddAjf3xC)tj-`_ zh;stv(nhxWxXqAlrnE z_%<5YYcu|F-?UsNb$3{(`GoZ5B5>RlS8l&=-an-&Y0r=pfN#BYq`lE)0vD#lRzmj_ zEnG_zsPy`YOrIOLjq3Vu2S)>eC2ZzTgJ$7HTCP{OgzZ=I!FsL4Ma)PX>k^P`{ zMdy^Ns}z{t`lXIUW)YYe6d{WtTi@zoRDk`4vN_^!erU%t@r-a&YbI|j7u~Z+fE1n@ z$VlZe*2bW=t(msJ`J}K!s+UjdmfGn)WG}2+e5zrXUWD6=q^5EL=0ro>CW(eBo9&ez zeMbFy&EV7`@Vds*t@=KjPbyWT?{O6XV^)$8s7?Q>g9m1=B}Lve(J$2CD66pkJ+Btp zQT;h#bg~-lrXHyV9lQEZlAmsVg>b#+aa{A~BMiu96^!630KJaVNoi|f=9!{^#XvK~ z{I5x}MF;_)Slf}kxmnBe9c}T_G;UXYoPmFvE{lb~y?yG?x-L25!=7OPU%?w*Nt6g))?~u3tgiQcEWmSbyK^u$p4&{6_HmxQj*9L`{7pRA!*cgTkilPv261$HL+m z9d=RDmoC5F(*T!zEVS}q7BRd*-{n!l5hVP=)O=?9cHZNAL_;nu4GU}fXQ1&nkbpz*HNX(E&Ee|s0yd95lTjluUKH5%uabz+R2%r%$3VV1M zoG-ISmg@c#eUD)Fck~&RA@{>Gk;)Bjq*OW#J*Q0$oIaLBqK#vru6>Gv#)kf8+DV)u8UPs# z{l%JVz4YVXr@LR(AQBJr=5V0(ajA81-H*tjc2Pu92mX5OZ+hv@$S*AXrMmEkeN+JG zg!lF9gS;%sRK&OG^=|qtZoF4(!AxrC{&<7N!vj>}M#J|Un?oT=>zjL`mGy_Sf?Nio zamfOoUW9?`Y!dKP^whZxr0Kq%w*$Ny2BhkmgjoJs!J&>$uORE_P`mF~4-=<-%=aie z_@=G>%QmS+8Xs0czQC!mDlREm2Xs>NP+mp@IM*1|%{w|c_-4%TRAgrhaUh^cs^6g# zWQK=TSF$pktD_h1Skou$(x>eth(G?GUPs=GGQfkV3~%3amTg}x1=9Pbcj2b!h6bJ_?k`*zFK* z=Xo%L9P))dezml;Q> zby6!TjqwVIfYy2Y-xyIZX`88u5dxGh?KIWy|2CEjrXtxPGQIZwJqG@|)YtPAvd^Vm zSA&W16nJ_HHv48yib-3aApP#I&t}*ZN-AzVHlyLTtBsfn1tQ+$=(OQT!C^0XU;h(t z{z#OgXxq*E#rb(nRHtaZ&hh&eR=500DEOdDb8KwvaBGV`a65*KT0m4-#zg>7+1u0vUH`DuH0i>eAKz;SQdh8@xDvjP z(aH6IQ0Nvg>X!Yx`n>z;1CbcZo9~)+pn@oe3#Bw3uBQS(BtE0tXrW~8jPwM#kLzl? zpoWjHxj!ix*@uAv*?%!)7LD6)GY&;i839J@SuZs3tAhQhzY@Jj3tz1xUW%U?~(zZl7%1drz$2tbJ0gLwmt7(E<- z5wtY$@oXp6p}M3a(U_qyu)Hx~N^0tdsVXZ`+`L>I8hX*Z01gC%aHgal(*al+XG2x3 z!@_#O?2FidgX?PnQ!_KWPP0@jhTL6|0=`iMJQ;rw0T0n!vD8$n;s-0qf;e7CH63~E z{xYbWm>!5z9F0FoyzK>Zia+wjp&yvR$B+E>MnTcZe8g=aP+U>@ci|XJT$gj{HJdM$ z7c+2AhQtk_NlP^SPCPNjw5TId921(i7ttu-cB|I8rW=i~0Mdb~zD%jRY@@kf>|Rec zb9RP31_l29))Xr{JHd$O$5|B4-SO!Yuhr@T;5C4kX?QU7%14~|JUX}tLl+PM6#~u8 z=2(V+*Ikg<5O8|fEt}Tc_gJwPKOsWFpi-X`2IY4}+y5C~;s~QwXm6&4Aj+dIj~0yah226TUtAI(O@ef5(>7zlaRdQgG)Ljuc)Y>?Eh}>tAq8L(QwSN`pC^}!91^Xl) z7tmz%^F?orvqxg^Yq62Q%nJf3S+u%)Cc)Kk#=MHG_Iv$ke8wrOgDD;fKshv#5JC+2 z*3P9STh9sZEr(;Swxc5S0^pVhU8kI!obiMwUaGB?hozNoHHexH51rp${#0={CcOeg zU^3)dliN>eO@-qO(W`<>;f$xb*TD0sm)`8^f^|L(T^&_s2Knsgyb3V6Z6qJdRAR$% z7db8M+rpqDaD)(Nvh%G37`1=7!Ey#O28jqVYsNiBJyrr$Wshcyg24~)R1nbe2Ex7q zC>yahnhXUt96CY%?qw3q!NS6N`QgH0>$h%y597ntc9~D_CY83P`DbsAS9GVEKf0~z zffdT(c1}+5%3urt{Q1vbjv5=H`oZ79K~YDQghAdpkHybCC;0X>i`m|Tz2Dp&FdS-m vZj`z?mqV+JhDs~k=H2#xb!k^|J=1yj-{A#dIE}uvmIG82H0A3dR+0Y$D{BN% diff --git a/res/drawable-hdpi/file_ppt.png b/res/drawable-hdpi/file_ppt.png index 116f2ed8c5183f1c7b8f15ebd76734b830a83412..2927f9649eea6095dcfb01a6077dcdce91b102d2 100644 GIT binary patch literal 904 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 literal 6506 zcmb_hc{o(x|G&eeAv9yjlI&y8mJpI<#u`ZmL$>VMV`5N^HM{KD_p1fz#005xV)Mg`st z=Up#?1=S;6O%!nc-<8+#HVLeu_SC|9gI~=2mmz9GnSNm9MIUWF^u;AA7Fx<1yHgl9 z0AM}RMyVS4eciGcbf4E~R>p9A{%OoVTbreo>egeN1(lBJj;^4z3)m@Nb>0^^T5{OC zqY7M%OF-qovB7TG$Bq8haxaOOqUmHmO#5UJY)f|1?=T{~GjSs6eK+YN`|*HX59 z|4$D@RtCSS^BdKZrm=@zy!yc-0WwX)4lrxi(veiJiQm6}pF;o@*wj88Q&srWG(iLA zJYTCc!$wPWE`{iREu{|F_Q|BGXrKO`u}aap_VpQVHr`nOM<-XcOjLmo`TWJnTABkR zH?6wOA1oEb2qDs1P3svsy^h(g{b8E=?5ZZ92J_2#8w%*f(C8f;+V@We--(CSQS;oU zh~OvCa!+4)I=wz}x{D)N9Nvtonk|DFpnwF<2QoFARBbwj1Inp=Lo+8PDvxclpb2m9 zXOUF@}R(7AWOM!0Ko3YV(R^1GvGYH(H!*#EvSZpyrstOxAT=yb}||D8$fr(A(di zW-RA+2sf-7XJKk#5!N5irCvQVslzZ1)DI6$x|iReu%5D>J|nj0q#UwWTXs+^9RMBR2wh!Ni3$M>hWxnSr&@o(^(?SDdrRO~N(_z>0*NGR@;D7zOQ zM`zv0pd#}cJ-|I3AVPFt8<^yhYxPLYVvW^+hx1s+v;q%On0OBqJiyoryJ{G4$!>_06FpEu`v-KQUaMdniD0EOQyEf2%aRJ?bd}OKXRk%@_#L~`R;B^3OdZHmA7G4 zh78$@^)gm+?Yi=e;VR8S+)+?m*cLyvWxJnLu2Wvgis=pP;q9 z$Gy|gxqXZ(2fR*oED5i+B2ig4u2EZd2Hx`Ef@3y>_rElNjp{QyRTyqp$K0&)3rK!* z)ej|eXcx?<2EzeM!8Kb!zH2z?ScwpQJ+izcKs{sqj&c1fM z@ivz6U)$T3 z=Xs^6kH*NP)zu=S?c@a(H$|27z;SyW6cP%*-<39=lK(U7HJ;8AQ>LN{?_OJ5dq+xJ z^@8#E?XOZR`5%B_E0 zP|$od_zJbb-lCN~HYqQct-t*DZ=lWX+SOaziyh`V!G1aSzpm%IUCc`$@J_>$(Daq& z!JEJK4L++ICXcQU>Lns<-g#1@EDdc z36Q9Cvqg@OkNxrnZh7pFA|#44T$!SqK{s&u@bK`7wx_>;hIWp0>jR?=VgEFl>@y=@ zy)<@+&(x`mwl!8-v+ymN_Rqjqi6~xHS}Mu(yHyKAa!Y}favqEA8ibbKhh0mKsfzgh znt{#9;U9UuEwpRbdkUP$b6FEy}Zed;iG%s zDF=HFD$deA5+uxsO>dAb1GdxJ6scDXEVFZeS76ufXC&IpPUwWfK`J97F)MCyE8RUk zs&AO0bjuqQa_zrWh>#>ik#e21WxNbVDFOvP&lmYIm_A zibLQvVwH>k!<6`<}zky_X?Ja$EwJ~zl^{TTU<9w!AZ0pm} z)q&dfb>W{C{pMe%=>F<_%)@Ow%SpTz+nn0^5blN(@tCud4jQzRKA&sa3M(_XOK1t< zaMP4QoIUk{b}>*42tYiJ9wN>jI_Z|lphz2Lda$5n&z4VHHUR-wIr_2OLF@QSL*nB; z0S=YPHz9vN!nk#J>KmRIU+eggNQ#OBHU^TF1!i&Y>cm>7VWj7e z#y{Ysh>YTBr*!(bJ#=(-Yv5Xc>$JRVwtgv2d92Ny0;GK)KGp65YqU&$!UGK9-X$kv zlH)Zw4*GS3t&5Ax@|OyZys~*jHp^!lS*J%0A=9>QnT;L@)`@GqPRgjdCrs6I=Bqr; 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 diff --git a/res/drawable-hdpi/file_xls.png b/res/drawable-hdpi/file_xls.png index 02070a24c89842a832d0051d6f29aa443288e6f5..f2aaf8467269f608d15c45bfb8623636a9256bd1 100644 GIT binary patch literal 1512 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvE4M+yv$zcalEX7WqAsj$Z!;#Vf4nJ zERz6X#=6pzy+A?964!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq!<`jQ$1ZA zLn`LHy?a0VYN^cekKdo4$^GVh+UZPSg`gWpqDqk9RAYAOUGG;qHU)?~=KWRL#kqb_ zAj?J9qa7dKEV!2<-aBEdLG*L?bMoe{=8j+3OBS*uD!jN=W*5sUSo}8U`RAWC=i|;F zm)~&S+s1#tM!fxT9-!0U;6T)aBw3R<&3Bud>TmC{%}SHqc;jry4Q{4eWc|GzfB7aCl@ z`#jO_uamBjDvB9@5A#B-ERttKd1NCNAFSpIw3-dAG|p&*0U^PKF1Kcimme#E?Td5a4}#3`}x59!CXn|BBEbG9;ks5hHg zeEI3G2g)nkTO1f7`fk@A4)vP4#{BDqFl7dv>$>M|UVrL!ZF-f5wjjf-!p-Gorg5h? zU2%?TWw@{=@3UFpx>VL58SfmDTBc zqH65F_N56hM4ge>4Bf;Zv_3+Q$>FqRdj7Q4H<#ag{{MfI07KJk(nhWCfDb0 zjOlm2ZGGqS5C8eS*S@duwteEp!LU&FRc4M&Tl0_k z@#pyLJ=()C;aKwP-PYOjL+0%?{wl!aptXBf&caE*?1Gpatj@{Jng4o@rPiVo!)Utb|V*KULDvy}($Uz1*+X7}X0 zeBG|LiG{9fDf&Gd!O}@ z^`T2y-^=G$FgZvuQi`H(-{+pPy*l&LHg@mFoD7*PG(d(-54NSOxe*(l&-?3Vr{ID2 zg69t0DtY?gVCQ}(IRP7nd^6c!JZmD;o#X}naRz*NKlA3+2hS7M?!5Qm-Q5fAEc^*e z%3p;)|D&kPq;tQt_}|Xy-+ccG{aT>$pR1(e{goy9KibdS^h__)JT^1Kd-~j;=cVtx mmAYsBHT9JtynF*OZXLh>j+vMF#D{=(5ZBYy&t;ucLK6TUxMzg` delta 2100 zcmX|Bc|4SB8-8ZIcrBBetR+kclSrK?ad>Sp%91aNgEK9n>`T^~cVd%i8P{YWz#lttu##e@aq($;mpBuGZ zR-63Lkg$-=GS}CPk!})3l5K|u9!HLs+Su3_XJ}l_=B9JG+`f&et+O4ZsHQ(Pe>xVs zk&@f@JIf%XGpr?M+1r3!>#i#ygXbrCEr(D>8CQN*&8D3Q;2iA=IdygQEVsMb(AOHf5M8>Q24>ZnV?yL}LR9f*b@ptRg;GsfJa7B6V*H>Dh@&D)! z^@8wCWQAbMXFa{6uPO^)QBOn&)Gb>xHv-N*9|+I@*mR*$4B6+twVS8sN}$bu8;Vk` zdRTw280PwV_U^pds1#CkbNE52OUf$h;gO1_3Zo+nN^vjUU{QghbWv4UV05V_kZut> zi8F}S8Ab;t_UM+loO+N^y=ghrY5v@tyhoz-VYO@aT3F(mEC@jse}WK{laz1D>$0BD zw>YaiC;0R%sru6RmoMAzj_1e!+C2GPzgVP?JZA7oaoAz;6miNET)&aIGb+_i-R+UM z9>Wq{9<^*K4P>Azhufd6s?{Cs67POB_#?95bDVm~ZR-1-H-}GdS8edkm_HZdmv94% zVR}Pam`YD@tJ>;OM=d4aL~lvU6*5~$9d*Z-gZYm!q4t6F+rmYYIYGuVxs7TiGV_^k z5kD90VcL2XJdg&^2m=)sf=UF$RlkUO-?ZG?6V}UpV{+$|*&AEXUwHIsM1UI+0Se7D zFpVNW57a9mRMlgypyfd#p^0ON34Y73vLe%WMTYYkyeh3J!JuMcUtl-4(;!ei6@CY( zV^@p*Quf$?nc9U zsk{5x3e6B;!x9JpMaaNcKAkS2=2I81GiPr0G~_#+yErPZ2><~(F4^4HDPA*{vb$y6 ze1{=#+-b&n$gQ^2x(VAP+&l%-AmRi}6DH!YY}GZRRFK6rX->&~(YloX)SIkSS&`^; zcti>HIiq1tdO&7lsFnWyLVkw`90eIjlw&)3EK=c+Y zT!H&mey*RrF5)nX+KX8Eu9(gVKHIFMUhWZJaU?DAOI)l|1 z?~NZpNr%e53OPGxKARdG&wU*Bexf?Js^aQ$XUsrNp#vf48zVR{VG3~k<<*n8ob2EG7TY8=jP{;Xp3*P=vQl9=+v@TZ zWr-B0JOUk-`aR`l@|_Z|7o0UHB11)qxKx4wF}fmlQT}w!AtHA1AE6%Dri28P zTKRA~Z!dz=BMvlp5K7qowG zWNRM)Oj#e155O&Jf~-QbiH{MZxrS@Te4E5NOtVvQzv1QPH2&%oD?!7-9 zi_Ol?ZW1HL9Bcb7W^vjN(%U8JOZiR7{l#j}Vci*XnSAdapiZ8xZQk@$DUdm7Ks{s> zZj*{L6<&a|va&84WmYO?UAy*Qj%i~wK|vNKhHMBhH#0Lc-Lt1wpPb%sP$4thgZDg7 zIM&_Wjdsn<%={c3J=QRnpOeI~_nqWh>I9QqH`_F)O*>EnW>>}@^hUoMpq2|m{0R4R z2o#^_SJfo1h$r=rCisWjbwPmBqtpR5Ti1vCP`2TPc$l$iQ$DX+5 Q$X~4nJ zERz6X#=6pzy+A?964!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq!<{OcX+xu zhE&XXduxC8+*FC<4}be!3J{#~Na51aSoVW!|2K4(2=Hn|tQ3e+pQzEK#~2tObabPb zi}h4Dfh9XQCh5*zuwpk~lvReK}aXST#e$1}d2g`#!W7z9@AK{Z_usw8<^I0;760AlMyTzj1efru zbL)Owd2C-(Uhwrb+xz>I4l)<~c|2L<-~ymqK6-T~Yydj;hpLN#2hcZG&*TnX0?J=D ze$FvX3h0}4JKZ*H0V?=%*05N*5n)&~?1%-a!R=sccw(YxrI_&N%P-9rc z*^n_3m|J-hatp6~sZCp#UuW;jZ1Lygk@caao1gNeyA3x8Ls>?mp^W^=ZAp_E*yv=Y6but$3FC#%;^`3*q(qR`ErjPcqB9vS{9qlIN|j z*RrqOCKnL;_3y!}>*cIUe|>)SYTqiW$k5}{4X2;{x%2(&qVhHMY5C9Zn4gxop__bS zzwPf&OLzBQtBaRUGJCwG?$0`VyIXd@pI@lPk!^s&cNqUOSZl^UVcNUmH%OJItDnm{ Hr-UW|k{ro! literal 4668 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 N4K01m;%hcf{s%YFL> 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 NP*v1asFbq~`#=1jB)$Lu diff --git a/res/drawable-hdpi/ic_menu_archive.png b/res/drawable-hdpi/ic_menu_archive.png index 2b842033856bf5e9c28c5afa90d2b9185833607f..e2359dbdae575a9271cd418613c275cc973496d9 100644 GIT binary patch literal 1088 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 I%7zyEKP#&Gz5oCK diff --git a/res/drawable-hdpi/shared_with_me_folder.png b/res/drawable-hdpi/shared_with_me_folder.png index b26e97885d85e91ee786eafdbec24e743b8e9bc6..d312561b5cf25f8f9cd7b2ed63d0eecbd4b15465 100644 GIT binary patch literal 3583 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 Ss(bHQ14agB`lV+bDgOhng_}bF literal 7037 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� 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 literal 385 zcmV-{0e=38P)p$fWks7-u&+Xt@4uxMG+6)cv!oGRh&EWi-p^2aWpBBCE{T z9Q&#d1wn9AEa9Ag9w|{sWx5}P#W$K|vDqTA55+Co+f2jSR zuRU~qg-1EV*9K;B<-=zCd)HU8pJL?sFDa2z|Nqzi^R-vq6=SjtE+2Rm{(s`n+s;P~ zt~_9V@oS-;hDvj{K2R>=YXqcJciGzt}}{uWSP&+Z{%h%M2TLHr&}_^uxKKYA1uW#0LS1QiiKV zjCu|lyuAMeB+jxPzQ-u?oXP9*i3j|R7h@di+5eG zK~#9!#8}O)(m)hGEiF*M1WbTL5)&YCbwkvhkKx|;aqWiq3M`Gjgo*bRaAAT#a)Btn zZJBY-v;)J?p)K@YPcrwyFm1nn=R4n=)}WMv9EM?ZK79QA#o%86Og3Kle}0z8ZV4I3 zXf*oX@Ap5+b5_JUdsS=Qy?^(Hf#aCq?Q{FCQOsouW;UC_U@$nFj{*dyWdp5L;eO_F zhF%x);5bHRU@Xf5&+|adjuz0$qwwRwg}F;OOIyze-_H&ZAp~64O%90QU~Bhm7!;l~ zA^{QuXf*hs{03?Alu_{~1SB(5uh;pwHZFnD17eI2!HRO+WHLE0q%xpm zN<^pA;cKqa5FaQcOc|p|+)=e!J)Bh4h)zo)3WdT6Ly1!c2S5-4I;L#7Tyh=7h2uD| z*=(RztMPGT%EA$*Ocpg(N~u(e1%%bawjsV=y?A<2(<3Nxg5A!IWv1C|YK0sHD3yjl zN||uiOM-n=V+?$V9z{(8LAKlN*pj}r^rN>9Tr6wo0>!s@QM$5MG=$YP91as-RQ4qN zj2@&inOxN56c9$SSd2}XZXd(Xw`oZAA%a!5gYkGA={1*pNJO{WO{BF83<*&OE^V6T zneC(3;JnU<mU~eMvs{dSj%=^r0S5*h$hAXOvg@(7_l( zfGBFYQj(T;W@S&5viE&ImJzkeki|@lG1yE)Q9~f=^?IG!hvdq-ouU0v)R?|Xr2@TP z??3HjVUsWSL&y+&(oB5;)LyIAy0!hFK|d`4LQhH32Sxc&n)bug86!`bRQ_t~DTZjk zbld&Wlo48H6dz9bVC7TS@7kI#`+< z%Yc#D-7G;y5z00000NkvXXu0mjfMP;v2 diff --git a/res/drawable-ldpi/file_image.png b/res/drawable-ldpi/file_image.png index 1bf20155ad7998194e76949991fef2de0ac26d59..8ff5e6c119fda8354bd7ab90ea3ed8345d20e00a 100644 GIT binary patch literal 486 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 diff --git a/res/drawable-ldpi/file_pdf.png b/res/drawable-ldpi/file_pdf.png index a05afdd5e95ade7e59b79f2b2e55e0926d77f599..55be82f00a8ba27622879dba5c90f7a383c129c6 100644 GIT binary patch literal 877 zcmV-z1CsoSP)>}BrH`@X%mE}Ty4&?j z)n$v_i2$TZi*-xC*ic+-{3!r{LZQp+EoGt1lmcku0^}SyMex8ev|!Ev*>Yyo;#ys4 zsV`*!p3+s=;rB!v>M%mf2U9X#Rb#iBR)@x>1VA4@5j*^jcvmN?$1~WnJUhKsaGf&6LdCj`(PiJ8D?!Y0O5oC zQ9T(LMI|`%3+Q}s55?Vc2*yp5XnieT@83n*cJct;bsG?A8XwP`1VHs>;wqR%_osHG zZKL@EX#N0pB!boU21iB)8OvAF_4F}scI`+GK=TJMmMp`Lgwe9c;a#&H=j1#P0vU^8 zy>3M~9HeFYad^F0uUqK2b_Em_@9MIC`wj|V)Qnm9$~S?cpc)3FX3eGR$s<0TIEvNU zg8d-^Qi2dT^QMwMa}HWC2V-dn6ov4is>A>kmkVD-CF!&0p*WpL+opBf7Glj!eHTdC z^L^Aj8_aX{c=S8rbTM}49$fhae7SuCgrNP*ss7CqRKEb38_UsxxkL_EF?vZ6(Z+f{ zo<5#Z^WOrv7cL^&SWi}Y1@X@vwC&xEw5*W>=(uzqJ$C}J=2x_C--;c6pK^2P`(7Z2 z#p$~yoV}t5==B)xzv2P)7XnCeXV~1Nxbx%d|1W@VeDv*~lYxxG00000NkvXXu0mjf Du;7sp literal 2082 zcmV+-2;KLIP){wfD9n}?G^M2jy*w^>^8H|0gv4fK)P*p-|k=i@}sR+bJ8wx^#wgDsrrk_nf zLTx`%<)bJfLj7p@DNxZi6`+c=L@AF(B^8K-5{N0}N#fYpiHUumGjpcHmZIXAcFzTuVS4 z%(ls~C$qh&9jU(lw5BPLWC@Z)MADfWWDsXb3a|NP%|EbY5^Dcd;eZq{m6+je`U4A) zJN6!mSC%j{J9mKQe3(F;Y{k&{Xr^mw=!UP^*WL6DF{xAm5`(A#6d%0F=SpQ@Z`cG$ z)0)!Z`#y@77I5XQEZpTK1pEJR>+PE+o}i!ZZwhG3#K^Xu{yuxOdkvNkyiAh@AwzP= z5I+kbay>xL51@Z@8@jIFD3E!%MYy>ftV~9X>v}`0UVYSbljwGFJ^Ed)+#m zIeR|YTGX^ki&o*zUZhc61k?_ERyEHDuq9)E2mE3jR$r>a~#1) zKA%USP!wSJQJ$ZtCkXW7B7()sz=}Lr?=stER2Vy|H9qNb1fU;pD z(%bKW)}0m$;QBc6+;cej`xnu>CPD6yDar=WYDaSCJ|{+vaM4l_F1R&AVOR>57-u7P z6#>eQq4SPAVU16O(NZj+w6ug{d-r1b*irN)ZCI)j0x=9U%oI<^BQjbv32POGL?1>I zvQWGfLi(l~U~kz9n}B%ahUKN4=(=?J6yDvv8zzNsidO7sDs)B0l|qT|Sgr7cV7MDt z5NV`srY7|#l5oc+psigC=lZWgPp8A^D7lqh|N89<9{ z+0)Y!k1;fa;KBvLkj$`3Vx;5Zfxlqk%{Kv_`bir+dNc}ooj_S6Tt$|`=!lT4oS3`8 z6uN5;N$%=~bpAXHdX`Czo|RX+tb2S6legTAflN126uuq0hBbx`n*d2sI;a|pto~lb zW|g9}#9{#c3J`SW z`H2&!PzL6c8zgw!w2-hJIJQkeV4!pT2DmPz7J8=Wvi2I{3i3&$DzTwU8o|fY)l#E!s=EM<50@5T+h())68{s~5tJ!46ez1;PVPEK_EklYVxfX?W2MIDoxu(xDp`1I1 zzfJuJ$DZC7_MyUS^rt_A-#;j#q#9|VS;HgEcX`)^>xJ7-=lV%V1YBv7hZ>@cid1MM zQk$4clIS`};Jv1a^ZWmZHy(YAYT+CdikgXEJO$(HHxZ~65ocNry5Yci2^(K0iDBpJ z;gHq#d8l3!Jj^WumLOm$a-;j( z4^S)>D{X~}H(l52#FgH%nU^bSOF(7jFJ7kC7A^xCfqsolytz_&N+!{^;7~4dXrDX% zo9D6k$){rc)QvYnpIlFU6>;rR8RLtA!Z%-&o~aW%-8UvDiBZ;?p?4PM4}X!*&!3o^ zgGAX>?e2z3JGU_27M6yQ&Y+{W7ny+pOh5kuVNiq(+_fD#xq-KN;*;sjO(*aQz0Jn` zxXqB;U)!?>MW0RAVvuT8-rwJEZ!VVZowS_?4Ovdrzbn_*J(AeFm{JY`rNn$eJ8i^1 zLK-zX&gFSE`Fjg*7x7~ToXu= zN=$fpUB5t67He@x%|7W7Q~Xnm)}|2sPkfj1!*>w4#14yp__qK90D1(p2@k`HssI20 M07*qoM6N<$g5?hBU;qFB diff --git a/res/drawable-ldpi/file_ppt.png b/res/drawable-ldpi/file_ppt.png index 11a9cc960d1a42ca6d0446394ef9920c00d873f3..644fb852009e9a6d057d23cd0ab14fc8d02e6c04 100644 GIT binary patch literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmSQK*5Dp-y;YjHK@;M7UB8wRq zq}PKmW1Q4P8K9tKiEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$Qb0uwo-U3d z5v|Dy60FLy28Sf%mmQs-o{(U$VDi%0KQ@c~GByAL#m>t|i`dxM+WzzK>@zSEwre$E z`7l9VgZ;q470eMASXnlS86^dK=zd6y`ct3suc7_G3T8K1gI5iK>^)Wti}f7zS7-9F u*{}e`Dr63vI8e|MH|^5pb%6#y7#U`~=9jPJ$$JcR3xlVtpUXO@geCw>5>i?K literal 1249 zcmV<71Rnc|P)*|oOhR`>Mu^n6|Q)z8?`TGRU^xuhFs zXJDJ3Ga90jAw<)6LDzhddkt%zg*Wn$2Zgz)SS)_dfWB-r8vpWi6wn{P{`9@0)q1h=aV`JB%14=2xj>qfs_u0X zH1xmC#=r^;Xq{X3`1tq*=8lezeixH9e*Q{lXA0yL%b~V9E&B88U#8|=Y(nby`$wM1 zdR;2L_<^#^o4_tV-F{8%1ycjW{1t8qpk7~7zwtMzf38VCHpR|B_58^>mgv48*u z+6e&lTus_l0)_wrEdkKR#s)1dEk)+oGiiT+U&b6Nq{kY29^<5}fO*pb4Qb7qQQR{q z$8&?&4cJ|!4ay)$v&NoJOH;#uL_@A;vJ^m*2u#5-OL`-7b92I(R1JaD(2kf4%>s0N zeI0qYTrP`?nlVff2ju?#o*o|`#X&qL@#Nv*K?38})>Z_N;`gF?8e$G9SBbgAWO!c3 z16o^KLmmpo0A9Op?y8pvZT7^4-2xtBvd6{zpMv{Pf{LZv$r7#6^0@LD8ErvFOScM2vYm> z)ztqVl22(y2i2@okXENI$Vp)S>)`JgC#|xYk}wwSyl;Q${U^Wx#%TVX8@Jzq00000 LNkvXXu0mjf!#PDe diff --git a/res/drawable-mdpi/file.png b/res/drawable-mdpi/file.png index f988e577c0e07d85dd97ca289c8f75209944d27b..dd3ebad3460a40efbf76929bdfc92c26e61e5d66 100644 GIT binary patch literal 935 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 VYw9p5XF31?002ovPDHLkV1jO}C`SMQ diff --git a/res/drawable-mdpi/file_image.png b/res/drawable-mdpi/file_image.png index f70eb95be44a6f603c3cc3d53478be1d9ce3809b..1d767a5feabada4f84e87c71e141677463c90b51 100644 GIT binary patch literal 1570 zcmZXUeKga19LK-gem0Lq%|lskN!?N@igm@tvNTsRCdIW@p7NAs#MJ7So>mLdb>v~u zq>>ajOG=uY;?!j+mWR+|r(_nglKZ!dQP-KDw! z00Y`iHymh=l8E*VXUeLy) z!?uNGw;6}Lost^;-UwRZK`LZ)$xlCLmn_+K`d|_B4E!nV!$=8#z*W~;yn%UIMBM1i zrR$!vPAbiQ*ddf|KN`<(YF@4E$s?*Y@Mkq0Rr_H6&vr94_p@c$R1_Uw zCTKj;r6+o;VR!_!cXZ4Yz8jR=Jbpxvcg?igxVD&tVHae4$%xqic2nt-pXG9Sc3@zj z-RP&=w{v}lmIeR5GP^H4EUXzH#4rO!Ira}M?ns8Irg$unIAcvHZAqem6dKxPDj~K- zOW#Fd221Q;oA7&+M8|YO+%v6$tGLu}`i5Jv%h~@@TW~5Epc?>mZ;}VwRmv7x7kgo@ z;>I_@BQpdGMFU*@U)iyewm)h;S4wrzJ z5a&)j3r^bS$}xehXkHf@-BmL&L{w(<)A7%b}X^a%TBm9ILYJ*bB;_|C4T;^pfllXHdkey>LtObZJu z{xI_Vb1FC?-m4}G#HSUOz(2+~O*C*3=`6Q^>sV|Z$(tR6LZR@r$q@EMGH?_&JHWel zy*JL#E9zvVTzQW^SO1XMLToP6zcIf+C%URD8+W=+ z$7m33<~hD{Ei5%peK|5QVOPaF=ND)F=-uF~mZIr!)f3xfS|ZcUg6^>l2aGyij_$fv zTK{o8Q1dW$ck!5>nf;!0O^ZdqFtxZfn$RHA_?UlK^0|b0U-ii64vvL<+`<^=1sKKk z)YR0KbbJuR4w+mPwSonlS|i2Dz@keTx^7+-iJAC}7rfdSCrBT5kK>#q6wRlPWLJ~Z zDhwHq4Q~9X3@E$C9}%j1??#lxX7S`DC$MhcasUCtQ!OVi zxAEflEpFyT-LwPMec?6wb*TPYV_#GF$rf^NkoI)P*fx7Vl-ax4OT-mhN94qqNc1LG z<>svOg+tW^L}S!e7et(uoUbnMR|A4*CdY%KsFzDi6MzRYU<*|H_gqaUR)SP{Q55eG z5DN4i$iendZ4&~tBoyUl8AZ{B06(xE0ZtI983B+4S@M#i7)AgU5FE(9ju1&Y=QM`# zMnEw|p_EINj=e+Rp(!)H54Fr-An4C$}yHd1I!xP%PzK?|KkjTaXXI zO{#2x)F4FZyyrW~CDUrEM;q5H2&`i)`~Oi$LunH*|6PmKI+B>-(&d4=eVY%L@o)V_!T62-o149F-GAIb~hZE h-QFfxVfnMEG$`T4iPF*UOcZj@0gdYAc8|hJ`3Gm=*0=xw delta 2040 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 S#C!AO4Ny^3S16M+@&A8>Y=lYx diff --git a/res/drawable-mdpi/file_pdf.png b/res/drawable-mdpi/file_pdf.png index a10127aefd50cff1c18da8000550cbd5fb32b296..6292ff457c2c9a32d656cdf036c71fdd6ff43242 100644 GIT binary patch literal 3811 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 qi;(ZtAK9|4nJ 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 literal 4025 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 PWCI2$6P-6&&f)(9fc%Q1 diff --git a/res/drawable-mdpi/file_xls.png b/res/drawable-mdpi/file_xls.png index 430db59040c3219fb03cea4eb98857376b872ac7..e4c66164ac7f3725616247f48c09f722503bb4e1 100644 GIT binary patch literal 1014 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 Az5oCK diff --git a/res/drawable-mdpi/file_zip.png b/res/drawable-mdpi/file_zip.png index e587ecdd910e955ee02fd9012db510c4b95502c6..f64412d456b05cfd63866d30013a5542fbf1b4a0 100644 GIT binary patch literal 673 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSEX7WqAsj$Z!;#Vf4nJ zS}o`Ev#s;%)vvE_ z`{&use#Q8F*{{UM;h~}7S7Ucpyu7u1ulerx%PJ12FiQM4pX_E(#c=HZ>XS+mrVNk& zUsngyp#?Z5WMWxFHkpr*pK7an&ef#~QX0_k9rL)DO_}1`z6*{NJ*dpv;F^GsA%NXqH zEq_FXwlnW-z5M%H)dJ0i>;BjIS7ojLDyXw!J^xzuS^t@S?R&TVUV`HN{;a2QuO~iZ zC^NfW_IuUp(7(r5y^4NcxaRPxs_H9Wr^n~stFZr?42wP>-SF}c%Ln^=feN#o%s|4P Lu6{1-oD!M<{5keKV{4HtS+mU~-9%Z^ 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 diff --git a/res/drawable-mdpi/folder_public.png b/res/drawable-mdpi/folder_public.png index a63effe87fb0898d6220d19104865643da650e20..09945b62f8b3c1eb9416ed6e6f35454cc7a992c3 100644 GIT binary patch delta 2622 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 delta 2625 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 V)bneloPR$-;Oyw(P-@3Y`Uj4Wn9TqH diff --git a/res/drawable-mdpi/shared_with_me_folder.png b/res/drawable-mdpi/shared_with_me_folder.png index 0c83a320111830577ff9c807f52c9fabff0ee93c..ed8f860b4012bf7bc7cc7f762597aee81b43d685 100644 GIT binary patch literal 2406 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 Bdn*6{ diff --git a/res/drawable-xhdpi/file.png b/res/drawable-xhdpi/file.png index d575f47c8bfcea801a25329b577bf393ca4ece34..7764170036e8e759940d973a378d695c66677c7b 100644 GIT binary patch literal 1860 zcmeHI{WsKE7{8;bMycsbM-v&5t#xX{wkKO=LXGuOd6~3fnucO9iU}F|8YwN)%c7bJ zQ$%TVA{#SB=fc(_L!jxyV zW}xEQM311v198kmPFQ>d;BYuwqhn(dj)k!!w#LOr3f_?{09exEO>qxQzNL}(T%vQ< zc4*ZuoHur+mrC;80}ijQ2f>G1(H5 zL652M^1D+5)E67Z$Hxa^@WFO>ac(j(Bb#Ua)C+M8fg$a`?d|O%=^k?ro%2xQPA;s} zJKK)TNoje@4UqOD8th@=gRy%>OQ*Q=qRBD!Ulo)#zk>TIHpGy%Sb-7S;A%qrTWiAGrOH9A5aV4d{r$hsItHBZy_<+0z=E4=fW*Ivij- z^7_$u;{o^?$rPCX>1d)nAwyshr^^x(dWAG7*5Fw=d7F%yOQwI4i8cNGHzExyldl9( z#$#e)>TM^b4Q^ZRg%JvaXf!wpmFkciPG-Qo-_e9YN_qb(LGpU4QA%s~0YOovdr)Z()(mgCQP&K0p|2`!mGE!|N z%IdWP_YV4`C{ZOEh7GqxHNCbVT(1}%9cB3aCgC&oZ2+sZ?;0llAB=%*y@d?d~5NE`e68(I|OQ7zOhX*A0-xpX8C4F zneI1wVpT$K#1~ zXO14HW^K7VG}zbIXWb)N*q5OzMMA<1agup!DW`#FtWs4CUCf&!!zON}d2;8|EM)2*M!#xIWRQ73&y~10yK?ypLRs6}xTj_o}LY`iTK#AP@*DZ%};;fEib5hl z`a^}-rNeQhe9P*=w=AXJMcq@Rzv=Mh}vvKDuQg|H(?D8gCb z5m^k>aUFyioit`w00r4gJbhi+@3V>Xu<4eso#V~Gz`EDd#WAGf*4w)Wv!ugC8XguO zS5{dZ%lSog)^?7Pr@qtcJoI;eJoiO2DkFZO$ff{g#q2A+cl?%ZGW=Lk@_z1n=49bb z0aJ|kpPR~V?JBoU`BAbhEe)9?OYJAs)YZ95~+-8*+&yfnjBhnn~b`!0@rvikL|7rXSf-OiQiKfYuC{_Tu= zT)i}}y)NC7`}&dk|Eaq&7vg`&p&K=>)IuS83Y&-`nu}*4^*>M@E>4f;9yW- zXkcJqf-yw@WEq$8k z_#Abs<`%;NL7-(0pd`TpV`yCfdh;%)$H~u`%m`74bi>LY6B7&`?U`ma-;AMv1w)!^ zhp>R#oa>jKVR6`%#kzmxAGj&3uwc+DII~Egq^4){E~1sK!iOhKQ3;fNf7Ad3^U z>Qp3pEY>eQ3v`eSBdYX@cIn21BbBIAE~~iCza=VB}UD2POy9NCT&U_viXq zngyS4-2zH2=mGe(Kv@8%jqcIE><{!h1QasFJec9{juz!{y1(ahn0&k6KIi#OHik3h z%o1LjKjRO9{3XpW!=JIDsJ1qj>mVp4e#pAV!Xn+E%Wy30kZ;ya_6G$PN0K%g_=-IL z_%V>-Ue@;8N0T;gU=6sl`hVW`&vFMO{GX(4?)+Q#eqVjpjt}2|*XEc>yEhox*x1a_ z0;YtO-x;^=u8I=#li$qaU?ppR=_RKi!!xOdZ(nxqb`j7MY)Jc1n97}y7X7_Ypy8d# z@4GLPFNHr^8UM9i{C~gT##gy4ifkb(_J6Y9`>4LNqrJo8i{8JyQ@IJJcoQlf+SmTI zRJ!)@e!0r5IF>zc{ds?FzVr3po6iaNe)E~KF4+Hwe|y7y5o zPU&CA`u(E+x2P^z8ON}E*NI>2e?7Nbul%UJ4Sv~S)2~yg1b9@7%SCvckHiz z{l9pAx?sa>$jX?7sRX^PBd&>s~ zGyJ;$N@Cw8{^Sex%$y8M*%ju_{P^5XZLj)*xj#B9@{C_pJ^%Oc)q4&HUiXH7fe$Qx z)V!+@*vh&#jK z44-&-*Z=!mIt*8&8alZ5+?-y_5GTyOLJ?SwL%{oI@~QVV-@bM44g(2zy85}Sb4q9e E0Ouu4+yDRo diff --git a/res/drawable-xhdpi/file_doc.png b/res/drawable-xhdpi/file_doc.png index e0e2ba9b5df616b4a434cdda6a149319824b4c8b..16cc0f41b89a56b03065df7c646f022d604d507c 100644 GIT binary patch literal 2019 zcmb_dSx}Q#6ut=zYbC~g40Bw*UGr#2Ionl7mbTJ7lsm8Hr6}H~+)|pocrVP`6G# zIEo~f9`N09U^{Eq0ba!ZD8S?K9CpX-wnu?oo_<%ud;GN0??>Ih>ZBZ$`gCvbN{??AU>Sp!8_YFbB+ii=d~ z)XAMW;^U<%Z9An_qkHfHYJt{oeP|7iD*BCAO`TbCmU#NNB9d6F*ZpBW)(EY)?-2AA z(=5mGm#Q1A2fCH^lq39KNi;$4{h9)q-?e(mR8nB=*VE&it}dB#d;>qKMhXO{@95;o$HxqKx(KQ!n{5LqVu<~$mA*b;5;&}+$V z+u*UJ1`jv8V8L+ogp}d0$q&1$qOycji&2-e7oBgFH0Fyw4CPDP^441zCM5)m)XKDS zK3_2$E6|){qCEpgGi8B-q2a>$x0}K;$-wR=iRQMafMnrdS?dJ*Eka$cfY|*^VPf34 zxFP(!*!C#!RK1We;hiNaiLK19QV8liM$;=N9{*DKiY0~0E*S#dzHku; zX9A{+s1@x)hwFzYsu&oV1sdo_73(g>kN^6tUm^3Zya?(hUlNw7ak$`w=~GIp5Hjc! zxE57u3f>p?Z$JR2K%MzZSyyyC|NVqE3L`Un!wRs(-`2L=uB~)BuUi_FJ@Zy?&8(2K zs(I|*GfFFAqbcxjW3oo2yYHoM1AVGiO|q+z--t7E8IJ~z{;7+?m*X)WImDd=6CjGS zzaoe#ahs-TG6=R{JX0OAX2yLZqC98vm#qH94UtT8o+)$z7RuUOK3I4wIDKanUQ@ zuA=B495+pXR!E=TE?}*og>-wgK!4%afKGQ-N{%d&dWiR~NomzK4|Mty<<+ll>Bi~m z6e=SiWiIIC6T@%?X_3b1P=0fsHOP2%r+j%it`V{V8CTVO7Z{N>Q$8?oywF{E*9)v{ zlNM=o?&?M_RMLGzU^XAvQNU%V{~MG%^)r1~-*unXEO%-&Y91lN29B5Jg9WR>whO>B z0u7FvenOz=HSUW)xR!(dlCAy6Y)q0SiMiLDV-Fj||I@Jd>NTIsMN=*2^3-JC(?P>e zo9`28_;*<6&q|c+`J%yK%?Zj;g*s1s*v0*X4Lz2kzV%=5n!=8o~z zMX`NYEFRwMi+F7$0_f<~%o#f8E3XJxa$ d?#Grip~hTF3GrenPsPmU$-e$R#T)5I{swylJ+=S< literal 5022 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 diff --git a/res/drawable-xhdpi/file_image.png b/res/drawable-xhdpi/file_image.png index 72a7a5076210ce3b0ce1ee5948a5865b381f2a6a..078ed8ae510e15ce5c5c05cb6a4f240921449fb7 100644 GIT binary patch literal 3085 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 Jczuuf{{{=QF}45z diff --git a/res/drawable-xhdpi/file_movie.png b/res/drawable-xhdpi/file_movie.png index d0216d855fd6f0a81b53a857a4f7596effddd47e..9bb6ddfb4d31ec55b9436ca9cf0bed1b92726352 100644 GIT binary patch literal 1545 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 Q-zoyo*3eh4P_+yHU!X93CjbBd diff --git a/res/drawable-xhdpi/file_pdf.png b/res/drawable-xhdpi/file_pdf.png index 0d44a50a0ed84ea3ac1f8622a305d020f99a7fe9..f8cf9e49afaa93aad61518cc462048aa7b148de9 100644 GIT binary patch literal 7832 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 smck19^2gG+yoGjxuqp6=Z2eMXz9%X#QNW62T` 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 PMS(}kno3oQR>A)RP&;&Z diff --git a/res/drawable-xhdpi/file_xls.png b/res/drawable-xhdpi/file_xls.png index c1a25b98cec00a4db49fece54a78920cc7b45e7a..b5c6ee181ffcace9b6c2e83e0d3e5e9bd9bb45de 100644 GIT binary patch literal 2003 zcmcIleKZql7=Oo(sg$pZJ}kMlsEktRVyMMQmE7 zG^yrB4YezaSP8@06lp_QAEVqcclxV8?&+M)?LOzc=Xrn6d7t0!Jq(kqX+pw)I{TAHNYl4+6!b!p~LCFjQeZCVw-@6gSKithtyCw~5?pNK+*e zsTM;IFfDInmN6Z@n7;HYad5OgDl9L?3{2NbnmsM)1=(*Ix7#`0V^a$DptrN`l0~l? zqHL~wJ`fCoVAx3fDPge;I}=n`Pa3Q&@8e||M2A(~-NNXdd~BswI25Ga=*fgx--%o| zexfK%B4noPTt`B|K2}XMm6|-V?Af+c=YX|YUy==pOLVC+w$*6lU*#lLp!+GZ#uJ(j z!b1MCrmMAwmD$n-XBt@_5F5@;5c@y8&|R=za^HgNCY%GxN6JMo5&Xhrlfqe%gER!Y zdQHZ?1!xt2pe=xz9+MBO`yy)zwFJtP2rZH-5mrvXIN?UVZeT*}aI-F2bZ;ZsQ>YCr z?qDR`TYJ3{rLOnH@v#tyX>J^$cYF1FajggkM_pP6r5!zXpIQ0D#DS|kFIyR83SRrR ziV6hY#mQg7h!jQM5e>(Ec9ofhO}$Ors%*G{JK(>qv&AOF9#ZWjX2K0zfE%03?tC!7 z$fZb@b62H+oCAcR&7p&#f+xl2$#_LU76QE2t*Q(?c|}ReCDP%y&Ow2y;y_R&YRf(Q z$!yu`WiH?)E~rauyz@z*ocnC2Z3<|l_W9!zuA%KX>&SevA&5V2WywKx;bh~?^vX35 z+RQOh#E_eM*b}mqqw4knwmHkBsAM$BOnqDreCdA_VA($^@J?P!=KC9hyPF1CoxIy5 z-_k7jtpX@O1`#+Ydk?ApTrfqQwNaHQzy54zw_12;@^ABES91{6+m|$*Cb28`t2_l7 zBkz11QoZPW(Cv|RF?x&I>+3ZXaKCA&GxcynT+c*W6eTXkk-E9v3@0kXvY?p-2Yk&~ehuxNSF5zi8b*)9|( z+P6^f%R+#q+Ie;6``TpWR-J}_ls|0Xc9zOHd||01VZ8!{eJ5DKrS=fsN~@;HiL9|Y zWp`+U=&ta-y&t$4G7?bG-0D==uBPd6t8PV6)L-FFDti zd>S}r3bRWBRJ#@05Sr;pf8Gi^B+$E55SyeBpVR=y5jBK*gra>1g!UH{7#IS#-N1Ci ze+AV~eckJVLj~zL3a`Et%l=VH&zbGC;gaUa*P~Sv$tu}252^gLFc9K+Py?Kq16CnG z&L80a0W}t6$2%eD70ErH4Onv@iV>rzV5%jnQA2TrQn&SDZj(0KjAg;oaRiJYkrDX(5)!HEJn&9UZl>a@SPYOZMl|snN3e6ZsgYnZ+sdW7wUsQYkv# zY-$Gg3S!R6qr{@dKVe4N2Rvwdge`Iy>&3?D`ayKoMU02VW^!X%{Y-8Eu4Ys9kfgiM z)uTd~k71vcK=Cir)KdNxu6BfDFnRrO4~_|&{h7ZF@pzogDXiCi8A~=>c6ae|W;+F^ F`~$vSEe8Mq literal 2684 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 Ezi)W9UH||9 diff --git a/res/drawable-xhdpi/file_zip.png b/res/drawable-xhdpi/file_zip.png index 08ccee079c0261c0474edaa6a6a2aa9010abbf18..a5ee055ea92c6b8957ab7740657f9c5fe4930281 100644 GIT binary patch literal 1342 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$6%N?Bp530R%N1DIGvQXMsm# zF$2ThQV?cb(|))aC@5Lt8c`CQpH@mmtT}V`<;yx(4gI( zE{-7;bKc(B+Z9_Xa_r$&b@`6g6*rb`{Ghj|T}1L?gV;ffrq)>-FKAy-njF!oCUEeO zgP+gz)gJm{O-aehNh%TrMQPC;63KSYs^@OL|9ofTf30)BrEeS!0lAt4aNv{VF8&u^ zPW^iNIk`7|*ZT#hH-v`fpEo-f_kQ0J?;M7(>-zOErgb-J+21}h?a4oLZhh_DT95V< z3=;PI9lZ`Q3_bJRJ9->KfV6r?w}TIm&h6@QZ~@Y?U7ZJ>Fem(Z6Xe38Cd=?Ryf(C2|9e*XnaH`^&FSTvfH~<6rqS>HNJne$>gnt*NQY zDPB>%mN#nUs^?bx4Sw2p*%@kC7@9a4ScDlk)EESO7!+nOI2bTCBrq`?9F?GckVIrN z^ySD&Tif)tzB|8>`CIJOYo|AN=hxk@^$5Lsq4vPvxaj|nS}S?q_nFRH zBNex5)#JP72j}&EbzggBZDIDFUw`KADtdY8R@!&Z{}C$~Y+gL6j<@^$CAeJtms`c0 qv-gjmy_x?0$1zqC3Jajp-|zK(t{s@asL*jONTa8#pUXO@geCwC>D9ad literal 6441 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 O0P4z`*dj$M|NjC0Ub^4_ diff --git a/res/drawable-xhdpi/folder_public.png b/res/drawable-xhdpi/folder_public.png index 49e849d598c536710eb0e56329e7a72edbe929aa..4e35b7a147a6d711ca84a3f195ea0a31990c84bf 100644 GIT binary patch literal 5369 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 literal 10439 zcmcI~g;!M1`~TgAg{8Yi7Ni>i0R?tJN(2E3K|mUjkS>W`8flOQ36YeN?rxC~kuK>j z>1Fxu`|~&ae&^0TbI+VJ&olS+)XX!_N6iuAsnELMp$#Z9TVF&Tuo~bM1FX7Pr{gud|M^{_;biUR-K&@CCEiZnycW&UqYv&M_m~p1l8H{IinJ6=FsFwG*H`IP z92~YbO{sFlDL?*9>fI0^v34wvLUndd)0?Z=3*#}3;?Qg8dL(_*$=@d3%*4QoOMSk% zRk$4{=_H)Tx~FJ8yO?)AtiF)l+#?~!mHYqJ;yGX5kJ-+fJ0O&9qfqFC=HZ$WEO<8$=Vw^dSIWI4`9DIT0e_-b3O^7w<9mlbO<@2%FXo@`(|AC~lPS z0;zceH$aJ*f9=a2K+#8Lgv{CjCY{BILnAP1fPUUrtt|%4W&>+MY zHd@A2>QTboDTfxN#?5svE-bP&^7_q5Hs`ygF7_5%n@88)*18o!`AkIS_(iM5g2}VT zES!!2j(7QkQ^XyzP0tl%jR7(&ot1n;M4S^Pt{fo>27L+O%Ef_U&_HTHE>XDVQFfMy z2%0>cWQF$kj}^!m0Y!*w@m`{ANAY992azO-$P63I&_*H2w1nYCT>}Oue19Ynq9W(-~ ziRTT28srM^>4{8#J81%x<_tE_zySfO)dRUV#;Au6od+SX6WRy#6rT7ewjgrcc$Rxy zbI!IP{qluu(YG&XWD56092Z+$nurwNo;{O?k^%Q*eI?CLwEMqHNPKXrKHD;l+IRkH zR`Y9w?CnR0D(p=YQip&HK+BpeP&7&csWjzYsc^I{iIdLa6{SNN8nJwYYyF}{h4_lq z)TD0wE-fl4Avg<3G+j=A7;GO~`x4k5ergX?@?Mc$NS}01YFm%AR(u(P%O!A&3d<4W zykeW3^K(C}z}z5xWVc6UfOGvcLcJ&rjMLNx3x9UC*Ng_=E#@OT8dpU6$V)njM4+q> z_siM#C83@eCo=W1560N7nZW##_2aNMI-d%sNCl&*Yb+yjRh{xnk4jfJwqZd35G;(Vo#rWfE!?}*X@d~WL&VQI)pMr`8^?<1w+1QFw z3IG>hM^R1@LW9p4K7WCc{?i{BY=06(gLrIQ|K3Y(qDGbi&Pj(VDf-6_Wg~-*;IEkg zrkOl5mB2qjgzhyjFW)L@D5`Xz=zeOn3b{i07(EW1v=koftud%5Vm?Dy3T7?{$dP+H zfl?otVsL=B{5OOMt>306YaELCU$b!I$#kMQe!%HB`xd8@v;e;c@(BrKyujFp`+);N zM5da6(L@y`?r$C-+U~Ky({EQ$HVr`(YrgD{1S0ZD9zc2T~4!sri(c7{oHaoz!e1Fd+=Mq8VpBB^i?_ien&iPSr_+C;|$WMJhcPU>Jx zpE&)-8a)k)?-X!*{S|(1ES6B%`aPgRiCYW=IxRq!)r6MPORRb!WB8z_xkVWE)NKRR zH86Rw3{HoPCUeY+^y!+$^PsF{Jpp%&{@UWAV39&TAZ0~ zWTiS56Gat9+G8XiX4H7eTyBIWWof^`EBI*~%wgxKygSXLItr8;3$IQ;-0yF{zQ;`0)_n^{6ELP5KG((I4;pj-&Nx=caXah#z8hT0b@M9Q;%y3& zySPU*({+I#!TQjIz-A6ICMJ;HFqOdGAx>J&4Qm8Klsz}|^+#Dq>3XiRWIjN{E^Z;N z$>oCO+@`z`@@!moyi%9kwU?j)w!!{b8g5~Ct8nm_)2@22+g=kyi~`|Ki)Z^OBd1z+ zWcu}A{pY61&W01If<2=Q^;V$i2$0iL0yb?r6l`UbqJ-aK)TbgPl*n|9IPlb{2`EXJ zFYA9vl~xL6XUQ=g#z>f4-vm-)aQjIyG!o^_IO=72ksV-R1A?M$QRkUKsJ#iOsD%Gv z4WI%cMy?=l>*30h(}y4C1hCtap}i1#2`f(99Y(BPK%^MugvWwhxnh@xy(0_~)DQ-Hkdp)rs$8V+Uz&1i5;#r;C-KWseH3F*64OC%4}&Yd z-z%+kWn&A`KDE@S_1(k1nLHD-Q6FSa?d301uFOjpxZa|(P>J0x(JPStSKLP)O_|5@ z5D<-G(x{FdU)(r>HmW&_3?$0^8F=r#(PC9SVEYpZV#rEkEFxTDWc!)5`{O-oZ{$vjy_0zxT*9i>+FQ&;_rNM9u{qzxzM(M z`|s3JW$T5F0iraK^7ilAGy`=+IZ9uu-iyO5atuyGs!9&Qi(bc@(6H;}#S-!5+_R{7HkzxIshjxOCJ!z-o4ih9>+dKUFQ=*)rwAi5a(1}zT^jniX zuehTIR_PT2w?2OxTX+7h?jqXK?4>rT1*(9)TF6zPSq|}8iemdP-hG0cp%At#ygn4- zc>L%2=+lo)^(7i7Uf(eRT*BTXe@o$0JJ+0ZH@q%2P68;gK-6{Ovdcjz=th1;PCGy# z4D^iFb)(;5KQO}e27wEW3>(%a5F(0iL*;Yu6`hCA2yu5@L zt<`Z1KQ%vTYkx5y0h8KlZas{HR)Is~kN#t7#Ij@PbC{R<-NtI9VzVo470Y+(H_g5) zEglhq!HE9%q*;d?iA$el?37^!R9|>xxp#~+C5}A;w5D>o{y zmS5f*$F97>@x8$G#fYkPlvQV^_Cpj1{6s1Z=)MqkK=ZhH&g1nA=; zmtrKCYejZKpDEr9M}GsYJ8^%@1A-XW0(l0#@6viTVGO{`%1*E2@i|tS&aS%IQ;~*` z;1ooc>v^YCV3wA1vaS6cH#d?zPBost#T_5KBZIG9z5(}xh3o7yRvCt`!pSmJRfD<`7(nwWGB~_&C#jT$44uVeA`YP`uEk+>c8eJ zNqwvIw!e?qlaNnPV5c7_121QC{lueQ1FwtnlPj9q^bMIb2 z4Icn$yukY?&{t+$_AAfmPbQej@#)KDuY?)>w8LqM9_ft0; zY231@p?tX%O#}z-E!zCCX zMVc1+beXJF^aYB0(xRI=4StUc)2^=1zflL22@#WGPhSiFtVyI`mwOsO3cbL0vcKy; zuzC5cYscq)ZzAN!aJE6qCh~ByT{*{YE44fAX?AWwE`!8kok*UxWXlE4-W&%1)!}$V z^L>PO($YyfVK-RCk0f(DMXK7j0Wh+949RhR|L#{D`pMC!3xA+btbgCDrF?oHW}d@^-HgeWTMiDOyk5?I>42!vr^bSb-HqM718G7pwL+L{?XhuZ=!^D$sJ6KAILi zN=~Btd0Ll1V;v_xlA1sS$*DdTx8^77Q_-)k@pJ9*PWzVc`Mxi>VaBm8s14%68tO^BN_%5byzZ)Le&*l8&hD?L#^kp$3Ag?E9EV|=xm_YxA3k6QYl#=;f|R^ z6V=Ho2@Vc{L`Kqn^YJ;uZ=9K|=NtM?^j#!_FGTmQqVG*#dGK454LTQ$m>lR|+GV^x zZsqciNWb3r;Iad!`!hLt6ZJl6aMgyqDx-_gh~*fhq52+_|fl>AUUr z)qwpE9d04uh0ie~^@p=GnNt54I7dyAPb4fjM->bdX{cuw*$Vz!DP}r$rNWMX$Wv8c zMVRgymb3i&KmZWrQ&n2;9KfxtHEz9(&P#c>^3$_(^-TZ%=HANfR4e zOZCg>&l9_=GI|+jMp@r|&lnmx&wg*C-G=bKcnfVq(EfyIjDyaU#7Yc{bYyzy#@{S$ zwy#lyLAH+~10|~f9fRzksC+3hRNbzjqbJvh|83*8<8`@l?d|>Oj7Ru!((kf0R*Re) zcEj!<5BfEn(WKe8*Qo99O6r-(jYn{dXVH6m!H=HZI^@y10jcRe5OR`Gyl8N$+(fWq!*L zJGG0nV$}lyl%`30DO1MU@UO3|)$l*3j(13r6*^#9L}I+`;M>fGKt*M%<3hMrYMo`- ztsM>c^U`OLTXlz3=&2OWS+xG$Wp&Xzd!Ay?9#uU`?Erk)Z{G9}O*T1k@7}=W%s^kg zrCAD6~F@tnl-YB^82J~tTV!cq_sxnXj?A!=XXnZTK8Ai83UXFFQTcvi%9dO*VDI3?!xx@45;=XmBSb;6?e{@9CVi34#2{qf z;{3u*s%djwcaq+_+tLWL5xg%MHgn8}7JrIaFqsNJi@jz4bDFaC#KL1C>RnS*u9}v; z2JVp9XQHWW_E!l%lNDZ)&*Ej=vY;m_@Ce}KLS_zTcysGr#TCriH$~?Rb+If5hvE*+ zEx+Jjb)EXD;EL)K&<~z3?dO-l+%95Vf*m=bjSX$YA|B>ZN}$lKt9r*ALQeubF{@)T$Usw#`fa~rM+PgOrfGb}a zRru9(zSE>Me?G0DIU)IFjjCUNkWfMm_vM4!%qTFi2MFet762(cF&*q`UrpMiAWbhk zIH*tE68#(cESZ39Sn{lwYiqm3)Cb9>sN5oZis3L5;S6rCdxzU9xed+DB{pH7&E}#* ztg4<&b6D`7H8}D_pPKCV+*C-jM4lT;x=lSE={M)%ndPl0Rr1@VpCf(nmbm%utiHhF z#M-c-V(R?6pH)(U1K&6|x|XEjYkL8iTPA(*cF9#^jTl`~X$_-eyRXphZ95C@UkeWsOO{M8A4F3*0Vu)wS8> zfPK;D7`Z&u`03qYcUtI=x3M#_*27;lZf}EUBKeWp5gFKHU?(fChDWzIJEaZ@Yw$f1 z92aM7%I2LKzTn@o3tN0yul1C0TpR}Y33hf`o$=H|MszhYsS@1%4 z^|x(kYE?1&8?RdRGRt4hEzW(cUcZ(aDi>~^)B*HwOJ*)Di`5_p`#T*YuPnM8!=As5 zk)P0+uoyP-Zsr4h)uJl2*hz3tp88rsNa}|!&$AGZPD9)_Mw6%@Z5uv)fyD>_!nd7` z+^t$DyOj3sm@;_102;{Qc_^4EY$7xD$U$%?UHS3jDT-B2v&oG+Q>j*cXn@Aj2Znge zo4NjzDe?3dXB_r10C5SSC7e0cf(WsiUUKuR3j#zq>Mk81uf!8=29ASnH;()xeKtG4 zkdRHkN3I2L>tBpbB*%NRq8|8QqE7oWCt2=EnK7pAc_;y<>tK3Ls8c+g2q9cR|BEVR zIHJSUQNp9``nkeWzjB-N=Y?%CKR-)IZ47*z5c%M;!QgH%eBW^?i@Is}~16pGN-z~zl0=(H6JjP<{>QwVA;uVdQTuR{O)bqJ3b zO24j|v;QnivU}g3vF$|l$5PgGJyDqF6QNlx1MNdqz1&|tMoLi=D2BH&fvB_>kUyh1 zV>%q(la#B&=4Z*==t*OF(?cd9R;RNnJM|AOZ}^ukC6#JNYg*t~i{o$HrSL`Hm>6O_ z)`E-mTd$OlE{FJ$K9-{%uYy^C0{%Bt&lQz^bUO^T&-ksXP524jW5;#3qV70q+{zx^ z7QzHRFN|%tXyG7;JoF-8wdPmz$sYe?Z9X!4n2~Y2I{V%BG!{>wVbFS%tmlMI?Tr@| zflIRRYhYf^KzNfDn0WhuMonK2DzqlcN=dx@!`QL0XrF^0v)G*~iS+Kfu<9F{!{(MSY&u}zI6MsBhU28LzY*=-l5`4GwD?>|9S6v*o$Cyg{(0sUc`>R+3GbE=T zNG)JDKp91Z@xWql`-WGJ2zRw#F7k3^_= z03Y4)!Z^->80Ry6-?!G*$RUqM_MQJ|cJYIeKZEWV+FW+|<+&~nU34!&rk&U7N7q9t z;mm!28f0wQny6soH)PBZNG~DgB{g?;|AL6_&huIF8HcK z4Kv&wMqwlP--fd8A8l0H;}kU{ofv9HMvNA+61C|_je1uy0#V_&Q-8NWT|`7qfakPw znIbq)5*)%*m*a3PKXur>HRy_W@V#-geZqakkx>*>{l_<34JjcFJf}k(TAz020n!?E7hyTJPiJHtHjJa{TDkoV^Wm z*fSx%+g!aTR8Fr1-Xil{7g#(oK88)&kcuoH)B5C zcr*&4b=^tyzi-34UKuEUIZTF_vOeg`^(ZL5V#3p*@gqjLzHt*o-6Q=wo9`O)=IGsz z_fKyEb-kO!#)l-Wynz<4zT}YcvmId(}JEqF(`0S3QF?nmGM<9SrUcBi`rTu9_jQAL= zv!w*0j}U;4EiJse$z)QhGh6Fn@NV3&hqkwuQ+#8=h?MLaaxbP7!hp^610P+j6A5B& zWfG3AvOpAf%LS)ReBE5sxHlsmyw;J6^zcKs`-;igQEc(%s6VvBoVU_U09Cp+3Jwpw z*8MEi#Zan;Lp`gIV>9h<^*NcTU=962V}I^rg=gz_`3!ceka6E14->i(_<2BAg}1|& z8g}I~Lmu{{7?OjF6S2s;^2gXWpcS6Z_GCxg)w{JHJ`-ahh>tE|GOXOmWyve43mC>2 zrGtvw%s)sNx@*!7$ADG7-a7{Xizrtob@@^RJssG{NhP6Be~l%xxNdajRebaDvG$GU z-=ev3Op{Wn*D{aJpGR?fWMo&d0(h#|r9+*WBe)7xU;tnZW_$MC!<;7qSB*EAZa#AD zEa|B>jnBbTcHAX$8mEN~h2#&IjK4B)g1aLvpsyFF>lK3EGL z~v zVv0AXylBp<2a>@m*AO~hiza8etamKC(_moJAqRmn)eU3pPbP&|1qb>Zp0d{W#^ zFJtxI40@Mb_%2~o_y7~a$`t36N;%I=gmM+n+wOoA;4t>rJ(<0m?sv?q^`n)3Q^B|C z%1P8^qB|8#LnecR^b;NQ_iw!$P6&X$9Ymmp>2OG}nYk&vN`5juQ@+6TIZn9~FZ;u# zrO5!HMems;t2nNU_nyX=-b*OR8EeZ1aW@%PtpQ285e_f;tW(g|_&DVgZSl9~rz8SdJMF+j%;_&Jkjy&$jb zSZo;A-dG(Nnd-b(0BLqZ!vc*zr?y?+&`S+A^_lcp_IA!Lchf8Fsj#FB z1>$!2o(clQ_;e^|U5X|%#7|%7Gv1aHQ!9*Z)MxhxZBPCcuhv~R37Xxp+zHucDCc5f zPw!V(vT~5|T~8WIj)HodTNUHd=UKPHMw9KYnYnbG42`*5b4egEvF z&p1y*hoC16K4B{({q4UhAc^#130^L*nOa&1z#NcfUfI7LDbFn_CwN{j9nFi?zqyem z9gnCGxf!Q$Y{p~@hiXF*rIW*$)AXHYm9Dg_9$%JsAmzu>bl^Ifbdc)nNeN#PfM~`P z?;>3^`Hmh~O@AoKg-S}(PE|8-#usFM0`zYDUiKxttHRHcgFw)P9T4Gd@5Z*H7*qZo z9gtThFJM+g&L7br?_`kABKl`RTXWM$cPW@7!~FS&kKi$&fDpxC0al`et#a3%(xZm{ zO$Mau+By~I?DoZ`IX@`>3=cXa-Dk$UfBuvxx$mbxNwUh?Gs=BfPRU9 zhOUkFsXx3b*L>t?AeC%?tx?1*V(oQ}CK1p-Uyjw%UD7$aXi9vyggoH35!$e_5qPM|27K&$S53KKKXkjG@E+`L$2*;{GvrgLlyx1$?byY)?<}XaZ`b~XP=a4SsLq>DOUqc9Qd^$h7~r5BzTrmobg_1G13{A? zOtrusw%+c{vnh@p4Uli+-aCA5_ipaVq>O;2T_HT)EjILXG2^1N7Hf&#IR0%gpY{QB zU}N-?tNJDz_eu`fkMlb=GW-LM22>LnNYJ4rzX^nN`Y81D2c>^we|~m@UwJNb-83R9 z>-k%X2DCs|t8qAPxg5cToVF!&1m@jxl=LcR-XyH#n)8zB^_cJnHpV`+;QE$8_OAoQ zWk83f!M)F@hlci7O9@JzCLezTWE9Yg8YIF4Q1&UMy;fmijEvm7%$#g!~Pezi+sxQTPVs#B1Y?Hz?)kP{}azm%fZo?eC+w+Zf=u z@uQ1y*>)u(Py99ZS4Qma!wkCkLpmUpXQ~LsX~|b1{f1e>WRh>=T4X=i;;tm$RTMWJ zdv>OM`P8{fi%`--F+<{xMDa*RAg^SO63H@4mygDOQwKU}fShiR9=}b;@_&Au1!w(K zr*`cYVxmeYsRFRGHoTWX6=>Z5b;orO#(5eco!?2tu z43D_QDdfm!6cSpVx^1v!5W;eCaRI4qQ+d+!tU@k%^2YAf(?qTxIdaL>4~bJVb4rOi zwt50y`2FiM6g~8EvkYlJz=N`qP&|P_yY2^t%slvR<2dy$$cU4RSZyh8;K;JYIbREB z*&48N{<#|Mn8k`=)|ZHLQv>)(j(-olXF+n=(Vy0U zE`SuIALsV#BhfP6z7<-wQ6Lb8ckz$ynRO4jYR9E9eTVlGTGVLYGtL)(edj4trGq)* z_XOEB^i=Ak2gG6FznR(UD{(2S=s$Y)y-r|?6Q_e2IA8v?_9sE{0O_F1Ps2!_K{ShP zAQ)R4BwP;+mtt#qNC7U8!fIExvpjjTJU0gqDz|Qp9>EJihya1~vtWAF%QRNJxR#ln z+x-S$kZa&2TE<(K5=%hEq#(i1EB?#oTb{&#vR;W78@n#Vi;2;$e0O((W+ zs1S(KL-BPT7O)(Mr=qjOJ|H7N0e~x_57K1B0tNkl e(74$!a7uV^Z5uyt3by1Bc&7M5pmmtT}V`<;yx0|TqE zr;B4q#hkZy&vu8F${hcAe`l7NnX`1P$QI698Lr&|naY0|cb!lxcjB&&$$VnepIfca z;S{XAqPNfS!oKCMTRDun%p9$`mAvLmaY^@^-NR*i{Qk~+=l<@At3QywZ}#VBG4Bk5 zL4Lsl3VLT1_T}F%FUcz_srzbCe{90s-?huC-%oY-_y5IL^i`@M_wB+`=l=kb+e7D%^Th!z3)h1jjpRjT}!@xv*m7FtNnfRx4i!^flVRo3DMOVcVBVeRhRphrF4MT ze3fj(?udC`Zrz{F{Q3Nzk9UBkxR)}_x@2?dxZ)pImK}+!m;=0aE^p`k_wvBuYX0~0 zzXP?Onk3b2`AiH#Z*xD?b*hEN`m)TB-Y#6F&Vh|Uf!y7UC!+{MsQo8+icQ-yiYyDe7m_cIR*TtdU$8T+0TUW=* z(6-|ByZ_J5HfLdITc!Q|svidf&-J!jjEoHrSN*b`7sSG_h?9Xu zn1Mr$LBNMWVFrVP0b@e~6T?9khNj^laro+0K91q+!GpjI@cPrNr~CLA!`A%zxti<1 zZT)vv(YuP)edBnr>raSvz<@gR^Yi<85{qlva;ABnppJjO;ugCgk%4sd#y?aX9w)3?d yrMpU=rd&4RmVWLhn|=G*_4jznDUehF^Iyh0yIw2^c@r81;(NOKxvXAzhibVHqZr(f0a~Mkh(8n@iw&f-Ph><*C1_~te|}%+Rw;T4?V^#z%Iy= zyJVmT0N=Ec?pe#AL0V4d{o_9gEoP5LmipULGQOt3`q7fnx{~ZhsAw_sM@$ZU{M<6f zC9QVRB?DyF#)igdCZ3XqOwhBN=K3WmhAL%W7Gd)Eu&dnH!S z>1y#mc#_RiRVqr!l2~<@SdH${5;o@EmgD{~X-Sc7llq%2AhD{<9sKR+p~s5c+u8A! z66I7sN;o%2jJ#61IO2cV-1jso!6&+N3+Kr&(xn>vWJ=130hT47OtX(`@3s)xmSB{s zl$#i+#?;lc+nc+RvlKQh@X-Eg=iw(W4k;dQFWDXEiVW&rare6Qk|bv(lI7(eEWAiR zEc*!(D3hU+CY<>mL{8%xkLth=d%{k-WFshQ(7!uH0e}Sn4}hq`Li@Dvr@c?k%CS3F zMnn|3gT3~Gq>9_mpi336XHHp+v6wy8nB93?@4Fj1(Bppht|9LOecd;@ld0*!lMEY?5nvD=3j~s9KfVipnts4NC#H5wbce{*2&cUImJj505uM@z|g5) zT{=4!J-yDic=cX<*w%PlYqGtj+Gao^cdh%G>cY7Ok$m}; zTm9&a&J64Dwl){?nT74gF>^N(BLcZU`Ov8m(memzh7AN9lJ_8&fbR{FBS%@Ku27Zv zVI9YT7FpnYH{sQsz$p*@MSfZ>>Og;wW5NC_I3%OAs3n1(d@Z;0pwX$94{J0l-C+SF|QD4Q8TB z=Bw8@L_>di!J-`jK_gDYLs8*O#EZz~aBIThpO!~Qj)5~Z|x&zdc4C>puWZxr0M<<$`9;;o-P8ZXIgDe2cooDiini+xXqx%ZO!dtH+TW zvS;)-0dW;7<9#reMtDa`aKunlmrl|UQzu0@Y=o6&>Usu zT&+m@R9_RpH<)hZ8|Tq5CJkyzbaoTt!)o?omiD&oBX;^5{@O(T{j;4Q$IJ9M3R*lX zV^O!el^3~J)380?;IX%LVD^1+2?F+?x1dF|v$a;} zPF?43Cf(3A{~8QMohEHhZ}$p&(!=4+kO^b(MAl4#rK<7m1ctCf7!Ns$L#@oT z>r#At)!o}K9~79~;AEHIoAD}E7*(yj5z0o9)d@UVhjpx7UU$t*xGm*<1e}Mn?1mZ= z;xknogTO0rd+OIL*>xU#dg197JQ1QS0ZjBP`F!1{!CW_!n9_P{Qmc49D+H)0ak$xi z(_Z(pWs3m(lI01l$=H-sC`~zvu^8Hrb4$D5Y>>fZIQBW=`Q9^GiG^uM?JOpR1#VJ1 z$0N@TUstdY3Rr`(Wl&$v&CMH%;~!)27wzAf((~4i2M4?z{@Wra(7vv51T1uv;3jDT zL#kBzSg|udBJnV|+t%yv-$(Cl)jN_95-Lh*Tj2rBM5&xge}b|Rk9>30rV>?F9KR~% zPp~_3H@-`g4ex6MU;FbjIb%w^5hY4-cyJp$WBIOJ@5O%qr z!^v1CCXjv=YSXYoW2L@8N~LM78wz?HbsI^0NcIG%`lj@iM>kE+%K`&ybV}iu;-=u! z$4P@Uz#FT^1HAuWDN65_1b@kh<1X`xBW#bHf(5@qh-@*Gxw4V#WTu5S+@3a} zt($L+>urB0b1&nI+tIROqizBph6xOuLCw59*#2>;3#Y#VRJ{E5Y8I{dnii7US6*eb zokoEjwBRSCA+4rp&IJd>)5emD`m8_j1A)6QF9g)`A%MIssFvRB^^&GdIfWkD2zqJ)9y4h%mbA?E(3h zkE`xjqC{nZcyE0H8b*PI^Y)9jC)`KQJEmq_D?vXVI` zRZ>ycK@>63gc1N4H zZ2u)Lm3|Xl4A~D!*`DI&zQLlkgfd*90U+A0mZ>YP7m8D+I9%N~ zKiQoywAQdbf?>5tx{yYGO=sUXx#s}OX5Flm=i3jxQ~&5}zsY1H>u_>h$NzbV0> zoz_e;$YCCq`DQ&2+%non2PJX6mM*Gt1!x=INdPt!mPNC^4n-^Xo#cXk2_n1?%gy

r#JI!)*w#PyoWo;8k5;Uti%m@MObZpz!czaMp=qO9j+GpBJ`NH8h z=00&Gh!Sxg9|!U`Dr>9LtpIM&-wtmd3WjXc>VGkVvfTFTKLr2G^%c8Zfy&Zpn8bsb zO`do-e8xDd^aoTD(US1-$&=|GR=B7#0CjqwHw#VpdCOjdH51Y8EFs)}V(b#YsmE7) zjJzBfi82RpxCTtids$pi`hhDGQp2IlO&`KJJ5X69T;~gHIJ(Q<;E|yS5geF3E3|J; z7m*S&p;8Av3#KmOpL&?-LV&rNq4&OSvOTE%&N@oXaNjkp_;CT1Cm(*yU_}l5L=Jf3 zUMieG2i(Jo-LV7?W?n!F0R{X4A#+d@Zdi1X@47u?I25C7nsWzOR38L$2!zOC7GlQh zZKHhvQj73PXh7x9o+~Ia@E=*|6J-|w#Ay-uj|o!B zqwx=FALJ+Nul+%e5pelu2f9}$9Mc?SdX|$7O1tzm?$|s4$@~aEVTVyZ!%sv=(3Y?2 z3a-Z*ywDV+bW6apI&I8DSTig_sWo9R)fz0_z$+^Xv1zj?|CQx-fizd@W5K6msItVa9S8IZiD|7`x8rK)9 zC7+bv_bE+nxI+Z*HrCgqr}!95isA>w2P)sAkB0=PLHLH(RW(&M#<=0M*4C8Smg_z6 zPg#^#ZQsG$%+G+qGN@JGkLC?kJJfClkqd8{`i(Mm-W|Y)W1*qpNVB@-zgS4kn_tXD z9JEG3&7VE}nS`%$E?`c8XsK-3~a91znDZ?L_gFJmxe% zGElhAgGgV0#4L>hGsz%C2UcpU93q3fHz*Td@Qjo8C^m3`xwcz{7Z3}RsxtD!p#lzw z$DhUY@A%+*p+d?oGztFu>JDAkxW*~=`B?r+JP!hhtvqjCh+}d9` z#gJryYzc)Jgf~i+IAolW6pI{;=HP~t;x5F;7Z!b}IcL$PYo&L#-Spn`&vYo+i&5N; ze?9%IKHKjIRsY%>M#pewdAjD9NL7ZhL7X=VPyzHs71?(w!AKJxVkH+D)5ClxJ*9^D zU~2$-{&j&atl8i?qy^v-&2;4^9HH<+$LR?)5L|>R?7ce9+<3_kSK!iZE>?2B@{-!u z3A+4a&LBd4KCFG{B5mp{q14yMedy0yCNZ0Y>-~z5?EH&+6=>l-{V0PVHs_J|BV5JI ze(`AY3fqTWZ!WkMjpWr%AcxJ~rxyEgJ!f>xW0j>!ix2(~SXL87T6 zYM#X1GG1cMcoUA{`8Lh({>UGMck$Wl_M!4}%`^_UiZa?RSMgKRmiASdOKbiGd#r z1YW1-3d|3pc9cSv=ED3pnJRjbm-$edMm)<>Xp(~AL*$I;_()wt6h@T|8#N*hW`+Mt z2r0iodHy?1Y4$Wc5bmp1Q75Zc5mT|bhF~(=XJ~g^HZdtJ>XA>?QkKxC-j@Uiz0@nqmq}A zi-Ga|N5BnE(kuR+Q1H-2xYZ??Zzz^sx!I}c*BcRV?c;nF8>|q6Ut;-m0mAe-V;@}b zT=lue3JokU$>`-LzAfK4%lB(_BZ2%nQlxjXh||`?*5gai{7>5smxFfi%9l^u*4=Yg zA5IiWHASZNBg_ezI3|_44yRFna(4TUfZnj?XSNrzk zqqsXu)cqqs<rTD5sY%|NgRJaODR%T;?O16Z1ZtqX%_+Qx=fscEMm#R?i}cKXX1E zQKm5Ku;$%o-gb|i<)rthTw}ron(?09Tm=p(8^^-z*HJQ;W`SJ7^RhJ4WF7?X>$p+_ z#s%GTib;CzratD6eYB<}a;f@Jad(TH#iM>?*tvP;IkMmvIe1-!zx_xOp1U&T{FQ)I z<1rmE9E7DSQ(*~Y!cF!ZrY^sfawq4`$la~6DhC*;EWxkyML+B@#73JA6|Q%3BY%TF zUv9nV$q!$fn593`vv3*RvX#2dUj9`@s?V^v)r_&Z&?L8eOkj;ZBD0LoXn*RY+Ct(y zyAuLrC9HUxS{CUa+SwR;d69poOLx0->ozBwY?cznd~^yWA#dH^fwzja_O?6A4;cuV zd%N3DWZ(U=`;+Y2AfmnH7?^A9P9V;AM_jF-H*A}DX`F8{ zznjnYKaq~R-dee5RLP|k`rAq4(~JgVfZ@2)7#vz9O0nx)>uxxKu;SGtr2RItT=zL4 zrq$H0WPip*Vs$Z0i;-CqIXW^{^=aM9j8Jjr$$vso(SF|RZR(ZkwUFKYziiyw+o{rK zbl(rQ5t79YVz-JC2o)&mn-;rZczEXPem;l>P3n&&@2n>qh@AY(#R3hY3lARqG5Rzf zfQ3b9>!3te#0J`PL1@}PPd0gWwYa;?|(CV+Mxg*c$iJ?-pV1xt65)ZuPF81 zxtF=c_~3eZ$|45M`72%j@|Te{Mj#6%ah}7QZR8hsg(8FI5BcPx@FxWhK|pW{@{5Hc zZaN-J{gu46FBmWbVJ1jTrZxbE`GHl-|1pEAAx1xx&>Smx#G>}kzr?GN-g(_O+QjJp E0lZ=(%>V!Z diff --git a/res/drawable-xhdpi/shared_with_me_folder.png b/res/drawable-xhdpi/shared_with_me_folder.png index c5af0d7b13a7968fc86331ffd28b6f21c089cb7c..1e6fb30122e52be8cd0ddd04ade8f4028e06837a 100644 GIT binary patch literal 4905 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 literal 9723 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 Fe*jFpzYqWb diff --git a/res/drawable-xxhdpi/file.png b/res/drawable-xxhdpi/file.png index ddc9d6b9210da4dfb17eca217194c428b8748481..be54c422c87ee59d6885aece5bdfe7816abfcffa 100644 GIT binary patch literal 2977 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 literal 7601 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 I)a}Cl4`*Yh_y7O^ diff --git a/res/drawable-xxhdpi/file_image.png b/res/drawable-xxhdpi/file_image.png index 239d4a79807479c3746cb2bc47e8dd2f5adea4e0..671b6bf107897e598caebbbce07eff0aba411fad 100644 GIT binary patch literal 4765 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 MSreTSE$p5D0<3L%>i_@% diff --git a/res/drawable-xxhdpi/file_movie.png b/res/drawable-xxhdpi/file_movie.png index f60eb7147ed4769c034735eebff096149e5c3b9c..28acf0e5aea92a23fbd5745908e77dd40f2c07bd 100644 GIT binary patch literal 2400 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

s>w4Nr0L=wfdyOR7dWakJ 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 nm>5lC_X5_G5diI=isHKrmy-DX&doha|-;E diff --git a/res/drawable-xxhdpi/file_pdf.png b/res/drawable-xxhdpi/file_pdf.png index d267059a41f5b0e588c5873c05c0f4a4cfa6e248..b3d9274fcedcac992d38288dd875a7bdf5ac6995 100644 GIT binary patch literal 12156 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 Z^E3HcPhR&-ft&J>vb?%nxs3VS{{s@t+2#NM literal 35119 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 X1dQ>H@EF-d0DQh)L7sQqncV*X9zey* diff --git a/res/drawable-xxhdpi/file_ppt.png b/res/drawable-xxhdpi/file_ppt.png index 29235684d70963faabef4d05777803faee547375..569feeca50bb10ce9f05e8767ae733a715adee59 100644 GIT binary patch literal 1931 zcmeAS@N?(olHy`uVBq!ia0y~yU~B+k4mP03lH*(V11XkbC(jTLAgJL;=>YOM3p^r= z85n)^L71^&-_#1Apk#?_L`iUdT1k0gQ7S`udAVL@UUqSEVnM22eo^}DcQ#TC4D1}9 zE{-7;bKc(Bcse{(=J?0=KQm24G{V9}a{n<42AY_->Y8~p@^SOH7{pVkQvD>BZ%GYbJUJY~xHGs#J zX@*rF@79*zt^EGz>b30rP}{iB?$kNV2@Afi+I44jUDn=x_oCiz-pxOM&yF+9y!;2A zChNb?yxJeW`nP*NbB;oG=+}?GZrzgpzUSM|tEn;x84P;zxBsVQzkTr{wt;u`)%?p> z;%^oHxbpq+a`v4yHUD3)y;Z&V8-v-z*K2*Nx5?W4eS6}fBIAxv54HQRCH-2sYFpn8 z<{K?}eplz+EPU~#d@s$_+aI#s-$sKKjr>gPTJ6K){_Ng|0=63y zZmruX&ccwOob~m=9bqPh4T4{P*3ZynV358nTg=bF;Gn_Cz@f^(u#km8VG097ix5LY z0270N7XyP6=a7=jjs3=$cm135{B5c88Bdfv{n5DZjqx46{9)j=p%oE>(X}hqp0+#i zc306Khxl)j3}(v1H&rMzZ7@qt}JJlbqw7&Y= zytAAk%)R>mKIQpq4#+x$-d(l-epcvnw;aZtw6(A9to?WWw(_<%mW1aIjj#XuwPklz ztkg#K4VqtfUAeyet~LMson}dSH`)_!_s_A5zx-v1Ib*~BFUh`_CxZm+vkG2JKLBFY zZ;r2DR8_w`hKD&M^zMp#_jg`h&tLl^Jap^ChRN) zb;GY^VWk_xfA73rQnvT%^zU*urHMD&nW#~_Ffb?_w_kU7z0%~0@?RhWJzf1=);T3K F0RTW)DFgrj literal 11595 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 Pv)*Gx4TVxU)8PLDe7au+ diff --git a/res/drawable-xxhdpi/file_sound.png b/res/drawable-xxhdpi/file_sound.png index b364c3bbccd9cd6b1f70c549587e456dbe195bb5..63b0d4924e40d179e40c96a5ac9d4d9592a66976 100644 GIT binary patch literal 7332 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 literal 14368 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 literal 3743 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 diff --git a/res/drawable-xxhdpi/file_zip.png b/res/drawable-xxhdpi/file_zip.png index 2ce35ba6215da84d0312f54723b95e9ae81c4884..2535d7cb4300aa1ac1231abc6984557489b2a4bc 100644 GIT binary patch literal 2115 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 Ra~bCIRUmYv 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 diff --git a/res/drawable-xxhdpi/ic_menu_archive.png b/res/drawable-xxhdpi/ic_menu_archive.png index 93ee2adfd469a6efd24f565327b041f2993fdf8a..81e9f7f8bdf7d36f11405bef4f65b84ac5b177d1 100644 GIT binary patch literal 2304 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�Ebfh?V1XU7HrktU#)KN{$o+xGOpi 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 F{|D3M`FQ{U From 1e8c83b22e5a275d4ff7359ffc4db45703d2a6aa Mon Sep 17 00:00:00 2001 From: "David A. Velasco" Date: Tue, 1 Sep 2015 18:15:22 +0200 Subject: [PATCH 067/133] Updated reference to library after upate copy request implementation --- owncloud-android-library | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/owncloud-android-library b/owncloud-android-library index 5ac5c80809..ef07416c6a 160000 --- a/owncloud-android-library +++ b/owncloud-android-library @@ -1 +1 @@ -Subproject commit 5ac5c808099e90b43c1c3343135e77bf07030e90 +Subproject commit ef07416c6a97d9f87c3952875b44f4d33c528253 From f70817f5fb489f8301d2919d02a90ca428bc366e Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Tue, 1 Sep 2015 13:02:18 -0400 Subject: [PATCH 068/133] [tx-robot] updated from transifex --- res/values-ro/strings.xml | 1 + res/values-tr/strings.xml | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index 8be2ea0670..d04e0b51a4 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -313,6 +313,7 @@ partajat cu tine %1$s a partajat fișierul \"%2$s\" cu tine + „%1$s” a fost partajat cu dumneavoastră Reîmprospătează conexiunea Adresa server-ului Memorie insuficientă diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index a9879619cc..a4e4629bd3 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -202,6 +202,8 @@ Gerçekten %1$s ve içeriğini kaldırmak istediğinizden emin misiniz? Sadece yerel Sadece yerel + Sunucudan + Uzak ve yerel Kaldırma başarılı Kaldırma başarısız Yeni bir isim girin @@ -253,7 +255,11 @@ Fotoğrafları sadece kablosuzda (WiFi) yükle Videoları sadece kablosuzda (WiFi) yükle /AnındaYükle + Dosya çakışması + Hangi dosyaları saklamak istiyorsunuz? Her ikisini de saklamayı seçerseniz yerel dosyanın adına bir sayı eklenecek. İkisini de koru + yerel sürüm + sunucu sürümü Resim önizleme Bu resim gösterilemiyor %1$s, %2$s yerel klasörüne kopyalanamadı @@ -308,6 +314,7 @@ sizinle paylaştı %1$s, sizinle \"%2$s\" paylaşımını yaptı + \"%1$s\" sizinle paylaşıldı Bağlantıyı yenile Sunucu adresi Yeterli hafıza yok From 2b001a8bf288aac751418f1d4d3418bd8d3e4d5d Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Wed, 2 Sep 2015 07:06:14 -0400 Subject: [PATCH 069/133] [tx-robot] updated from transifex --- res/values-zh-rCN/strings.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index fc58f9534d..f29976dab8 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -202,6 +202,8 @@ 您确定要删除 %1$s 及其内容吗? 仅本地 仅本地 + 来自服务器 + 远程 & 本地 成功删除 无法完成删除 请输出新的名字 @@ -256,6 +258,8 @@ 文件冲突 您想要保留哪个文件?如果您同时选中了两个版本,本地的文件的文件名将被加上一个数字 保留两者 + 本地版本 + 服务器版本 图片预览 无法显示图片 无法复制 %1$s 到本地目录 %2$s From f70de1736ec1c624b9d39313a3c8216e7d23cc12 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Fri, 4 Sep 2015 01:13:40 -0400 Subject: [PATCH 070/133] [tx-robot] updated from transifex --- res/values-pl/strings.xml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index 869c16e915..d9c5320e05 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -21,8 +21,12 @@ Biggest - Smallest--> + Wszystkie pliki + Ustawienia + Logi + Zamknij Otwórz Ogólne Więcej @@ -66,6 +70,7 @@ Wysyłanie sekund temu Pusto. Wyślij coś! + Wczytywanie... Nie ma plików w tym folderze. Dotknij plik aby wyświetlić dodatkowe informacje Rozmiar: @@ -197,6 +202,7 @@ Czy naprawdę chcesz usunąć %1$s i jego zawartość? Tylko lokalnie Tylko lokalnie + Z serwera Usunięto Nie można usunąć Wprowadź nową nazwę @@ -247,7 +253,10 @@ Wysyłaj zdjęcia tylko przez WiFi Aktualizuj filmy tylko przez WiFi /InstantUpload + Konflikt pliku Zatrzymaj oba + lokalna wersja + wersja zdalna Podgląd Ten obrazek nie może zostać wyświetlony %1$s nie może zostać skopiowany do lokalnego folderu %2$s @@ -299,7 +308,14 @@ Bezpieczeństwo Katalog wysyłania dla wideo Pobieranie %1$s katalogu nie może zostać ukończone + udostępniony + z tobą Odśwież połączenie Adres Serwera Brak wystarczającej pamięci + Użytkownik + 1 folder + %1$d folderów + 1 plik + 1 plik , 1 folder From 8f461698833d4dc748300cb7ed512a9cc3e20736 Mon Sep 17 00:00:00 2001 From: masensio Date: Fri, 4 Sep 2015 11:03:31 +0200 Subject: [PATCH 071/133] Update library reference: Copy operation --- owncloud-android-library | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/owncloud-android-library b/owncloud-android-library index ef07416c6a..17bb724b42 160000 --- a/owncloud-android-library +++ b/owncloud-android-library @@ -1 +1 @@ -Subproject commit ef07416c6a97d9f87c3952875b44f4d33c528253 +Subproject commit 17bb724b4207142d631a5f1c70d1e80c447e2310 From 68ce6e62bf79c04265aa82c6f11c834222dd9bb2 Mon Sep 17 00:00:00 2001 From: "David A. Velasco" Date: Fri, 4 Sep 2015 15:01:25 +0200 Subject: [PATCH 072/133] Reverse filter for preview of text files: all text/ but those in black list --- src/com/owncloud/android/datamodel/OCFile.java | 8 ++++++++ .../android/ui/preview/PreviewTextFragment.java | 15 ++++++++------- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/com/owncloud/android/datamodel/OCFile.java b/src/com/owncloud/android/datamodel/OCFile.java index afd421d774..4baf1ea52d 100644 --- a/src/com/owncloud/android/datamodel/OCFile.java +++ b/src/com/owncloud/android/datamodel/OCFile.java @@ -548,6 +548,14 @@ public class OCFile implements Parcelable, Comparable { getMimeTypeFromName().startsWith("image/")); } + /** + * @return 'True' if the file is simple text (e.g. not application-dependent, like .doc or .docx) + */ + public boolean isText() { + return ((mMimeType != null && mMimeType.startsWith("text/")) || + getMimeTypeFromName().startsWith("text/")); + } + public String getMimeTypeFromName() { String extension = ""; int pos = mRemotePath.lastIndexOf('.'); diff --git a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java index 4f4a65a68f..bbf4525acc 100644 --- a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java @@ -391,13 +391,14 @@ public class PreviewTextFragment extends FileFragment { * @return 'True' if the file can be handled by the fragment. */ public static boolean canBePreviewed(OCFile file) { - final List supportedTypes = new LinkedList(); - supportedTypes.add("text/plain"); - supportedTypes.add("text/html"); - supportedTypes.add("text/css"); - supportedTypes.add("text/csv"); - - return (file != null && file.isDown() && supportedTypes.contains(file.getMimetype())); + final List unsupportedTypes = new LinkedList(); + unsupportedTypes.add("text/richtext"); + unsupportedTypes.add("text/vnd.abc"); + unsupportedTypes.add("text/vnd.fmi.flexstor"); + unsupportedTypes.add("text/vnd.rn-realtext"); + unsupportedTypes.add("text/vnd.wap.wml"); + unsupportedTypes.add("text/vnd.wap.wmlscript"); + return (file != null && file.isDown() && file.isText() && !unsupportedTypes.contains(file.getMimetype())); } /** From 11c0d77648c15cb0ffc0e59cc1bf15bfa53fe2c9 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Sat, 5 Sep 2015 01:13:44 -0400 Subject: [PATCH 073/133] [tx-robot] updated from transifex --- res/values-ar/strings.xml | 4 ---- res/values-az/strings.xml | 6 +----- res/values-bg-rBG/strings.xml | 5 +---- res/values-bn-rBD/strings.xml | 5 +---- res/values-bs/strings.xml | 1 - res/values-ca/strings.xml | 5 +---- res/values-cs-rCZ/strings.xml | 7 ++----- res/values-cy-rGB/strings.xml | 1 - res/values-da/strings.xml | 7 ++----- res/values-de-rAT/strings.xml | 1 - res/values-de-rDE/strings.xml | 5 +---- res/values-de/strings.xml | 7 ++----- res/values-el/strings.xml | 7 ++----- res/values-en-rGB/strings.xml | 7 ++----- res/values-eo/strings.xml | 4 +--- res/values-es-rAR/strings.xml | 6 +----- res/values-es-rMX/strings.xml | 2 -- res/values-es/strings.xml | 7 ++----- res/values-et-rEE/strings.xml | 7 ++----- res/values-eu/strings.xml | 7 ++----- res/values-fa/strings.xml | 2 -- res/values-fi-rFI/strings.xml | 5 +---- res/values-fr/strings.xml | 5 +---- res/values-gl/strings.xml | 7 ++----- res/values-he/strings.xml | 5 +---- res/values-hi/strings.xml | 1 - res/values-hr/strings.xml | 1 - res/values-hu-rHU/strings.xml | 3 --- res/values-ia/strings.xml | 1 - res/values-id/strings.xml | 6 +----- res/values-is/strings.xml | 1 - res/values-it/strings.xml | 7 ++----- res/values-ja-rJP/strings.xml | 7 ++----- res/values-ka-rGE/strings.xml | 2 -- res/values-km/strings.xml | 1 - res/values-kn/strings.xml | 1 - res/values-ko/strings.xml | 6 +----- res/values-lb/strings.xml | 6 +----- res/values-lt-rLT/strings.xml | 3 --- res/values-lv/strings.xml | 1 - res/values-mk/strings.xml | 6 +----- res/values-ms-rMY/strings.xml | 1 - res/values-nb-rNO/strings.xml | 7 ++----- res/values-nl/strings.xml | 7 ++----- res/values-nn-rNO/strings.xml | 1 - res/values-oc/strings.xml | 2 -- res/values-pa/strings.xml | 1 - res/values-pl/strings.xml | 5 +---- res/values-pt-rBR/strings.xml | 7 ++----- res/values-pt-rPT/strings.xml | 11 ++++++----- res/values-ro/strings.xml | 6 +----- res/values-ru/strings.xml | 7 ++----- res/values-sk-rSK/strings.xml | 7 ++----- res/values-sl/strings.xml | 5 +---- res/values-sq/strings.xml | 1 - res/values-sr-rSP/strings.xml | 2 -- res/values-sr/strings.xml | 6 +----- res/values-sv/strings.xml | 6 +----- res/values-ta-rIN/strings.xml | 1 - res/values-te/strings.xml | 1 - res/values-th-rTH/strings.xml | 6 +----- res/values-tr/strings.xml | 7 ++----- res/values-ug/strings.xml | 1 - res/values-uk/strings.xml | 5 +---- res/values-ur-rPK/strings.xml | 1 - res/values-vi/strings.xml | 1 - res/values-zh-rCN/strings.xml | 7 ++----- res/values-zh-rHK/strings.xml | 2 -- res/values-zh-rTW/strings.xml | 6 +----- 69 files changed, 64 insertions(+), 234 deletions(-) diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index be9f464af1..723a368659 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -243,10 +243,6 @@ بالمسؤول. حدث خطأ ما أثناء محاولة مشاركة هذا الملف أو المجلد حدث خطأ ما أثناء محاولة إلغاء مشاركة هذا الملف أو المجلد - أرسل - نسخ الرابط - تم النسخ للحافظة - خطأ حرج: لا يمكن تنفيذ العمليات حدث خطأ أثناء الإتصال مع الخادم. حدث خطأ أثناء إنتظار الخادم، لم يكن من الممكن القيام بالعملية حدث خطأ أثناء إنتظار الخادم، لم يكن من الممكن القيام بالعملية diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml index 4201692c9c..61c4d0013e 100644 --- a/res/values-az/strings.xml +++ b/res/values-az/strings.xml @@ -250,10 +250,6 @@ inzibatçınızla əlaqə saxlayasınız. Bu fayl və ya qovluğun yayımlanmasının dayandırılmasında səhv baş verdi Şifrəni daxil et Siz şifrəni daxil etməlisiniz - Göndər - linki nüsxələ - Mübadilə buferinə nüsxələndi - Kritik səhv: əməliyyat yerinə yetirilə bilinmir Serverlə əlaqəyə girdikdə səhv baş verdi. Serveri gözlədiyimiz müddətdə səhv baş verdi, əməliyyat bitə bilməz Serveri gözlədiyimiz müddətdə səhv baş verdi, əməliyyat bitə bilməz @@ -269,7 +265,6 @@ inzibatçınızla əlaqə saxlayasınız. Bu fayla serverdə artıq uzun müddətdir ki, çatmaq mümkün deyil Hesablar Hesab əlavə et - Təhlükəsiz qoşulma, təhlükəsiz olmayan istiqamətə yönlədirilmişdir Jurnallar Tarixçəni göndər Jurnalların ötürülməsi üçün proqram təminatı tapılmadı! @@ -285,6 +280,7 @@ inzibatçınızla əlaqə saxlayasınız. Fayl artıq mənsəb qovluğunda mövcuddur Fayl və ya qovluğun köçürülməsi müddətində səhv baş verdi bu faylı köçürtmək + Fayl artıq mənsəb qovluğunda mövcuddur Anında yükləmələr Təhlükəsizlik Video ünvanını yüklə diff --git a/res/values-bg-rBG/strings.xml b/res/values-bg-rBG/strings.xml index 03158dd99e..48dc54db60 100644 --- a/res/values-bg-rBG/strings.xml +++ b/res/values-bg-rBG/strings.xml @@ -265,10 +265,6 @@ Настъпи грешка при опита за премахване на споделянето на този файл или папка. Въведи Парола Вие трябва да въведете парола - Изпращане - Копиране на връзката - Копирана - Критична грешка: не може да изпълни операциите Настъпи грешка при свързването със сървъра. Настъпи грешка при свързването със сървъра, операцията не е изпълнена. Настъпи грешка при свързването със сървъра, операцията не е изпълнена. @@ -300,6 +296,7 @@ Файлът вече съществува в отдалечената папка. Настъпи грешка при опита за преместване на този файл или папка. за да преместиш този файл + Файлът вече съществува в отдалечената папка. Незабавно качване Сигурност Качване на видео път diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml index 13cdb22d06..56e10ec9c4 100644 --- a/res/values-bn-rBD/strings.xml +++ b/res/values-bn-rBD/strings.xml @@ -230,10 +230,6 @@ ⇥⇥প্রশাসকের সঙ্গে যোগাযোগ করুন। এই ফাইল অথবা ফোল্ডার ভাগাভাগির চেষ্টা করতে যেয়ে একটি জটিলতা হয়েছে এই ফাইল অথবা ফোল্ডার ভাগাভাগি রদ করার চেষ্টা করতে যেয়ে একটি জটিলতা হয়েছে - পাঠাও - লিঙ্ক কপি করো - ক্লিপবোর্ডে কপি করা হলো - জটিল ভ্রান্তি: কাজটি করা যাবেনা সার্ভারে সংযোগ স্থাপনের সময় একটি ভ্রান্তি ঘটলো। সার্ভারের জন্য অপেক্ষা করার সময় একটি ভ্রান্তি ঘটলো, কাজটি করা যেতনা সার্ভারের জন্য অপেক্ষা করার সময় একটি ভ্রান্তি ঘটলো, কাজটি করা যেতনা @@ -249,6 +245,7 @@ সার্ভারে এই ফাইলটি আর প্রাপ্তব্য নয় একাউন্ট একাউন্ট যোগ কর + নিরাপদ সংযোগকে একটি অনিরাপদ পথে দিকবদল করা হয়েছে ভুল কুটশব্দ সরাও এখানে কিছু নেই। একটি ফোল্ডার যোগ করতে পারেন! diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml index 8c01ccc422..a4373ac3aa 100644 --- a/res/values-bs/strings.xml +++ b/res/values-bs/strings.xml @@ -32,7 +32,6 @@ Kreiraj račun Favorit Preimenuj - Pošalji Potrebna autentifikacija Pogrešna lozinka diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index 3c640d920a..86e209d7e6 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -237,10 +237,6 @@ La compartició no es troba disponible al vostre servidor. Contacteu amb l\'administrador. S\'ha produït un error en intentar compartir aquest fitxer o carpeta S\'ha produït un error en intentar deixar de compartir aquest fitxer o carpeta - Envia - Copia l\'enllaç - S\'ha copiat al porta-retalls - Error crític: no es poden realitzar operacions Hi ha hagut un error mentre es connectava al servidor. Hi ha hagut un error esperant al servidor, l\'operació no s\'ha pogut realitzar Hi ha hagut un error esperant el servidor, l\'operació no s\'ha pogut realitzar @@ -256,6 +252,7 @@ El fitxer ja no està disponible en el servidor Comptes Afegeix compte + La connexió segura està essent redirigida a través d\'una ruta insegura Carregant dades... Es requereix autenticació Contrasenya incorrecta diff --git a/res/values-cs-rCZ/strings.xml b/res/values-cs-rCZ/strings.xml index 718aa1ea11..e622b26b4f 100644 --- a/res/values-cs-rCZ/strings.xml +++ b/res/values-cs-rCZ/strings.xml @@ -271,10 +271,6 @@ správce systému. Při pokusu o zrušení sdílení tohoto souboru či složky nastala chyba Zadejte heslo Musíte zadat heslo - Odeslat - Zkopírovat odkaz - Zkopírováno do schránky - 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 @@ -290,7 +286,7 @@ správce systému. Tento soubor již není dostupný na serveru Účty Přidat účet - Bezpečné spojení je přesměrováno na nezabezpečenou trasu. + Zabezpečené spojení je přesměrováváno nezabezpečenou trasou. Logy Odeslat historii Nebyla nalezena žádná aplikace pro odesílání logů. Nainstalujte poštovní aplikaci! @@ -306,6 +302,7 @@ správce systému. Soubor již v cílovém adresáři existuje Při pokusu o přesun tohoto souboru či složky nastala chyba pro přesun tohoto souboru + Soubor již v cílové složce existuje Okamžitá odesílání Zabezpečení Cesta pro nahrávání videí diff --git a/res/values-cy-rGB/strings.xml b/res/values-cy-rGB/strings.xml index e7e46feca5..f5a51773c6 100644 --- a/res/values-cy-rGB/strings.xml +++ b/res/values-cy-rGB/strings.xml @@ -128,7 +128,6 @@ Llwytho lluniau i fyny drwy WiFi\'n unig /LlwythoSyth Cadw\'r ddau - Anfon Cyfrifon Dewisiwch diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index 3e70097d58..58eb8e11ab 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -271,10 +271,6 @@ Der opstod en fejl ved stopning af deling af denne mappe. Angiv et kodeord Du skal angive et kodeord - Send - Kopiér link - Kopieret til udklipsholder - Kritisk fejl: kan ikke udføre handlingerne Der opstod en fejl under tilslutningen til serveren. Der opstod en fejl mens vi ventede på serveren, handlingen kunne ikke gennemføres Der opstod en fejl mens vi ventede på serveren, handlingen kunne ikke gennemføres @@ -290,7 +286,7 @@ Filen er ikke længere tilgængelig på serveren Konti Tilføj konto - Sikker forbindelse videredirigeres til en usikker rute. + Sikker forbindelse videredirigeres gennem en usikker rute. Logge Send historik Der blev ikke fundet apps, der kan sende logge. Installér mail-app\'en! @@ -306,6 +302,7 @@ Filen findes allerede i destinationsmappen Der opstod en fejl under forsøg på at flytte denne mappe eller fil til at flytte denne fil + Filen findes allerede i destinationsmappen Øjeblikkelige uploads Sikkerhed Sti til videoupload diff --git a/res/values-de-rAT/strings.xml b/res/values-de-rAT/strings.xml index a99ab891be..40855048e0 100644 --- a/res/values-de-rAT/strings.xml +++ b/res/values-de-rAT/strings.xml @@ -106,7 +106,6 @@ Ein paar Dateien konnten nicht verschoben werden Lokal: %1$s Details - Senden Konten Adresse des Servers diff --git a/res/values-de-rDE/strings.xml b/res/values-de-rDE/strings.xml index fa67888ce6..624cb7f648 100644 --- a/res/values-de-rDE/strings.xml +++ b/res/values-de-rDE/strings.xml @@ -268,10 +268,6 @@ Es ist ein Fehler beim Entfernen der Freigabe für diese Datei oder den Ordner aufgetreten. Passwort eingeben Sie müssen ein Passwort eingeben - Senden - Link kopieren - In die Zwischenablage 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 @@ -303,6 +299,7 @@ Die Datei ist bereits im Zielordner vorhanden Es ist ein Fehler beim Verschieben dieser Datei oder dieses Ordners aufgetreten. um diese Datei zu verschieben + Die Datei ist bereits im Zielordner vorhanden Sofortiges Hochladen Sicherheit Verzeichnis zum Hochladen der Videos diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 0f7d61447a..df6da87bcc 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -268,10 +268,6 @@ Es ist ein Fehler beim Entfernen der Freigabe für diese Datei oder den Ordner aufgetreten. Passwort eingeben Du musst ein Passwort eingeben - Senden - Link kopieren - In die Zwischenablage kopiert - 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 kann nicht ausgeführt werden Es ist ein Fehler beim Warten auf den Server aufgetreten, die Operation kann nicht ausgeführt werden @@ -287,7 +283,7 @@ Diese Datei steht auf dem Server nicht mehr zur Verfügung Konten Konto hinzufügen - Die gesicherte Verbindung wird auf eine unsichere Route weitergeleitet. + Die gesicherte Verbindung wird durch eine ungesicherte Route geleitet. Protokolle Verlauf senden Keine App zum Versenden der Meldungen gefunden. Bitte installiere die Mail-App! @@ -303,6 +299,7 @@ Die Datei ist bereits im Zielordner vorhanden Es ist ein Fehler beim Verschieben der Datei oder des Ordners aufgetreten. um diese Datei zu verschieben + Die Datei existiert bereits im Zielverzeichnis Sofortiges Hochladen Sicherheit Verzeichnis zum Hochladen der Videos diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index d7ffc33a14..7b72610705 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -272,10 +272,6 @@ Ένα σφάλμα προέκυψε κατά τη διάρκεια ακύρωσης διαμοιρασμού αυτού του αρχείου ή φακέλου Εισάγετε ένα κωδικό πρόσβασης. Πρέπει να εισάγετε ένα κωδικό πρόσβασης. - Αποστολή - Αντιγραφή συνδέσμου - Αντιγραφθηκε στο πρόχειρο - Κρίσιμο σφάλμα: αδύνατη η εκτέλεση λειτουργειών Ένα σφάλμα προέκυψε κατά τη σύνδεση με το διακομιστή. Ένα σφάλμα προέκυψε κατά την αναμονή για το διακομιστή, η λειτουργία δεν ήταν επιτυχής Ένα σφάλμα προέκυψε κατά την αναμονή για το διακομιστή, η λειτουργία δεν ήταν επιτυχής @@ -291,7 +287,7 @@ Αυτό το αρχείο δεν είναι πια διαθέσιμο στο διακομιστή Λογαριασμοί Προσθήκη λογαριασμού - Ασφαλής σύνδεση ανακατευθύνεται σε μια μη ασφαλή διαδρομή. + Ασφαλής σύνδεση ανακατευθύνεται μέσω μιας μη ασφαλούς διαδρομής. Αρχεία καταγραφών Αποστολή Ιστορικού Δεν εντοπίστηκε εφαρμογή αποστολής αναφορών συστήματος. Εγκαταστήστε την εφαρμογή Ηλ. Ταχυδρομείου!! @@ -307,6 +303,7 @@ Το αρχείο υπάρχει ήδη στο φάκελο προορισμού Ένα σφάλμα προέκυψε κατά την προσπάθεια μετακίνησης αυτού του αρχείου ή φακέλου για μετακίνηση αυτού του αρχείου + Το αρχείο υπάρχει ήδη στο φάκελο προορισμού Στιγμιαίες Μεταφορτώσεις Ασφάλεια Διαδρομή Μεταφόρτωσης Βίντεο diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index 486eb581a7..274eada4cf 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -259,10 +259,6 @@ An error occurred while trying to unshare this file or folder Enter a password You must enter a password - Send - Copy link - Copied to clipboard - Critical error: cannot perform operations An error occurred whilst connecting to the server. An error occurred whilst waiting for the server, the operation couldn\'t be done An error occurred whilst waiting for the server, the operation couldn\'t been done @@ -278,7 +274,7 @@ The file is no longer available on the server Accounts Add account - Secure connection is redirected to an unsecured route. + Secure connection is redirected through an unsecured route. Logs Send History No app for sending logs found. Install mail app! @@ -294,6 +290,7 @@ The file exists already in the destination folder An error occurred whilst trying to move this file or folder to move this file + The file exists already in the destination folder Instant Uploads Security Upload Video Path diff --git a/res/values-eo/strings.xml b/res/values-eo/strings.xml index 4a919210f6..fbe39aa321 100644 --- a/res/values-eo/strings.xml +++ b/res/values-eo/strings.xml @@ -172,9 +172,6 @@ %1$s ne povis kopiiĝi al la loka dosierujo %2$s Enigu pasvorton Vi devas enigi pasvorton - Sendi - Kopii ligilon - Kopiita en la tondejon Eraro okazis dum konekto al la servilo. Kontoj @@ -183,6 +180,7 @@ Movi Elekti La dosiero jam ekzistas en la cela dosierujo + La dosiero jam ekzistas en la cela dosierujo Sekuro Servila adreso diff --git a/res/values-es-rAR/strings.xml b/res/values-es-rAR/strings.xml index 5d91a8fc23..d4783c611e 100644 --- a/res/values-es-rAR/strings.xml +++ b/res/values-es-rAR/strings.xml @@ -241,10 +241,6 @@ Un error ocurrió cuando se intentaba compartir el archivo o carpeta Imposible dejar de compartir. Por favor revise si los archivos existen Un error ocurrió cuando se intentaba dejar de compartir el archivo o carpeta - Mandar - Copiar dirección url - Copiado al portapapeles - Error critico: no se puede realizar operaciones Un error ocurrió mientras se conectaba con el Servidor. Un error ocurrió mientras se conectaba con el Servidor. La operación no se realizó Un error ocurrió esperando al Servidor, la operación no se realizó @@ -260,7 +256,6 @@ El archivo no esta mas disponible en este Servidor Cuentas Añadir cuenta - Conexión segura redireccionada a una ruta insegura. Registro Enviar Historial Aplicación para enviar registros no encontrada. Instale una aplicación de correo! @@ -275,6 +270,7 @@ El archivo ya existe en la carpeta destino Un error ocurrió intentando mover el archivo o carpeta para mover este archivo + El archivo ya existe en la carpeta destino Subida Instantánea Seguridad Dirección de subida del video diff --git a/res/values-es-rMX/strings.xml b/res/values-es-rMX/strings.xml index 84733332e6..e23a9f5329 100644 --- a/res/values-es-rMX/strings.xml +++ b/res/values-es-rMX/strings.xml @@ -200,8 +200,6 @@ /SubidasInstantáneas Mantener ambas Previsualización de imagen - Enviar - Copiado al portapapeles Cuentas Contraseña incorrecta diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index 8b0d0ad108..983f984786 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -272,10 +272,6 @@ Ocurrió un error al tratar de ya no compartir este archivo o carpeta Introduzca una contraseña Debe introducir una contraseña - Enviar - Copiar enlace - Copiado al portapapeles - Error crítico: no es posible 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 @@ -291,7 +287,7 @@ Este archivo ya no se encuentra en el servidor Cuentas Agregar cuenta - La conexión segura está siendo desviada por una ruta insegura. + La conexión segura está siendo redirigida por una ruta insegura. Registros Enviar historial No se ha encontrado una app para enviar logs. Instale la app mail! @@ -307,6 +303,7 @@ El archivo ya existe en la carpeta de destino Hubo un error al tratar de mover este archivo o carpeta para mover este archivo + El fichero ya existe en el directorio de destino Subidas instantáneas Seguridad Guardar videos subidos en la carpeta: diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml index 7c94bca48f..6f48658845 100644 --- a/res/values-et-rEE/strings.xml +++ b/res/values-et-rEE/strings.xml @@ -272,10 +272,6 @@ Allpool on loend kohalikest failidest ning serveris asuvatest failidest %5$s, mi Faili või kausta jagamise tühistamisel esines viga Sisesta parool Sa pead parooli sisestama - Saada - Kopeeri link - Kopeeritud lõikepuhvrisse - Viga: ei suutnud operatsiooni lõpetada Serveriga ühendumisel tekkis tõrge. Serverilt vastuse ootamisel tekkis tõrge, toimingu sooritamine ebaõnnestus Serverilt vastuse ootamisel tekkis tõrge, toimingu sooritamine ebaõnnestus @@ -291,7 +287,7 @@ Allpool on loend kohalikest failidest ning serveris asuvatest failidest %5$s, mi Fail ei ole serveris enam kättesaadav Kontod Lisa konto - Turvaline ühendus suunatakse läbi turvamata ühenduse. + Turvalist ühendust suunatakse läbi turvamata ühenduse. Logid Saada ajalugu Logide saatmise rakendust ei leitud. Paigalda postirakendus! @@ -307,6 +303,7 @@ Allpool on loend kohalikest failidest ning serveris asuvatest failidest %5$s, mi See fail on juba sihtkaustas olemas Selle faili või kausta liigutamisel tekkis tõrge selle faili liigutamiseks + See fail on juba sihtkaustas olemas Kohesed üleslaadimised Turvalisus Video üleslaadimise asukoht diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml index 8c14aefe9f..2f22df0757 100644 --- a/res/values-eu/strings.xml +++ b/res/values-eu/strings.xml @@ -240,10 +240,6 @@ Mesedez, baimendu berriz Errore bat egon da fitxategaia edo karpeta partekatzerakoan Ezin izan da partekatzea desegin. Mesedez egiaztatu fitxategia existitzen dela Errore bat egon da fitxategaia edo karpeta partekatzeari uzterakoan - Bidali - Lotura kopiatu - Arbelera kopiatua - Errore larria: ezin dira egin eragiketak Errore bat gertatu da zerbitzariarekin konektatzean. Errore bat gertatu da zerbitzariaren zain egon bitartean, ezin izan da eragiketa burutu Errore bat gertatu da zerbitzariaren zain egon bitartean, ezin izan da eragiketa burutu @@ -259,7 +255,7 @@ Mesedez, baimendu berriz Fitxategia jadanik ez dago eskuragarri zerbitzarian Kontuak Gehitu kontua - Konexio segurua birbideratu da segurua ez den bide batera. + Konexio segurua birbideratu da segurua ez den bide batetik. Egunkariak Bidali Historia Egunkariak bidaltzeko aplikaziorik ez da aurkitu. Instalatu posta aplikazioa! @@ -274,6 +270,7 @@ Mesedez, baimendu berriz Fitxategia dagoeneko existitzen da helburuko karpetan Errore bat gertatu da fitxategi edo karpeta hau mugitzen saiatzerakoan fitxategi hau mugitzeko + Fitxategia dagoeneko existitzen da helburuko karpetan Berehalako Igoerak Segurtasuna Bideo Igoera Bidea diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index a84969fa05..249ab7a0ec 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -208,8 +208,6 @@ نمایش این عکس امکانپذیر نمی باشد در حین اشتراک گذاری این فایل یا پوشه خطایی رخ داده است در حین حذف اشتراک گذاری این فایل یا پوشه خطایی رخ داده است - ارسال - کپی به کلیپ بورد تکمیل عملیات امکانپذیر نمی باشد، سرور در دسترس نمی باشد برای تغییر نام این فایل diff --git a/res/values-fi-rFI/strings.xml b/res/values-fi-rFI/strings.xml index f12292e6a0..3cfc508aa7 100644 --- a/res/values-fi-rFI/strings.xml +++ b/res/values-fi-rFI/strings.xml @@ -257,10 +257,6 @@ Virhe tiedoston tai kansion jakamista yrittäessä Anna salasana Salasana on pakko antaa - Lähetä - Kopioi linkki - Kopioitu leikepöydälle - Kriittinen virhe: toimintoja ei voi suorittaa Virhe palvelimeen yhdistäessä Virhe palvelimen vastausta odottaessa, toimintoa ei voitu suorittaa Virhe palvelimen vastausta odottaessa, toimintoa ei voitu suorittaa @@ -290,6 +286,7 @@ Siirto ei onnistu. Tarkista, ettei tiedostoa ole jo olemassa Tiedosto on jo olemassa kohdekansiossa Tämän tiedoston tai kansion siirtoa yrittäessä tapahtui virhe + Tiedosto on jo kohdekansiossa. Välittömät lähetykset Tietoturva jaettu diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index a502db5fa2..1119107400 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -276,10 +276,6 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq Une erreur est survenue lors de la tentative d’annulation du partage de ce fichier ou répertoire Saisissez un mot de passe Vous devez saisir un mot de passe - Envoyer - Copier le lien - Copié dans le presse-papiers - Erreur critique : impossible de réaliser des 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 @@ -311,6 +307,7 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq 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 + Fichier déjà existant dans le dossier de destination Téléversement immédiat Sécurité Répertoire de téléversement des vidéos diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml index 18ae1a9ed4..edf331a556 100644 --- a/res/values-gl/strings.xml +++ b/res/values-gl/strings.xml @@ -272,10 +272,6 @@ Descárgueo de aquí: %2$s Produciuse un erro ao tentar deixar de compartir este ficheiro ou cartafol Escriba un contrasinal Ten que escribir un contrasinal - Enviar - Copiar a ligazón - Copiado no portapapeis. - Produciuse un erro crítico: non é posíbel realizar as operacións Produciuse un erro mentres conectaba co servidor. Produciuse un erro mentres agardaba polo servidor, a operación non se puido levar a fin Produciuse un erro mentres agardaba polo servidor, a operación non se puido levar a fin @@ -291,7 +287,7 @@ Descárgueo de aquí: %2$s O ficheiro xa non está dispoñíbel no servidor Contas Engadir unha conta - A conexión segura está a ser redirixida a unha ruta non segura. + A conexión segura está a ser redirixida a través dunha ruta non segura. Rexistros Enviar o historial Non se atopou unha aplicación para enviar os rexistros. Instale unha aplicación de correo! @@ -307,6 +303,7 @@ Descárgueo de aquí: %2$s Este ficheiro xa existe no cartafol de destino Produciuse un erro ao tentar mover este ficheiro ou cartafol. para mover este ficheiro + Este ficheiro xa existe no cartafol de destino Envío instantáneo Seguridade Enviar a ruta do vídeo diff --git a/res/values-he/strings.xml b/res/values-he/strings.xml index f10f2d7d1b..74cc8cbdf7 100644 --- a/res/values-he/strings.xml +++ b/res/values-he/strings.xml @@ -231,10 +231,6 @@ ⇥⇥מנהל. שגיאה אירעה בזמן ניסיון לשתף קובץ זה או תיקייה זו שגיאה אירעה בזמן ניסיון לבטל שיתוף לקובץ זה או לתיקייה זו - שליחה - העתקת קישור - הועתק ללוח הגזירים - clipboard - שגיאה קריטית: לא ניתן לבצע את הפעולות שגיאה אירעה בזמן חיבור לשרת. שגיאה אירעה בזמן המתנה לשרת, הפעולה לא הייתה ניתנת להשלמה שגיאה אירעה בזמן המתנה לשרת, הפעולה לא הייתה ניתנת להשלמה @@ -250,6 +246,7 @@ הקובץ אינו זמין יותר על השרת חשבונות הוספת חשבון + חיבור מאובטח מנותב דרך נתיב לא מאובטח בחירה אבטחה כתובת שרת diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index feb62ce744..d6f306399c 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -31,7 +31,6 @@ रद्द करें त्रुटि विवरण - भेजें खाते diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index 12e7ef43b0..1d8d354bab 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -58,7 +58,6 @@ Promjeni ime Makni Detalji - Pošaljite Korisnićki računi Potrebna autentikacija diff --git a/res/values-hu-rHU/strings.xml b/res/values-hu-rHU/strings.xml index b8bae64cf9..c716901f0c 100644 --- a/res/values-hu-rHU/strings.xml +++ b/res/values-hu-rHU/strings.xml @@ -226,9 +226,6 @@ %1$s nem lehet másolni a %2$s helyi könyvtárba Hiba lépett fel a mappa megosztásakor Hiba lépett fel a mappa megosztásának visszavonásakor - Küldjük el - Link másolása - Bemásolva a vágólapra Fiókok Fiók hozzáadása diff --git a/res/values-ia/strings.xml b/res/values-ia/strings.xml index efb3d3d5a1..98e9b2a598 100644 --- a/res/values-ia/strings.xml +++ b/res/values-ia/strings.xml @@ -40,7 +40,6 @@ Cambiar contrasigno Deler conto Nomine de dossier - Invia Contos Contrasigno errate diff --git a/res/values-id/strings.xml b/res/values-id/strings.xml index a23b66e159..6320692ee9 100644 --- a/res/values-id/strings.xml +++ b/res/values-id/strings.xml @@ -272,10 +272,6 @@ Terjadi kesalahan saat mencoba menghapus berbagi berkas dan folder ini Masukkan sandi Anda harus memasukkan sandi - Kirim - Salin tautan - Disalin ke papan klip - Kesalahan fatal: tidak dapat melakukan operasi Terjadi kesalahan saat menghubungkan dengan server. Terjadi kesalahan saat menunggu balasan server, operasi tidak dapat diselesaikan Terjadi kesalahan saat menunggu balasan server, operasi tidak dapat diselesaikan @@ -291,7 +287,6 @@ Berkas tidak lagi tersedia pada server Akun Tambah akun - Sambungan aman dialihkan ke rute yang tidak aman. Log Kirim Riwayat Tidak ada apl untuk mengirim log. Instal apl mail! @@ -307,6 +302,7 @@ Berkas sudah ada didalam folder tujuan Terjadi kesalahan saat mencoba memindahkan berkas atau folder ini untuk memindahkan berkas ini + Berkas sudah ada didalam folder tujuan Unggah Cepat Keamanan Unggah Lokasi Video diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml index 2d50d6fd7f..22896537b8 100644 --- a/res/values-is/strings.xml +++ b/res/values-is/strings.xml @@ -31,7 +31,6 @@ Nafn möppu Endurskýra Fjarlægja - Senda Færa Veldu diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 09b89aafa3..05221a982b 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -272,10 +272,6 @@ Si è verificato un errore durante il tentativo di rimuovere la condivisione del file o della cartella Digita una password Devi digitare una password - Invia - Copia collegamento - Copiato negli appunti - Errore grave: impossibile eseguire le operazioni Si è verificato un errore durante la connessione al server. Si è verificato un errore in attesa della risposta del server, l\'operazione non è stata completata Si è verificato un errore in attesa della risposta del server, l\'operazione non è stata completata @@ -291,7 +287,7 @@ Il file non è più disponibile sul server Account Aggiungi account - La connessione sicura è rediretta su un percorso non sicuro. + La connessione sicura è rediretta attraverso un percorso non sicuro. Registri Invia cronologia Non è stata trovata alcuna applicazione per l\'invio dei registri. Installa l\'applicazione mail! @@ -307,6 +303,7 @@ Il file esiste già nella cartella di destinazione Si è verificato un errore durante il tentativo di spostare il file o la cartella per spostare questo file + Il file esiste già nella cartella di destinazione Caricamenti istantanei Protezione Percorso di caricamento video diff --git a/res/values-ja-rJP/strings.xml b/res/values-ja-rJP/strings.xml index c6f90c200a..9f06a366a8 100644 --- a/res/values-ja-rJP/strings.xml +++ b/res/values-ja-rJP/strings.xml @@ -269,10 +269,6 @@ このファイルまたはフォルダーの共有を解除する際にエラーが発生しました パスワードを入力 パスワードを入力しなければなりません - 送信 - リンクをコピー - クリップボードにコピー - 致命的なエラー:操作を実行できません サーバーへの接続中にエラーが発生しました。 サーバーからの応答を待っている間にエラーが発生しました。操作を完了することができません。 サーバーからの応答を待っている間にエラーが発生しました。操作を完了することができません。 @@ -288,7 +284,7 @@ ファイルはサーバー上で利用できません アカウント アカウントを追加 - 暗号化接続は非暗号化接続にリダイレクトされました。 + 暗号化されていない接続を経て、暗号化接続へリダイレクトされました。 ログ ログを送信 ログを送信するアプリが見つかりませんでした。メールアプリをインストールしてください。 @@ -304,6 +300,7 @@ そのファイルは宛先フォルダーにすでに存在します。 このファイルまたはフォルダーを移動する際にエラーが発生しました このファイルを移動 + そのファイルは宛先フォルダーにすでに存在します。 自動アップロード セキュリティ 動画のアップロードパス diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml index 0d7d86016e..f01cbfbc4f 100644 --- a/res/values-ka-rGE/strings.xml +++ b/res/values-ka-rGE/strings.xml @@ -136,8 +136,6 @@ ატვირთეთ სურათები მხოლოდ WiFi–ით /ეგრევე ატვირთვა დატოვე ორივე - გაგზავნა - კოპირებულია კლიპბორდში ანგარიში არჩევა diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml index 68b39212ac..89cbb7eb23 100644 --- a/res/values-km/strings.xml +++ b/res/values-km/strings.xml @@ -98,7 +98,6 @@ ចាប់ពីៈ រហូតដល់ៈ ហត្ថលេខា: - ផ្ញើ គណនី ខុស​ពាក្យ​សម្ងាត់ diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml index ef5e51c71f..8add0e403b 100644 --- a/res/values-kn/strings.xml +++ b/res/values-kn/strings.xml @@ -33,7 +33,6 @@ ಅಚ್ಚುಮೆಚ್ಚಿನ ಮರುಹೆಸರಿಸು ತೆಗೆದುಹಾಕಿ - ಕಳುಹಿಸಿ ದೃಢೀಕರಣ ಅಗತ್ಯವಿದೆ ದುರ್ಬಲ ಗುಪ್ತಪದ diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index efc3c1a233..35f19710f7 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -265,10 +265,6 @@ 이 파일이나 폴더의 공유를 해제하는 중 오류 발생 암호 입력 암호를 입력해야 합니다 - 보내기 - 링크 주소 복사 - 클립보드로 복사됨 - 치명적 오류: 작업을 진행할 수 없음 서버에 연결하는 중 오류가 발생하였습니다. 서버를 기다리는 중 오류가 발생하였습니다. 작업이 진행되지 않았을 수도 있습니다 서버를 기다리는 중 오류가 발생하였습니다. 작업이 진행되지 않았을 수도 있습니다 @@ -284,7 +280,6 @@ 이 파일을 서버에서 더 이상 사용할 수 없습니다 계정 계정 추가 - 보안 연결이 안전하지 않은 경로로 넘어갑니다. 로그 과거 기록 보내기 로그를 보낼 앱이 없습니다. 메일 앱을 설치하십시오! @@ -300,6 +295,7 @@ 파일이 이미 대상 폴더에 존재합니다 이 파일이나 폴더를 이동하는 중 오류가 발생하였습니다 이 파일을 이동할 + 파일이 이미 대상 폴더에 존재합니다 즉시 업로드 보안 동영상 업로드 경로 diff --git a/res/values-lb/strings.xml b/res/values-lb/strings.xml index 99468420e4..1e719f4ae8 100644 --- a/res/values-lb/strings.xml +++ b/res/values-lb/strings.xml @@ -192,10 +192,6 @@ Pad fir d\'Eroplueden E Passwuert aginn Du muss e Passwuert aginn - Schécken - Link kopéieren - An d\'Tëschenoflag kopéiert - Kritesche Feeler: D\'Operatioune konnten net ausgeféiert ginn Bei der Connectioun mam Server ass e Feeler opgetrueden. Beim Waarden op de Server ass e Feeler opgetrueden, d\'Operatioun konnt net duerchgeféiert ginn Beim Waarden op de Server ass e Feeler opgetrueden, d\'Operatioun konnt net duerchgeféiert ginn @@ -211,7 +207,6 @@ De Fichier ass net méi um Server disponibel Konten Kont dobäisetzen - Sécher Connectioun gëtt op eng onsécher Route ëmgeleet. Protokoller Historique schécken Keng App fonnt fir d\'Protokoller ze schécken. Installéier eng Mail-App! @@ -227,6 +222,7 @@ De Fichier existéiert schonn am Zildossier Beim Réckele vun dësem Fichier oder Dossier ass e Feeler opgetrueden fir dëse Fichier ze réckelen + De Fichier existéiert schonn am Zildossier Direkt eropgeluede Fichieren Sécherheet Pad fir d\'Eropluede vun de Videoen diff --git a/res/values-lt-rLT/strings.xml b/res/values-lt-rLT/strings.xml index 9d3643f142..c0a3d70af9 100644 --- a/res/values-lt-rLT/strings.xml +++ b/res/values-lt-rLT/strings.xml @@ -226,9 +226,6 @@ Neįmanoma parodyti šio paveikslėlio Įvyko klaida bandant dalinti šį failą ar aplanką Įvyko klaida bandant nebedalinti šio failu ar aplanku - Siųsti - Kopijuoti nuorodą - Nukopijuota į talpyklę Paskyros Neteisingas slaptažodis diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index ea13b1b94d..a651cdf77d 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -154,7 +154,6 @@ Attēlus augšupielādēt tikai caur WiFi /TūlītējaAugšupielāde Paturēt abas - Sūtīt Konti Nepareiza parole diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml index 8c842a2f3b..e6cbf97ad3 100644 --- a/res/values-mk/strings.xml +++ b/res/values-mk/strings.xml @@ -257,10 +257,6 @@ Се случи грешка кога пробав да го тргнам споделувањето на оваа датотека или папка Внесете лозинка Морате да внесете лозинка - Прати - Копирај врска - Копирано во клипборд - Критична грешка: не можам да ја извршам операцијата Се случи грешка при конектирање со серверот. Се случи грешка при чекање на на серверот, операцијата не можеше да се изврши Се случи грешка при чекање на на серверот, операцијата не можеше да се изврши @@ -276,7 +272,6 @@ Датотеката веќе не е достапна на серверот Сметки Додади сметка - Сигурната конекција е преусмерена на несигурна рута. Логови Прати историја Нема апликација за праќање на логови. Инсталирајте апликација за пошта! @@ -292,6 +287,7 @@ Датотеката веќе постои во целната папка Се случи грешка кога пробував да ја преместам оваа датотека или папка да ја преместам оваа датотека + Датотеката веќе постои во целната папка Инстант прикачувања Безбедност Прикачи патека на видео diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml index 4ac4d9523a..0d79479852 100644 --- a/res/values-ms-rMY/strings.xml +++ b/res/values-ms-rMY/strings.xml @@ -57,7 +57,6 @@ Buang Lokal sahaja Lokal sahaja - Hantar Akaun Alamat pelayan diff --git a/res/values-nb-rNO/strings.xml b/res/values-nb-rNO/strings.xml index cb99ece704..6e24b9a913 100644 --- a/res/values-nb-rNO/strings.xml +++ b/res/values-nb-rNO/strings.xml @@ -266,10 +266,6 @@ En feil oppstod ved avslutting av delingen av denne filen eller mappen Skriv inn ett passord Du må skrive inn ett passord - Send - Kopier lenke - Kopiert til utklippstavlen - Kritisk feil: kan ikke utføre operasjonene En feil oppstod ved oppretting av forbindelse til serveren. En feil oppstod ved venting på svar fra serveren. Operasjonen kunne ikke utføres En feil oppstod ved venting på svar fra serveren. Operasjonen kunne ikke utføres @@ -285,7 +281,7 @@ Filen finnes ikke på serveren lenger Kontoer Legg til en konto - Sikker forbindelse er omdirigert til en usikker rute. + Sikker tilkobling videresendes gjennom en usikker rute. Logger Send historikk Ingen app for sending av logger funnet. Installer epost-app! @@ -301,6 +297,7 @@ Filen finnes allerede i målmappen En feil oppstod ved flytting av denne filen eller mappen å flytte denne filen + Filen finnes allerede i målmappen Umiddelbare opplastinger Sikkerhet Sti til video-opplasting diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index 8e1e5eb139..94b4f08642 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -275,10 +275,6 @@ Hieronder staan de lokale bestanden en de externe bestanden in %5$s waar ze naar Er trad een fout op bij uw poging het delen van dit bestand of deze map te beëindigen Vul het wachtwoord in U moet een wachtwoord opgeven - Versturen - Link kopiëren - Gekopieerd naar het klembord - 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 @@ -294,7 +290,7 @@ Hieronder staan de lokale bestanden en de externe bestanden in %5$s waar ze naar Dit bestand is niet langer beschikbaar op de server Accounts Toevoegen account - De beveiligde verbinding is omgeleid naar een onveilige route. + De beveiligde verbinding is omgeleid via een onveilige route. Logs Verstuur geschiedenis Geen app voor versturen van logs gevonden. Installeer de mail app! @@ -310,6 +306,7 @@ Hieronder staan de lokale bestanden en de externe bestanden in %5$s waar ze naar Het bestand bestaat al in de doelmap Er trad een fout op bij uw poging dit bestand of deze map te verplaatsen om dit bestand te verplaatsen + Het bestand bestaat al in de doelmap Directe uploads Beveiliging Upload Video Pad diff --git a/res/values-nn-rNO/strings.xml b/res/values-nn-rNO/strings.xml index 2a12cc08a1..a7d79a3abd 100644 --- a/res/values-nn-rNO/strings.xml +++ b/res/values-nn-rNO/strings.xml @@ -121,7 +121,6 @@ Klarte ikkje å lagra sertifikatet Detaljar Berre last opp bilete over WiFi - Send Kontoar Feil passord diff --git a/res/values-oc/strings.xml b/res/values-oc/strings.xml index 3e17598974..b767bf8133 100644 --- a/res/values-oc/strings.xml +++ b/res/values-oc/strings.xml @@ -58,8 +58,6 @@ Torna nomenar Suprimir País : - Mandar - Copiat dins lo quichapapièrs Comptes Autentificacion requesida diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml index f68a9c64b3..2fbd345486 100644 --- a/res/values-pa/strings.xml +++ b/res/values-pa/strings.xml @@ -117,7 +117,6 @@ ਤਸਵੀਰਾਂ ਨੂੰ ਵਾਈ-ਫਾਈ ਰਾਹੀਂ ਹੀ ਅੱਪਲੋਡ ਕਰੋ ਦੋਵੇਂ ਰੱਖੋ ਚਿੱਤਰ ਝਲਕ - ਭੇਜੋ ਅਕਾਊਂਟ ਚੁਣੋ diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index d9c5320e05..c9a41ad736 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -269,10 +269,6 @@ Wystąpił błąd podczas anulowania udostępniania tego pliku lub folderu. Wprowadź hasło Musisz wprowadzić hasło - Wyślij - Skopiuj link - Skopiuj do schowka - 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 @@ -304,6 +300,7 @@ Plik istnieje już w folderze docelowym Pojawił się błąd podczas próby przeniesienia tego pliku lub folderu aby przenieść ten plik + Plik istnieje już w folderze docelowym Automatyczne wysyłanie Bezpieczeństwo Katalog wysyłania dla wideo diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml index 013757ca91..4b4aac1145 100644 --- a/res/values-pt-rBR/strings.xml +++ b/res/values-pt-rBR/strings.xml @@ -272,10 +272,6 @@ Ocorreu um erro ao tentar descompartilhar este arquivo ou pasta Digite uma senha Você deve digitar uma senha - Enviar - Copiar o link - Copiado para área de transferência - Erro crítico: não pode executar operações Ocorreu um erro durante a conexão com o servidor. Ocorreu um erro enquanto se espera pelo servidor, a operação não poderia ter sido executada Ocorreu um erro enquanto se espera pelo servidor, a operação não poderia ter sido executada @@ -291,7 +287,7 @@ Este arquivo não mais está disponível neste servidor Contas Adicionar uma conta - Conexão segura esta redirecionada para uma rota não segura. + A conexão segura está redirecionada através de uma rota insegura. Logs Enviar Histórico Não foi encontrado nenhum app para envio de logs. Instale o mail app! @@ -307,6 +303,7 @@ O arquivo já existe na pasta de destino Ocorreu um erro ao tentar mover este arquivo ou pasta mover este arquivo + O arquivo já existe na pasta de destino Envios Instantâneos Segurança Enviar o Caminho do Vídeo diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index 83c1f5d493..6324922ca9 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -201,6 +201,8 @@ Deseja realmente remover %1$s e o seu conteúdo? Apenas localmente Apenas localmente + Do servidor + Remoto & local Removido com sucesso Não foi possível remover Introduza um novo nome @@ -255,6 +257,8 @@ Conflito de ficheiro Quais os ficheiros que pretende manter? Se selecionar ambas as versões, o ficheiro local irá ter um número adicionado ao seu nome. Manter ambos + versão local + versão servidor Pré-Visualizar imagem Esta imagem não pode ser mostrada Não foi possível copiar %1$s para a pasta local %2$s @@ -266,10 +270,6 @@ Ocorreu um erro enquanto retirava a partilha deste ficheiro ou pasta Introduza uma palavra-passe Você deve introduzir uma palavra-passe - Enviar - Copiar hiperligação - Copiado para a área de transferência - Erro crítico: não é possível executar as operações Ocorreu um erro durante a ligação ao servidos. Ocorreu um erro durante a ligação ao servidor, não foi possível realizar a operação. Ocorreu um erro durante a ligação ao servidor, não foi possível realizar a operação. @@ -285,7 +285,7 @@ O ficheiro não está mais disponível no servidor Contas Adicionar conta - Ligação segura é redireccionada para um caminho inseguro. + Uma ligação segura foi redireccionada por uma rota insegura. Registos de Alterações Enviar Histórico Não foi encontrado o aplicativo para envio de registos . Instale app e-mail! @@ -301,6 +301,7 @@ O ficheiro já existe na pasta de destino Ocorreu um ocorreu quando tentava mover este ficheiro ou pasta para mover este ficheiro + O ficheiro já existe na pasta de destino Envios Instantâneos Segurança Envio do Caminho do Vídeo diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index d04e0b51a4..ca934854ab 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -271,10 +271,6 @@ A apărut o eroare în timp ce încerca să departajeze sau unshare acest fișier sau folder Introduceţi parola Trebuie să introduci o parolă - Expediază - Link copiat - Copiat în clipboard - Eroare critică: nu se pot executa operațiunile A apărut o eroare în timp ce se conecta la server A apărut o eroare în timp ce se aștepta pentru server, operațiunea nu s-a executat A apărut o eroare în timp ce se aștepta pentru server, operațiunea nu s-a executat @@ -290,7 +286,6 @@ Fișierul nu mai este disponibil pe server Conturi Adaugă cont - Conexiunea securizată este redirecționată către un traseu neasigurat. Înregistrări Trimite Istoria App-ul de trimitere a inregistrărilor nu a fost găsit. Instalează mail app-ul! @@ -306,6 +301,7 @@ Fișierul există deja în dosarul de destinație O eroare apare la transferarea acestui fișier sau dosar pentru a muta acest fișier + Fișierul există deja în dosarul de destinație Încărcări instante Securitate Calea de încărcare Video diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index fdad0befbd..c6434c600c 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -269,10 +269,6 @@ При попытке закрыть доступ к этому файлу или каталогу произошла ошибка Введите пароль Вы должны ввести пароль - Отправить - Копировать ссылку - Скопировано в буфер обмена - Критическая ошибка: невозможно выполнить действия При подключении к серверу возникла ошибка Во время ожидания сервера произошла ошибка, действие не может быть выполнено Во время ожидания сервера произошла ошибка, действие не может быть выполнено @@ -288,7 +284,7 @@ Этот файл больше недоступен на сервере Учётные записи Добавить учетную запись - Защищённое соединение перенаправлено по небезопасному маршруту + Безопасное соединение перенаправлено через небезопасный маршрут. Журналы История Отправлений Приложение для отправки журнала не найдено. Установите почтовое приложение! @@ -304,6 +300,7 @@ Файл уже существует в каталоге назначения Произошла ошибка при попытке перемещения этого файла или каталога для перемещения этого файла + Файл уже существует в каталоге назначения Мгновенные загрузки Безопасность Путь для загрузки Видео diff --git a/res/values-sk-rSK/strings.xml b/res/values-sk-rSK/strings.xml index 7cc28c2226..54bc063a1d 100644 --- a/res/values-sk-rSK/strings.xml +++ b/res/values-sk-rSK/strings.xml @@ -258,10 +258,6 @@ Pri pokuse zrušiť zdieľanie tohto súboru alebo priečinka došlo k chybe Vložte heslo Musíte vložiť heslo - Odoslať - Kopíruj odkaz - Skopírované do schránky - Kritická chyba: operáciu nemožno vykonať Pri pokuse o pripojenie na server nastala chyba. Pri čakaní na odpoveď servera nastala chyba, operácia nemohla byť dokončená Pri čakaní na odpoveď servera nastala chyba, operácia nemohla byť dokončená @@ -277,7 +273,7 @@ Súbor už na serveri nie je dostupný Účty Pridať účet - Zabezpečené pripojenie je presmerované na nezabezpečenú trasu. + Zabezpečené spojenie je presmerované nezabezpečenou cestou. Logy Odoslať históriu Nebola nájdená aplikácia pre odosielanie log protokolov. Nainštalujte si mailovú aplikáciu! @@ -293,6 +289,7 @@ Súbor už v cieľovom priečinku existuje Pri pokuse o presun tohoto súboru alebo priečinka nastala chyba pre presun tohoto súboru + Súbor už v cieľovom priečinku existuje Okamžité nahratie Zabezpečenie Cesta pre nahrávanie videí diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index 2351338b39..541ad9c3e5 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -272,10 +272,6 @@ Prišlo je do napake med poskusom odstranjevanja souporabe te datoteke ali mape Vpis gesla Vpisati je treba geslo. - Pošlji - Kopiraj povezavo - Kopirano v odložišče - Kritična napaka: dejanj ni možno izvesti Med povezovanjem s strežnikom je prišlo do napake. Med čakanjem na vzpostavitev povezave s strežnikom je prišlo do napake. Zahtevanega dejanja ni mogoče izvesti. Med čakanjem na vzpostavitev povezave s strežnikom je prišlo do napake. Zahtevanega dejanja ni bilo mogoče končati. @@ -307,6 +303,7 @@ Datoteka v ciljni mapi že obstaja. Prišlo je do napake med premikanjem datoteke v mapo med premikanjem datoteke + Datoteka v ciljni mapi že obstaja. Takojšnje pošiljanje v oblak Varnost Pot videa za pošiljanje diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml index fc3b8a4d17..384cf7520e 100644 --- a/res/values-sq/strings.xml +++ b/res/values-sq/strings.xml @@ -67,7 +67,6 @@ Lidhja e Sigurt vendos Riemërto Hiq - Dërgo Llogarit Fjalëkalim i gabuar diff --git a/res/values-sr-rSP/strings.xml b/res/values-sr-rSP/strings.xml index a8200978e2..72526830ec 100644 --- a/res/values-sr-rSP/strings.xml +++ b/res/values-sr-rSP/strings.xml @@ -68,8 +68,6 @@ Za: Potpis: Zadrži oboje - Pošalji - Kopirano u klipbord Nalozi Izaberi diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml index 01dfce6cab..e0ca4455a0 100644 --- a/res/values-sr/strings.xml +++ b/res/values-sr/strings.xml @@ -266,10 +266,6 @@ Дошло је до грешке приликом покушаја укидања дељења овог фајла или фасцикле Унесите лозинку Морате унети лозинку - Пошаљи - Копирај везу - Копирано у клипборд - Критична грешка: не могу да радим Дошло је до грешке при повезивању са сервером. Дошло је до грешке при чекању на сервер. Радња није могла бити урађена Дошло је до грешке при чекању на сервер. Радња није могла бити урађена @@ -285,7 +281,6 @@ Фајл није више доступан на серверу Налози Додај налог - Безбедна веза је преусмерена на небезбедну руту Записници Историјат слања Нема начина за слање записника. Инсталирајте апликацију е-поште! @@ -301,6 +296,7 @@ Фајл већ постоји у одредишној фасцикли Дошло је до грешке при премештању фајла или фасцикле да преместите овај фајл + Фајл већ постоји у одредишној фасцикли Тренутна отпремања Безбедност Путања отпремања видеа diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index 98de6de6e4..609dd97597 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -246,10 +246,6 @@ Ett fel uppstod vid försök att sluta dela denna fil eller mapp Ange ett lösenord Du måste ange ett lösenord - Skicka - Kopiera länk - Kopierat till urklipp - Kritiskt fel: kan inte utföra åtgärden Ett fel uppstod vid anslutning till servern. Ett fel uppstod i väntan på servern, operationen kunde inte ha gjorts Ett fel uppstod i väntan på servern, operationen kunde inte ha gjorts @@ -265,7 +261,6 @@ Filen är inte längre tillgänglig på servern Konton Lägg till konto - Säker anslutning är omdirigerad till en osäker väg. Loggar Skickat historik Ingen app för att skicka loggar hittades. Installera mail appen! @@ -281,6 +276,7 @@ Filen existerar redan i destinationsmappen Ett fel uppstod vid försök att flytta denna fil eller mapp att flytta den här filen + Filen existerar redan i destinationsmappen Direktuppladning Säkerhet Uppladdnings-sökväg för video diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta-rIN/strings.xml index 30b37f0a5f..5bfb25f93e 100644 --- a/res/values-ta-rIN/strings.xml +++ b/res/values-ta-rIN/strings.xml @@ -33,7 +33,6 @@ பதிவேற்று புதிய கோப்புறை விவரங்கள் - அனுப்பவும் கணக்குகள் diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml index da5ece702a..0733dea76c 100644 --- a/res/values-te/strings.xml +++ b/res/values-te/strings.xml @@ -21,7 +21,6 @@ రద్దుచేయి పొరపాటు సంచయం పేరు - పంపించు సేవకి చిరునామా diff --git a/res/values-th-rTH/strings.xml b/res/values-th-rTH/strings.xml index c13c48ee77..ef33def59f 100644 --- a/res/values-th-rTH/strings.xml +++ b/res/values-th-rTH/strings.xml @@ -270,10 +270,6 @@ เกิดข้อผิดพลาดในขณะที่จะยกเลิกการอชร์ไฟล์หรือโฟลเดอร์นี้ ป้อนรหัสผ่าน คุณจะต้องใส่รหัสผ่าน - ส่ง - คัดลอกลิงค์ - คัดลอกไปยังคลิปบอร์ด - ข้อผิดพลาด: ไม่สามารถดำเนินการได้ เกิดข้อผิดพลาดขณะกำลังเชื่อมต่อกับเซิร์ฟเวอร์ เกิดข้อผิดพลาดขณะที่รอการดำเนินการจากเซิร์ฟเวอร์ เกิดข้อผิดพลาดขณะที่รอการดำเนินการจากเซิร์ฟเวอร์ @@ -289,7 +285,6 @@ ไฟล์ไม่พร้อมใช้งานบนเซิร์ฟเวอร์ บัญชี เพิ่มบัญชี - การเชื่อมต่อที่ปลอดภัยถูกเปลี่ยนเส้นทางไปยังเส้นทางที่ไม่ปลอดภัย บันทึก ส่งประวัติ ไม่พบการส่งบันทึกของแอพฯ ติดตั้งแอพฯเมล! @@ -305,6 +300,7 @@ มีไฟล์อยู่แล้วในโฟลเดอร์ปลายทาง เกิดข้อผิดพลาดขณะพยายามที่จะย้ายไฟล์หรือโฟลเดอร์นี้ เพื่อย้ายไฟล์นี้ + มีไฟล์อยู่แล้วในโฟลเดอร์ปลายทาง อัพโหลดทันที ความปลอดภัย อัพโหลดเส้นทางวิดีโอ diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index a4e4629bd3..4dcfc9bf7d 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -272,10 +272,6 @@ Bu dosya veya klasör paylaşımı kaldırılmaya çalışılırken bir hata oluştu Bir parola girin Bir parola girmelisiniz - Gönder - Bağlantıyı kopyala - Panoya kopyalandı - Ciddi hata: işlem gerçekleştirilemiyor Sunucuya bağlanılırken bir hata oluştu. Sunucu beklenirken bir hata oluştu, işlem yapılamadı Sunucu beklenirken bir hata oluştu, işlem yapılamadı @@ -291,7 +287,7 @@ Bu dosya artık sunucuda mevcut değil Hesaplar Hesap ekle - Güvenli bağlantı, güvenli olmayan bir rotaya yönlendirildi. + Güvenli bağlantı, güvenli olmayan bir rotaya yönlendiriliyor. Günlükler Geçmişi Gönder Kayıtları göndermek için uygulama bulunamadı. E-posta uygulamasını yükleyin! @@ -307,6 +303,7 @@ Dosya zaten hedef klasörde mevcut Bu dosya veya klasörü taşımaya çalışılırken bir hata oluştu bu dosyayı taşımak için + Dosya zaten hedef klasörde mevcut Anında Yüklemeler Güvenlik Video Yükleme Yolu diff --git a/res/values-ug/strings.xml b/res/values-ug/strings.xml index 4573d71373..92419b061b 100644 --- a/res/values-ug/strings.xml +++ b/res/values-ug/strings.xml @@ -47,7 +47,6 @@ يىغقۇچ ئات ئۆزگەرت چىقىرىۋەت - يوللا ھېساباتلار بىخەتەرلىك diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index d036312fd6..1ad37a0df1 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -253,10 +253,6 @@ Виникла помилка при спробі заборонити доступ до файлу або теки Ввести пароль Ви повинні ввести пароль - Надіслати - Копіювати посилання - Скопійовано в буфер обміну - Критична помилка: виконання операції неможливе Виникла помилка при підключені до сервера. Під час очікування на сервер виникла помилка, операцію неможливо завершити Під час очікування на сервер виникла помилка, операцію неможливо завершити @@ -288,6 +284,7 @@ Файл вже існує в теці призначення Виникла помилка при спробі перемістити файл або теку перемістити цей файл + Файл вже існує в теці призначення Миттєво завантаження Безпека Шлях завантаження відео diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml index 3e97d3fa7e..ecfd541581 100644 --- a/res/values-ur-rPK/strings.xml +++ b/res/values-ur-rPK/strings.xml @@ -23,7 +23,6 @@ منسوخ کریں ایرر غیر معروف خرابی - بھجیں منتخب کریں diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index bdccc82ad8..64dc95c299 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -204,7 +204,6 @@ Xem trước hình ảnh Một lỗi đã xảy ra khi thử chia sẻ file hoặc thư mục này Một lỗi đã xảy ra khi thử gỡ chia sẻ file hoặc thư mục này - Gởi Tài khoản Chọn diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index f29976dab8..0bd5d80144 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -271,10 +271,6 @@ 解除文件或目录共享时出错 输入密码 您必须输入密码 - 发送 - 复制链接 - 复制到剪贴板 - 严重错误:无法执行操作 连接到服务器时发生了一个错误。 等待服务器响应时发生了一个错误,此操作无法完成 等待服务器响应时发生了一个错误,此操作无法完成 @@ -290,7 +286,7 @@ 该文件在服务器上不可用 账号 添加账号 - 安全连接被重定向到非安全路径. + 安全连接是通过一个非安全路由定向的。 日志 发送历史 未找到可以发送日志的程序。请安装 mail! @@ -306,6 +302,7 @@ 该文件已经存在在目标文件夹 尝试移动该文件或文件夹时发生错误 移动该文件 + 该文件已经存在在目标文件夹 即时上传 安全 视频上传路径 diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml index 21b43f13df..8eb0f2b9c6 100644 --- a/res/values-zh-rHK/strings.xml +++ b/res/values-zh-rHK/strings.xml @@ -72,8 +72,6 @@ 389 KB 2012/05/18 12:23 PM 12:23:45 - 傳送 - 複製連結 帳號 密碼錯誤 diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index 69701a580c..50d30a7003 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -272,10 +272,6 @@ 在取消分享檔案或目錄時發生了錯誤 輸入密碼 您必須輸入密碼 - 寄出 - 複製連結 - 複製至剪貼簿中 - 嚴重錯誤: 無法執行運算 在與伺服器連線時發生了錯誤. 在等待伺服器回應時發生了錯誤, 這個操作將無法被完成 在等待伺服器回應時發生了錯誤, 這個操作將無法被完成 @@ -291,7 +287,6 @@ 這個檔案已經不存在於伺服器中 帳號 新增帳號 - 安全連線被轉向到一個非安全的連線 紀錄 傳送歷史記錄 找不到可以傳送記錄的電子郵件程式. 請安裝電子郵件軟體! @@ -307,6 +302,7 @@ 這個檔案已經存在於目的目錄中 在移動檔案或目錄時發生了錯誤 移動這個檔案 + 這個檔案已經存在於目的目錄中 即時上傳 安全性 影片上傳路徑 From 5ceecb4a82c2e21bf7f689ec1023dbb2885b980f Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Sun, 6 Sep 2015 01:13:44 -0400 Subject: [PATCH 074/133] [tx-robot] updated from transifex --- res/values-el/strings.xml | 3 +++ res/values-et-rEE/strings.xml | 8 ++++++++ res/values-fi-rFI/strings.xml | 2 ++ res/values-fr/strings.xml | 4 ++++ res/values-it/strings.xml | 4 ++++ res/values-pt-rBR/strings.xml | 4 ++++ 6 files changed, 25 insertions(+) diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index 7b72610705..b69197094e 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -303,7 +303,10 @@ Το αρχείο υπάρχει ήδη στο φάκελο προορισμού Ένα σφάλμα προέκυψε κατά την προσπάθεια μετακίνησης αυτού του αρχείου ή φακέλου για μετακίνηση αυτού του αρχείου + Αδύνατη η αντιγραφή. Παρακαλώ ελέγξτε αν το αρχείο υπάρχει Το αρχείο υπάρχει ήδη στο φάκελο προορισμού + Παρουσιάστηκε σφάλμα κατά την προσπάθεια αντιγραφής αυτού του αρχείου ή φακέλου + για αντιγραφή αυτού του αρχείου Στιγμιαίες Μεταφορτώσεις Ασφάλεια Διαδρομή Μεταφόρτωσης Βίντεο diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml index 6f48658845..da70cb1b2a 100644 --- a/res/values-et-rEE/strings.xml +++ b/res/values-et-rEE/strings.xml @@ -206,6 +206,8 @@ Allpool on loend kohalikest failidest ning serveris asuvatest failidest %5$s, mi Kas sa tõesti soovid eemaldada %1$s ja selle sisu? Ainult kohalik Ainult kohalik + Serverist + Kaugfail & kohalik Eemaldamine oli edukas Eemaldamine ebaõnnestus Sisesta uus nimi @@ -260,6 +262,8 @@ Allpool on loend kohalikest failidest ning serveris asuvatest failidest %5$s, mi Failikonflikt Millist faili sa soovid säilitada? Kui valid mõlemad versioonid, siis lisatakse kohaliku faili nimele number. Säilita mõlemad + kohalik versioon + serveri versioon Pildi eelvaade Seda pilti ei saa näidata %1$s ei suudetud kopeerida kohalikku kataloogi %2$s @@ -303,7 +307,11 @@ Allpool on loend kohalikest failidest ning serveris asuvatest failidest %5$s, mi See fail on juba sihtkaustas olemas Selle faili või kausta liigutamisel tekkis tõrge selle faili liigutamiseks + Kopeerimine ebaõnnestus. Palun kontrolli, kas fail on olemas + Kausta ei saa kopeerida tema enda alamkausta See fail on juba sihtkaustas olemas + Selle faili või kausta kopeerimisel tekkis tõrge + et kopeerida seda faili Kohesed üleslaadimised Turvalisus Video üleslaadimise asukoht diff --git a/res/values-fi-rFI/strings.xml b/res/values-fi-rFI/strings.xml index 3cfc508aa7..68f3fa107e 100644 --- a/res/values-fi-rFI/strings.xml +++ b/res/values-fi-rFI/strings.xml @@ -286,7 +286,9 @@ Siirto ei onnistu. Tarkista, ettei tiedostoa ole jo olemassa Tiedosto on jo olemassa kohdekansiossa Tämän tiedoston tai kansion siirtoa yrittäessä tapahtui virhe + Kopiointi epäonnistui. Tarkista onko tiedostoa olemassa Tiedosto on jo kohdekansiossa. + Tätä tiedostoa tai kansiota kopioitaessa tapahtui virhe Välittömät lähetykset Tietoturva jaettu diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 1119107400..c591bd5397 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -307,7 +307,11 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq 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 Fichier déjà existant dans le dossier de destination + Une erreur est survenue lors de la tentative de copie de ce fichier ou dossier + de copier ce fichier Téléversement immédiat Sécurité Répertoire de téléversement des vidéos diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 05221a982b..f15dd6b478 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -303,7 +303,11 @@ Il file esiste già nella cartella di destinazione Si è verificato un errore durante il tentativo di spostare il file o la cartella per spostare questo file + Impossibile copiare. Assicurati che il file esista + Impossibile copiare una cartella in una cartella inferiore Il file esiste già nella cartella di destinazione + Si è verificato un errore durante il tentativo di copiare il file o la cartella + per copiare questo file Caricamenti istantanei Protezione Percorso di caricamento video diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml index 4b4aac1145..775e4abedf 100644 --- a/res/values-pt-rBR/strings.xml +++ b/res/values-pt-rBR/strings.xml @@ -303,7 +303,11 @@ O arquivo já existe na pasta de 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 + Ocorreu um erro ao tentar copiar este arquivo ou pasta + para copiar este arquivo Envios Instantâneos Segurança Enviar o Caminho do Vídeo From 244f3bd4e4d4dcb09be4eede2750cf2bd7670321 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Mon, 7 Sep 2015 01:13:41 -0400 Subject: [PATCH 075/133] [tx-robot] updated from transifex --- res/values-el/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index b69197094e..c35609b041 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -304,6 +304,7 @@ Ένα σφάλμα προέκυψε κατά την προσπάθεια μετακίνησης αυτού του αρχείου ή φακέλου για μετακίνηση αυτού του αρχείου Αδύνατη η αντιγραφή. Παρακαλώ ελέγξτε αν το αρχείο υπάρχει + Δεν είναι δυνατό να αντιγραφεί ο φάκελος σε παράγωγό του φάκελο Το αρχείο υπάρχει ήδη στο φάκελο προορισμού Παρουσιάστηκε σφάλμα κατά την προσπάθεια αντιγραφής αυτού του αρχείου ή φακέλου για αντιγραφή αυτού του αρχείου From 3f40da0ac998c09504d4cf391ba515acbf8307bf Mon Sep 17 00:00:00 2001 From: "David A. Velasco" Date: Mon, 7 Sep 2015 09:13:44 +0200 Subject: [PATCH 076/133] Fixed text preview filter to take into account local knowledge about MIME types --- .../owncloud/android/ui/preview/PreviewTextFragment.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java index bbf4525acc..6595bf72e3 100644 --- a/src/com/owncloud/android/ui/preview/PreviewTextFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewTextFragment.java @@ -393,12 +393,16 @@ public class PreviewTextFragment extends FileFragment { public static boolean canBePreviewed(OCFile file) { final List unsupportedTypes = new LinkedList(); unsupportedTypes.add("text/richtext"); + unsupportedTypes.add("text/rtf"); unsupportedTypes.add("text/vnd.abc"); unsupportedTypes.add("text/vnd.fmi.flexstor"); unsupportedTypes.add("text/vnd.rn-realtext"); unsupportedTypes.add("text/vnd.wap.wml"); unsupportedTypes.add("text/vnd.wap.wmlscript"); - return (file != null && file.isDown() && file.isText() && !unsupportedTypes.contains(file.getMimetype())); + return (file != null && file.isDown() && file.isText() && + !unsupportedTypes.contains(file.getMimetype()) && + !unsupportedTypes.contains(file.getMimeTypeFromName()) + ); } /** From 1ff57e0665f138f6558750928012bc0809e52ed0 Mon Sep 17 00:00:00 2001 From: "David A. Velasco" Date: Mon, 7 Sep 2015 10:07:47 +0200 Subject: [PATCH 077/133] HOT FIX: recovered lost strings --- res/values/strings.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/res/values/strings.xml b/res/values/strings.xml index 000589463c..8f1aec2199 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -287,6 +287,13 @@ Enter a password You must enter a password + Send + + Copy link + Copied to clipboard + + Critical error: cannot perform operations + An error occurred while connecting with the server. An error occurred while waiting for the server, the operation couldn\'t have been done An error occurred while waiting for the server, the operation couldn\'t have been done From e9f793755e44b2cbc197aed827eaf392ddddeda4 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Mon, 7 Sep 2015 12:24:01 +0200 Subject: [PATCH 078/133] showing the filename in the long press menu on file list, see #559 --- res/layout/file_actions.xml | 27 ++++++++++++++++--- .../ui/dialog/FileActionsDialogFragment.java | 16 +++++++++-- .../ui/fragment/OCFileListFragment.java | 2 +- 3 files changed, 38 insertions(+), 7 deletions(-) diff --git a/res/layout/file_actions.xml b/res/layout/file_actions.xml index abc42fb4fa..c52c1f18b4 100644 --- a/res/layout/file_actions.xml +++ b/res/layout/file_actions.xml @@ -3,12 +3,31 @@ xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" - android:layout_margin="@dimen/standard_margin"> + android:layout_margin="@dimen/standard_margin" + android:orientation="vertical"> + + + + - + android:layout_height="0dp" + android:layout_weight="1" + /> - \ No newline at end of file + \ No newline at end of file diff --git a/src/com/owncloud/android/ui/dialog/FileActionsDialogFragment.java b/src/com/owncloud/android/ui/dialog/FileActionsDialogFragment.java index cf75cc2288..79eb52d08f 100644 --- a/src/com/owncloud/android/ui/dialog/FileActionsDialogFragment.java +++ b/src/com/owncloud/android/ui/dialog/FileActionsDialogFragment.java @@ -12,6 +12,7 @@ import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.ListView; +import android.widget.TextView; import com.owncloud.android.R; import com.owncloud.android.ui.dialog.parcel.MenuItemParcelable; @@ -27,6 +28,7 @@ public class FileActionsDialogFragment extends DialogFragment implements OnItemClickListener { private static final String ARG_ITEM_LIST = "ITEM_LIST"; private static final String ARG_FILE_POSITION = "FILE_POSITION"; + private static final String ARG_FILE_NAME = "FILE_NAME"; public static final String FTAG_FILE_ACTIONS = "FILE_ACTIONS_FRAGMENT"; private List mMenuItems; @@ -48,7 +50,7 @@ public class FileActionsDialogFragment extends DialogFragment implements * @param menu menu to be display. * @return Dialog ready to show. */ - public static FileActionsDialogFragment newInstance(Menu menu, int filePosition) { + public static FileActionsDialogFragment newInstance(Menu menu, int filePosition, String fileName) { FileActionsDialogFragment fragment = new FileActionsDialogFragment(); Bundle args = new Bundle(); @@ -57,6 +59,7 @@ public class FileActionsDialogFragment extends DialogFragment implements args.putParcelable(ARG_ITEM_LIST, menuParcelable); args.putInt(ARG_FILE_POSITION, filePosition); + args.putCharSequence(ARG_FILE_NAME, fileName); fragment.setArguments(args); return fragment; @@ -80,7 +83,16 @@ public class FileActionsDialogFragment extends DialogFragment implements View view = inflater.inflate(R.layout.file_actions, null, false); mListView = (ListView) view.findViewById(R.id.file_actions_list); - getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); + CharSequence title = getArguments().getCharSequence(ARG_FILE_NAME); + if(title != null && title.length() > 0) { + TextView header = (TextView)view.findViewById(R.id.file_actions_header); + header.setText(title); + header.setVisibility(View.VISIBLE); + view.findViewById(R.id.file_actions_header_divider).setVisibility(View.VISIBLE); + } else { + getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); + } + return view; } diff --git a/src/com/owncloud/android/ui/fragment/OCFileListFragment.java b/src/com/owncloud/android/ui/fragment/OCFileListFragment.java index 0c96ea2c1b..02bd845dc5 100644 --- a/src/com/owncloud/android/ui/fragment/OCFileListFragment.java +++ b/src/com/owncloud/android/ui/fragment/OCFileListFragment.java @@ -193,7 +193,7 @@ public class OCFileListFragment extends ExtendedListFragment implements FileActi } } - FileActionsDialogFragment dialog = FileActionsDialogFragment.newInstance(menu, fileIndex); + FileActionsDialogFragment dialog = FileActionsDialogFragment.newInstance(menu, fileIndex, targetFile.getFileName()); dialog.setTargetFragment(this, 0); dialog.show(getFragmentManager(), FileActionsDialogFragment.FTAG_FILE_ACTIONS); } From 1d4b191fb3aec3ec9b635d268b801bba3d6e43e3 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Tue, 8 Sep 2015 01:13:44 -0400 Subject: [PATCH 079/133] [tx-robot] updated from transifex --- res/values-af-rZA/strings.xml | 1 + res/values-ar/strings.xml | 4 ++++ res/values-az/strings.xml | 4 ++++ res/values-bg-rBG/strings.xml | 4 ++++ res/values-bn-rBD/strings.xml | 4 ++++ res/values-bs/strings.xml | 1 + res/values-ca/strings.xml | 4 ++++ res/values-cs-rCZ/strings.xml | 4 ++++ res/values-da/strings.xml | 8 ++++++++ res/values-de-rAT/strings.xml | 1 + res/values-de-rDE/strings.xml | 4 ++++ res/values-de/strings.xml | 4 ++++ res/values-el/strings.xml | 4 ++++ res/values-en-rGB/strings.xml | 4 ++++ res/values-eo/strings.xml | 3 +++ res/values-es-rAR/strings.xml | 4 ++++ res/values-es-rMX/strings.xml | 2 ++ res/values-es/strings.xml | 8 ++++++++ res/values-et-rEE/strings.xml | 4 ++++ res/values-eu/strings.xml | 4 ++++ res/values-fa/strings.xml | 2 ++ res/values-fi-rFI/strings.xml | 4 ++++ res/values-fr/strings.xml | 4 ++++ res/values-hi/strings.xml | 1 + res/values-hr/strings.xml | 1 + res/values-ia/strings.xml | 1 + res/values-id/strings.xml | 4 ++++ res/values-is/strings.xml | 1 + res/values-it/strings.xml | 4 ++++ res/values-ja-rJP/strings.xml | 4 ++++ res/values-ka-rGE/strings.xml | 2 ++ res/values-ko/strings.xml | 4 ++++ res/values-lb/strings.xml | 4 ++++ res/values-lt-rLT/strings.xml | 3 +++ res/values-lv/strings.xml | 1 + res/values-mk/strings.xml | 4 ++++ res/values-ms-rMY/strings.xml | 1 + res/values-nb-rNO/strings.xml | 4 ++++ res/values-nl/strings.xml | 8 ++++++++ res/values-nn-rNO/strings.xml | 1 + res/values-oc/strings.xml | 2 ++ res/values-pa/strings.xml | 1 + res/values-pl/strings.xml | 4 ++++ res/values-pt-rBR/strings.xml | 4 ++++ res/values-ro/strings.xml | 4 ++++ res/values-ru/strings.xml | 4 ++++ res/values-sk-rSK/strings.xml | 4 ++++ res/values-sl/strings.xml | 4 ++++ res/values-sq/strings.xml | 1 + res/values-sr-rSP/strings.xml | 2 ++ res/values-sr/strings.xml | 4 ++++ res/values-sv/strings.xml | 4 ++++ res/values-te/strings.xml | 1 + res/values-tr/strings.xml | 4 ++++ res/values-uk/strings.xml | 4 ++++ res/values-ur-rPK/strings.xml | 1 + res/values-vi/strings.xml | 1 + res/values-zh-rCN/strings.xml | 4 ++++ res/values-zh-rHK/strings.xml | 2 ++ res/values-zh-rTW/strings.xml | 4 ++++ 60 files changed, 193 insertions(+) diff --git a/res/values-af-rZA/strings.xml b/res/values-af-rZA/strings.xml index 696f88ec31..7706aa769a 100644 --- a/res/values-af-rZA/strings.xml +++ b/res/values-af-rZA/strings.xml @@ -16,6 +16,7 @@ OK Kanseleer Fout + Stuur Kies diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index 723a368659..be9f464af1 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -243,6 +243,10 @@ بالمسؤول. حدث خطأ ما أثناء محاولة مشاركة هذا الملف أو المجلد حدث خطأ ما أثناء محاولة إلغاء مشاركة هذا الملف أو المجلد + أرسل + نسخ الرابط + تم النسخ للحافظة + خطأ حرج: لا يمكن تنفيذ العمليات حدث خطأ أثناء الإتصال مع الخادم. حدث خطأ أثناء إنتظار الخادم، لم يكن من الممكن القيام بالعملية حدث خطأ أثناء إنتظار الخادم، لم يكن من الممكن القيام بالعملية diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml index 61c4d0013e..ed93bc2e5f 100644 --- a/res/values-az/strings.xml +++ b/res/values-az/strings.xml @@ -250,6 +250,10 @@ inzibatçınızla əlaqə saxlayasınız. Bu fayl və ya qovluğun yayımlanmasının dayandırılmasında səhv baş verdi Şifrəni daxil et Siz şifrəni daxil etməlisiniz + Göndər + linki nüsxələ + Mübadilə buferinə nüsxələndi + Kritik səhv: əməliyyat yerinə yetirilə bilinmir Serverlə əlaqəyə girdikdə səhv baş verdi. Serveri gözlədiyimiz müddətdə səhv baş verdi, əməliyyat bitə bilməz Serveri gözlədiyimiz müddətdə səhv baş verdi, əməliyyat bitə bilməz diff --git a/res/values-bg-rBG/strings.xml b/res/values-bg-rBG/strings.xml index 48dc54db60..96334e49ec 100644 --- a/res/values-bg-rBG/strings.xml +++ b/res/values-bg-rBG/strings.xml @@ -265,6 +265,10 @@ Настъпи грешка при опита за премахване на споделянето на този файл или папка. Въведи Парола Вие трябва да въведете парола + Изпращане + Копиране на връзката + Копирана + Критична грешка: не може да изпълни операциите Настъпи грешка при свързването със сървъра. Настъпи грешка при свързването със сървъра, операцията не е изпълнена. Настъпи грешка при свързването със сървъра, операцията не е изпълнена. diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml index 56e10ec9c4..d5833d322c 100644 --- a/res/values-bn-rBD/strings.xml +++ b/res/values-bn-rBD/strings.xml @@ -230,6 +230,10 @@ ⇥⇥প্রশাসকের সঙ্গে যোগাযোগ করুন। এই ফাইল অথবা ফোল্ডার ভাগাভাগির চেষ্টা করতে যেয়ে একটি জটিলতা হয়েছে এই ফাইল অথবা ফোল্ডার ভাগাভাগি রদ করার চেষ্টা করতে যেয়ে একটি জটিলতা হয়েছে + পাঠাও + লিঙ্ক কপি করো + ক্লিপবোর্ডে কপি করা হলো + জটিল ভ্রান্তি: কাজটি করা যাবেনা সার্ভারে সংযোগ স্থাপনের সময় একটি ভ্রান্তি ঘটলো। সার্ভারের জন্য অপেক্ষা করার সময় একটি ভ্রান্তি ঘটলো, কাজটি করা যেতনা সার্ভারের জন্য অপেক্ষা করার সময় একটি ভ্রান্তি ঘটলো, কাজটি করা যেতনা diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml index a4373ac3aa..8c01ccc422 100644 --- a/res/values-bs/strings.xml +++ b/res/values-bs/strings.xml @@ -32,6 +32,7 @@ Kreiraj račun Favorit Preimenuj + Pošalji Potrebna autentifikacija Pogrešna lozinka diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index 86e209d7e6..718efbf5bc 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -237,6 +237,10 @@ La compartició no es troba disponible al vostre servidor. Contacteu amb l\'administrador. S\'ha produït un error en intentar compartir aquest fitxer o carpeta S\'ha produït un error en intentar deixar de compartir aquest fitxer o carpeta + Envia + Copia l\'enllaç + S\'ha copiat al porta-retalls + Error crític: no es poden realitzar operacions Hi ha hagut un error mentre es connectava al servidor. Hi ha hagut un error esperant al servidor, l\'operació no s\'ha pogut realitzar Hi ha hagut un error esperant el servidor, l\'operació no s\'ha pogut realitzar diff --git a/res/values-cs-rCZ/strings.xml b/res/values-cs-rCZ/strings.xml index e622b26b4f..18db5bc4e5 100644 --- a/res/values-cs-rCZ/strings.xml +++ b/res/values-cs-rCZ/strings.xml @@ -271,6 +271,10 @@ správce systému. Při pokusu o zrušení sdílení tohoto souboru či složky nastala chyba Zadejte heslo Musíte zadat heslo + Odeslat + Zkopírovat odkaz + Zkopírováno do schránky + 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 diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index 58eb8e11ab..80a6032086 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -271,6 +271,10 @@ Der opstod en fejl ved stopning af deling af denne mappe. Angiv et kodeord Du skal angive et kodeord + Send + Kopiér link + Kopieret til udklipsholder + Kritisk fejl: kan ikke udføre handlingerne Der opstod en fejl under tilslutningen til serveren. Der opstod en fejl mens vi ventede på serveren, handlingen kunne ikke gennemføres Der opstod en fejl mens vi ventede på serveren, handlingen kunne ikke gennemføres @@ -302,7 +306,11 @@ Filen findes allerede i destinationsmappen Der opstod en fejl under forsøg på at flytte denne mappe eller fil til at flytte denne fil + Kunne ikke kopiere. Tjek venligst om filerne findes + Det er ikke muligt at kopiere en mappe til én af dens undermapper Filen findes allerede i destinationsmappen + Der opstod en fejl under forsøg på at kopiere denne fil eller mappe + til at kopiere denne fil Øjeblikkelige uploads Sikkerhed Sti til videoupload diff --git a/res/values-de-rAT/strings.xml b/res/values-de-rAT/strings.xml index 40855048e0..a99ab891be 100644 --- a/res/values-de-rAT/strings.xml +++ b/res/values-de-rAT/strings.xml @@ -106,6 +106,7 @@ Ein paar Dateien konnten nicht verschoben werden Lokal: %1$s Details + Senden Konten Adresse des Servers diff --git a/res/values-de-rDE/strings.xml b/res/values-de-rDE/strings.xml index 624cb7f648..7fe556bbc8 100644 --- a/res/values-de-rDE/strings.xml +++ b/res/values-de-rDE/strings.xml @@ -268,6 +268,10 @@ Es ist ein Fehler beim Entfernen der Freigabe für diese Datei oder den Ordner aufgetreten. Passwort eingeben Sie müssen ein Passwort eingeben + Senden + Link kopieren + In die Zwischenablage 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 diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index df6da87bcc..8a34aeb34b 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -268,6 +268,10 @@ Es ist ein Fehler beim Entfernen der Freigabe für diese Datei oder den Ordner aufgetreten. Passwort eingeben Du musst ein Passwort eingeben + Senden + Link kopieren + In die Zwischenablage kopiert + 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 kann nicht ausgeführt werden Es ist ein Fehler beim Warten auf den Server aufgetreten, die Operation kann nicht ausgeführt werden diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index c35609b041..434d5fbfe1 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -272,6 +272,10 @@ Ένα σφάλμα προέκυψε κατά τη διάρκεια ακύρωσης διαμοιρασμού αυτού του αρχείου ή φακέλου Εισάγετε ένα κωδικό πρόσβασης. Πρέπει να εισάγετε ένα κωδικό πρόσβασης. + Αποστολή + Αντιγραφή συνδέσμου + Αντιγράφηκε στο πρόχειρο + Κρίσιμο σφάλμα: αδύνατη η εκτέλεση λειτουργειών Ένα σφάλμα προέκυψε κατά τη σύνδεση με το διακομιστή. Ένα σφάλμα προέκυψε κατά την αναμονή για το διακομιστή, η λειτουργία δεν ήταν επιτυχής Ένα σφάλμα προέκυψε κατά την αναμονή για το διακομιστή, η λειτουργία δεν ήταν επιτυχής diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index 274eada4cf..f0c7acde0a 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -259,6 +259,10 @@ An error occurred while trying to unshare this file or folder Enter a password You must enter a password + Send + Copy link + Copied to clipboard + Critical error: cannot perform operations An error occurred whilst connecting to the server. An error occurred whilst waiting for the server, the operation couldn\'t be done An error occurred whilst waiting for the server, the operation couldn\'t been done diff --git a/res/values-eo/strings.xml b/res/values-eo/strings.xml index fbe39aa321..daf7c1fe4c 100644 --- a/res/values-eo/strings.xml +++ b/res/values-eo/strings.xml @@ -172,6 +172,9 @@ %1$s ne povis kopiiĝi al la loka dosierujo %2$s Enigu pasvorton Vi devas enigi pasvorton + Sendi + Kopii ligilon + Kopiita en la tondejon Eraro okazis dum konekto al la servilo. Kontoj diff --git a/res/values-es-rAR/strings.xml b/res/values-es-rAR/strings.xml index d4783c611e..f159bce258 100644 --- a/res/values-es-rAR/strings.xml +++ b/res/values-es-rAR/strings.xml @@ -241,6 +241,10 @@ Un error ocurrió cuando se intentaba compartir el archivo o carpeta Imposible dejar de compartir. Por favor revise si los archivos existen Un error ocurrió cuando se intentaba dejar de compartir el archivo o carpeta + Mandar + Copiar dirección url + Copiado al portapapeles + Error critico: no se puede realizar operaciones Un error ocurrió mientras se conectaba con el Servidor. Un error ocurrió mientras se conectaba con el Servidor. La operación no se realizó Un error ocurrió esperando al Servidor, la operación no se realizó diff --git a/res/values-es-rMX/strings.xml b/res/values-es-rMX/strings.xml index e23a9f5329..84733332e6 100644 --- a/res/values-es-rMX/strings.xml +++ b/res/values-es-rMX/strings.xml @@ -200,6 +200,8 @@ /SubidasInstantáneas Mantener ambas Previsualización de imagen + Enviar + Copiado al portapapeles Cuentas Contraseña incorrecta diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index 983f984786..88566cd3fd 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -272,6 +272,10 @@ Ocurrió un error al tratar de ya no compartir este archivo o carpeta Introduzca una contraseña Debe introducir una contraseña + Enviar + Copiar enlace + Copiado al portapapeles + Error crítico: no es posible 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 @@ -303,7 +307,11 @@ El archivo ya existe en la carpeta de destino Hubo un error al tratar de mover este archivo o carpeta para mover este archivo + No se puede copiar. Revise si el archivo existe + No se puede copiar una carpeta dentro de una de sus subcarpetas. El fichero ya existe en el directorio de destino + Hubo un error al tratar de copiar este archivo o carpeta + para copiar este archivo Subidas instantáneas Seguridad Guardar videos subidos en la carpeta: diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml index da70cb1b2a..a4841a42db 100644 --- a/res/values-et-rEE/strings.xml +++ b/res/values-et-rEE/strings.xml @@ -276,6 +276,10 @@ Allpool on loend kohalikest failidest ning serveris asuvatest failidest %5$s, mi Faili või kausta jagamise tühistamisel esines viga Sisesta parool Sa pead parooli sisestama + Saada + Kopeeri link + Kopeeritud lõikepuhvrisse + Viga: ei suutnud operatsiooni lõpetada Serveriga ühendumisel tekkis tõrge. Serverilt vastuse ootamisel tekkis tõrge, toimingu sooritamine ebaõnnestus Serverilt vastuse ootamisel tekkis tõrge, toimingu sooritamine ebaõnnestus diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml index 2f22df0757..a532d2caae 100644 --- a/res/values-eu/strings.xml +++ b/res/values-eu/strings.xml @@ -240,6 +240,10 @@ Mesedez, baimendu berriz Errore bat egon da fitxategaia edo karpeta partekatzerakoan Ezin izan da partekatzea desegin. Mesedez egiaztatu fitxategia existitzen dela Errore bat egon da fitxategaia edo karpeta partekatzeari uzterakoan + Bidali + Lotura kopiatu + Arbelera kopiatua + Errore larria: ezin dira egin eragiketak Errore bat gertatu da zerbitzariarekin konektatzean. Errore bat gertatu da zerbitzariaren zain egon bitartean, ezin izan da eragiketa burutu Errore bat gertatu da zerbitzariaren zain egon bitartean, ezin izan da eragiketa burutu diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index 249ab7a0ec..a84969fa05 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -208,6 +208,8 @@ نمایش این عکس امکانپذیر نمی باشد در حین اشتراک گذاری این فایل یا پوشه خطایی رخ داده است در حین حذف اشتراک گذاری این فایل یا پوشه خطایی رخ داده است + ارسال + کپی به کلیپ بورد تکمیل عملیات امکانپذیر نمی باشد، سرور در دسترس نمی باشد برای تغییر نام این فایل diff --git a/res/values-fi-rFI/strings.xml b/res/values-fi-rFI/strings.xml index 68f3fa107e..41d393716e 100644 --- a/res/values-fi-rFI/strings.xml +++ b/res/values-fi-rFI/strings.xml @@ -257,6 +257,10 @@ Virhe tiedoston tai kansion jakamista yrittäessä Anna salasana Salasana on pakko antaa + Lähetä + Kopioi linkki + Kopioitu leikepöydälle + Kriittinen virhe: toimintoja ei voi suorittaa Virhe palvelimeen yhdistäessä Virhe palvelimen vastausta odottaessa, toimintoa ei voitu suorittaa Virhe palvelimen vastausta odottaessa, toimintoa ei voitu suorittaa diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index c591bd5397..d241bd2911 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -276,6 +276,10 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq Une erreur est survenue lors de la tentative d’annulation du partage de ce fichier ou répertoire Saisissez un mot de passe Vous devez saisir un mot de passe + Envoyer + Copier le lien + Copié dans le presse-papier + Erreur critique : impossible de réaliser des 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 diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index d6f306399c..feb62ce744 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -31,6 +31,7 @@ रद्द करें त्रुटि विवरण + भेजें खाते diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index 1d8d354bab..12e7ef43b0 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -58,6 +58,7 @@ Promjeni ime Makni Detalji + Pošaljite Korisnićki računi Potrebna autentikacija diff --git a/res/values-ia/strings.xml b/res/values-ia/strings.xml index 98e9b2a598..efb3d3d5a1 100644 --- a/res/values-ia/strings.xml +++ b/res/values-ia/strings.xml @@ -40,6 +40,7 @@ Cambiar contrasigno Deler conto Nomine de dossier + Invia Contos Contrasigno errate diff --git a/res/values-id/strings.xml b/res/values-id/strings.xml index 6320692ee9..8515df225f 100644 --- a/res/values-id/strings.xml +++ b/res/values-id/strings.xml @@ -272,6 +272,10 @@ Terjadi kesalahan saat mencoba menghapus berbagi berkas dan folder ini Masukkan sandi Anda harus memasukkan sandi + Kirim + Salin tautan + Disalin ke papan klip + Kesalahan fatal: tidak dapat melakukan operasi Terjadi kesalahan saat menghubungkan dengan server. Terjadi kesalahan saat menunggu balasan server, operasi tidak dapat diselesaikan Terjadi kesalahan saat menunggu balasan server, operasi tidak dapat diselesaikan diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml index 22896537b8..2d50d6fd7f 100644 --- a/res/values-is/strings.xml +++ b/res/values-is/strings.xml @@ -31,6 +31,7 @@ Nafn möppu Endurskýra Fjarlægja + Senda Færa Veldu diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index f15dd6b478..874bbe6fd1 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -272,6 +272,10 @@ Si è verificato un errore durante il tentativo di rimuovere la condivisione del file o della cartella Digita una password Devi digitare una password + Invia + Copia collegamento + Copiato negli appunti + Errore grave: impossibile eseguire le operazioni Si è verificato un errore durante la connessione al server. Si è verificato un errore in attesa della risposta del server, l\'operazione non è stata completata Si è verificato un errore in attesa della risposta del server, l\'operazione non è stata completata diff --git a/res/values-ja-rJP/strings.xml b/res/values-ja-rJP/strings.xml index 9f06a366a8..b51e644b98 100644 --- a/res/values-ja-rJP/strings.xml +++ b/res/values-ja-rJP/strings.xml @@ -269,6 +269,10 @@ このファイルまたはフォルダーの共有を解除する際にエラーが発生しました パスワードを入力 パスワードを入力しなければなりません + 送信 + リンクをコピー + クリップボードにコピー + 致命的なエラー:操作を実行できません サーバーへの接続中にエラーが発生しました。 サーバーからの応答を待っている間にエラーが発生しました。操作を完了することができません。 サーバーからの応答を待っている間にエラーが発生しました。操作を完了することができません。 diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml index f01cbfbc4f..0d7d86016e 100644 --- a/res/values-ka-rGE/strings.xml +++ b/res/values-ka-rGE/strings.xml @@ -136,6 +136,8 @@ ატვირთეთ სურათები მხოლოდ WiFi–ით /ეგრევე ატვირთვა დატოვე ორივე + გაგზავნა + კოპირებულია კლიპბორდში ანგარიში არჩევა diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index 35f19710f7..d3a813ac75 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -265,6 +265,10 @@ 이 파일이나 폴더의 공유를 해제하는 중 오류 발생 암호 입력 암호를 입력해야 합니다 + 보내기 + 링크 주소 복사 + 클립보드로 복사됨 + 치명적 오류: 작업을 진행할 수 없음 서버에 연결하는 중 오류가 발생하였습니다. 서버를 기다리는 중 오류가 발생하였습니다. 작업이 진행되지 않았을 수도 있습니다 서버를 기다리는 중 오류가 발생하였습니다. 작업이 진행되지 않았을 수도 있습니다 diff --git a/res/values-lb/strings.xml b/res/values-lb/strings.xml index 1e719f4ae8..80ccbff03a 100644 --- a/res/values-lb/strings.xml +++ b/res/values-lb/strings.xml @@ -192,6 +192,10 @@ Pad fir d\'Eroplueden E Passwuert aginn Du muss e Passwuert aginn + Schécken + Link kopéieren + An d\'Tëschenoflag kopéiert + Kritesche Feeler: D\'Operatioune konnten net ausgeféiert ginn Bei der Connectioun mam Server ass e Feeler opgetrueden. Beim Waarden op de Server ass e Feeler opgetrueden, d\'Operatioun konnt net duerchgeféiert ginn Beim Waarden op de Server ass e Feeler opgetrueden, d\'Operatioun konnt net duerchgeféiert ginn diff --git a/res/values-lt-rLT/strings.xml b/res/values-lt-rLT/strings.xml index c0a3d70af9..9d3643f142 100644 --- a/res/values-lt-rLT/strings.xml +++ b/res/values-lt-rLT/strings.xml @@ -226,6 +226,9 @@ Neįmanoma parodyti šio paveikslėlio Įvyko klaida bandant dalinti šį failą ar aplanką Įvyko klaida bandant nebedalinti šio failu ar aplanku + Siųsti + Kopijuoti nuorodą + Nukopijuota į talpyklę Paskyros Neteisingas slaptažodis diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index a651cdf77d..ea13b1b94d 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -154,6 +154,7 @@ Attēlus augšupielādēt tikai caur WiFi /TūlītējaAugšupielāde Paturēt abas + Sūtīt Konti Nepareiza parole diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml index e6cbf97ad3..1c6f96fd16 100644 --- a/res/values-mk/strings.xml +++ b/res/values-mk/strings.xml @@ -257,6 +257,10 @@ Се случи грешка кога пробав да го тргнам споделувањето на оваа датотека или папка Внесете лозинка Морате да внесете лозинка + Прати + Копирај врска + Копирано во клипборд + Критична грешка: не можам да ја извршам операцијата Се случи грешка при конектирање со серверот. Се случи грешка при чекање на на серверот, операцијата не можеше да се изврши Се случи грешка при чекање на на серверот, операцијата не можеше да се изврши diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml index 0d79479852..4ac4d9523a 100644 --- a/res/values-ms-rMY/strings.xml +++ b/res/values-ms-rMY/strings.xml @@ -57,6 +57,7 @@ Buang Lokal sahaja Lokal sahaja + Hantar Akaun Alamat pelayan diff --git a/res/values-nb-rNO/strings.xml b/res/values-nb-rNO/strings.xml index 6e24b9a913..43b1ba8469 100644 --- a/res/values-nb-rNO/strings.xml +++ b/res/values-nb-rNO/strings.xml @@ -266,6 +266,10 @@ En feil oppstod ved avslutting av delingen av denne filen eller mappen Skriv inn ett passord Du må skrive inn ett passord + Send + Kopier lenke + Kopiert til utklippstavlen + Kritisk feil: kan ikke utføre operasjonene En feil oppstod ved oppretting av forbindelse til serveren. En feil oppstod ved venting på svar fra serveren. Operasjonen kunne ikke utføres En feil oppstod ved venting på svar fra serveren. Operasjonen kunne ikke utføres diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index 94b4f08642..88eef42121 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -275,6 +275,10 @@ Hieronder staan de lokale bestanden en de externe bestanden in %5$s waar ze naar Er trad een fout op bij uw poging het delen van dit bestand of deze map te beëindigen Vul het wachtwoord in U moet een wachtwoord opgeven + Versturen + Link kopiëren + Gekopieerd naar het klembord + 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 @@ -306,7 +310,11 @@ Hieronder staan de lokale bestanden en de externe bestanden in %5$s waar ze naar Het bestand bestaat al in de doelmap Er trad een fout op bij uw poging dit bestand of deze map te verplaatsen om dit bestand te verplaatsen + Kan niet kopiëren. Ga na of het bestand wel bestaat + De map kan niet naar een onderliggende map worden gekopieerd Het bestand bestaat al in de doelmap + Er trad een fout op bij uw poging dit bestand of deze map te kopiëren + om dit bestand te kopiëren Directe uploads Beveiliging Upload Video Pad diff --git a/res/values-nn-rNO/strings.xml b/res/values-nn-rNO/strings.xml index a7d79a3abd..2a12cc08a1 100644 --- a/res/values-nn-rNO/strings.xml +++ b/res/values-nn-rNO/strings.xml @@ -121,6 +121,7 @@ Klarte ikkje å lagra sertifikatet Detaljar Berre last opp bilete over WiFi + Send Kontoar Feil passord diff --git a/res/values-oc/strings.xml b/res/values-oc/strings.xml index b767bf8133..3e17598974 100644 --- a/res/values-oc/strings.xml +++ b/res/values-oc/strings.xml @@ -58,6 +58,8 @@ Torna nomenar Suprimir País : + Mandar + Copiat dins lo quichapapièrs Comptes Autentificacion requesida diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml index 2fbd345486..f68a9c64b3 100644 --- a/res/values-pa/strings.xml +++ b/res/values-pa/strings.xml @@ -117,6 +117,7 @@ ਤਸਵੀਰਾਂ ਨੂੰ ਵਾਈ-ਫਾਈ ਰਾਹੀਂ ਹੀ ਅੱਪਲੋਡ ਕਰੋ ਦੋਵੇਂ ਰੱਖੋ ਚਿੱਤਰ ਝਲਕ + ਭੇਜੋ ਅਕਾਊਂਟ ਚੁਣੋ diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index c9a41ad736..95168bdc46 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -269,6 +269,10 @@ Wystąpił błąd podczas anulowania udostępniania tego pliku lub folderu. Wprowadź hasło Musisz wprowadzić hasło + Wyślij + Skopiuj link + Skopiuj do schowka + 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 diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml index 775e4abedf..8102092d63 100644 --- a/res/values-pt-rBR/strings.xml +++ b/res/values-pt-rBR/strings.xml @@ -272,6 +272,10 @@ Ocorreu um erro ao tentar descompartilhar este arquivo ou pasta Digite uma senha Você deve digitar uma senha + Enviar + Copiar link + Copiado para área de transferência + Erro crítico: não pode executar operações Ocorreu um erro durante a conexão com o servidor. Ocorreu um erro enquanto se espera pelo servidor, a operação não poderia ter sido executada Ocorreu um erro enquanto se espera pelo servidor, a operação não poderia ter sido executada diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index ca934854ab..e539924279 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -271,6 +271,10 @@ A apărut o eroare în timp ce încerca să departajeze sau unshare acest fișier sau folder Introduceţi parola Trebuie să introduci o parolă + Trimite + Link copiat + Copiat în clipboard + Eroare critică: nu se pot executa operațiunile A apărut o eroare în timp ce se conecta la server A apărut o eroare în timp ce se aștepta pentru server, operațiunea nu s-a executat A apărut o eroare în timp ce se aștepta pentru server, operațiunea nu s-a executat diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index c6434c600c..5e4e3e3662 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -269,6 +269,10 @@ При попытке закрыть доступ к этому файлу или каталогу произошла ошибка Введите пароль Вы должны ввести пароль + Отправить + Копировать ссылку + Скопировано в буфер обмена + Критическая ошибка: невозможно выполнить действия При подключении к серверу возникла ошибка Во время ожидания сервера произошла ошибка, действие не может быть выполнено Во время ожидания сервера произошла ошибка, действие не может быть выполнено diff --git a/res/values-sk-rSK/strings.xml b/res/values-sk-rSK/strings.xml index 54bc063a1d..eb5fdf5e16 100644 --- a/res/values-sk-rSK/strings.xml +++ b/res/values-sk-rSK/strings.xml @@ -258,6 +258,10 @@ Pri pokuse zrušiť zdieľanie tohto súboru alebo priečinka došlo k chybe Vložte heslo Musíte vložiť heslo + Odoslať + Kopíruj odkaz + Skopírované do schránky + Kritická chyba: operáciu nemožno vykonať Pri pokuse o pripojenie na server nastala chyba. Pri čakaní na odpoveď servera nastala chyba, operácia nemohla byť dokončená Pri čakaní na odpoveď servera nastala chyba, operácia nemohla byť dokončená diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index 541ad9c3e5..e58ba5b72b 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -272,6 +272,10 @@ Prišlo je do napake med poskusom odstranjevanja souporabe te datoteke ali mape Vpis gesla Vpisati je treba geslo. + Pošlji + Kopiraj povezavo + Kopirano v odložišče + Kritična napaka: dejanj ni možno izvesti Med povezovanjem s strežnikom je prišlo do napake. Med čakanjem na vzpostavitev povezave s strežnikom je prišlo do napake. Zahtevanega dejanja ni mogoče izvesti. Med čakanjem na vzpostavitev povezave s strežnikom je prišlo do napake. Zahtevanega dejanja ni bilo mogoče končati. diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml index 384cf7520e..fc3b8a4d17 100644 --- a/res/values-sq/strings.xml +++ b/res/values-sq/strings.xml @@ -67,6 +67,7 @@ Lidhja e Sigurt vendos Riemërto Hiq + Dërgo Llogarit Fjalëkalim i gabuar diff --git a/res/values-sr-rSP/strings.xml b/res/values-sr-rSP/strings.xml index 72526830ec..a8200978e2 100644 --- a/res/values-sr-rSP/strings.xml +++ b/res/values-sr-rSP/strings.xml @@ -68,6 +68,8 @@ Za: Potpis: Zadrži oboje + Pošalji + Kopirano u klipbord Nalozi Izaberi diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml index e0ca4455a0..4ed55083e9 100644 --- a/res/values-sr/strings.xml +++ b/res/values-sr/strings.xml @@ -266,6 +266,10 @@ Дошло је до грешке приликом покушаја укидања дељења овог фајла или фасцикле Унесите лозинку Морате унети лозинку + Пошаљи + Копирај везу + Копирано у клипборд + Критична грешка: не могу да радим Дошло је до грешке при повезивању са сервером. Дошло је до грешке при чекању на сервер. Радња није могла бити урађена Дошло је до грешке при чекању на сервер. Радња није могла бити урађена diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index 609dd97597..5a6cdba2aa 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -246,6 +246,10 @@ Ett fel uppstod vid försök att sluta dela denna fil eller mapp Ange ett lösenord Du måste ange ett lösenord + Skicka + Kopiera länk + Kopierat till urklipp + Kritiskt fel: kan inte utföra åtgärden Ett fel uppstod vid anslutning till servern. Ett fel uppstod i väntan på servern, operationen kunde inte ha gjorts Ett fel uppstod i väntan på servern, operationen kunde inte ha gjorts diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml index 0733dea76c..da5ece702a 100644 --- a/res/values-te/strings.xml +++ b/res/values-te/strings.xml @@ -21,6 +21,7 @@ రద్దుచేయి పొరపాటు సంచయం పేరు + పంపించు సేవకి చిరునామా diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index 4dcfc9bf7d..d682fe653e 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -272,6 +272,10 @@ Bu dosya veya klasör paylaşımı kaldırılmaya çalışılırken bir hata oluştu Bir parola girin Bir parola girmelisiniz + Gönder + Bağlantıyı kopyala + Panoya kopyalandı + Ciddi hata: işlem gerçekleştirilemiyor Sunucuya bağlanılırken bir hata oluştu. Sunucu beklenirken bir hata oluştu, işlem yapılamadı Sunucu beklenirken bir hata oluştu, işlem yapılamadı diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index 1ad37a0df1..c3bd6a09ba 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -253,6 +253,10 @@ Виникла помилка при спробі заборонити доступ до файлу або теки Ввести пароль Ви повинні ввести пароль + Надіслати + Копіювати посилання + Скопійовано в буфер обміну + Критична помилка: виконання операції неможливе Виникла помилка при підключені до сервера. Під час очікування на сервер виникла помилка, операцію неможливо завершити Під час очікування на сервер виникла помилка, операцію неможливо завершити diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml index ecfd541581..3e97d3fa7e 100644 --- a/res/values-ur-rPK/strings.xml +++ b/res/values-ur-rPK/strings.xml @@ -23,6 +23,7 @@ منسوخ کریں ایرر غیر معروف خرابی + بھجیں منتخب کریں diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index 64dc95c299..bdccc82ad8 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -204,6 +204,7 @@ Xem trước hình ảnh Một lỗi đã xảy ra khi thử chia sẻ file hoặc thư mục này Một lỗi đã xảy ra khi thử gỡ chia sẻ file hoặc thư mục này + Gởi Tài khoản Chọn diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 0bd5d80144..ca8e51a211 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -271,6 +271,10 @@ 解除文件或目录共享时出错 输入密码 您必须输入密码 + 发送 + 复制链接 + 复制到剪贴板 + 严重错误:无法执行操作 连接到服务器时发生了一个错误。 等待服务器响应时发生了一个错误,此操作无法完成 等待服务器响应时发生了一个错误,此操作无法完成 diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml index 8eb0f2b9c6..7810b88c8e 100644 --- a/res/values-zh-rHK/strings.xml +++ b/res/values-zh-rHK/strings.xml @@ -72,6 +72,8 @@ 389 KB 2012/05/18 12:23 PM 12:23:45 + 發送 + 複製連結 帳號 密碼錯誤 diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index 50d30a7003..db564b1652 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -272,6 +272,10 @@ 在取消分享檔案或目錄時發生了錯誤 輸入密碼 您必須輸入密碼 + 寄出 + 複製連結 + 複製至剪貼簿中 + 嚴重錯誤: 無法執行運算 在與伺服器連線時發生了錯誤. 在等待伺服器回應時發生了錯誤, 這個操作將無法被完成 在等待伺服器回應時發生了錯誤, 這個操作將無法被完成 From fbe533c974cd3b26e889bd0460c1268787c36177 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Wed, 9 Sep 2015 01:13:45 -0400 Subject: [PATCH 080/133] [tx-robot] updated from transifex --- res/values-cy-rGB/strings.xml | 1 + res/values-gl/strings.xml | 4 ++++ res/values-he/strings.xml | 4 ++++ res/values-hu-rHU/strings.xml | 3 +++ res/values-km/strings.xml | 1 + res/values-kn/strings.xml | 1 + res/values-pt-rPT/strings.xml | 4 ++++ res/values-ta-rIN/strings.xml | 1 + res/values-th-rTH/strings.xml | 4 ++++ res/values-ug/strings.xml | 1 + 10 files changed, 24 insertions(+) diff --git a/res/values-cy-rGB/strings.xml b/res/values-cy-rGB/strings.xml index f5a51773c6..e7e46feca5 100644 --- a/res/values-cy-rGB/strings.xml +++ b/res/values-cy-rGB/strings.xml @@ -128,6 +128,7 @@ Llwytho lluniau i fyny drwy WiFi\'n unig /LlwythoSyth Cadw\'r ddau + Anfon Cyfrifon Dewisiwch diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml index edf331a556..51aa4a401c 100644 --- a/res/values-gl/strings.xml +++ b/res/values-gl/strings.xml @@ -272,6 +272,10 @@ Descárgueo de aquí: %2$s Produciuse un erro ao tentar deixar de compartir este ficheiro ou cartafol Escriba un contrasinal Ten que escribir un contrasinal + Enviar + Copiar a ligazón + Copiado no portapapeis. + Produciuse un erro crítico: non é posíbel realizar as operacións Produciuse un erro mentres conectaba co servidor. Produciuse un erro mentres agardaba polo servidor, a operación non se puido levar a fin Produciuse un erro mentres agardaba polo servidor, a operación non se puido levar a fin diff --git a/res/values-he/strings.xml b/res/values-he/strings.xml index 74cc8cbdf7..1a62cc2d20 100644 --- a/res/values-he/strings.xml +++ b/res/values-he/strings.xml @@ -231,6 +231,10 @@ ⇥⇥מנהל. שגיאה אירעה בזמן ניסיון לשתף קובץ זה או תיקייה זו שגיאה אירעה בזמן ניסיון לבטל שיתוף לקובץ זה או לתיקייה זו + שליחה + העתקת קישור + הועתק ללוח הגזירים - clipboard + שגיאה קריטית: לא ניתן לבצע את הפעולות שגיאה אירעה בזמן חיבור לשרת. שגיאה אירעה בזמן המתנה לשרת, הפעולה לא הייתה ניתנת להשלמה שגיאה אירעה בזמן המתנה לשרת, הפעולה לא הייתה ניתנת להשלמה diff --git a/res/values-hu-rHU/strings.xml b/res/values-hu-rHU/strings.xml index c716901f0c..b8bae64cf9 100644 --- a/res/values-hu-rHU/strings.xml +++ b/res/values-hu-rHU/strings.xml @@ -226,6 +226,9 @@ %1$s nem lehet másolni a %2$s helyi könyvtárba Hiba lépett fel a mappa megosztásakor Hiba lépett fel a mappa megosztásának visszavonásakor + Küldjük el + Link másolása + Bemásolva a vágólapra Fiókok Fiók hozzáadása diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml index 89cbb7eb23..68b39212ac 100644 --- a/res/values-km/strings.xml +++ b/res/values-km/strings.xml @@ -98,6 +98,7 @@ ចាប់ពីៈ រហូតដល់ៈ ហត្ថលេខា: + ផ្ញើ គណនី ខុស​ពាក្យ​សម្ងាត់ diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml index 8add0e403b..ef5e51c71f 100644 --- a/res/values-kn/strings.xml +++ b/res/values-kn/strings.xml @@ -33,6 +33,7 @@ ಅಚ್ಚುಮೆಚ್ಚಿನ ಮರುಹೆಸರಿಸು ತೆಗೆದುಹಾಕಿ + ಕಳುಹಿಸಿ ದೃಢೀಕರಣ ಅಗತ್ಯವಿದೆ ದುರ್ಬಲ ಗುಪ್ತಪದ diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index 6324922ca9..1d91a6b201 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -270,6 +270,10 @@ Ocorreu um erro enquanto retirava a partilha deste ficheiro ou pasta Introduza uma palavra-passe Você deve introduzir uma palavra-passe + Enviar + Copiar hiperligação + Copiado para a área de transferência + Erro crítico: não é possível executar as operações Ocorreu um erro durante a ligação ao servidos. Ocorreu um erro durante a ligação ao servidor, não foi possível realizar a operação. Ocorreu um erro durante a ligação ao servidor, não foi possível realizar a operação. diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta-rIN/strings.xml index 5bfb25f93e..30b37f0a5f 100644 --- a/res/values-ta-rIN/strings.xml +++ b/res/values-ta-rIN/strings.xml @@ -33,6 +33,7 @@ பதிவேற்று புதிய கோப்புறை விவரங்கள் + அனுப்பவும் கணக்குகள் diff --git a/res/values-th-rTH/strings.xml b/res/values-th-rTH/strings.xml index ef33def59f..836a2af2d4 100644 --- a/res/values-th-rTH/strings.xml +++ b/res/values-th-rTH/strings.xml @@ -270,6 +270,10 @@ เกิดข้อผิดพลาดในขณะที่จะยกเลิกการอชร์ไฟล์หรือโฟลเดอร์นี้ ป้อนรหัสผ่าน คุณจะต้องใส่รหัสผ่าน + ส่ง + คัดลอกลิงค์ + คัดลอกไปยังคลิปบอร์ด + ข้อผิดพลาด: ไม่สามารถดำเนินการได้ เกิดข้อผิดพลาดขณะกำลังเชื่อมต่อกับเซิร์ฟเวอร์ เกิดข้อผิดพลาดขณะที่รอการดำเนินการจากเซิร์ฟเวอร์ เกิดข้อผิดพลาดขณะที่รอการดำเนินการจากเซิร์ฟเวอร์ diff --git a/res/values-ug/strings.xml b/res/values-ug/strings.xml index 92419b061b..4573d71373 100644 --- a/res/values-ug/strings.xml +++ b/res/values-ug/strings.xml @@ -47,6 +47,7 @@ يىغقۇچ ئات ئۆزگەرت چىقىرىۋەت + يوللا ھېساباتلار بىخەتەرلىك From b4875c69ccfd5164ef497c1e641dc3b8b7c22860 Mon Sep 17 00:00:00 2001 From: Marc Plano-Lesay Date: Wed, 9 Sep 2015 23:30:09 +0200 Subject: [PATCH 081/133] Add additional filetype icons --- res/drawable-hdpi/file_application.png | Bin 0 -> 4425 bytes res/drawable-hdpi/file_calendar.png | Bin 0 -> 2797 bytes res/drawable-hdpi/file_code.png | Bin 0 -> 1873 bytes res/drawable-hdpi/file_vcard.png | Bin 0 -> 5068 bytes res/drawable-hdpi/folder_external.png | Bin 0 -> 2645 bytes res/drawable-mdpi/file_application.png | Bin 0 -> 2842 bytes res/drawable-mdpi/file_calendar.png | Bin 0 -> 1979 bytes res/drawable-mdpi/file_code.png | Bin 0 -> 1280 bytes res/drawable-mdpi/file_vcard.png | Bin 0 -> 3326 bytes res/drawable-mdpi/folder_external.png | Bin 0 -> 1859 bytes res/drawable-xhdpi/file_application.png | Bin 0 -> 5922 bytes res/drawable-xhdpi/file_calendar.png | Bin 0 -> 3889 bytes res/drawable-xhdpi/file_code.png | Bin 0 -> 2461 bytes res/drawable-xhdpi/file_vcard.png | Bin 0 -> 6799 bytes res/drawable-xhdpi/folder_external.png | Bin 0 -> 3462 bytes res/drawable-xxhdpi/file_application.png | Bin 0 -> 8908 bytes res/drawable-xxhdpi/file_calendar.png | Bin 0 -> 5994 bytes res/drawable-xxhdpi/file_code.png | Bin 0 -> 4500 bytes res/drawable-xxhdpi/file_vcard.png | Bin 0 -> 10442 bytes res/drawable-xxhdpi/folder_external.png | Bin 0 -> 5281 bytes 20 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 res/drawable-hdpi/file_application.png create mode 100644 res/drawable-hdpi/file_calendar.png create mode 100644 res/drawable-hdpi/file_code.png create mode 100644 res/drawable-hdpi/file_vcard.png create mode 100644 res/drawable-hdpi/folder_external.png create mode 100644 res/drawable-mdpi/file_application.png create mode 100644 res/drawable-mdpi/file_calendar.png create mode 100644 res/drawable-mdpi/file_code.png create mode 100644 res/drawable-mdpi/file_vcard.png create mode 100644 res/drawable-mdpi/folder_external.png create mode 100644 res/drawable-xhdpi/file_application.png create mode 100644 res/drawable-xhdpi/file_calendar.png create mode 100644 res/drawable-xhdpi/file_code.png create mode 100644 res/drawable-xhdpi/file_vcard.png create mode 100644 res/drawable-xhdpi/folder_external.png create mode 100644 res/drawable-xxhdpi/file_application.png create mode 100644 res/drawable-xxhdpi/file_calendar.png create mode 100644 res/drawable-xxhdpi/file_code.png create mode 100644 res/drawable-xxhdpi/file_vcard.png create mode 100644 res/drawable-xxhdpi/folder_external.png diff --git a/res/drawable-hdpi/file_application.png b/res/drawable-hdpi/file_application.png new file mode 100644 index 0000000000000000000000000000000000000000..a2c71fa3e691955a0fede87b6f616d4bd4f90fcb GIT binary patch literal 4425 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�=q64=hIA>9=$U9N)8n`LKy;rng#bL)Bx&+(l zJSs9ALcg1={@s$qhQJFJK8bLxVXdWZHC7M#i)r)b5%}DWM5kWdMl^#n;2t)LeGyJ};{m zZ>fq#gx;kWQmItkrNc>2_ZCn9oqiXh{uT}}lz#!5!C|dyoHkyz6>(!(O--%%OYbhn z9q)_o$nVTKIuYZdo5K>UZkq4Mnp@`Q&z03YYo zNZYI!4ziZs4oPr9uhzW{Ve9vFJeDYV8$!9`|A!NLKqK68@Re9YjN)GGyDUrPM6_s1$|@jnM|b;z^^y} zIbde}rVX8&i0N*j(N8?_FrkCNmEBq9@?2ADQzX85a`y_h8zW`gJlP>>t8g-5_|U;D z^7Lq^DJyvFR~6wN+ORF_?Pv@o`T$k$#ag`+7I^{8s}dR!X+tHLFsKsl`Ob^t&z?PK zhi5`o4zDsc110fc+=~>kHp7r0hO$1y z=eAxd+4HqPp$HDs`?~it2L}gvXTFYCUeu1^KfQ?F=%KX&SB^gOeIu?{J>b>|nj*rx z#UvEG^QH7ilh$^6kKjTG$bA4es7wqU_%@Z*8M`z0B5~&it)fACT)=7xo&0v!Ocb|| z32#=Fa*0jt^RU``VeG_-kEX4dIZx0PJzj46D#77!im~CUX9)|JNlYPo4bQFFhz~ns zJBh)qoxRUD0}OrZ4$=e~->S{#G$feVc9mar-@(_D5Eii=^R)zq&un-`qtj9x!MENQ z38SVP^T3(`Hg=2bA`(d$Ym5AhlAwm=#%cy)WKD+56(eRT$zoPa$ z|1h<0C!pYG=0FuL(`U#8UA|-=U9^zsiq;qZYL_u(0Quw9dWUDG(N^L44ZZ-DHZJ(F zo(+(W2;(f7T6*ycU8oHFL3q?5pk^Bg;n{)ruM92UuXn64e14-b6qyy&%bu3@i-LZ} ztLd{JSvfTN4uCo$PGsd!P;2#WHJw&d>GNR?f;;5eeGN*?;9Q0@uNcIp_c`|xRIA)- z+OynxH~GyJRHvxH2a8%mesNKe^?ch>9Wl7HK1+dATU5MmCoi_9tgO6)6Q}$BXJ_wA zPwp%@AGZ;wn)3P9*aG6ym;MNr_e5gVWatZIjg%G=IXh6;iG0Xsy8^&H3foGd$LcN; zTenQ|-|+n5*0)uT+uR%D*|>x!W&WjuJIBD%tc%Le{66CDq5aS_y-zb(?_8?pq@XH1 z>6;4h+fYu~ftWmb@}^w z#v~`KMGh(}n^L!=I{PJhMvObydiJO?SG*G6Xl)EA}Y|1dz zchn{2#hhH+Mnx2x1o1oa=blyl4`ur|)%z#6z2Q}22xZq!EV*ppZw_R+)x-$X$}W?$ zaT{&<*|ze}$BPrw*#=QAk*p7u9t+(qw&hBqwog&u{}j5Vn5^ph+s8DMlap7D{dj4D z9{A~JaC2qT(A-QTb!Xs{fw~)nLeHF-6XRCHapXf?zGeH#3M6k-kG$U9A9VsO58wvz z!kaFtl1lHE`E|vTJ>n#xz@QhQVgWuyZk+@tx)Cnf;;=1j1tv8? zWVr!-IeEXFoF~ZAsy>y?biKD9(Wd8=B-HViFmG<#sySdIt4}MQ7WR9V>9wh7LnrF% zP0?)Dr$Ck7R%zzBQ7l^KD0s@d!QXU}sfav%t^zX|oUvsRaM&T6u586_*P+-|b6{>X zw@!RUtCB5}mWOtfhi%t73G+ch^b3;ILs~h?`#O$Y)sq!fkQksyd^f2K8K%&PU zBoQIC{bknG%`8FzOZ(vfF8J`!$0yg>>qSL*dFH<8x_w`Zb?4O&nrk$D;=W8?>$|cb zVPr1SF*Q!}boml(J|UDqGySElD)}j}YSfcZfu*euMV1YUM�CTTuZFvX>OMqq`vg zQHBk8r={^8PoHW|NBR54z7jSqOJn1xQq;U9>?8}`ti)UbD(TUy(6Ze{zm0wkHsrf9 t$-5`l5z!mp;HAH|vNlToy9HHmt7WV9k8C9+3V)pdIN3X+>+Jk){}))a^fLee literal 0 HcmV?d00001 diff --git a/res/drawable-hdpi/file_code.png b/res/drawable-hdpi/file_code.png new file mode 100644 index 0000000000000000000000000000000000000000..ac0fd1a7817e6ab5c350e0f484f374a4c121859c GIT binary patch literal 1873 zcma)73s)1@8l6C-!GaJT8eSoUU_g`zTD1WZ6P_WxLIY_*6oP=FJSDteiBT~?NGK@r zmI|mKy%iCK7Ov8QVv~zp0aLves~9@8g<=UKaXE!4+`~WUS?kQ+=X`sA^L=a1I#U&O zAk1>3<3KUn=4dv3=SqdA_YkZ%eu5_A&0lj}Ir#p1mygpw(?- zQiQoDD$z_>b5f}q|8RUI!0^_o2X$HSW*x|IH3xP4tx>SM=~37C(Vo7}@y}}J@=C;h z|2)*gI(Ig3-qa#Mv;_B?jLSdgurE-mL9*sEs?3_^eQk~a}Jr3fvC_=B&E47X>zPL^Yi68}^ zu4%Ee=MZrjB#9sf?*vx1929a?u)U}M{tdz<0N`(f65qyV|06Gt%K zEP-p*J&ZO)5nu0IrDfo!O=d+HPflQxBsPAsC|usY)d%@_7bV+#3+EzKLX!OKCnIZG z&Qw!^p+F`3q&-IkQU>c;Qk83) zz4}g}deipRSJ{g3MXpeo$Y0i?7Oq8DRBaQ#)xxK=p3W@2BS|Y$+SBQDL&UOB=cEZc zng8Jo71F%2AZ9RDAktcaT;w13-Vpkeo9x%ymQut}N%(xk4+t!&{RazhJ6E%a_m0MG z7(!P#c=hO35MWSa88yJUQ?92j0qmBGE*ysxugr)8DVrg{zq@gsP+~4cv{79AB~Vs! z6`9iks<=oEn}~xH>~Fp#=Gj0nBj^F4V3QP4dmP03gW^W*yk!3avfCk5twKoQDo_x< z0bw}6K+Ld*U@f!RJ5)&%!7I|vT5CA;^7CRLe5HKJso&n&9e>mU-lVA@0WbzxNs z_T$sE-OI_hV#_?|81U5>^~R;t!kYt&7DMRc_B&mw#=Qt@H|yc^W3mgtwOl90GeFC; z(OtxWBFn|slRalAKeJ8{3UBh5-7M|(Pkc^oZ5a9b^y$;3KgU5X5C3FvwaHShJh9c10jnJc9F&A^%Sgb!bNQSwai$O9$Cptm z3Efp%z$$3Y!YX(un_yc_^501L#39FfC z?jfotzYXELlm{}2=iQ#8?VGaeIQUy3&Vx^o9rbd`wJ%|HNk5NFd|*?I2_pM=9x~Du zRpReR=wz@y-W&ui_ESx6MmP*U5koe_qG%o3jx(u~57p>23`;v{F#g}(Co!EA7am-9 zU7%%HIkn!~C~J;$Nwd*LA{bqY(jLdl+^0CQ1CW zKr4Db#o)J{iKYW50?6!_uU@Sk(it>i#bR(C?#6EaujJJB@x@E8wQC|)i)02|Og#{7 zZtRl(+SqSPk*O>9(Z^F$Q=bZjJ1oX2yo1fte4fOS3}0?zXka9IcvtU{Rj1A!!=snO z!0p9iu_^)<;jEZvZ>Qh*&8F$k6%(W%zj94l~7HR=qNI(hGB0b?e&#i(X?d9Tfs{=Y@pnzZT$~IPp5jGzywLS zaBt#3!W*n0qvmlKW`c`EUI|fCyW0H6{OJ&~1sF Pv~J;r90=~>ie&!>F4rgN literal 0 HcmV?d00001 diff --git a/res/drawable-hdpi/file_vcard.png b/res/drawable-hdpi/file_vcard.png new file mode 100644 index 0000000000000000000000000000000000000000..c257341b1632e8bb3898e971c8f5da44e70df722 GIT binary patch literal 5068 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 literal 0 HcmV?d00001 diff --git a/res/drawable-mdpi/file_application.png b/res/drawable-mdpi/file_application.png new file mode 100644 index 0000000000000000000000000000000000000000..15fbfce39a1a2596aada33611bea06857a865ea3 GIT binary patch literal 2842 zcmZ`*X*kq<7ygeKV`;<;Q)6dr(`29O%`&$B2^GrNDaTln?{}K*-z-yvRk` zALEB}|84`M@a4s^;=9DitAmeG?%B>3cjDJb;uj}K3aB##fS6fgqBjPQy#+5e?cU}(^TGd6Y6NBKI z7zF%w7x{m|s8`w=ETd=Z*JIWm0dT3g`1w3Gyt85Tl=j9WC5iVy;lg8>KkEDb9R#^- z_GCu9si{tBO$eC(b>lj${)jV#oJ^lw_>~8I{U@r!#VJ^8v|ZEz7v0k1{KHtJW^Hwq zc-g{}N*y0u*pLS61&sJ;EAI0Ga>6q(B#|>Y`P0PH)6;r+xc4*Ep=C6Jj=Rp@yfP4G z7iR|ranb3#=QXvp-x?4InLM?;o!TFC)H~U%NHcydclPG?7Y)-R(MXQ+D1|1N^K(b8LIOHFNXqTbU8s19FUYSb}R4qYru^TrG#h)}_5!OD`7f^U2k6nBv)YiIC|(`! zBL>9*QPDGotKZ>Hnp-E zna+Hx5#LZgD#!mGHLxX1ScntR3u>OqT%zhGKX}LC5P4^wQgwfU&d%&Rz}GW8E=bm% z8sLN|u9hW>6N-38u{JsMgH~2ndhEsG*cQ~rf|V*@a=6?IO7|H|1-$4h>>{^_vB6{`G`?K<5gVSu?J<2Ek~ z;66xSf(*N2bTjI)55|Ed>Q6j&5`Xp%{U=qdgTB(zNB2rpCCc|Sc&{1K(Ka5no12?A z()8)8Tm3)9s+~FuKY#u_C$}{~ z@dQgXBK`u(1CF~isq5|~ARny!e7rh=$z%qB_09>02q6#0u6f){e*{`zW`ns!9PcAc>^{ zQ?mBptB~Pg)G=%qYlIY0`yjSJFT|23)XueEqX(Vl3V5_K;uSde66mCP%x>Ki1_X)r zw+P|+B4RSm+Rnj^r$BObD#DA}BwAWqr;Vkbznn;c&=+rVbV!|!909P*4?%0b(%wR& zFH>3^iQ-1@e&A2AE_sVqlvk=iF{t7~gn!B!tkeX=>oUr$t>9i`1xBP?$B7rbXd5fI zS&f<=WLbG4T-%7<-)|PN)3~IRIWWavY#SnTp-Kfx4h{}3Tay}eb$l<~5>yEjhm!>) z-tcHWu|Xe&(u%H<$;G^#mjzG#KFXvap!&c~`&&wN zb#(N`7)4o;&fvi_&II%^7)(P0ZcUy_z{LA7jpecP!E*WMySLjI+A3 z9`gup{A1NWiY@&WFL~T2wxp!Q4jXQrF(pg7!nvys_23vmic|80&E6*Q5=4C%9@+Q2*_2QZyp0XQOU2h0-O+O z1Mb<**~j6>ZFKheW*jNM6=<2vm24>|qP~9QDG^vTPy?-ncyDeV9w|2K?d?E`=B}_u zK4n_Y`g|LxbhxbGD;Yzo5kGV}dkd%ukXn#^#B(p;`}4$$qBt$uk?39=!T2*ABPG@L z`dQ6b4$*{To$!)1i#DGY$=|jl+t_5fCAsLtkEnh(_rl9aR;<|HCvmJnYYvWmcsK43^e!(-IOyCT@ccUcYfqo{U?=i-Ss=$0dA|7hwviA9z+H$_!4Ru^f9OlJ!?k}qii>(_7+5Pnu~L0YDy7HNIa*Rr%C|fF8cPatvRp6;vZOJW zzu4>uUH;g2to!*}p30@f=hl(MrU(FNxV|pb?Jq=ArA2}DZTCJ;NbriPa+45*wKu%k z4OzZFKx6g;wOEb2@OGh3+iobEBP3)#}9dVaVxY{qVE~gktHv zFw+uWt|oKE7zpbWn4JUrlorPog?wlv{68uH8)&<=oZJa~B+o}&XaBAqpZmX}kE;Yx abNhiGq3!l_O9osW3z(m_1eqq}*#7{gVjT?t literal 0 HcmV?d00001 diff --git a/res/drawable-mdpi/file_calendar.png b/res/drawable-mdpi/file_calendar.png new file mode 100644 index 0000000000000000000000000000000000000000..dbf37458b46024a7c4a9d5666efc23380eca944d GIT binary patch literal 1979 zcmbtVc{Cg77XQ-NJ1M18Ye$O?qNqkurNX4Pu{L4E)~Kyj`_i-;q^hKh_NlEZ9a|M6 zwM6ZGk{OJd5v0`4lTu=-J%lKk_~V^-&U@#*f8KY_z4v_I@7#O8bMF1!``F3B3MQc- z0RVv6Sfj29Eb&mpL|E6si_y2j5N z?eNwW`zGhnTl1teCl<^p1G&aj5u!?vTq9NC&X3aW3}f@9HIGOXK|_>_QMGTkR$~3c z%?gX*($cd-r-jOOiB3{SA~Ktz4)ooqErv#uSg6It8IXf&FQ*wkha&Jwk|FA^AxKDV4LWW9Ub+2t4gS@j3#qr{~a zMU%d9E7WB$(k1^J!(?C~I_NTfCAiGRLxDP$0EdKo;UBK1TqVF&Cn%b}Eui zckg@HgaKeK_4$F%CP1QcKW**?B%UpWckipm3q2>3O@^ryL-0w(!M~fTQ-y)2JS*4I z#;%&Js}lXOhG$|0PUcb*V@t99Ia>!Zk^pi2eJ4ljzN>YC-{1KiP$ViaS}(3{#;Ahe zU}HP9=Qxw%F@Iwv**@O@woQ3<@Ow1hY%#&>=lcraqdxfc7DyTZVr3912k2=}GCHeE zAAvxOgf><;gzPQF;Vf3Bf;#G|V-0p{AlZzaQ-HrBCIgL!IE+D?;JU6e{LL?1{B^v?D4_Qp4E2(rV#g}4OdNuGMKnS;Ik%P{H#XF$676`lCU zNM~oKy_M~utsakCHD_sY)91nMICX{UsKama*O$VPeL#gJL~GJWp*MAA=B z&f{SL-UvbA>t?F5izyub{o$B2pNAGuDWP9xfrG(hHYs^H7>7lW@Bx2&d^5I3hSA=o zNd8)WF@d@Hj+t+3e@va0TB8X(>%MpkgK`Xf73|#axJYLpN=iy}t4+MyE^YA2mpJAD zf*&)7b@Ty)5RqjM$x1w}Q5}CHG<4+{5LKnD6UqiE-eBKi#za_TQa$Ip9G+y{vfUF< zO3F{n!#mp9eOYVxX!Im-e7hc{521Sm1|d-cyM*{2?sSe>%9o2lr}m#^ALL!)BzevM z(Eg%lPKk&v4n4-2>b$Z3A|vB?!d7P0Qs`D3KR~4=HLsCnEoSC77Z^MqUwEzJT}!M9 z0$n*6D@JdSyU0PG0nzNDj+J=|lEcyeeBAd;oC4U^|*r`PbS$~#QvuPw;#!?jRo?1;E`4?aR zSJeNS?*9h@rHL{8vHCw7Mn^|uuA5~7!eog%hIdk_Ykf!&Cry-$#r$YHwdVu1fYKS& zmJ`t$(|7&Ly{jcbjjEk^+_DAV8yq(k#Z5$8O>t>A4f0>NyCgo}9j(zTvLX_$BuLS7 zO)IQRZ)M~uA5}b|KwKU_94pGEnl_~i1@-RBG@pk*_CkfsYh;mSOV2Rw#)5Hp`vOw~ z2ryNZv0*QJxHiKCTRC{;g8Xg5w@fN!4}4L-;{w-S<+UZy7I3N5$jU*u-sbn9m*kma z+s;4N-9i!c-!0=a{q@A4dSfdTO=Rufr+!TTF{s>=jcKT!j)+U;;Bed&?F3!Rnfz};06Euz{ca1TNdE@VMrwV#JR(k#IPxsF*JWjn zUheK=FqR~6n7?D{{|d%B)3-@pUtf1@#g;Dt%1A3dtjI~@E9lNy;!!{rW~p)3`p6RX zVk|ACW(}?a!fa{pKxSrUCN|skpS$W>20=3A+b$gYSKm6pq6Icr9Z*#kxWvBzX4#}L literal 0 HcmV?d00001 diff --git a/res/drawable-mdpi/file_code.png b/res/drawable-mdpi/file_code.png new file mode 100644 index 0000000000000000000000000000000000000000..271f1a2fcc59d5ab50808c6ee6575c23af5db102 GIT binary patch literal 1280 zcmY*ZZB&v66n@3mB9|pu37BAjEl)GBFFmP45=5lvLr5)4%n;N<6gEvEkTvrIp~DI* z(>y!N*0zJw<=NJfa5_0nvzk^~OR6_hGK1GBSsLx_XZM_YpYz=3o_p_~d#iWw*a7}{ ze*gdiILXXi2x>k!dL9zHKhN$%0F-ax@X?4V(Fdy#zCf0oAqN2Il@IQ7ceE`SN#Yc& zbVX`muA(HnSOk=ml&sB@7RYn5Wumo(#o~sSad@PWio;~^OV3R`?36y`uc(CY^-#WJ z;waMW5d2HcS%Y8OOLE%{W=co6LZLAArfN=(?r^m&@vEwB9@*P`nx7Zeez4|YQ2W7N z$RJmG-^5*8_jQg#b@Bx-S4ly3_}DZF({c2OnkSqWvlBn8uK84yL9kg2s?jQy@3z0& z<9LIYPx6EB@!#;Jn;M9%X7gx`ioVS_9Q`vl!(?l?@vNLfw9ihb^^HwW zrq2xZ=695tDA%KBEbd8%!yz6YA6K*gxHNB-?{JhQXOlJ(ip?d{f~`$(s2sCF=RB>m z@_|TONk8+}0i`Vy%tcMaSc2lUi=fyR5)G4Z6K<4X+*o^55W@}3(>ry9E)5(Sgkc6) z2R#E4Oexl0O<-IG;tWpEV1+!qA@sN4iShq9XItpWZ)w)C^K0w-oT$t+)=uS0#{;0= zD{4zuHip}w`&sUZyJNY z*r%2i6~Sqm0{it>bB!Cesq5YQHGKx}r0_EEjAmJX5uLO^$b({8JFiAMqB+j_zs*T7 z;9{X3ij`M|NdP&)ex?lULd6_|8zb0(6ip)DekLCr^^NI45=oCXY7&u(J>V!xIQM>Q z1d8fI^CqTN3uS=r+JmJe>{0-7isQATKD49dCi28G04fo0)D9q2y_`IOsEfss+Pgk9 z3*AJLAnL3*T-%ALG0RDkg&MfKHneL1z^db-$isL5GEjGei;+pC2biusfR1P%#{BDN z^?a$rF-TDsRt`%xGh(H1o&$Dtyg+a&rELAs>q4nC-=V&SGPkz&T`|)axZZgpZZRed zO#;Dd$Jp2y{U4JWT*AoA(Nm{9g<+VUs5hQn-JdX+G&2_Bmhbmpr7h~gXXV4TFcNyr zGtaI*`urdUw#`<*`RdAJ=(%>9WeASUWEf*3u7lCE`b=x09zaW^cct4J%L@^R9u$7 z>%{ko24M=sZ6XGr7mZAfjAX2Gh|k|sjqNm2)IaV1vBWp?LG7hFD%_l0*zy)EA}pKi z;@j#=)7`>ULe`Ta_^YidWwkH4tfAYpgx%|2R}Y6Ts(XHj2XQe20q2TAc}P}`Oe!>q zeiaBr#x3WZGpjkqz;R59QLon%*7SRB2G{-tVJ{vpRvcol2%W?nXA@nIZ!fahh%Oi& zu%eTQc3faZH5^X%N$w<9ZL$oKQR^XYCF;axcA!dmF%fL(t=IX5b?B}A9$qcFzmAGq zm~cO&;&-^Q61`PV#RVkX$5o8Ljggqsp;_xzXxw3_S5WK>i5BmrJUw!>eShmO!!x(< llywdum#tS3KmG&=6I#4}4L-UkGnsSYgUDg=nC2})?f+s3H%$Nl literal 0 HcmV?d00001 diff --git a/res/drawable-mdpi/file_vcard.png b/res/drawable-mdpi/file_vcard.png new file mode 100644 index 0000000000000000000000000000000000000000..e3d0e6bc6213f02ea5b7838f387d8ce1140cc2f5 GIT binary patch literal 3326 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 literal 0 HcmV?d00001 diff --git a/res/drawable-xhdpi/file_calendar.png b/res/drawable-xhdpi/file_calendar.png new file mode 100644 index 0000000000000000000000000000000000000000..0c934531fc4c8b1b7f66cc15715d789b69c530f1 GIT binary patch literal 3889 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 Ols?{m^g6HTAO8olTsjy4 literal 0 HcmV?d00001 diff --git a/res/drawable-xhdpi/file_vcard.png b/res/drawable-xhdpi/file_vcard.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9f33c250c2628c7fd32dee1be3a87a8d1b42ad GIT binary patch literal 6799 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 BV1xhw literal 0 HcmV?d00001 diff --git a/res/drawable-xhdpi/folder_external.png b/res/drawable-xhdpi/folder_external.png new file mode 100644 index 0000000000000000000000000000000000000000..33909f7d81d1195c41c168fa95994940ff8413be GIT binary patch literal 3462 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 J=9cS&{{m>s`Bne` literal 0 HcmV?d00001 diff --git a/res/drawable-xxhdpi/file_application.png b/res/drawable-xxhdpi/file_application.png new file mode 100644 index 0000000000000000000000000000000000000000..fbe5deb8d59efc4f2473c75ea3a4c43c51a9c638 GIT binary patch literal 8908 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 Co?csGV?s=dCqiStn4USYheLz|0I=uONrE{5 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 Date: Thu, 10 Sep 2015 17:54:05 +0200 Subject: [PATCH 082/133] shortened this prediction, since it will always be image... --- .../owncloud/android/datamodel/ThumbnailsCacheManager.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java b/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java index ce8bfd4a7e..ab0743a9ec 100644 --- a/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java +++ b/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java @@ -74,8 +74,8 @@ public class ThumbnailsCacheManager { public static Bitmap mDefaultImg = BitmapFactory.decodeResource( - MainApp.getAppContext().getResources(), - DisplayUtils.getFileTypeIconId("image/png", "default.png") + MainApp.getAppContext().getResources(), + R.drawable.file_image ); From fa12c619b0edcf1a343206541159095666556102 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Thu, 10 Sep 2015 17:55:26 +0200 Subject: [PATCH 083/133] rewrite for icon determination with refactoring into its own class + fixed a typo --- .../ui/adapter/FileListListAdapter.java | 5 +- .../ui/adapter/LocalFileListAdapter.java | 3 +- .../ui/fragment/FileDetailFragment.java | 3 +- .../owncloud/android/utils/DisplayUtils.java | 179 +------- .../android/utils/MimetypeIconUtil.java | 411 ++++++++++++++++++ 5 files changed, 441 insertions(+), 160 deletions(-) create mode 100644 src/com/owncloud/android/utils/MimetypeIconUtil.java diff --git a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java index 27fc8c15c3..75b27389f5 100644 --- a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java +++ b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java @@ -55,6 +55,7 @@ import com.owncloud.android.services.OperationsService.OperationsServiceBinder; import com.owncloud.android.ui.activity.ComponentsGetter; import com.owncloud.android.utils.DisplayUtils; import com.owncloud.android.utils.FileStorageUtils; +import com.owncloud.android.utils.MimetypeIconUtil; /** @@ -329,7 +330,7 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { } else { - fileIcon.setImageResource(DisplayUtils.getFileTypeIconId(file.getMimetype(), + fileIcon.setImageResource(MimetypeIconUtil.getFileTypeIconId(file.getMimetype(), file.getFileName())); } @@ -344,7 +345,7 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { fileIcon.setImageResource(R.drawable.folder_public); } else { fileIcon.setImageResource( - DisplayUtils.getFileTypeIconId(file.getMimetype(), file.getFileName()) + MimetypeIconUtil.getFileTypeIconId(file.getMimetype(), file.getFileName()) ); } } diff --git a/src/com/owncloud/android/ui/adapter/LocalFileListAdapter.java b/src/com/owncloud/android/ui/adapter/LocalFileListAdapter.java index 287c5b9e0e..373d791a33 100644 --- a/src/com/owncloud/android/ui/adapter/LocalFileListAdapter.java +++ b/src/com/owncloud/android/ui/adapter/LocalFileListAdapter.java @@ -39,6 +39,7 @@ import com.owncloud.android.R; import com.owncloud.android.datamodel.ThumbnailsCacheManager; import com.owncloud.android.utils.BitmapUtils; import com.owncloud.android.utils.DisplayUtils; +import com.owncloud.android.utils.MimetypeIconUtil; /** * This Adapter populates a ListView with all files and directories contained @@ -159,7 +160,7 @@ public class LocalFileListAdapter extends BaseAdapter implements ListAdapter { } } } else { - fileIcon.setImageResource(DisplayUtils.getFileTypeIconId(null, file.getName())); + fileIcon.setImageResource(MimetypeIconUtil.getFileTypeIconId(null, file.getName())); } } else { diff --git a/src/com/owncloud/android/ui/fragment/FileDetailFragment.java b/src/com/owncloud/android/ui/fragment/FileDetailFragment.java index 24f7248fa2..d4b1ffdd53 100644 --- a/src/com/owncloud/android/ui/fragment/FileDetailFragment.java +++ b/src/com/owncloud/android/ui/fragment/FileDetailFragment.java @@ -48,6 +48,7 @@ import com.owncloud.android.ui.activity.FileDisplayActivity; import com.owncloud.android.ui.dialog.RemoveFileDialogFragment; import com.owncloud.android.ui.dialog.RenameFileDialogFragment; import com.owncloud.android.utils.DisplayUtils; +import com.owncloud.android.utils.MimetypeIconUtil; import java.lang.ref.WeakReference; @@ -403,7 +404,7 @@ public class FileDetailFragment extends FileFragment implements OnClickListener } ImageView iv = (ImageView) getView().findViewById(R.id.fdIcon); if (iv != null) { - iv.setImageResource(DisplayUtils.getFileTypeIconId(mimetype, filename)); + iv.setImageResource(MimetypeIconUtil.getFileTypeIconId(mimetype, filename)); } } diff --git a/src/com/owncloud/android/utils/DisplayUtils.java b/src/com/owncloud/android/utils/DisplayUtils.java index 3ae36e446e..8a281e92c8 100644 --- a/src/com/owncloud/android/utils/DisplayUtils.java +++ b/src/com/owncloud/android/utils/DisplayUtils.java @@ -22,26 +22,14 @@ package com.owncloud.android.utils; -import java.net.IDN; -import java.text.DateFormat; -import java.util.Arrays; -import java.util.Calendar; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Set; -import java.util.Vector; - import android.annotation.TargetApi; import android.app.Activity; import android.content.Context; -import android.graphics.Color; import android.graphics.Point; import android.graphics.PorterDuff; import android.os.Build; import android.text.format.DateUtils; import android.view.Display; -import android.webkit.MimeTypeMap; import android.widget.ProgressBar; import android.widget.SeekBar; @@ -49,73 +37,39 @@ import com.owncloud.android.MainApp; import com.owncloud.android.R; import com.owncloud.android.datamodel.OCFile; +import java.net.IDN; +import java.text.DateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + /** * A helper class for some string operations. */ public class DisplayUtils { private static final String OWNCLOUD_APP_NAME = "ownCloud"; - - //private static String TAG = DisplayUtils.class.getSimpleName(); private static final String[] sizeSuffixes = { "B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" }; - private static HashMap mimeType2HUmanReadable; - static { - mimeType2HUmanReadable = new HashMap(); - // images - mimeType2HUmanReadable.put("image/jpeg", "JPEG image"); - mimeType2HUmanReadable.put("image/jpg", "JPEG image"); - mimeType2HUmanReadable.put("image/png", "PNG image"); - mimeType2HUmanReadable.put("image/bmp", "Bitmap image"); - mimeType2HUmanReadable.put("image/gif", "GIF image"); - mimeType2HUmanReadable.put("image/svg+xml", "JPEG image"); - mimeType2HUmanReadable.put("image/tiff", "TIFF image"); - // music - mimeType2HUmanReadable.put("audio/mpeg", "MP3 music file"); - mimeType2HUmanReadable.put("application/ogg", "OGG music file"); + private static Map mimeType2HumanReadable; + static { + mimeType2HumanReadable = new HashMap(); + // images + mimeType2HumanReadable.put("image/jpeg", "JPEG image"); + mimeType2HumanReadable.put("image/jpg", "JPEG image"); + mimeType2HumanReadable.put("image/png", "PNG image"); + mimeType2HumanReadable.put("image/bmp", "Bitmap image"); + mimeType2HumanReadable.put("image/gif", "GIF image"); + mimeType2HumanReadable.put("image/svg+xml", "JPEG image"); + mimeType2HumanReadable.put("image/tiff", "TIFF image"); + // music + mimeType2HumanReadable.put("audio/mpeg", "MP3 music file"); + mimeType2HumanReadable.put("application/ogg", "OGG music file"); } - private static final String TYPE_APPLICATION = "application"; - private static final String TYPE_AUDIO = "audio"; - private static final String TYPE_IMAGE = "image"; - private static final String TYPE_TXT = "text"; - private static final String TYPE_VIDEO = "video"; - - private static final String SUBTYPE_PDF = "pdf"; - private static final String SUBTYPE_XML = "xml"; - private static final String[] SUBTYPES_DOCUMENT = { - "msword", - "vnd.openxmlformats-officedocument.wordprocessingml.document", - "vnd.oasis.opendocument.text", - "rtf", - "javascript" - }; - private static Set SUBTYPES_DOCUMENT_SET = new HashSet(Arrays.asList(SUBTYPES_DOCUMENT)); - private static final String[] SUBTYPES_SPREADSHEET = { - "msexcel", - "vnd.ms-excel", - "vnd.openxmlformats-officedocument.spreadsheetml.sheet", - "vnd.oasis.opendocument.spreadsheet" - }; - private static Set SUBTYPES_SPREADSHEET_SET = new HashSet(Arrays.asList(SUBTYPES_SPREADSHEET)); - private static final String[] SUBTYPES_PRESENTATION = { - "mspowerpoint", - "vnd.ms-powerpoint", - "vnd.openxmlformats-officedocument.presentationml.presentation", - "vnd.oasis.opendocument.presentation" - }; - private static Set SUBTYPES_PRESENTATION_SET = new HashSet(Arrays.asList(SUBTYPES_PRESENTATION)); - private static final String[] SUBTYPES_COMPRESSED = {"x-tar", "x-gzip", "zip"}; - private static final Set SUBTYPES_COMPRESSED_SET = new HashSet(Arrays.asList(SUBTYPES_COMPRESSED)); - private static final String SUBTYPE_OCTET_STREAM = "octet-stream"; - private static final String EXTENSION_RAR = "rar"; - private static final String EXTENSION_RTF = "rtf"; - private static final String EXTENSION_3GP = "3gp"; - private static final String EXTENSION_PY = "py"; - private static final String EXTENSION_JS = "js"; - /** * Converts the file size in bytes to human readable output. * @@ -141,100 +95,14 @@ public class DisplayUtils { * @return A human friendly version of the MIME type */ public static String convertMIMEtoPrettyPrint(String mimetype) { - if (mimeType2HUmanReadable.containsKey(mimetype)) { - return mimeType2HUmanReadable.get(mimetype); + if (mimeType2HumanReadable.containsKey(mimetype)) { + return mimeType2HumanReadable.get(mimetype); } if (mimetype.split("/").length >= 2) return mimetype.split("/")[1].toUpperCase() + " file"; return "Unknown type"; } - - - /** - * Returns the resource identifier of an image to use as icon associated to a known MIME type. - * - * @param mimetype MIME type string; if NULL, the method tries to guess it from the extension in filename - * @param filename Name, with extension. - * @return Identifier of an image resource. - */ - public static int getFileTypeIconId(String mimetype, String filename) { - if (mimetype == null) { - String fileExtension = getExtension(filename); - mimetype = MimeTypeMap.getSingleton().getMimeTypeFromExtension(fileExtension); - if (mimetype == null) { - mimetype = TYPE_APPLICATION + "/" + SUBTYPE_OCTET_STREAM; - } - } - - if ("DIR".equals(mimetype)) { - return R.drawable.ic_menu_archive; - - } else { - String [] parts = mimetype.split("/"); - String type = parts[0]; - String subtype = (parts.length > 1) ? parts[1] : ""; - - if(TYPE_TXT.equals(type)) { - return R.drawable.file_doc; - - } else if(TYPE_IMAGE.equals(type)) { - return R.drawable.file_image; - - } else if(TYPE_VIDEO.equals(type)) { - return R.drawable.file_movie; - - } else if(TYPE_AUDIO.equals(type)) { - return R.drawable.file_sound; - - } else if(TYPE_APPLICATION.equals(type)) { - - if (SUBTYPE_PDF.equals(subtype)) { - return R.drawable.file_pdf; - - } else if (SUBTYPE_XML.equals(subtype)) { - return R.drawable.file_doc; - - } else if (SUBTYPES_DOCUMENT_SET.contains(subtype)) { - return R.drawable.file_doc; - - } else if (SUBTYPES_SPREADSHEET_SET.contains(subtype)) { - return R.drawable.file_xls; - - } else if (SUBTYPES_PRESENTATION_SET.contains(subtype)) { - return R.drawable.file_ppt; - - } else if (SUBTYPES_COMPRESSED_SET.contains(subtype)) { - return R.drawable.file_zip; - - } else if (SUBTYPE_OCTET_STREAM.equals(subtype) ) { - if (getExtension(filename).equalsIgnoreCase(EXTENSION_RAR)) { - return R.drawable.file_zip; - - } else if (getExtension(filename).equalsIgnoreCase(EXTENSION_RTF)) { - return R.drawable.file_doc; - - } else if (getExtension(filename).equalsIgnoreCase(EXTENSION_3GP)) { - return R.drawable.file_movie; - - } else if ( getExtension(filename).equalsIgnoreCase(EXTENSION_PY) || - getExtension(filename).equalsIgnoreCase(EXTENSION_JS)) { - return R.drawable.file_doc; - } - } - } - } - - // default icon - return R.drawable.file; - } - - - private static String getExtension(String filename) { - String extension = filename.substring(filename.lastIndexOf(".") + 1).toLowerCase(); - return extension; - } - /** * Converts Unix time to human readable format * @param milliseconds that have passed since 01/01/1970 @@ -246,7 +114,6 @@ public class DisplayUtils { return df.format(date); } - public static int getSeasonalIconId() { if (Calendar.getInstance().get(Calendar.DAY_OF_YEAR) >= 354 && MainApp.getAppContext().getString(R.string.app_name).equals(OWNCLOUD_APP_NAME)) { diff --git a/src/com/owncloud/android/utils/MimetypeIconUtil.java b/src/com/owncloud/android/utils/MimetypeIconUtil.java new file mode 100644 index 0000000000..2de2b559ef --- /dev/null +++ b/src/com/owncloud/android/utils/MimetypeIconUtil.java @@ -0,0 +1,411 @@ +package com.owncloud.android.utils; + +import android.webkit.MimeTypeMap; + +import com.owncloud.android.R; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Helper class for detecting the right icon for a file, based on its mimen type and/or file extension. + */ +public class MimetypeIconUtil { + + private static final Map MIMETYPE_TO_ICON_MAPPING = new HashMap(); + private static final Map MAINMIMETYPE_TO_ICON_MAPPING = new HashMap(); + private static final Map> FILE_EXTENSION_TO_MIMETYPE_MAPPING = + new HashMap>(); + + static { + populateFileExtensionMimeTypeMapping(); + populateMimeTypeIconMapping(); + populateMainMimeTypeMapping(); + } + + /** + * Returns the resource identifier of an image to use as icon associated to a known MIME type. + * + * @param mimetype MIME type string; if NULL, the method tries to guess it from the extension in filename + * @param filename Name, with extension. + * @return Identifier of an image resource. + */ + public static int getFileTypeIconId(String mimetype, String filename) { + List possibleMimeTypes; + if (mimetype == null) { + possibleMimeTypes = determineMimeTypesByFilename(filename); + } else { + possibleMimeTypes = Collections.singletonList(mimetype); + } + + return determineIconIdByMimeTypeList(possibleMimeTypes); + } + + /** + * determines the icon based on the mime type. + * + * @param mimetypes the mimetypes + * @return the icon id, R.drawable.file if the mime type could not be matched at all or was {@code null} + */ + private static int determineIconIdByMimeTypeList(List mimetypes) { + // no mime type leads to file + if (mimetypes == null || mimetypes.size() < 1) { + return R.drawable.file; + } else { + + // search for full mime type mapping + for (String mimetype : mimetypes) { + Integer iconId = MIMETYPE_TO_ICON_MAPPING.get(mimetype); + + if (iconId != null) { + return iconId; + } + } + + // fallback to main mime type part mapping + for (String mimetype : mimetypes) { + String mainMimetypePart = mimetype.split("/")[0]; + + Integer iconId = MAINMIMETYPE_TO_ICON_MAPPING.get(mainMimetypePart); + if (iconId != null) { + return iconId; + } + } + } + + // no match found at all, falling back to file + return R.drawable.file; + } + + /** + * determines the list of possible mime types for the given file, based on its extension. + * + * @param filename the file name + * @return list of possible mime types (ordered), empty list in case no mime types found + */ + private static List determineMimeTypesByFilename(String filename) { + String fileExtension = getExtension(filename); + + // try detecting the mimetype based on the web app logic equivalent + List mimeTypeList = FILE_EXTENSION_TO_MIMETYPE_MAPPING.get(fileExtension); + if (mimeTypeList != null && mimeTypeList.size() > 0) { + return mimeTypeList; + } else { + // try detecting the mime type via android itself + String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(fileExtension); + if (mimeType != null) { + return Collections.singletonList(mimeType); + } else { + return new ArrayList(); + } + } + } + + private static String getExtension(String filename) { + String extension = filename.substring(filename.lastIndexOf(".") + 1).toLowerCase(); + return extension; + } + + /** + * populates the mapping list: full mime type --> icon. + */ + private static void populateMimeTypeIconMapping() { + MIMETYPE_TO_ICON_MAPPING.put("application/coreldraw", R.drawable.file_image); + MIMETYPE_TO_ICON_MAPPING.put("application/epub+zip", R.drawable.file_doc); + MIMETYPE_TO_ICON_MAPPING.put("application/font-sfnt", R.drawable.file_image); + MIMETYPE_TO_ICON_MAPPING.put("application/font-woff", R.drawable.file_image); + MIMETYPE_TO_ICON_MAPPING.put("application/illustrator", R.drawable.file_image); + MIMETYPE_TO_ICON_MAPPING.put("application/javascript", R.drawable.file_code); + MIMETYPE_TO_ICON_MAPPING.put("application/json", R.drawable.file_code); + MIMETYPE_TO_ICON_MAPPING.put("application/msaccess", R.drawable.file); + MIMETYPE_TO_ICON_MAPPING.put("application/msexcel", R.drawable.file_xls); + MIMETYPE_TO_ICON_MAPPING.put("application/mspowerpoint", R.drawable.file_ppt); + MIMETYPE_TO_ICON_MAPPING.put("application/msword", R.drawable.file_doc); + MIMETYPE_TO_ICON_MAPPING.put("application/octet-stream", R.drawable.file); + MIMETYPE_TO_ICON_MAPPING.put("application/postscript", R.drawable.file_image); + MIMETYPE_TO_ICON_MAPPING.put("application/pdf", R.drawable.file_pdf); + MIMETYPE_TO_ICON_MAPPING.put("application/rss+xml", R.drawable.file_code); + MIMETYPE_TO_ICON_MAPPING.put("application/rtf", R.drawable.file_doc); + MIMETYPE_TO_ICON_MAPPING.put("application/vnd.android.package-archive", R.drawable.file_zip); + MIMETYPE_TO_ICON_MAPPING.put("application/vnd.ms-excel", R.drawable.file_xls); + MIMETYPE_TO_ICON_MAPPING.put("application/vnd.ms-excel.addin.macroEnabled.12", R.drawable.file_xls); + MIMETYPE_TO_ICON_MAPPING.put("application/vnd.ms-excel.sheet.binary.macroEnabled.12", R.drawable.file_xls); + MIMETYPE_TO_ICON_MAPPING.put("application/vnd.ms-excel.sheet.macroEnabled.12", R.drawable.file_xls); + MIMETYPE_TO_ICON_MAPPING.put("application/vnd.ms-excel.template.macroEnabled.12", R.drawable.file_xls); + MIMETYPE_TO_ICON_MAPPING.put("application/vnd.ms-fontobject", R.drawable.file_image); + MIMETYPE_TO_ICON_MAPPING.put("application/vnd.ms-powerpoint", R.drawable.file_ppt); + MIMETYPE_TO_ICON_MAPPING.put("application/vnd.ms-powerpoint.addin.macroEnabled.12", R.drawable.file_ppt); + MIMETYPE_TO_ICON_MAPPING.put("application/vnd.ms-powerpoint.presentation.macroEnabled.12", R.drawable.file_ppt); + MIMETYPE_TO_ICON_MAPPING.put("application/vnd.ms-powerpoint.slideshow.macroEnabled.12", R.drawable.file_ppt); + MIMETYPE_TO_ICON_MAPPING.put("application/vnd.ms-powerpoint.template.macroEnabled.12", R.drawable.file_ppt); + MIMETYPE_TO_ICON_MAPPING.put("application/vnd.ms-word.document.macroEnabled.12", R.drawable.file_doc); + MIMETYPE_TO_ICON_MAPPING.put("application/vnd.ms-word.template.macroEnabled.12", R.drawable.file_doc); + MIMETYPE_TO_ICON_MAPPING.put("application/vnd.oasis.opendocument.presentation", R.drawable.file_ppt); + MIMETYPE_TO_ICON_MAPPING.put("application/vnd.oasis.opendocument.presentation-template", R.drawable.file_ppt); + MIMETYPE_TO_ICON_MAPPING.put("application/vnd.oasis.opendocument.spreadsheet", R.drawable.file_xls); + MIMETYPE_TO_ICON_MAPPING.put("application/vnd.oasis.opendocument.spreadsheet-template", R.drawable.file_xls); + MIMETYPE_TO_ICON_MAPPING.put("application/vnd.oasis.opendocument.text", R.drawable.file_doc); + MIMETYPE_TO_ICON_MAPPING.put("application/vnd.oasis.opendocument.text-master", R.drawable.file_doc); + MIMETYPE_TO_ICON_MAPPING.put("application/vnd.oasis.opendocument.text-template", R.drawable.file_doc); + MIMETYPE_TO_ICON_MAPPING.put("application/vnd.oasis.opendocument.text-web", R.drawable.file_doc); + MIMETYPE_TO_ICON_MAPPING.put("application/vnd.openxmlformats-officedocument.presentationml.presentation", R.drawable.file_ppt); + MIMETYPE_TO_ICON_MAPPING.put("application/vnd.openxmlformats-officedocument.presentationml.slideshow", R.drawable.file_ppt); + MIMETYPE_TO_ICON_MAPPING.put("application/vnd.openxmlformats-officedocument.presentationml.template", R.drawable.file_ppt); + MIMETYPE_TO_ICON_MAPPING.put("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", R.drawable.file_xls); + MIMETYPE_TO_ICON_MAPPING.put("application/vnd.openxmlformats-officedocument.spreadsheetml.template", R.drawable.file_xls); + MIMETYPE_TO_ICON_MAPPING.put("application/vnd.openxmlformats-officedocument.wordprocessingml.document", R.drawable.file_doc); + MIMETYPE_TO_ICON_MAPPING.put("application/vnd.openxmlformats-officedocument.wordprocessingml.template", R.drawable.file_doc); + MIMETYPE_TO_ICON_MAPPING.put("application/x-7z-compressed", R.drawable.file_zip); + MIMETYPE_TO_ICON_MAPPING.put("application/x-cbr", R.drawable.file_doc); + MIMETYPE_TO_ICON_MAPPING.put("application/x-compressed", R.drawable.file_zip); + MIMETYPE_TO_ICON_MAPPING.put("application/x-dcraw", R.drawable.file_image); + MIMETYPE_TO_ICON_MAPPING.put("application/x-deb", R.drawable.file_zip); + MIMETYPE_TO_ICON_MAPPING.put("application/x-font", R.drawable.file_image); + MIMETYPE_TO_ICON_MAPPING.put("application/x-gimp", R.drawable.file_image); + MIMETYPE_TO_ICON_MAPPING.put("application/x-gzip", R.drawable.file_zip); + MIMETYPE_TO_ICON_MAPPING.put("application/x-ms-dos-executable", R.drawable.file_application); + MIMETYPE_TO_ICON_MAPPING.put("application/x-msi", R.drawable.file_application); + MIMETYPE_TO_ICON_MAPPING.put("application/x-iwork-numbers-sffnumbers", R.drawable.file_xls); + MIMETYPE_TO_ICON_MAPPING.put("application/x-iwork-keynote-sffkey", R.drawable.file_ppt); + MIMETYPE_TO_ICON_MAPPING.put("application/x-iwork-pages-sffpages", R.drawable.file_doc); + MIMETYPE_TO_ICON_MAPPING.put("application/x-perl", R.drawable.file_code); + MIMETYPE_TO_ICON_MAPPING.put("application/x-photoshop", R.drawable.file_image); + MIMETYPE_TO_ICON_MAPPING.put("application/x-php", R.drawable.file_code); + MIMETYPE_TO_ICON_MAPPING.put("application/x-rar-compressed", R.drawable.file_zip); + MIMETYPE_TO_ICON_MAPPING.put("application/x-shockwave-flash", R.drawable.file_application); + MIMETYPE_TO_ICON_MAPPING.put("application/x-tar", R.drawable.file_zip); + MIMETYPE_TO_ICON_MAPPING.put("application/x-tex", R.drawable.file_doc); + MIMETYPE_TO_ICON_MAPPING.put("application/xml", R.drawable.file_code); + MIMETYPE_TO_ICON_MAPPING.put("application/yaml", R.drawable.file_code); + MIMETYPE_TO_ICON_MAPPING.put("application/zip", R.drawable.file_zip); + MIMETYPE_TO_ICON_MAPPING.put("database", R.drawable.file); + MIMETYPE_TO_ICON_MAPPING.put("httpd/unix-directory", R.drawable.ic_menu_archive); + MIMETYPE_TO_ICON_MAPPING.put("image/svg+xml", R.drawable.file_image); + MIMETYPE_TO_ICON_MAPPING.put("image/vector", R.drawable.file_image); + MIMETYPE_TO_ICON_MAPPING.put("text/calendar", R.drawable.file_calendar); + MIMETYPE_TO_ICON_MAPPING.put("text/css", R.drawable.file_code); + MIMETYPE_TO_ICON_MAPPING.put("text/csv", R.drawable.file_xls); + MIMETYPE_TO_ICON_MAPPING.put("text/html", R.drawable.file_code); + MIMETYPE_TO_ICON_MAPPING.put("text/vcard", R.drawable.file_vcard); + MIMETYPE_TO_ICON_MAPPING.put("text/x-c", R.drawable.file_code); + MIMETYPE_TO_ICON_MAPPING.put("text/x-c++src", R.drawable.file_code); + MIMETYPE_TO_ICON_MAPPING.put("text/x-h", R.drawable.file_code); + MIMETYPE_TO_ICON_MAPPING.put("text/x-python", R.drawable.file_code); + MIMETYPE_TO_ICON_MAPPING.put("text/x-shellscript", R.drawable.file_code); + MIMETYPE_TO_ICON_MAPPING.put("web", R.drawable.file_code); + MIMETYPE_TO_ICON_MAPPING.put("DIR", R.drawable.ic_menu_archive); + } + + /** + * populates the mapping list: main mime type --> icon. + */ + private static void populateMainMimeTypeMapping() { + MAINMIMETYPE_TO_ICON_MAPPING.put("audio", R.drawable.file_sound); + MAINMIMETYPE_TO_ICON_MAPPING.put("database", R.drawable.file); + MAINMIMETYPE_TO_ICON_MAPPING.put("httpd", R.drawable.file_zip); + MAINMIMETYPE_TO_ICON_MAPPING.put("image", R.drawable.file_image); + MAINMIMETYPE_TO_ICON_MAPPING.put("text", R.drawable.file_doc); + MAINMIMETYPE_TO_ICON_MAPPING.put("video", R.drawable.file_movie); + MAINMIMETYPE_TO_ICON_MAPPING.put("web", R.drawable.file_code); + } + + /** + * populates the mapping list: file extension --> mime type. + */ + private static void populateFileExtensionMimeTypeMapping() { + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("3gp", Collections.singletonList("video/3gpp")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("7z", Collections.singletonList("application/x-7z-compressed")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("accdb", Collections.singletonList("application/msaccess")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("ai", Collections.singletonList("application/illustrator")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("apk", Collections.singletonList("application/vnd.android.package-archive")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("arw", Collections.singletonList("image/x-dcraw")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("avi", Collections.singletonList("video/x-msvideo")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("bash", Collections.singletonList("text/x-shellscript")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("blend", Collections.singletonList("application/x-blender")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("bin", Collections.singletonList("application/x-bin")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("bmp", Collections.singletonList("image/bmp")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("bpg", Collections.singletonList("image/bpg")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("cb7", Collections.singletonList("application/x-cbr")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("cba", Collections.singletonList("application/x-cbr")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("cbr", Collections.singletonList("application/x-cbr")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("cbt", Collections.singletonList("application/x-cbr")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("cbtc", Collections.singletonList("application/x-cbr")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("cbz", Collections.singletonList("application/x-cbr")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("cc", Collections.singletonList("text/x-c")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("cdr", Collections.singletonList("application/coreldraw")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("cnf", Collections.singletonList("text/plain")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("conf", Collections.singletonList("text/plain")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("cpp", Collections.singletonList("text/x-c++src")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("cr2", Collections.singletonList("image/x-dcraw")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("css", Collections.singletonList("text/css")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("csv", Collections.singletonList("text/csv")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("cvbdl", Collections.singletonList("application/x-cbr")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("c", Collections.singletonList("text/x-c")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("c++", Collections.singletonList("text/x-c++src")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("dcr", Collections.singletonList("image/x-dcraw")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("deb", Collections.singletonList("application/x-deb")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("dng", Collections.singletonList("image/x-dcraw")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("doc", Collections.singletonList("application/msword")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("docm", Collections.singletonList("application/vnd.ms-word.document.macroEnabled.12")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("docx", Collections.singletonList("application/vnd.openxmlformats-officedocument.wordprocessingml.document")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("dot", Collections.singletonList("application/msword")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("dotx", Collections.singletonList("application/vnd.openxmlformats-officedocument.wordprocessingml.template")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("dv", Collections.singletonList("video/dv")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("eot", Collections.singletonList("application/vnd.ms-fontobject")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("epub", Collections.singletonList("application/epub+zip")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("eps", Collections.singletonList("application/postscript")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("erf", Collections.singletonList("image/x-dcraw")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("exe", Collections.singletonList("application/x-ms-dos-executable")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("flac", Collections.singletonList("audio/flac")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("flv", Collections.singletonList("video/x-flv")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("gif", Collections.singletonList("image/gif")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("gz", Collections.singletonList("application/x-gzip")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("gzip", Collections.singletonList("application/x-gzip")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("h", Collections.singletonList("text/x-h")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("hh", Collections.singletonList("text/x-h")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("html", Arrays.asList("text/html", "text/plain")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("htm", Arrays.asList("text/html", "text/plain")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("ical", Collections.singletonList("text/calendar")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("ics", Collections.singletonList("text/calendar")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("iiq", Collections.singletonList("image/x-dcraw")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("impress", Collections.singletonList("text/impress")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("jpeg", Collections.singletonList("image/jpeg")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("jpg", Collections.singletonList("image/jpeg")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("jps", Collections.singletonList("image/jpeg")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("js", Arrays.asList("application/javascript", "text/plain")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("json", Arrays.asList("application/json", "text/plain")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("k25", Collections.singletonList("image/x-dcraw")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("kdc", Collections.singletonList("image/x-dcraw")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("key", Collections.singletonList("application/x-iwork-keynote-sffkey")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("keynote", Collections.singletonList("application/x-iwork-keynote-sffkey")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("kra", Collections.singletonList("application/x-krita")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("m2t", Collections.singletonList("video/mp2t")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("m4v", Collections.singletonList("video/mp4")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("markdown", Collections.singletonList("text/markdown")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("mdown", Collections.singletonList("text/markdown")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("md", Collections.singletonList("text/markdown")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("mdb", Collections.singletonList("application/msaccess")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("mdwn", Collections.singletonList("text/markdown")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("mkd", Collections.singletonList("text/markdown")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("mef", Collections.singletonList("image/x-dcraw")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("mkv", Collections.singletonList("video/x-matroska")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("mobi", Collections.singletonList("application/x-mobipocket-ebook")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("mov", Collections.singletonList("video/quicktime")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("mp3", Collections.singletonList("audio/mpeg")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("mp4", Collections.singletonList("video/mp4")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("mpeg", Collections.singletonList("video/mpeg")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("mpg", Collections.singletonList("video/mpeg")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("mpo", Collections.singletonList("image/jpeg")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("msi", Collections.singletonList("application/x-msi")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("mts", Collections.singletonList("video/MP2T")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("mt2s", Collections.singletonList("video/MP2T")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("nef", Collections.singletonList("image/x-dcraw")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("numbers", Collections.singletonList("application/x-iwork-numbers-sffnumbers")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("odf", Collections.singletonList("application/vnd.oasis.opendocument.formula")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("odg", Collections.singletonList("application/vnd.oasis.opendocument.graphics")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("odp", Collections.singletonList("application/vnd.oasis.opendocument.presentation")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("ods", Collections.singletonList("application/vnd.oasis.opendocument.spreadsheet")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("odt", Collections.singletonList("application/vnd.oasis.opendocument.text")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("oga", Collections.singletonList("audio/ogg")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("ogg", Collections.singletonList("audio/ogg")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("ogv", Collections.singletonList("video/ogg")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("opus", Collections.singletonList("audio/ogg")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("orf", Collections.singletonList("image/x-dcraw")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("otf", Collections.singletonList("application/font-sfnt")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("pages", Collections.singletonList("application/x-iwork-pages-sffpages")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("pdf", Collections.singletonList("application/pdf")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("pfb", Collections.singletonList("application/x-font")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("pef", Collections.singletonList("image/x-dcraw")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("php", Collections.singletonList("application/x-php")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("pl", Collections.singletonList("application/x-perl")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("png", Collections.singletonList("image/png")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("pot", Collections.singletonList("application/vnd.ms-powerpoint")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("potm", Collections.singletonList("application/vnd.ms-powerpoint.template.macroEnabled.12")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("potx", Collections.singletonList("application/vnd.openxmlformats-officedocument.presentationml.template")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("ppa", Collections.singletonList("application/vnd.ms-powerpoint")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("ppam", Collections.singletonList("application/vnd.ms-powerpoint.addin.macroEnabled.12")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("pps", Collections.singletonList("application/vnd.ms-powerpoint")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("ppsm", Collections.singletonList("application/vnd.ms-powerpoint.slideshow.macroEnabled.12")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("ppsx", Collections.singletonList("application/vnd.openxmlformats-officedocument.presentationml.slideshow")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("ppt", Collections.singletonList("application/vnd.ms-powerpoint")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("pptm", Collections.singletonList("application/vnd.ms-powerpoint.presentation.macroEnabled.12")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("pptx", Collections.singletonList("application/vnd.openxmlformats-officedocument.presentationml.presentation")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("ps", Collections.singletonList("application/postscript")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("psd", Collections.singletonList("application/x-photoshop")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("py", Collections.singletonList("text/x-python")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("raf", Collections.singletonList("image/x-dcraw")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("rar", Collections.singletonList("application/x-rar-compressed")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("reveal", Collections.singletonList("text/reveal")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("rtf", Collections.singletonList("application/rtf")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("rw2", Collections.singletonList("image/x-dcraw")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("sgf", Collections.singletonList("application/sgf")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("sh-lib", Collections.singletonList("text/x-shellscript")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("sh", Collections.singletonList("text/x-shellscript")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("srf", Collections.singletonList("image/x-dcraw")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("sr2", Collections.singletonList("image/x-dcraw")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("svg", Arrays.asList("image/svg+xml", "text/plain")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("swf", Arrays.asList("application/x-shockwave-flash", "application/octet-stream")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("tar", Collections.singletonList("application/x-tar")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("gz", Collections.singletonList("application/x-compressed")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("tex", Collections.singletonList("application/x-tex")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("tgz", Collections.singletonList("application/x-compressed")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("tiff", Collections.singletonList("image/tiff")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("tif", Collections.singletonList("image/tiff")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("ttf", Collections.singletonList("application/font-sfnt")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("txt", Collections.singletonList("text/plain")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("vcard", Collections.singletonList("text/vcard")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("vcf", Collections.singletonList("text/vcard")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("vob", Collections.singletonList("video/dvd")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("wav", Collections.singletonList("audio/wav")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("webm", Collections.singletonList("video/webm")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("woff", Collections.singletonList("application/font-woff")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("wmv", Collections.singletonList("video/x-ms-wmv")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("xcf", Collections.singletonList("application/x-gimp")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("xla", Collections.singletonList("application/vnd.ms-excel")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("xlam", Collections.singletonList("application/vnd.ms-excel.addin.macroEnabled.12")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("xls", Collections.singletonList("application/vnd.ms-excel")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("xlsb", Collections.singletonList("application/vnd.ms-excel.sheet.binary.macroEnabled.12")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("xlsm", Collections.singletonList("application/vnd.ms-excel.sheet.macroEnabled.12")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("xlsx", Collections.singletonList("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("xlt", Collections.singletonList("application/vnd.ms-excel")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("xltm", Collections.singletonList("application/vnd.ms-excel.template.macroEnabled.12")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("xltx", Collections.singletonList("application/vnd.openxmlformats-officedocument.spreadsheetml.template")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("xml", Arrays.asList("application/xml", "text/plain")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("xrf", Collections.singletonList("image/x-dcraw")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("yaml", Arrays.asList("application/yaml", "text/plain")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("yml", Arrays.asList("application/yaml", "text/plain")); + FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("zip", Collections.singletonList("application/zip")); + } + + /** + public static void main(String[] args) { + Iterator fileExtensions = FILE_EXTENSION_TO_MIMETYPE_MAPPING.keySet().iterator(); + String extension; + List mimeTypes; + Map iconTextMap = new HashMap(); + iconTextMap.put(R.drawable.file, "file"); + iconTextMap.put(R.drawable.file_application, "app"); + iconTextMap.put(R.drawable.file_calendar, "calendar"); + iconTextMap.put(R.drawable.file_code, "code"); + iconTextMap.put(R.drawable.file_doc, "document"); + iconTextMap.put(R.drawable.file_image, "image"); + iconTextMap.put(R.drawable.file_movie, "movie"); + iconTextMap.put(R.drawable.file_pdf, "pdf"); + iconTextMap.put(R.drawable.file_ppt, "presentation"); + iconTextMap.put(R.drawable.file_sound, "sound"); + iconTextMap.put(R.drawable.file_vcard, "vcard"); + iconTextMap.put(R.drawable.file_xls, "spreadsheet"); + iconTextMap.put(R.drawable.file_zip, "archive"); + while (fileExtensions.hasNext()) { + extension = fileExtensions.next(); + System.out.println(extension + " / " + iconTextMap.get(getFileTypeIconId(null, "test." + extension))); + } + + System.out.println("notExistingExtension" + " / " + iconTextMap.get(getFileTypeIconId(null, "test." + "notExistingExtension"))); + } + */ +} From 97fc896fd4f17c982f1cde65f826befa5997ded9 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Thu, 10 Sep 2015 18:16:35 +0200 Subject: [PATCH 084/133] added mapping for bin to be iconized with "application" --- src/com/owncloud/android/utils/MimetypeIconUtil.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/com/owncloud/android/utils/MimetypeIconUtil.java b/src/com/owncloud/android/utils/MimetypeIconUtil.java index 2de2b559ef..2e11cdb7b3 100644 --- a/src/com/owncloud/android/utils/MimetypeIconUtil.java +++ b/src/com/owncloud/android/utils/MimetypeIconUtil.java @@ -160,6 +160,7 @@ public class MimetypeIconUtil { MIMETYPE_TO_ICON_MAPPING.put("application/vnd.openxmlformats-officedocument.wordprocessingml.document", R.drawable.file_doc); MIMETYPE_TO_ICON_MAPPING.put("application/vnd.openxmlformats-officedocument.wordprocessingml.template", R.drawable.file_doc); MIMETYPE_TO_ICON_MAPPING.put("application/x-7z-compressed", R.drawable.file_zip); + MIMETYPE_TO_ICON_MAPPING.put("application/x-bin", R.drawable.file_application); MIMETYPE_TO_ICON_MAPPING.put("application/x-cbr", R.drawable.file_doc); MIMETYPE_TO_ICON_MAPPING.put("application/x-compressed", R.drawable.file_zip); MIMETYPE_TO_ICON_MAPPING.put("application/x-dcraw", R.drawable.file_image); From 1a26995be26065f8fb8e53e2a1112472734678c6 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Thu, 10 Sep 2015 18:20:26 +0200 Subject: [PATCH 085/133] remove commented out test code --- .../android/utils/MimetypeIconUtil.java | 28 ------------------- 1 file changed, 28 deletions(-) diff --git a/src/com/owncloud/android/utils/MimetypeIconUtil.java b/src/com/owncloud/android/utils/MimetypeIconUtil.java index 2e11cdb7b3..23ebe1ab68 100644 --- a/src/com/owncloud/android/utils/MimetypeIconUtil.java +++ b/src/com/owncloud/android/utils/MimetypeIconUtil.java @@ -381,32 +381,4 @@ public class MimetypeIconUtil { FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("yml", Arrays.asList("application/yaml", "text/plain")); FILE_EXTENSION_TO_MIMETYPE_MAPPING.put("zip", Collections.singletonList("application/zip")); } - - /** - public static void main(String[] args) { - Iterator fileExtensions = FILE_EXTENSION_TO_MIMETYPE_MAPPING.keySet().iterator(); - String extension; - List mimeTypes; - Map iconTextMap = new HashMap(); - iconTextMap.put(R.drawable.file, "file"); - iconTextMap.put(R.drawable.file_application, "app"); - iconTextMap.put(R.drawable.file_calendar, "calendar"); - iconTextMap.put(R.drawable.file_code, "code"); - iconTextMap.put(R.drawable.file_doc, "document"); - iconTextMap.put(R.drawable.file_image, "image"); - iconTextMap.put(R.drawable.file_movie, "movie"); - iconTextMap.put(R.drawable.file_pdf, "pdf"); - iconTextMap.put(R.drawable.file_ppt, "presentation"); - iconTextMap.put(R.drawable.file_sound, "sound"); - iconTextMap.put(R.drawable.file_vcard, "vcard"); - iconTextMap.put(R.drawable.file_xls, "spreadsheet"); - iconTextMap.put(R.drawable.file_zip, "archive"); - while (fileExtensions.hasNext()) { - extension = fileExtensions.next(); - System.out.println(extension + " / " + iconTextMap.get(getFileTypeIconId(null, "test." + extension))); - } - - System.out.println("notExistingExtension" + " / " + iconTextMap.get(getFileTypeIconId(null, "test." + "notExistingExtension"))); - } - */ } From 7ae7cef2b30cc92a413919174ef88c15546c396b Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Fri, 11 Sep 2015 01:13:42 -0400 Subject: [PATCH 086/133] [tx-robot] updated from transifex --- res/values-nb-rNO/strings.xml | 11 +++++++++++ res/values-th-rTH/strings.xml | 5 +++++ 2 files changed, 16 insertions(+) diff --git a/res/values-nb-rNO/strings.xml b/res/values-nb-rNO/strings.xml index 43b1ba8469..bbf1061f39 100644 --- a/res/values-nb-rNO/strings.xml +++ b/res/values-nb-rNO/strings.xml @@ -202,6 +202,8 @@ Vil du virkelig fjerne %1$s inkludert innholdet? Kun lokalt Kun lokalt + Fra server + Ekstern & lokal Fjerning var vellykket Fjerning mislyktes Skriv inn et nytt navn @@ -253,7 +255,11 @@ Kun last opp bilder via WiFi Last opp video kun via WiFi /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 + server-versjon Bildeforhåndsvisning Dette bildet kan ikke vises %1$s kunne ikke kopieres til lokal mappe %2$s @@ -301,7 +307,11 @@ 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 Sikkerhet Sti til video-opplasting @@ -309,6 +319,7 @@ delte med deg %1$s delte \"%2$s\" med deg + \"%1$s\" er blitt delt med deg Oppfrisk forbindelse Server-adresse Ikke nok minne diff --git a/res/values-th-rTH/strings.xml b/res/values-th-rTH/strings.xml index 836a2af2d4..92fa673ffd 100644 --- a/res/values-th-rTH/strings.xml +++ b/res/values-th-rTH/strings.xml @@ -289,6 +289,7 @@ ไฟล์ไม่พร้อมใช้งานบนเซิร์ฟเวอร์ บัญชี เพิ่มบัญชี + เชื่อมต่อที่ปลอดภัยถูกเปลี่ยนเส้นทางผ่านเราเตอร์ที่ไม่ปลอดภัย บันทึก ส่งประวัติ ไม่พบการส่งบันทึกของแอพฯ ติดตั้งแอพฯเมล! @@ -304,7 +305,11 @@ มีไฟล์อยู่แล้วในโฟลเดอร์ปลายทาง เกิดข้อผิดพลาดขณะพยายามที่จะย้ายไฟล์หรือโฟลเดอร์นี้ เพื่อย้ายไฟล์นี้ + ไม่สามารถคัดลอก กรุณาตรวจสอบว่ามีไฟล์นั้นอยู่ + มันเป็นไปไม่ได้ที่จะคัดลอกลงในโฟลเดอร์โฟลเดอร์ย่อย มีไฟล์อยู่แล้วในโฟลเดอร์ปลายทาง + เกิดข้อผิดพลาดขณะพยายามคัดลอกไฟล์หรือโฟลเดอร์นี้ + เพื่อคัดลอกไฟล์นี้ อัพโหลดทันที ความปลอดภัย อัพโหลดเส้นทางวิดีโอ From ed094a7df6eef17eb7acddbb8296832addf1c714 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Fri, 11 Sep 2015 10:57:11 +0200 Subject: [PATCH 087/133] Add further javadoc descsribing how to maintain further mappings in the future --- .../android/utils/MimetypeIconUtil.java | 31 +++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/src/com/owncloud/android/utils/MimetypeIconUtil.java b/src/com/owncloud/android/utils/MimetypeIconUtil.java index 23ebe1ab68..e67479b3e9 100644 --- a/src/com/owncloud/android/utils/MimetypeIconUtil.java +++ b/src/com/owncloud/android/utils/MimetypeIconUtil.java @@ -12,12 +12,33 @@ import java.util.List; import java.util.Map; /** - * Helper class for detecting the right icon for a file, based on its mimen type and/or file extension. + *

Helper class for detecting the right icon for a file or directory, + * based on its mime type and/or file extension.

+ * + * This class maintains all the necessary mappings fot these detections.
+ * In order to add further mappings, there are up to three look up maps that need further values: + *
    + *
  1. + * {@link MimetypeIconUtil#FILE_EXTENSION_TO_MIMETYPE_MAPPING}
    + * to add a new file extension to mime type mapping + *
  2. + *
  3. + * {@link MimetypeIconUtil#MIMETYPE_TO_ICON_MAPPING}
    + * to add a new mapping of a mime type to an icon mapping + *
  4. + *
  5. + * {@link MimetypeIconUtil#MAINMIMETYPE_TO_ICON_MAPPING}
    + * to add a new mapping for the main part of a mime type. + * This is a list of fallback mappings in case there is no mapping for the complete mime type + *
  6. + *
*/ public class MimetypeIconUtil { - + /** Mapping: icon for mime type */ private static final Map MIMETYPE_TO_ICON_MAPPING = new HashMap(); + /** Mapping: icon for main mime type (first part of a mime type declaration). */ private static final Map MAINMIMETYPE_TO_ICON_MAPPING = new HashMap(); + /** Mapping: mime type for file extension. */ private static final Map> FILE_EXTENSION_TO_MIMETYPE_MAPPING = new HashMap>(); @@ -105,6 +126,12 @@ public class MimetypeIconUtil { } } + /** + * provides the file extension of a given filename. + * + * @param filename the filename + * @return the file extension + */ private static String getExtension(String filename) { String extension = filename.substring(filename.lastIndexOf(".") + 1).toLowerCase(); return extension; From b1aff427156f28323f11b7fc1f2eba94326b118e Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Fri, 11 Sep 2015 11:15:55 +0200 Subject: [PATCH 088/133] further cleanup, moving folder icon determination into util class --- .../ui/adapter/FileListListAdapter.java | 15 +++---------- .../android/utils/MimetypeIconUtil.java | 21 +++++++++++++++++-- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java index 75b27389f5..5e94e0f27f 100644 --- a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java +++ b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java @@ -336,18 +336,9 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { } else { // Folder - - if (checkIfFileIsSharedWithMe(file)) { - fileIcon.setImageResource(R.drawable.shared_with_me_folder); - } else if (file.isShareByLink()) { - // If folder is sharedByLink, icon folder must be changed to - // folder-public one - fileIcon.setImageResource(R.drawable.folder_public); - } else { - fileIcon.setImageResource( - MimetypeIconUtil.getFileTypeIconId(file.getMimetype(), file.getFileName()) - ); - } + fileIcon.setImageResource( + MimetypeIconUtil.getFolderTypeIconId( + checkIfFileIsSharedWithMe(file), file.isShareByLink())); } } diff --git a/src/com/owncloud/android/utils/MimetypeIconUtil.java b/src/com/owncloud/android/utils/MimetypeIconUtil.java index e67479b3e9..2c7f6ee06a 100644 --- a/src/com/owncloud/android/utils/MimetypeIconUtil.java +++ b/src/com/owncloud/android/utils/MimetypeIconUtil.java @@ -12,8 +12,8 @@ import java.util.List; import java.util.Map; /** - *

Helper class for detecting the right icon for a file or directory, - * based on its mime type and/or file extension.

+ *

Helper class for detecting the right icon for a file or folder, + * based on its mime type and file extension.

* * This class maintains all the necessary mappings fot these detections.
* In order to add further mappings, there are up to three look up maps that need further values: @@ -66,6 +66,23 @@ public class MimetypeIconUtil { return determineIconIdByMimeTypeList(possibleMimeTypes); } + /** + * Returns the resource identifier of an image to use as icon associated to a type of folder. + * + * @param isSharedWithUser flag if the folder is shared with the user + * @param isShareByLink flag if the folder is shared by link + * @return Identifier of an image resource. + */ + public static int getFolderTypeIconId(boolean isSharedWithUser, boolean isShareByLink) { + if (isSharedWithUser) { + return R.drawable.shared_with_me_folder; + } else if (isShareByLink) { + return R.drawable.folder_public; + } + + return R.drawable.ic_menu_archive; + } + /** * determines the icon based on the mime type. * From b256291d4b7b3d6af2d77f05462de70578056ac5 Mon Sep 17 00:00:00 2001 From: masensio Date: Fri, 11 Sep 2015 15:05:41 +0200 Subject: [PATCH 089/133] Update library reference: get share link --- owncloud-android-library | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/owncloud-android-library b/owncloud-android-library index 17bb724b42..30df7c33fb 160000 --- a/owncloud-android-library +++ b/owncloud-android-library @@ -1 +1 @@ -Subproject commit 17bb724b4207142d631a5f1c70d1e80c447e2310 +Subproject commit 30df7c33fbaac5db856482e4f72f7b119829dfae From 83eed1a8d85df39db4565ba23bdebcb49642dcd4 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Sat, 12 Sep 2015 01:13:45 -0400 Subject: [PATCH 090/133] [tx-robot] updated from transifex --- res/values-id/strings.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/res/values-id/strings.xml b/res/values-id/strings.xml index 8515df225f..76fa4048e8 100644 --- a/res/values-id/strings.xml +++ b/res/values-id/strings.xml @@ -291,6 +291,7 @@ Berkas tidak lagi tersedia pada server Akun Tambah akun + Sambungan aman dialihkan melalui rute yang tidak aman. Log Kirim Riwayat Tidak ada apl untuk mengirim log. Instal apl mail! @@ -306,7 +307,11 @@ Berkas sudah ada didalam folder tujuan Terjadi kesalahan saat mencoba memindahkan berkas atau folder ini untuk memindahkan berkas ini + Tidak dapat menyalin. Silakan periksa apakah berkas ada + Tidak mungkin menyalin folder kedalam turunannya Berkas sudah ada didalam folder tujuan + Terjadi kesalahan ketika mencoba menyalin berkas atau folder ini + untuk menyalin berkas ini Unggah Cepat Keamanan Unggah Lokasi Video From 9b8b29d98bb634a964dfccc51d8b4394f36c6d4e Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Mon, 14 Sep 2015 01:13:43 -0400 Subject: [PATCH 091/133] [tx-robot] updated from transifex --- res/values-cs-rCZ/strings.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/res/values-cs-rCZ/strings.xml b/res/values-cs-rCZ/strings.xml index 18db5bc4e5..f702afa763 100644 --- a/res/values-cs-rCZ/strings.xml +++ b/res/values-cs-rCZ/strings.xml @@ -306,7 +306,11 @@ správce systému. Soubor již v cílovém adresáři existuje Při pokusu o přesun tohoto souboru či složky 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 složky došlo k chybě + pro zkopírování tohoto souboru Okamžitá odesílání Zabezpečení Cesta pro nahrávání videí From 26f3917848b64da95fec8f3f6f5eda6bea5de89e Mon Sep 17 00:00:00 2001 From: masensio Date: Fri, 11 Sep 2015 15:05:41 +0200 Subject: [PATCH 092/133] Update library reference: get share link --- owncloud-android-library | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/owncloud-android-library b/owncloud-android-library index 17bb724b42..30df7c33fb 160000 --- a/owncloud-android-library +++ b/owncloud-android-library @@ -1 +1 @@ -Subproject commit 17bb724b4207142d631a5f1c70d1e80c447e2310 +Subproject commit 30df7c33fbaac5db856482e4f72f7b119829dfae From a52c4ea968246a7f502ea68d6d8b274b72ecc9eb Mon Sep 17 00:00:00 2001 From: masensio Date: Mon, 14 Sep 2015 13:21:48 +0200 Subject: [PATCH 093/133] Update library reference --- owncloud-android-library | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/owncloud-android-library b/owncloud-android-library index 30df7c33fb..ecc3415e3e 160000 --- a/owncloud-android-library +++ b/owncloud-android-library @@ -1 +1 @@ -Subproject commit 30df7c33fbaac5db856482e4f72f7b119829dfae +Subproject commit ecc3415e3e3c13fa8f73fdd51a88c1ab7087b199 From 8ed97d743324bebd0c23905ff5f2eeb3248f872f Mon Sep 17 00:00:00 2001 From: masensio Date: Mon, 14 Sep 2015 14:07:05 +0200 Subject: [PATCH 094/133] Update setup, changes from the issue #1154 --- SETUP.md | 2 +- doc/oCC2015_Android_workshop.odp | Bin 3317216 -> 3322434 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/SETUP.md b/SETUP.md index 59a51cabfc..0f1bc8ed85 100644 --- a/SETUP.md +++ b/SETUP.md @@ -36,7 +36,7 @@ Next steps will assume you have a Github account and that you will get the code * Open a terminal and go on with the next steps in it. * Clone your forked repository: ```git clone git@github.com:YOURGITHUBNAME/android.git```. * Move to the project folder with ```cd android```. -* Checkout the remote branch 'master' in your own local branch 'master': ```git checkout -b master remotes/origin/master```. +* Checkout the remote branch 'master' in your own local branch 'master': ```git checkout master remotes/origin/master```. * Pull any changes from your remote branch 'master': ```git pull origin master``` * Make official ownCloud repo known as upstream: ```git remote add upstream git@github.com:owncloud/android.git``` * Make sure to get the latest changes from official android/master branch: ```git pull upstream master``` diff --git a/doc/oCC2015_Android_workshop.odp b/doc/oCC2015_Android_workshop.odp index 104d22336fe67ff792d80e1e5e389c96a075c2c2..29ed242ad1c208d402e95dae1c48eea0be6448a3 100644 GIT binary patch delta 38881 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 From c6bc82d4fe3cd185d2faad1a5786eade5399102b Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Mon, 14 Sep 2015 21:49:45 +0200 Subject: [PATCH 095/133] center aligned the folder icon with the drawer icon --- res/layout/list_item.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/layout/list_item.xml b/res/layout/list_item.xml index c66ff73089..be0b94ea7f 100644 --- a/res/layout/list_item.xml +++ b/res/layout/list_item.xml @@ -48,7 +48,7 @@ android:layout_width="@dimen/file_icon_size" android:layout_height="@dimen/file_icon_size" android:layout_gravity="center_vertical" - android:layout_marginLeft="9dp" + android:layout_marginLeft="12dp" android:src="@drawable/ic_menu_archive" /> Date: Tue, 15 Sep 2015 18:02:34 +0200 Subject: [PATCH 096/133] adapting web's way of choosing icons --- res/drawable-xxhdpi/file_text.png | Bin 0 -> 3160 bytes .../owncloud/android/utils/MimetypeIconUtil.java | 12 ++++++------ 2 files changed, 6 insertions(+), 6 deletions(-) create mode 100644 res/drawable-xxhdpi/file_text.png diff --git a/res/drawable-xxhdpi/file_text.png b/res/drawable-xxhdpi/file_text.png new file mode 100644 index 0000000000000000000000000000000000000000..6007b3783875df95ca6917a49c8e71ab39a77b23 GIT binary patch literal 3160 zcmc&$c~nx{9^RN^<|XPqD=gF|n-rG~Rt9*JH1(-vmctRXl~a;pX{k8Gy*)!S!W`0W znwFtimuL`aP^jc;S~(&(B<7fkNm3*^z&pP8-}~pT_g1aD*V^lx-?zWtu=jV)-aGw( zyOYsE^g;lDk@J3{CjbcAeAm~7ky~|K0sPR8+3W1354R-!;567ah~DoT0}%hf&UXZj zpBoQ@D`NNg#2%uA#>O2z6$0Yo;;fEGkzjSjJ*oC>=(u?G!+VY@T&XRr8zk3BQY zAtkA9a_U3DQJ$gK!k!7wNVLQUo2tv*v5h#e#L_Oz_`pKLik1!1l9qVq!DYvs=5!d6 zd_U{zaH31o)t*fUbnkbwK4q}e*Sm>`UcYU-ay7=7tJ`YTv&;1C2-1zqer6Xo9Md>8 z7eA}Rxw`cm{zGAQ_EH2~=%2NOT=9Z4FUKN2&b@6flc%BMa&AlZ2|ZsG^H$ zhoIBb6BbbdMQ3ed`0W^kk8k(mO0hzkrkEB(L5;X&Turi!Cs3F|$Qz6R8RAie4Z8O* zIiaD(w6Xqf$q8J-pm2CQo8IggW<`4uo#d1gZ?@Zbdq;wj5Wx}5cCcqOmC7Y&ye+h% zYoZ4Z2)^J^sJu$4mf=`x0O#H84Jh#R9p&OP9u{h7B3EikrxQ-pvD%I&kBm&#E7|n> ziN?^7nv0d>RJmgwE^q~7Eyp*bMN14RZ0umBs2F>O(E)4n=`ZZn!=4B(K z0wTY{->naYcx)V6@VaF3f!MXf*U*%fwo^m}vCaF|_0PSonPkp$NB4q&78vvr|6rg7v!Y%uDn<~ zRUv&bt`DN|6PSzZ1?^PrM=&?xj^LpUTCg>Oq(WweTEM_v6k+R5JU{LdUePJoEI@Ph}SeJnp&_siz>7P?IQBcAea zjZ6R@MIWn*@6=-&5x5-X;>JQ4v5CJiP9p4CITLkB2hP4Fxrx6-c5bFf^PAW~r7-~3 z1;B2oyJ^CgI%X*^N{W=3Cnacs z@d9-3(+V$w%}(_!+0Ua-vjhZ{CC7-^WlT)(?0GnpCrqkB2NDWv%S|M;95OBy3v=>v zBvI}0VfSn3QX2z0NA9JC?rz6<7}}q^Mp3Y zUl8IUvRS#Pj>iqiN(bO`|IH1P?-gAtI)tp>3upww`8!p6HBBzm)kd(=Z74%L4e`IPGEqqiGU0%8}&9VaP58Th@7Hn)!{PDc*p&(5M@*g_HkiM zpTp+V&(S^FSz^c-7A<3>F*&G-UdVQ4Pa^&3m&I0d|)=t{lr#3|{V2nLw1Q z-dZ5mCn1s}Y;zJ{e|ATim9Q4rOGuq}=dw4~FksDWDB9rF`yk6|rj;pSu2k$W46Eep zA5hw6p<8DweMfy&wHTOXdkZV3`bz37Bs`1_680F*8m+)Tw0W20Dl=yrfXtRZxH#qQGD#;t=&f94DTznCaAwc@y?JWyu#tOg*^%Y`klUGAR3hHWzdG*Gz!znmdI zjyqOn0G{W?O*M24@*rl1GfPSPh`w0MRq7VMZm5>1Yt%&~l4YCNHT10x_;k3vNZoOG zAko{K{NZ|D;mj`}lrt-=4V1*r(fYuuNj~+U%<>Ujz=zw! zcPXDP)axMy^3FW2)W%Q?L}Ma^Ey-BHpa&$+*Fk`tf!m`36QUJv?64Dg02By3XC{xa zo#x;DGpQt*PWL(hmJJ&nlSxW%zmNqckhyeRt{zB6) z0%!J2c}&kmW;9;#BHSOM&^SUJkeLI(TDX2^SS)yB`7Wj<7n9i&wCx_-7VLWR7f$*A zS^097c)>%6aHhCI3fPMr2fC;Zp;kXc!H9AtZCtnHWMnnsRsD|<;yY^kU!ndj@$`cQ zEamw(|Cxi|NyK;mkmi%Rvh{*(movyRBYXEBBgFswSB~ukjg=TM7+b07KO!^gZb=0v zDlp(yEH!!PbeJEr8W9n zF#_e`vl8l?E%UeAhWRtel@%Ap@JUZ|K%ERBelcm%8t&b;ddJP$N2mvww&|c{(oZ^n ec2$PQ`63NSy*Ua_(VDyF>CXGyiTCyf{rWFwJJ6*7 literal 0 HcmV?d00001 diff --git a/src/com/owncloud/android/utils/MimetypeIconUtil.java b/src/com/owncloud/android/utils/MimetypeIconUtil.java index 2c7f6ee06a..bd8c5d91f0 100644 --- a/src/com/owncloud/android/utils/MimetypeIconUtil.java +++ b/src/com/owncloud/android/utils/MimetypeIconUtil.java @@ -159,7 +159,7 @@ public class MimetypeIconUtil { */ private static void populateMimeTypeIconMapping() { MIMETYPE_TO_ICON_MAPPING.put("application/coreldraw", R.drawable.file_image); - MIMETYPE_TO_ICON_MAPPING.put("application/epub+zip", R.drawable.file_doc); + MIMETYPE_TO_ICON_MAPPING.put("application/epub+zip", R.drawable.file_text); MIMETYPE_TO_ICON_MAPPING.put("application/font-sfnt", R.drawable.file_image); MIMETYPE_TO_ICON_MAPPING.put("application/font-woff", R.drawable.file_image); MIMETYPE_TO_ICON_MAPPING.put("application/illustrator", R.drawable.file_image); @@ -173,7 +173,7 @@ public class MimetypeIconUtil { MIMETYPE_TO_ICON_MAPPING.put("application/postscript", R.drawable.file_image); MIMETYPE_TO_ICON_MAPPING.put("application/pdf", R.drawable.file_pdf); MIMETYPE_TO_ICON_MAPPING.put("application/rss+xml", R.drawable.file_code); - MIMETYPE_TO_ICON_MAPPING.put("application/rtf", R.drawable.file_doc); + MIMETYPE_TO_ICON_MAPPING.put("application/rtf", R.drawable.file); MIMETYPE_TO_ICON_MAPPING.put("application/vnd.android.package-archive", R.drawable.file_zip); MIMETYPE_TO_ICON_MAPPING.put("application/vnd.ms-excel", R.drawable.file_xls); MIMETYPE_TO_ICON_MAPPING.put("application/vnd.ms-excel.addin.macroEnabled.12", R.drawable.file_xls); @@ -205,7 +205,7 @@ public class MimetypeIconUtil { MIMETYPE_TO_ICON_MAPPING.put("application/vnd.openxmlformats-officedocument.wordprocessingml.template", R.drawable.file_doc); MIMETYPE_TO_ICON_MAPPING.put("application/x-7z-compressed", R.drawable.file_zip); MIMETYPE_TO_ICON_MAPPING.put("application/x-bin", R.drawable.file_application); - MIMETYPE_TO_ICON_MAPPING.put("application/x-cbr", R.drawable.file_doc); + MIMETYPE_TO_ICON_MAPPING.put("application/x-cbr", R.drawable.file_text); MIMETYPE_TO_ICON_MAPPING.put("application/x-compressed", R.drawable.file_zip); MIMETYPE_TO_ICON_MAPPING.put("application/x-dcraw", R.drawable.file_image); MIMETYPE_TO_ICON_MAPPING.put("application/x-deb", R.drawable.file_zip); @@ -223,8 +223,8 @@ public class MimetypeIconUtil { MIMETYPE_TO_ICON_MAPPING.put("application/x-rar-compressed", R.drawable.file_zip); MIMETYPE_TO_ICON_MAPPING.put("application/x-shockwave-flash", R.drawable.file_application); MIMETYPE_TO_ICON_MAPPING.put("application/x-tar", R.drawable.file_zip); - MIMETYPE_TO_ICON_MAPPING.put("application/x-tex", R.drawable.file_doc); - MIMETYPE_TO_ICON_MAPPING.put("application/xml", R.drawable.file_code); + MIMETYPE_TO_ICON_MAPPING.put("application/x-tex", R.drawable.file_text); + MIMETYPE_TO_ICON_MAPPING.put("application/xml", R.drawable.file_text); MIMETYPE_TO_ICON_MAPPING.put("application/yaml", R.drawable.file_code); MIMETYPE_TO_ICON_MAPPING.put("application/zip", R.drawable.file_zip); MIMETYPE_TO_ICON_MAPPING.put("database", R.drawable.file); @@ -253,7 +253,7 @@ public class MimetypeIconUtil { MAINMIMETYPE_TO_ICON_MAPPING.put("database", R.drawable.file); MAINMIMETYPE_TO_ICON_MAPPING.put("httpd", R.drawable.file_zip); MAINMIMETYPE_TO_ICON_MAPPING.put("image", R.drawable.file_image); - MAINMIMETYPE_TO_ICON_MAPPING.put("text", R.drawable.file_doc); + MAINMIMETYPE_TO_ICON_MAPPING.put("text", R.drawable.file_text); MAINMIMETYPE_TO_ICON_MAPPING.put("video", R.drawable.file_movie); MAINMIMETYPE_TO_ICON_MAPPING.put("web", R.drawable.file_code); } From 0290523c032964a843374147e42bd7bbd54ab2e5 Mon Sep 17 00:00:00 2001 From: "David A. Velasco" Date: Tue, 15 Sep 2015 18:02:56 +0200 Subject: [PATCH 097/133] Added icons for file type TEXT --- res/drawable-hdpi/file_text.png | Bin 0 -> 1173 bytes res/drawable-mdpi/file_text.png | Bin 0 -> 836 bytes res/drawable-xhdpi/file_text.png | Bin 0 -> 1638 bytes res/drawable-xxhdpi/file_text.png | Bin 3160 -> 2512 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 res/drawable-hdpi/file_text.png create mode 100644 res/drawable-mdpi/file_text.png create mode 100644 res/drawable-xhdpi/file_text.png diff --git a/res/drawable-hdpi/file_text.png b/res/drawable-hdpi/file_text.png new file mode 100644 index 0000000000000000000000000000000000000000..ec6b005ff4eee980a289a3e9da68a57cfc054ab9 GIT binary patch literal 1173 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvE4M+yv$zcalY)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_Gz7y~NYkmHj>^Kfk5bPU%z+1_l--PZ!6Kid%2*`gY5>GBi9~^|n`j z#f*-3ZZ07qN?lz_U5g}46g0S+CM`A>E}I_8)Xi?&!}ZEA<h# zojLT|1hl5tUH&WO6d}de{$AdqAiIGZ_3Bmj=g*((r+qu9eyzG;-D@$Of4c8~o;-OnSaYc?Q^adswPSa$ zU5}`+YT0mQ+uOHH5z)8TuHE?2<$7uQ>s|LW8w`IhJUgpW<=7AB+uOc#Hw4|iTzYrr z!GsSB7&NZljlDki_4nWXTn$P`C6=#V6(z;P)(=u+DAjvT&aUQ%BxAs;x5C20_pg@z zodeXc*6`S5&84=Afox)=CaAz1=nBazBDznd?#L&mUhhk+&@<@&HP6n-uwCcuYWe@c~VcM zcAUI5gY-t>nwzh`s_|SR(OwwYIjl`m0_0 zA{nM+mG^v{z1Y3~o)UxC*FyysHnmSqOuWtFuyVVzf9$T3msisEcLg%!%$oCga_sfm z``g~m1)9cR9$UUFbJlL4va+Xh&VT>?_cxIFZtbd9IkDIIb6(_6{3@3)dA@7npFd_& zz2DB9J^MF_rfpf@Xc-G!q9hwlCT{r&%zd(62vK00YGja6*v2WG)`0j=UQ_g^@1c!!35{r2|u g_wLh-@Z7rc^xh-93%7p?S_TsGboFyt=akR{0EP6^KfjeljYar!1_q{!o-U3d6}R5r*`IwSLE^y2=R220 zxQe(oS#)@?ueEm&a1>xY=vYvwWwA5lO|0zHAa-L;t0|Md)!yeWTirZamiy|WD@Qjf zh?uAUXFRBV^6@H<)fHP`-u?aejd)Szew&>wPh5cZGB7yklvtZRnzMWLs(#m$8O~bq zAzx4a`0>L@gwf);Tj*EO*Z;atoq4xCYOVP0T6gJK@g-JAtNz!;gl_$C&;G@42A3x$ zulK$zIlK2e|8Ls{$7@yI=bbsu|FUHG(>T+XOVPqOn5o0ODUD;{+|-Ri2P{bXmQT)`Vn7MQ3+HOmJSh}0>{oc~g zKhrj^+`A{~Zry+1We1n5c;@x=_SU8{xtut2E;lEq=F7eLDh(BL1tylC+nES-PGRU@ z0VfNfy;fOi+V_5cW)WB);&QKDKu^$N58uq2MZ53r^8rdmgkGI3aOms4o%{{;pU$4i z0|rd0n!}uLD_=b-^I>9o@sPtMrHw%;EiHXl?TIN2Rnf^QDK4B0EDTHxj13G93+Zt0kN$Ai<|ELi*wj-|Na2W0}+IZ0{Mp5IcgAPXu2TW7nys+12*rP-=4r!z=cq; zgJ0lssev#S%V280EPQdFyW?*qiyFgnm_vYazZqiMjTw;~2U9O_z<*z{ME2##`1tL+ zm?M&9vo=pljSS6ZSY@TDq?*0)v6u1eH&uVPCHp^n_H3P*RPS=7qOSX*|6^5^=C58g lYu1bz5l;)i$*f`jSLTnOwwtZt_!0*a@O1TaS?83{1OOM0LYDvl literal 0 HcmV?d00001 diff --git a/res/drawable-xhdpi/file_text.png b/res/drawable-xhdpi/file_text.png new file mode 100644 index 0000000000000000000000000000000000000000..bf7e9d7a095a922ac526f47c1dfaa8266c10515a GIT binary patch literal 1638 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 E2fTW0djJ3c literal 3160 zcmc&$c~nx{9^RN^<|XPqD=gF|n-rG~Rt9*JH1(-vmctRXl~a;pX{k8Gy*)!S!W`0W znwFtimuL`aP^jc;S~(&(B<7fkNm3*^z&pP8-}~pT_g1aD*V^lx-?zWtu=jV)-aGw( zyOYsE^g;lDk@J3{CjbcAeAm~7ky~|K0sPR8+3W1354R-!;567ah~DoT0}%hf&UXZj zpBoQ@D`NNg#2%uA#>O2z6$0Yo;;fEGkzjSjJ*oC>=(u?G!+VY@T&XRr8zk3BQY zAtkA9a_U3DQJ$gK!k!7wNVLQUo2tv*v5h#e#L_Oz_`pKLik1!1l9qVq!DYvs=5!d6 zd_U{zaH31o)t*fUbnkbwK4q}e*Sm>`UcYU-ay7=7tJ`YTv&;1C2-1zqer6Xo9Md>8 z7eA}Rxw`cm{zGAQ_EH2~=%2NOT=9Z4FUKN2&b@6flc%BMa&AlZ2|ZsG^H$ zhoIBb6BbbdMQ3ed`0W^kk8k(mO0hzkrkEB(L5;X&Turi!Cs3F|$Qz6R8RAie4Z8O* zIiaD(w6Xqf$q8J-pm2CQo8IggW<`4uo#d1gZ?@Zbdq;wj5Wx}5cCcqOmC7Y&ye+h% zYoZ4Z2)^J^sJu$4mf=`x0O#H84Jh#R9p&OP9u{h7B3EikrxQ-pvD%I&kBm&#E7|n> ziN?^7nv0d>RJmgwE^q~7Eyp*bMN14RZ0umBs2F>O(E)4n=`ZZn!=4B(K z0wTY{->naYcx)V6@VaF3f!MXf*U*%fwo^m}vCaF|_0PSonPkp$NB4q&78vvr|6rg7v!Y%uDn<~ zRUv&bt`DN|6PSzZ1?^PrM=&?xj^LpUTCg>Oq(WweTEM_v6k+R5JU{LdUePJoEI@Ph}SeJnp&_siz>7P?IQBcAea zjZ6R@MIWn*@6=-&5x5-X;>JQ4v5CJiP9p4CITLkB2hP4Fxrx6-c5bFf^PAW~r7-~3 z1;B2oyJ^CgI%X*^N{W=3Cnacs z@d9-3(+V$w%}(_!+0Ua-vjhZ{CC7-^WlT)(?0GnpCrqkB2NDWv%S|M;95OBy3v=>v zBvI}0VfSn3QX2z0NA9JC?rz6<7}}q^Mp3Y zUl8IUvRS#Pj>iqiN(bO`|IH1P?-gAtI)tp>3upww`8!p6HBBzm)kd(=Z74%L4e`IPGEqqiGU0%8}&9VaP58Th@7Hn)!{PDc*p&(5M@*g_HkiM zpTp+V&(S^FSz^c-7A<3>F*&G-UdVQ4Pa^&3m&I0d|)=t{lr#3|{V2nLw1Q z-dZ5mCn1s}Y;zJ{e|ATim9Q4rOGuq}=dw4~FksDWDB9rF`yk6|rj;pSu2k$W46Eep zA5hw6p<8DweMfy&wHTOXdkZV3`bz37Bs`1_680F*8m+)Tw0W20Dl=yrfXtRZxH#qQGD#;t=&f94DTznCaAwc@y?JWyu#tOg*^%Y`klUGAR3hHWzdG*Gz!znmdI zjyqOn0G{W?O*M24@*rl1GfPSPh`w0MRq7VMZm5>1Yt%&~l4YCNHT10x_;k3vNZoOG zAko{K{NZ|D;mj`}lrt-=4V1*r(fYuuNj~+U%<>Ujz=zw! zcPXDP)axMy^3FW2)W%Q?L}Ma^Ey-BHpa&$+*Fk`tf!m`36QUJv?64Dg02By3XC{xa zo#x;DGpQt*PWL(hmJJ&nlSxW%zmNqckhyeRt{zB6) z0%!J2c}&kmW;9;#BHSOM&^SUJkeLI(TDX2^SS)yB`7Wj<7n9i&wCx_-7VLWR7f$*A zS^097c)>%6aHhCI3fPMr2fC;Zp;kXc!H9AtZCtnHWMnnsRsD|<;yY^kU!ndj@$`cQ zEamw(|Cxi|NyK;mkmi%Rvh{*(movyRBYXEBBgFswSB~ukjg=TM7+b07KO!^gZb=0v zDlp(yEH!!PbeJEr8W9n zF#_e`vl8l?E%UeAhWRtel@%Ap@JUZ|K%ERBelcm%8t&b;ddJP$N2mvww&|c{(oZ^n ec2$PQ`63NSy*Ua_(VDyF>CXGyiTCyf{rWFwJJ6*7 From eaf249803cbecf9f593bc54fc4ac9ad3e4eb4724 Mon Sep 17 00:00:00 2001 From: "David A. Velasco" Date: Tue, 15 Sep 2015 18:04:22 +0200 Subject: [PATCH 098/133] Removed unneeded LDPI drawables --- res/drawable-ldpi-v9/ic_action_download.png | Bin 457 -> 0 bytes res/drawable-ldpi-v9/ic_action_refresh.png | Bin 3033 -> 0 bytes res/drawable-ldpi-v9/ic_action_settings.png | Bin 871 -> 0 bytes res/drawable-ldpi/common_error.png | Bin 802 -> 0 bytes res/drawable-ldpi/copy_link.png | Bin 2346 -> 0 bytes res/drawable-ldpi/file.png | Bin 306 -> 0 bytes res/drawable-ldpi/file_doc.png | Bin 380 -> 0 bytes res/drawable-ldpi/file_image.png | Bin 486 -> 0 bytes res/drawable-ldpi/file_movie.png | Bin 318 -> 0 bytes res/drawable-ldpi/file_pdf.png | Bin 877 -> 0 bytes res/drawable-ldpi/file_ppt.png | Bin 259 -> 0 bytes res/drawable-ldpi/ic_action_create_dir.png | Bin 566 -> 0 bytes res/drawable-ldpi/ic_action_download.png | Bin 457 -> 0 bytes res/drawable-ldpi/ic_action_refresh.png | Bin 3058 -> 0 bytes res/drawable-ldpi/ic_action_refresh_black.png | Bin 3058 -> 0 bytes res/drawable-ldpi/ic_action_settings.png | Bin 594 -> 0 bytes res/drawable-ldpi/ic_action_upload.png | Bin 1221 -> 0 bytes res/drawable-ldpi/icon.png | Bin 3655 -> 0 bytes res/drawable-ldpi/image_fail.png | Bin 5348 -> 0 bytes res/drawable-ldpi/winter_holidays_icon.png | Bin 1892 -> 0 bytes 20 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 res/drawable-ldpi-v9/ic_action_download.png delete mode 100644 res/drawable-ldpi-v9/ic_action_refresh.png delete mode 100644 res/drawable-ldpi-v9/ic_action_settings.png delete mode 100644 res/drawable-ldpi/common_error.png delete mode 100644 res/drawable-ldpi/copy_link.png delete mode 100644 res/drawable-ldpi/file.png delete mode 100644 res/drawable-ldpi/file_doc.png delete mode 100644 res/drawable-ldpi/file_image.png delete mode 100644 res/drawable-ldpi/file_movie.png delete mode 100644 res/drawable-ldpi/file_pdf.png delete mode 100644 res/drawable-ldpi/file_ppt.png delete mode 100644 res/drawable-ldpi/ic_action_create_dir.png delete mode 100644 res/drawable-ldpi/ic_action_download.png delete mode 100644 res/drawable-ldpi/ic_action_refresh.png delete mode 100644 res/drawable-ldpi/ic_action_refresh_black.png delete mode 100644 res/drawable-ldpi/ic_action_settings.png delete mode 100644 res/drawable-ldpi/ic_action_upload.png delete mode 100644 res/drawable-ldpi/icon.png delete mode 100644 res/drawable-ldpi/image_fail.png delete mode 100644 res/drawable-ldpi/winter_holidays_icon.png diff --git a/res/drawable-ldpi-v9/ic_action_download.png b/res/drawable-ldpi-v9/ic_action_download.png deleted file mode 100644 index 41fe95a4097b59150dd699b6709d78a2c09c8b31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 457 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmUKs7M+SzC{oH>NS%G}EByV>Y zhW{YAVDIwDKoQOYkH}&M25w;xW@MN(M*=9wUgGKN%6^wcjE76>)QQWl7#JAcJY5_^ zA`ZX3w%dz2P~h0d`^OUYggRMi8!r36TEi&K8t=#*e{k+pb}n3(?0T6|yUBMUPhZHY}!87v(PAC@OaIEb7x&l5;z zHR!JGY08D)Necn~<=L#kMg?O`h-FT;3 zaY^kCuj#yuD)UxhneVT3ymknN76>SGRUD9t+az_kI)}BvKSz!8UccA@O|g$1ub22O zvYUR%E8sxXEQX_cMwdAj-^f{Nz&m%%y;XDGGUX<0mG68T@Xq+nU)F$QHIwfxPYmn` xeYcEL|AX+QIcg4!(=*Kz_f31w@L&Fc_|4OyA(wQXTLA-^!PC{xWt~$(69A*zv6KJ+ diff --git a/res/drawable-ldpi-v9/ic_action_refresh.png b/res/drawable-ldpi-v9/ic_action_refresh.png deleted file mode 100644 index bd611e8e24d2e211a94d1658a49c823c4201716f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3033 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 IFo%f$0VKS%G5`Po diff --git a/res/drawable-ldpi-v9/ic_action_settings.png b/res/drawable-ldpi-v9/ic_action_settings.png deleted file mode 100644 index e2c2d517f576e0e68e8c4d7c20eec213b23b565f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 871 zcmV-t1DO1YP)R94O*ZD#+j-CXKIfe0`9J^Xe-8Av|Gh=26C@E4 zNa_#t^XGg-wEYtY5=U+T*{0<{ZA82&b)8%{H(vx)17rP+1~ztQtz1`d|EUL70v{98 zc3`Tc)TT!esFXAr80c|@q{YB|Ku$rM-=_o1fC@VslBy&PDwzY0B7jrCLZB6R1q=tK z0>^>#$&@^>2G|BP0*`>fz<8hu*Z_1yMDZk)R0CWD`ubBJ;4yFrs00oGHIDuzumku4 z>;@*;DFNSr6%lc-CGIDS7OmS$@gi@
}n@&TG)0B&d`pl-gN|??3o{*|b@QRiBTo*i8<&CRMx(;Bz zMdmkqV4iK7j8=b1)g_;H?x&bQEs~BEkZ`G_Tmc6b`CqG~<&yS!ZiA$uf8#-CW%vU4 zYB&c0>w#UsNayzsaNXu}ff@_ocM1V|9Ll-d+3WshD;eapFQ xg2|`d!hd}&F9XW#Kzl@VbOv>A>urB)KL8e}!>JkCceell002ovPDHLkV1k|6c1ZvL diff --git a/res/drawable-ldpi/common_error.png b/res/drawable-ldpi/common_error.png deleted file mode 100644 index f1a804a6ad835c4f0fe069259264113a05114d79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 802 zcmeAS@N?(olHy`uVBq!ia0vp^{2$tmBGeeY)rti!M{T zhAW%0Y4)+>d#apCWdW=pD55A`c zD%bv~y=gW5SgObJ&vMs98saWA%UbUFD54j-gfE_lVc!ga`G-{7&G#)}w|<*8$M~(w zqN{VCL~$@RI8KO-vYwdH`e4i4kaG>)uBGZf->XTV*=-`;y`+fk&5nqZS`SY#gf&}E zsQ+pa7G!%4KygI@0!= zvud}~o-I`urp-7z?b*It3|f-2%c6wYoBLa9Hf-Zm+OzLF$8r6@+7Dgx=01(gJ!@fm z_cP1Ek{8>!l_yW@+Zp~RDKqK!<>@nS{`vWQgXoKA7VjEspDtUs_xhRjZ&%+vpWZZK zr`T!n{PYW1XL6?g_C1<^apJPlx31!Xa^?5-2>c4&&vr2f2If`<1{1|s-A2)no1c=IR*74~11}*^ x0+j^W5S*V@Ql40p%HWuipOmWLnVXoN8kCxtQdxL1)dr}D!PC{xWt~$(697EOO56Yd diff --git a/res/drawable-ldpi/copy_link.png b/res/drawable-ldpi/copy_link.png deleted file mode 100644 index 7384309dd3f9ce04a011f73215846163f9424429..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2346 zcmaJ@dpwi-AAej!hU8vpEk{%B;xcS3W;54mYz`;UW*)YqU2K!3PONe&T^!X;NDjxP zQ0kzIq?AfZH<5*oOTX}2(T}9dqVuei&hL+3zvuOOp6~bbdA;B7&-IUI4?QdZW@Kjs z001l~kP-o%4w~0MANmdgd3n%bEA@|-GK7iJG`1K7ND0Dt5FW&5CxHwZ8{7krcE-7T;5}BuT_78S^~AVfQCK_y=Ssl3z`r~QD4IAS zkq|+leu)KHL@p^f)FUlW`UF~LkT3y=M*TQ zgd^sOq&%Sju2E#i3sa>;1eEFDCGbUGWd)KiZGswxk+DS>XEat*(j1UR`~Ofr|0`M| zjR612_kRjYn43i)CIXZQQ^g!;aEZ$`p+p3-7-UO@Vx~~IajuJWu23qJaD^f`nf$qH za3qb*;R!TOr_U@JjSwV|NZA4o7(^i=ARRQ1mq2iL_ouqLLoK3`ot>Ti-8^wrJjoB| zM{&nHQ=u`;aVbJhDjyU`=eP;~a7o|fY8HYof+ABuF>e!?Kotx5@Xv)4c;C*&#5J% zLT9F0w3^PJ>;ZEFu-?~o?Xu2=RxTbhT^L_mQW&m#L-cd3ul=MMGH_48D1DH%Fhb=J zvj4QpwS!zogW3wDt;KvTTRGf*a@%t4#=d(EbxQ3!<8fBw?fFmC>Y3@c>X*c~-j}Oe zvBoC{p6{@d4`<&DI8+KNR+JngB^Q0tBgV?7rlzd+4HhLEl$~vQJ=(B0s-(1fkv%O; zJEv8r#1}Y95y1aEzi6K^>{-gwfK^62)x@>fk<%7|*}=l*QKe^e-u$bf&GYg@O?1dD zs|!nyp~`M7)jx7JIU;3d!cwas3%{AV(&^KTqs=1QYj=9%bpQAyFe@+|AMC68puUU7 zckF$j>@cd%^7G8K(RmU3_`7H8hhI7p@?DJA#XUa0x&2-_ zrCEB&h4I>kY|@#oXAN%Bq?-r*7u&|Ef=D{?CKhgWHTb3=YTB z&eG`UZz*eUkPk@u0xC}5-@$w0_S55Ty<1kM{fc~xElo2d4^O&kJkBC*ua^<>#pw^3eUfxg$G1w@>YCVV>W*po$J_ z-|}Q+&8~@E3kP02gDunA(%)Li=>hH<^3&xr{mM2w`{-c?w$GI&n#D~ z`=*B$8r%lDZ&_#M=K=TmF#}@;dn}H3JnV4;hw!$tS0&5aPhClNDy=9n99A6QpvIPL zbdtUCMKY#)f2$XK+G=xq;BXtyr{~CYRH05maBDo)sp`jk7v`S|A@`|M4OW#|zdii9 zV6lYkB_D3KOmv2yV%HlQq++Ws!j7>l5^I?@G~e}X;|B*V`Q%A&vt>>13Rs<5c+_AU z#d?;0`(4(JyHqBuCx`13ep>RrH$HJ~;J$S>k-l~LgrT}SdK-J&JaF>sw^--sE8kvR zSu>W=g*!uh-BuTIff?;kTU&3o%y??rw0TF-nvFwI@|=-PyUmyWva&W!anl5-j1%%+ zAPEO&wdiS~*iOHJ02)eHv3vJW?S`%MvqM-ckqx!A^@)AV?()o9nb~wl4AFfU$r?vZ z7NKmA+g7}`sB6LOe*f;HUV44Q;$9`PzNe;WO~qswjPcX?16QwwsQak%yAVd!7uw6~ z8h0sHmMJW>5A0PHFJ;AZ`1zoEXC%TTH%66mDLIH{`^vW4|BW?X0S*`f>O)Lekj{JjMEhf!+$Slj;s21vvV diff --git a/res/drawable-ldpi/file.png b/res/drawable-ldpi/file.png deleted file mode 100644 index 74add13f2760e194a8145532201f6bdc478ea9ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmSQK*5Dp-y;YjHK@;M7UB8wRq zq}PKmW1Q4P8K9tKiEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$Qb0xPJzX3_ zB3j>GGUQ@%HpSF}&Weo6|+0Aro5d*7+ t10z>J1Cz*t2D1Zek5^xp+g)$se{H5I`;W?nuYpcy@O1TaS?83{1OOSjY?A;0 diff --git a/res/drawable-ldpi/file_doc.png b/res/drawable-ldpi/file_doc.png deleted file mode 100644 index 3bc2f08d1f9d7c848152864c94407d9232f3b877..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 380 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmSQK*5Dp-y;YjHK@;M7UB8wRq zq}PKmW1Q4P8K9tKiEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$Qb0vNJzX3_ zB3hFZBwjWM#vUlXx_UED50BdviC^;@3ze0>w|{sWx5}P#W$K|vDqTA55+Co+f2jSR zuRU~qg-1EV*9K;B<-=zCd)HU8pJL?sFDa2z|Nqzi^R-vq6=SjtE+2Rm{(s`n+s;P~ zt~_9V@oS-;hDvj{K2R>=YXqcJciGzt}}{uWSP&+Z{%h%M2TLHr&}_^uxKKYA1uW#0LS1QiiKV zjCu|lyuAMeB+jxPzQ-u?oXP9*i3j|R7h@di+5e@P)o|@-ya-rp z9|7FgN=s`k0IcQ|7;3?7N9}ITaF+mg)INO*Y?}pUZq{1Ak0SJg_*PP$$AtIuUG3ME|E=|)wN|^%)06+-Q zYT;x7BHEN2EnN~}7-j%2hSp3HsD)SbN)S=P%!zBy(E=Uey%M#)I~gS~5Z;n#_T7c^ zD;N>}BSAzvDdib65B7buz=UuB-?yB(>jm$pw*^zf_oa0L0Gvs126mY$-CwJoBu|r{dj_+@om&BK}`s|^oYL(m=j@=5gc!Uq`(Nbyr?~&%T z;N$y}%LmT9J7A^pUFRjk1@*~+4;g-EZkV;+>}BrH`@X%mE}Ty4&?j z)n$v_i2$TZi*-xC*ic+-{3!r{LZQp+EoGt1lmcku0^}SyMex8ev|!Ev*>Yyo;#ys4 zsV`*!p3+s=;rB!v>M%mf2U9X#Rb#iBR)@x>1VA4@5j*^jcvmN?$1~WnJUhKsaGf&6LdCj`(PiJ8D?!Y0O5oC zQ9T(LMI|`%3+Q}s55?Vc2*yp5XnieT@83n*cJct;bsG?A8XwP`1VHs>;wqR%_osHG zZKL@EX#N0pB!boU21iB)8OvAF_4F}scI`+GK=TJMmMp`Lgwe9c;a#&H=j1#P0vU^8 zy>3M~9HeFYad^F0uUqK2b_Em_@9MIC`wj|V)Qnm9$~S?cpc)3FX3eGR$s<0TIEvNU zg8d-^Qi2dT^QMwMa}HWC2V-dn6ov4is>A>kmkVD-CF!&0p*WpL+opBf7Glj!eHTdC z^L^Aj8_aX{c=S8rbTM}49$fhae7SuCgrNP*ss7CqRKEb38_UsxxkL_EF?vZ6(Z+f{ zo<5#Z^WOrv7cL^&SWi}Y1@X@vwC&xEw5*W>=(uzqJ$C}J=2x_C--;c6pK^2P`(7Z2 z#p$~yoV}t5==B)xzv2P)7XnCeXV~1Nxbx%d|1W@VeDv*~lYxxG00000NkvXXu0mjf Du;7sp diff --git a/res/drawable-ldpi/file_ppt.png b/res/drawable-ldpi/file_ppt.png deleted file mode 100644 index 644fb852009e9a6d057d23cd0ab14fc8d02e6c04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmSQK*5Dp-y;YjHK@;M7UB8wRq zq}PKmW1Q4P8K9tKiEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$Qb0uwo-U3d z5v|Dy60FLy28Sf%mmQs-o{(U$VDi%0KQ@c~GByAL#m>t|i`dxM+WzzK>@zSEwre$E z`7l9VgZ;q470eMASXnlS86^dK=zd6y`ct3suc7_G3T8K1gI5iK>^)Wti}f7zS7-9F u*{}e`Dr63vI8e|MH|^5pb%6#y7#U`~=9jPJ$$JcR3xlVtpUXO@geCw>5>i?K diff --git a/res/drawable-ldpi/ic_action_create_dir.png b/res/drawable-ldpi/ic_action_create_dir.png deleted file mode 100644 index 8ed2dae9a924cef31e9e28da5e467f6d3fbf58c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 566 zcmV-60?GY}P)x^(Ng$*#W{Yz5)8ADMu3^>0^xXX%ht|z(mrC?UUA#LAKX`S9!ho6x8ru(ql=J9*NH`#@QiE{bBkC-+NvstVZ2%IqyvAjXKKpDVa?gw~svfw<}bd9GaC13d*4`*o#p3PaA^BkDKap8x;=07*qoM6N<$ Ef^Aj!QUCw| diff --git a/res/drawable-ldpi/ic_action_download.png b/res/drawable-ldpi/ic_action_download.png deleted file mode 100644 index 7293d6da57ef5b1e17754b30b53bcdf0f3b07dc4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 457 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmUKs7M+SzC{oH>NS%G}EByV>Y zhW{YAVDIwDKoQOYkH}&M25w;xW@MN(M*=9wUgGKN%6^wcjE6^3*-5mDfq~J@)5S3) z;_%z+yS-!EhEcXu_JLIR6!y@h79Gew*!Hreg zQ9!hJ)>cWyHHw|PW{bRIKipVsai;$Hrp?h_la3gKnx%*`upaQJS{%0eYjM5^w?^yU z$3nKzt1f1gu)hd4j_Bu@_OXH2=D#IVt=2*JHJnk0S2U`mx{C9NJlN`N6=#%rSZ~%* zn|lUxi|m?~GOT_i^F5Mz%Em5FlfyT|8T*oTuX*P@o7j|{)BZTEU1ZNgzUYr}Czi5F zSsZd{->mhG$>h4yoqn1At#5r7^gVVgaTK<$a8Z4BNVJUoW}CU-yNxIQ^3D5{cX-RI zh$FgsM$*UauRP3GOVDrdiZI{$Ncw@=Ro10)-|Y_VVp@~1Gxtu~!XTR~oP1S`K8bqj w4J+${3ZxYCQh5T7-Q3>%===(XAKw|~_vHl|uA0fe5*Ww~p00i_>zopr0PexA%K!iX diff --git a/res/drawable-ldpi/ic_action_refresh.png b/res/drawable-ldpi/ic_action_refresh.png deleted file mode 100644 index 63e70e1786450eff17a947367038076c98ccc497..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3058 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 diff --git a/res/drawable-ldpi/ic_action_refresh_black.png b/res/drawable-ldpi/ic_action_refresh_black.png deleted file mode 100644 index 63e70e1786450eff17a947367038076c98ccc497..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3058 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 diff --git a/res/drawable-ldpi/ic_action_settings.png b/res/drawable-ldpi/ic_action_settings.png deleted file mode 100644 index c290e5902fd96e62a0a15c6a88d90c5d261b64b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 594 zcmV-Y0N@uc4+U<6{Uax;_Qov!pg~0@dGS8KwLAcfmQXM0 z^@7F>#_J%}i$PzJ{wX5ChCe~XT;n!$3yhIT>#jNlmY1A*%BanB`sRE z=TfQtu@7)wm&k2{a^0ewFAO9M1qm5UgUge-WU7GNDnJE{3~lyOcqY4HPcS}fR@Yhz z$3(`&rVJn8xjf_z2m1wFi4X~?laTRyTMkULxewzr7||ty=b-`MWZTO~iAK~!X|cg? zLDDP@3DT4OGbr-@ahvPd)2>&W>o`F8-LB&TU?V}g&231Ap8xBQC@$%Odk3)4T5RG9 gppr@sF24c{01P0jsq^4BjQ{`u07*qoM6N<$f<^ZV0{{R3 diff --git a/res/drawable-ldpi/ic_action_upload.png b/res/drawable-ldpi/ic_action_upload.png deleted file mode 100644 index 2d4ba56fa2fd337c5b071cd1a8f4bf0a13183269..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1221 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 diff --git a/res/drawable-ldpi/winter_holidays_icon.png b/res/drawable-ldpi/winter_holidays_icon.png deleted file mode 100644 index 9261d32761a22e3a94022a6859c95521171c867e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1892 zcmV-q2b=hbP)oBMxVnC3X7!@TOIuj*|iWrS1DDwpa+g~^r14E4g5#x+(15u~Th7~p^X&1+AySBL9 z-nRGtUY>LOqtC5(-EE=E{ve*@`Q!JTbD!sX&vU-##i%N;6*0!(@fwq0p8ci3SAcHd zOTbG&(#$YTQ!14T#u!v}cD1#&5d^`a0X6ebC-4w(888j(1m3%ln=hnz^LQr@{1tc} zXaPc}%K{$A!)~!1cfo@E`XLPyjv;JPZ8RTFcbb)CKjDS>PYu1zZf= z2~-;PR|1tNie9c(tEeiT=baTl=Nm)Dm<0jNN*u?;aZE0kLshBOY9vY0?s?uy&-1LR z9#Pe_5zvw)OYnWa@tAeMC@^x~v=qImVGQ=`Ojyy!gC4g47RWucINuu=($qUe*pAKd6%Jk?M>Mx5(?K-}_x zgTSwVue}_=tOGvnGJ9Rl07YOsU|ld5Jr2-goxg0^@ z6UQ+_L&GFV^3yO3Z5L`f9ZrU0oN^-rjzh191%K za=^!oF$6EZIDj#Re7-;!`XosT=-YiixFt=~xfh)Qe(?%m04{NP=PuxFGc}K`p68t$ z8XDe{%jI6k=kq&(D}i0WzOQc@v)J^;vrknBTafd*!RF1nV5| z5#T<+-NV@6;PKD&^z_`**4Fw);K*4qf#_x+!Y zjg9XaA0IyzMG1k%qmK4(O5#)RDS)@o%u!J`jc(!f>YL3PkKx zbL`#()PP^RqPP|4QsuZY33^%cFwoY3s z2d$Nx=h0WK6>F`O-1lbpWO65Ppb7e-V@X|dz>UCnfNihBJNLObyl5W%BfxT(wg1OL zRsD;qY!wmatZS{cM@1xU*xMu`yH(}gB2sJe8?3dOB*}-ZO}C54HO*{9zHp}?qZ_Wiegs-^Q>C6lHT4PGMUW9ZhYENDCFZSu2|1= z&-F7oIY};;V`^%eQfUe6*I!OPpXbDhlMDFn%aczA?jv4!sLu6k0t4fvpYnjv5}@MxN*96sF7$jB*HuYLo4 zeQVB|g}p(>NaQ2lpF2esj5$@>W0R1=1c7_0bg`&!y|6K2OyKl%tvwC&<=;LgUmM?w6(R) z{Y`eUlj~w-6L2%I7I? Date: Mon, 14 Sep 2015 21:49:45 +0200 Subject: [PATCH 099/133] center aligned the folder icon with the drawer icon --- res/layout/list_item.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/layout/list_item.xml b/res/layout/list_item.xml index c66ff73089..be0b94ea7f 100644 --- a/res/layout/list_item.xml +++ b/res/layout/list_item.xml @@ -48,7 +48,7 @@ android:layout_width="@dimen/file_icon_size" android:layout_height="@dimen/file_icon_size" android:layout_gravity="center_vertical" - android:layout_marginLeft="9dp" + android:layout_marginLeft="12dp" android:src="@drawable/ic_menu_archive" /> Date: Wed, 16 Sep 2015 12:54:28 +0200 Subject: [PATCH 100/133] Update library reference --- owncloud-android-library | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/owncloud-android-library b/owncloud-android-library index ecc3415e3e..5985ba9a9f 160000 --- a/owncloud-android-library +++ b/owncloud-android-library @@ -1 +1 @@ -Subproject commit ecc3415e3e3c13fa8f73fdd51a88c1ab7087b199 +Subproject commit 5985ba9a9fd9a208b2a09ee7809949874e0c3a97 From 542b7c00b31022a44a870d944585db7197189a1b Mon Sep 17 00:00:00 2001 From: masensio Date: Wed, 16 Sep 2015 12:54:28 +0200 Subject: [PATCH 101/133] Update library reference --- owncloud-android-library | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/owncloud-android-library b/owncloud-android-library index ecc3415e3e..5985ba9a9f 160000 --- a/owncloud-android-library +++ b/owncloud-android-library @@ -1 +1 @@ -Subproject commit ecc3415e3e3c13fa8f73fdd51a88c1ab7087b199 +Subproject commit 5985ba9a9fd9a208b2a09ee7809949874e0c3a97 From 020def324391c294c8ac75a42adeb81942ee0412 Mon Sep 17 00:00:00 2001 From: masensio Date: Wed, 16 Sep 2015 16:54:07 +0200 Subject: [PATCH 102/133] Update versionName and versionCode for version 1.8. Also in workaround --- AndroidManifest.xml | 4 ++-- oc_jb_workaround/AndroidManifest.xml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index a072d788df..acb5f1d8a9 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -17,8 +17,8 @@ along with this program. If not, see . --> + android:versionCode="10800000" + android:versionName="1.8.0" xmlns:android="http://schemas.android.com/apk/res/android"> diff --git a/oc_jb_workaround/AndroidManifest.xml b/oc_jb_workaround/AndroidManifest.xml index c516391000..766cb0a5ba 100644 --- a/oc_jb_workaround/AndroidManifest.xml +++ b/oc_jb_workaround/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="0100025" + android:versionName="1.0.25" > Date: Thu, 17 Sep 2015 01:13:47 -0400 Subject: [PATCH 103/133] [tx-robot] updated from transifex --- res/values-pt-rPT/strings.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index 1d91a6b201..628b53a112 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -305,7 +305,11 @@ O ficheiro já existe na pasta de destino Ocorreu um ocorreu quando tentava mover este ficheiro ou pasta para mover este ficheiro + Não é possível copiar. Por favor, verifique se o ficheiro existe + Não é possível copiar esta pasta para a descendente O ficheiro já existe na pasta de destino + Ocorreu um ocorreu quando tentava copiar este ficheiro ou pasta + para copiar este ficheiro Envios Instantâneos Segurança Envio do Caminho do Vídeo From f6b2b856cbacfee3224247d2a9e8ff0bb37b322e Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Thu, 17 Sep 2015 11:46:37 +0200 Subject: [PATCH 104/133] Fixed the jumping text on refreshed (status text), aligned the margin of the url field for landscape/portrait, fixed the refresh icon size on landscape - also fixes #192 --- res/layout-land/account_setup.xml | 9 +++++---- res/layout/account_setup.xml | 1 + 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/res/layout-land/account_setup.xml b/res/layout-land/account_setup.xml index 2fcc1d0baf..3c7677d915 100644 --- a/res/layout-land/account_setup.xml +++ b/res/layout-land/account_setup.xml @@ -82,7 +82,7 @@ android:id="@+id/hostUrlFrame" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginBottom="10dp" + android:layout_marginBottom="0dp" > Date: Mon, 21 Sep 2015 01:13:34 -0400 Subject: [PATCH 105/133] [tx-robot] updated from transifex --- res/values-fr/strings.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index d241bd2911..4a4111bea6 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -285,12 +285,12 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq Une erreur est survenue pendant l\'attente du serveur. L\'opération n\'a pas pu être effectuée L\'opération n\'a pas pu être terminée, le serveur n\'est pas disponible - Vous ne possédez pas les droits suffisants %s - afin de renommer ce fichier - afin d’effacer ce fichier + Vous n\'avez pas la permission %s + de renommer ce fichier + d’effacer ce fichier afin de partager ce fichier afin de ne plus partager ce fichier - afin de créer ce fichier + de créer ce fichier afin d’importer dans ce répertoire Ce fichier n’est plus disponible sur le serveur Comptes @@ -314,7 +314,7 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq Impossible de copier. Vérifiez que le fichier existe Il n\'est pas possible de copier un dossier vers un de ses descendants Fichier déjà existant dans le dossier de destination - Une erreur est survenue lors de la tentative de copie de ce fichier ou dossier + Une erreur est survenue lors de la copie de ce fichier ou dossier de copier ce fichier Téléversement immédiat Sécurité From cd165b7ce6fd0900c74d69df5e45f23117565f1b Mon Sep 17 00:00:00 2001 From: "David A. Velasco" Date: Mon, 21 Sep 2015 21:25:11 +0200 Subject: [PATCH 106/133] Grant that cancellations of tasks generating thumbnails really works for reused icon views --- .../datamodel/ThumbnailsCacheManager.java | 5 +---- .../ui/adapter/LocalFileListAdapter.java | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java b/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java index ab0743a9ec..f0ecf76724 100644 --- a/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java +++ b/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java @@ -195,10 +195,6 @@ public class ThumbnailsCacheManager { } protected void onPostExecute(Bitmap bitmap){ - if (isCancelled()) { - bitmap = null; - } - if (bitmap != null) { final ImageView imageView = mImageViewReference.get(); final ThumbnailGenerationTask bitmapWorkerTask = getBitmapWorkerTask(imageView); @@ -365,6 +361,7 @@ public class ThumbnailsCacheManager { if (bitmapData == null || bitmapData != file) { // Cancel previous task bitmapWorkerTask.cancel(true); + Log_OC.v(TAG, "Cancelled generation of thumbnail for a reused imageView"); } else { // The same work is already in progress return false; diff --git a/src/com/owncloud/android/ui/adapter/LocalFileListAdapter.java b/src/com/owncloud/android/ui/adapter/LocalFileListAdapter.java index 373d791a33..60675f466d 100644 --- a/src/com/owncloud/android/ui/adapter/LocalFileListAdapter.java +++ b/src/com/owncloud/android/ui/adapter/LocalFileListAdapter.java @@ -37,6 +37,7 @@ import android.widget.TextView; import com.owncloud.android.R; import com.owncloud.android.datamodel.ThumbnailsCacheManager; +import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.utils.BitmapUtils; import com.owncloud.android.utils.DisplayUtils; import com.owncloud.android.utils.MimetypeIconUtil; @@ -46,7 +47,9 @@ import com.owncloud.android.utils.MimetypeIconUtil; * in a local directory */ public class LocalFileListAdapter extends BaseAdapter implements ListAdapter { - + + private static final String TAG = LocalFileListAdapter.class.getSimpleName(); + private Context mContext; private File mDirectory; private File[] mFiles = null; @@ -104,6 +107,12 @@ public class LocalFileListAdapter extends BaseAdapter implements ListAdapter { fileName.setText(name); ImageView fileIcon = (ImageView) view.findViewById(R.id.thumbnail); + + /** Cancellation needs do be checked and done before changing the drawable in fileIcon, or + * {@link ThumbnailsCacheManager#cancelPotentialWork} will NEVER cancel any task. + **/ + boolean allowedToCreateNewThumbnail = (ThumbnailsCacheManager.cancelPotentialWork(file, fileIcon)); + if (!file.isDirectory()) { fileIcon.setImageResource(R.drawable.file); } else { @@ -143,7 +152,7 @@ public class LocalFileListAdapter extends BaseAdapter implements ListAdapter { } else { // generate new Thumbnail - if (ThumbnailsCacheManager.cancelPotentialWork(file, fileIcon)) { + if (allowedToCreateNewThumbnail) { final ThumbnailsCacheManager.ThumbnailGenerationTask task = new ThumbnailsCacheManager.ThumbnailGenerationTask(fileIcon); if (thumbnail == null) { @@ -157,7 +166,9 @@ public class LocalFileListAdapter extends BaseAdapter implements ListAdapter { ); fileIcon.setImageDrawable(asyncDrawable); task.execute(file); - } + Log_OC.v(TAG, "Executing task to generate a new thumbnail"); + + } // else, already being generated, don't restart it } } else { fileIcon.setImageResource(MimetypeIconUtil.getFileTypeIconId(null, file.getName())); From 92c39be013c4b91e04c6f37363ce0d5d145fb733 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Tue, 22 Sep 2015 01:13:44 -0400 Subject: [PATCH 107/133] [tx-robot] updated from transifex --- res/values-es/strings.xml | 2 +- res/values-sk-rSK/strings.xml | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index 88566cd3fd..1796c4a845 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -307,7 +307,7 @@ El archivo ya existe en la carpeta de destino Hubo un error al tratar de mover este archivo o carpeta para mover este archivo - No se puede copiar. Revise si el archivo existe + No se puede copiar. Revise si existe el archivo No se puede copiar una carpeta dentro de una de sus subcarpetas. El fichero ya existe en el directorio de destino Hubo un error al tratar de copiar este archivo o carpeta diff --git a/res/values-sk-rSK/strings.xml b/res/values-sk-rSK/strings.xml index eb5fdf5e16..66ac426cef 100644 --- a/res/values-sk-rSK/strings.xml +++ b/res/values-sk-rSK/strings.xml @@ -32,6 +32,7 @@ Viac Účty Správa účtov + Heslo Okamžité nahratie obrázka Okamžite nahrať obrázok zaznamenaný fotoaparátom Okamžité nahranie videa @@ -69,6 +70,7 @@ Nahrávanie pred sekundami Žiadny súbor. Nahrajte niečo! + Načítavam... V tomto priečinku nie sú žiadne súbory. Viac informácií získate kliknutím na súbor. Veľkosť: @@ -78,6 +80,7 @@ Stiahnuť Obnoviť súbor Súbor bol premenovaný na %1$s počas nahrávania + Rozvrhnutie zoznamu Zdieľať linku Zrušiť zdieľanie odkazu Áno @@ -132,8 +135,11 @@ Nie je dostatok miesta na skopírovanie vybraných súborov do priečinka %1$s. Želáte si ich namiesto toho presunúť? Prosím, vložte svoje heslo: Vložte svoje heslo + Heslo bude nutné zadať vždy po štarte aplikácie Prosím, vložte znovu svoje heslo: Zmazať svoje heslo + Heslá sa nezhodujú + Nesprávne heslo Bezpečnostný kód odstránený Bezpečnostný kód uložený Prehrávač hudby %1$s @@ -196,6 +202,8 @@ Naozaj chcete odstrániť %1$s a jeho obsah? Iba lokálne Iba lokálne + Zo servera + Vzdialene aj lokálne Úspešne odstránené Odstránenie zlyhalo Zadajte nové meno @@ -205,11 +213,13 @@ Obsah súboru je zosynchronizovaný Priečinok nie je možné vytvoriť Zakázané znaky: / \\ < > : \" | ? * + Názov súboru obsahuje nevhodný znak Názov súboru nemôže byť prázdny Počkať chvíľu Neočakávaný problém; skúste vybrať súbor inou aplikáciou Nebol vybraný súbor Odošli link do ... + Kopírovanie súboru z privátneho úložiska Prihlásiť sa z oAuth2 Pripájam sa na oAuth2 server… Identitu stránky nemožno overiť @@ -245,7 +255,11 @@ Odoslať fotografie iba cez WiFi Nahrávať videá len cez WiFi /InstantUpload + Konflikt súborov + Ktoré súbory si prajate ponachať? Pokiaľ to budú obe verzie, lokálnej pribudne k názvu číslo. Ponechať oba + lokálnu verziu + serverovú verziu Ukážka obrazu Obrázok nemožno zobraziť %1$s nemožno skopírovať do lokálneho priečinka %2$s @@ -293,7 +307,11 @@ Súbor už v cieľovom priečinku existuje Pri pokuse o presun tohoto súboru alebo priečinka nastala chyba pre presun tohoto súboru + Nemožno kopírovať. Overte či súbor ešte existuje + Nemožno kopírovať priečinok do jeho podpriečinka Súbor už v cieľovom priečinku existuje + Počas kopírovania súboru alebo zložky sa vyskytla chyba + kopírovať súbor Okamžité nahratie Zabezpečenie Cesta pre nahrávanie videí @@ -301,8 +319,17 @@ zdieľané s vami %1$s vám zdieľal \"%2$s\" + \"%1$s\" bol s vami nazdieľaný Obnoviť pripojenie Adresa servera Nedostatok pamäte Používateľské meno + 1 priečinok + %1$d prieč. + 1 súbor + 1 súbor, 1 priečinok + 1 súbor, %1$d prieč. + %1$d súb. + %1$d súb., 1 priečinok + %1$d súb., %2$d prieč. From b7bb1ec0e9c45fdfc6106cc4acb8741fdefe37b8 Mon Sep 17 00:00:00 2001 From: "David A. Velasco" Date: Tue, 22 Sep 2015 09:29:33 +0200 Subject: [PATCH 108/133] Fixed crashed on cancelled download in gallery --- src/com/owncloud/android/ui/preview/PreviewImageFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/owncloud/android/ui/preview/PreviewImageFragment.java b/src/com/owncloud/android/ui/preview/PreviewImageFragment.java index b6f36823b6..e61e33553a 100644 --- a/src/com/owncloud/android/ui/preview/PreviewImageFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewImageFragment.java @@ -476,7 +476,7 @@ public class PreviewImageFragment extends FileFragment { @Override protected void onCancelled(LoadImage result) { - if (result.bitmap != null) { + if (result != null && result.bitmap != null) { result.bitmap.recycle(); } } From c8c3e84268d413df9989ab8c42fa51fe0e7f7a97 Mon Sep 17 00:00:00 2001 From: "David A. Velasco" Date: Thu, 24 Sep 2015 16:13:58 +0200 Subject: [PATCH 109/133] Fix repetition of already finished access to root folder (AsyncTask) on rotation, in log-in view --- .../owncloud/android/authentication/AuthenticatorActivity.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/com/owncloud/android/authentication/AuthenticatorActivity.java b/src/com/owncloud/android/authentication/AuthenticatorActivity.java index 47985ce4b7..02ab3c7bcf 100644 --- a/src/com/owncloud/android/authentication/AuthenticatorActivity.java +++ b/src/com/owncloud/android/authentication/AuthenticatorActivity.java @@ -1373,6 +1373,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity public void onAuthenticatorTaskCallback(RemoteOperationResult result) { mWaitingForOpId = Long.MAX_VALUE; dismissDialog(WAIT_DIALOG_TAG); + mAsyncTask = null; if (result.isSuccess()) { Log_OC.d(TAG, "Successful access - time to save the account"); From c7a29bc07bb4f24a3a22530f0f51175ff688b76b Mon Sep 17 00:00:00 2001 From: "David A. Velasco" Date: Thu, 24 Sep 2015 16:52:03 +0200 Subject: [PATCH 110/133] Set default static values to prevent weird crash --- src/com/owncloud/android/utils/FileStorageUtils.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/com/owncloud/android/utils/FileStorageUtils.java b/src/com/owncloud/android/utils/FileStorageUtils.java index e70302fc2e..d6ebdbd3d3 100644 --- a/src/com/owncloud/android/utils/FileStorageUtils.java +++ b/src/com/owncloud/android/utils/FileStorageUtils.java @@ -46,12 +46,12 @@ import android.webkit.MimeTypeMap; * Static methods to help in access to local file system. */ public class FileStorageUtils { - public static Integer mSortOrder; - public static Boolean mSortAscending; public static final Integer SORT_NAME = 0; public static final Integer SORT_DATE = 1; public static final Integer SORT_SIZE = 2; - + public static Integer mSortOrder = SORT_NAME; + public static Boolean mSortAscending = true; + //private static final String LOG_TAG = "FileStorageUtils"; From 0c8dfb6e8d63c4b117fe89c8f519219e10b84133 Mon Sep 17 00:00:00 2001 From: "David A. Velasco" Date: Thu, 24 Sep 2015 17:03:56 +0200 Subject: [PATCH 111/133] Close dangling Cursors in FileContentProvider --- .../android/providers/FileContentProvider.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/com/owncloud/android/providers/FileContentProvider.java b/src/com/owncloud/android/providers/FileContentProvider.java index a4e50cecf5..70cd8976b2 100644 --- a/src/com/owncloud/android/providers/FileContentProvider.java +++ b/src/com/owncloud/android/providers/FileContentProvider.java @@ -178,6 +178,7 @@ public class FileContentProvider extends ContentProvider { if (c != null && c.moveToFirst()) { remoteId = c.getString(c.getColumnIndex(ProviderTableMeta.FILE_REMOTE_ID)); //ThumbnailsCacheManager.removeFileFromCache(remoteId); + c.close(); } Log_OC.d(TAG, "Removing FILE " + remoteId); @@ -187,11 +188,6 @@ public class FileContentProvider extends ContentProvider { + uri.getPathSegments().get(1) + (!TextUtils.isEmpty(where) ? " AND (" + where + ")" : ""), whereArgs); - /* just for log - if (c!=null) { - c.close(); - } - */ break; case DIRECTORY: // deletion of folder is recursive @@ -306,6 +302,9 @@ public class FileContentProvider extends ContentProvider { // ugly patch; serious refactorization is needed to reduce work in // FileDataStorageManager and bring it to FileContentProvider if (doubleCheck == null || !doubleCheck.moveToFirst()) { + if (doubleCheck != null) { + doubleCheck.close(); + } long rowId = db.insert(ProviderTableMeta.FILE_TABLE_NAME, null, values); if (rowId > 0) { Uri insertedFileUri = @@ -341,6 +340,9 @@ public class FileContentProvider extends ContentProvider { // ugly patch; serious refactorization is needed to reduce work in // FileDataStorageManager and bring it to FileContentProvider if (doubleCheckShare == null || !doubleCheckShare.moveToFirst()) { + if (doubleCheckShare != null) { + doubleCheckShare.close(); + } long rowId = db.insert(ProviderTableMeta.OCSHARES_TABLE_NAME, null, values); if (rowId >0) { insertedShareUri = From c44ed4980c257030b2911366ec2297e0b9c7eca7 Mon Sep 17 00:00:00 2001 From: "David A. Velasco" Date: Fri, 25 Sep 2015 11:11:46 +0200 Subject: [PATCH 112/133] Fixed lost background color for icon in login view --- res/layout/account_setup.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/res/layout/account_setup.xml b/res/layout/account_setup.xml index cc88f3e0b9..876d834cc9 100644 --- a/res/layout/account_setup.xml +++ b/res/layout/account_setup.xml @@ -40,6 +40,7 @@ android:layout_height="wrap_content" android:layout_marginBottom="20dp" android:layout_marginTop="10dp" + android:background="@color/login_logo_background_color" android:src="@drawable/logo" android:contentDescription="@string/app_name"/> From a38461aaa52e4c2136695bcea47732c09291b8ef Mon Sep 17 00:00:00 2001 From: "David A. Velasco" Date: Fri, 25 Sep 2015 13:54:53 +0200 Subject: [PATCH 113/133] Same style for log-in buttons in potrait and landscape --- res/layout-land/account_setup.xml | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/res/layout-land/account_setup.xml b/res/layout-land/account_setup.xml index 3c7677d915..477011d91e 100644 --- a/res/layout-land/account_setup.xml +++ b/res/layout-land/account_setup.xml @@ -57,16 +57,18 @@ android:gravity="center" android:orientation="vertical" android:padding="8dp" > - -