Merge pull request #697 from owncloud/fix_https_access_via_proxy
authorjabarros <jabarros@solidgear.es>
Thu, 30 Oct 2014 13:33:58 +0000 (14:33 +0100)
committerjabarros <jabarros@solidgear.es>
Thu, 30 Oct 2014 13:33:58 +0000 (14:33 +0100)
Update reference to library with bugfix

res/menu/file_select_all.xml [new file with mode: 0644]
res/values-eu/strings.xml
src/com/owncloud/android/authentication/AuthenticatorActivity.java
src/com/owncloud/android/ui/activity/Preferences.java
src/com/owncloud/android/ui/activity/UploadFilesActivity.java
src/com/owncloud/android/ui/fragment/LocalFileListFragment.java
src/com/owncloud/android/utils/DisplayUtils.java
tests/.classpath

diff --git a/res/menu/file_select_all.xml b/res/menu/file_select_all.xml
new file mode 100644 (file)
index 0000000..a8097aa
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<menu xmlns:android="http://schemas.android.com/apk/res/android" >
+    <item
+        android:id="@+id/actionbar_select_all"
+        android:icon="@android:drawable/checkbox_off_background"
+        android:orderInCategory="1"
+        android:showAsAction="always"
+        android:title="actionbar_select_all"/>
+    
+
+</menu>
index e3d598e..78d39f1 100644 (file)
   <string name="actionbar_settings">Ezarpenak</string>
   <string name="actionbar_see_details">Xehetasunak</string>
   <string name="actionbar_send_file">Bidali</string>
+  <string name="actionbar_sort">Ordenatu</string>
+  <string-array name="actionbar_sortby">
+    <item>A-Z</item>
+    <item>Berrienak - Zaharrenak</item>
+  </string-array>
   <!--TODO re-enable when server-side folder size calculation is available   
        <item>Biggest - Smallest</item>-->
   <string name="prefs_category_general">Orokorra</string>
@@ -238,6 +243,7 @@ Mesedez, baimendu berriz</string>
   <string name="preview_image_description">Irudi aurreikuspena</string>
   <string name="preview_image_error_unknown_format">Ezin da irudi hau erakutsi</string>
   <string name="error__upload__local_file_not_copied">%1$s ezin da %2$s karpeta lokalera kopiatu</string>
+  <string name="prefs_instant_upload_path_title">Igotzetarako Bidea</string>
   <string name="share_link_no_support_share_api">Sentitzen dut, partekatzea ez dago zure zerbitzarian gaituta. Mesedez jarri harremanetan zure administratzailearekin.</string>
   <string name="share_link_file_error">Errore bat egon da fitxategaia edo karpeta partekatzerakoan</string>
   <string name="unshare_link_file_error">Errore bat egon da fitxategaia edo karpeta partekatzeari uzterakoan</string>
@@ -260,8 +266,12 @@ Mesedez, baimendu berriz</string>
   <string name="downloader_download_file_not_found">Fitxategia jadanik ez dago eskuragarri zerbitzarian</string>
   <string name="prefs_category_accounts">Kontuak</string>
   <string name="prefs_add_account">Gehitu kontua</string>
+  <string name="log_mail_subject">ownCloud Android programaren egunerokoak</string>
+  <string name="log_progress_dialog_text">Datuak kargatzen...</string>
   <string name="saml_authentication_required_text">Autentikazioa beharrezkoa</string>
   <string name="saml_authentication_wrong_pass">Pasahitz okerra</string>
+  <string name="actionbar_move">Mugitu</string>
   <string name="move_choose_button_text">Aukeratu</string>
+  <string name="prefs_category_instant_uploading">Berehalako Igoerak</string>
   <string name="prefs_category_security">Segurtasuna</string>
 </resources>
index 97dcfde..0f7892e 100644 (file)
@@ -85,6 +85,7 @@ import com.owncloud.android.ui.dialog.IndeterminateProgressDialog;
 import com.owncloud.android.ui.dialog.SamlWebViewDialog;\r
 import com.owncloud.android.ui.dialog.SslUntrustedCertDialog;\r
 import com.owncloud.android.ui.dialog.SslUntrustedCertDialog.OnSslUntrustedCertListener;\r
+import com.owncloud.android.utils.DisplayUtils;\r
 \r
 /**\r
  * This Activity is used to add an ownCloud account to the App\r
@@ -356,7 +357,8 @@ SsoWebViewClientListener, OnSslUntrustedCertListener {
         \r
         /// step 2 - set properties of UI elements (text, visibility, enabled...)\r
         mHostUrlInput = (EditText) findViewById(R.id.hostUrlInput);\r
-        mHostUrlInput.setText(mServerInfo.mBaseUrl);\r
+        // Convert IDN to Unicode\r
+        mHostUrlInput.setText(DisplayUtils.convertIdn(mServerInfo.mBaseUrl, false));\r
         if (mAction != ACTION_CREATE) {\r
             /// lock things that should not change\r
             mHostUrlInput.setEnabled(false);\r
@@ -737,6 +739,8 @@ SsoWebViewClientListener, OnSslUntrustedCertListener {
         showRefreshButton(false);\r
         \r
         if (uri.length() != 0) {\r
+            // Handle internationalized domain names\r
+            uri = DisplayUtils.convertIdn(uri, true);\r
             mServerStatusText = R.string.auth_testing_connection;\r
             mServerStatusIcon = R.drawable.progress_small;\r
             showServerStatus();\r
index d078b1e..2033093 100644 (file)
@@ -104,7 +104,7 @@ public class Preferences extends SherlockPreferenceActivity implements AccountMa
 
                 if (obj != null && obj instanceof LongClickableCheckBoxPreference) {
                     mShowContextMenu = true;
-                    mAccountName = obj.toString();
+                    mAccountName = ((LongClickableCheckBoxPreference) obj).getKey();
 
                     Preferences.this.openContextMenu(listView);
 
@@ -406,7 +406,8 @@ public class Preferences extends SherlockPreferenceActivity implements AccountMa
             for (Account a : accounts) {
                 LongClickableCheckBoxPreference accountPreference = new LongClickableCheckBoxPreference(this);
                 accountPreference.setKey(a.name);
-                accountPreference.setTitle(a.name);
+                // Handle internationalized domain names
+                accountPreference.setTitle(DisplayUtils.convertIdn(a.name, false));
                 mAccountsPrefCategory.addPreference(accountPreference);
 
                 // Check the current account that is being used
index 0918572..83e7bc0 100644 (file)
@@ -34,6 +34,9 @@ import android.widget.TextView;
 
 import com.actionbarsherlock.app.ActionBar;
 import com.actionbarsherlock.app.ActionBar.OnNavigationListener;
+import com.actionbarsherlock.internal.view.menu.ActionMenuItemView;
+import com.actionbarsherlock.view.Menu;
+import com.actionbarsherlock.view.MenuInflater;
 import com.actionbarsherlock.view.MenuItem;
 import com.owncloud.android.R;
 import com.owncloud.android.lib.common.utils.Log_OC;
@@ -73,6 +76,8 @@ public class UploadFilesActivity extends FileActivity implements
     private static final String WAIT_DIALOG_TAG = "WAIT";
     private static final String QUERY_TO_MOVE_DIALOG_TAG = "QUERY_TO_MOVE";
     
+    private boolean selectAllToggled = false;
+    private Menu menu;
     
     @Override
     public void onCreate(Bundle savedInstanceState) {
@@ -119,6 +124,7 @@ public class UploadFilesActivity extends FileActivity implements
         actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
         actionBar.setListNavigationCallbacks(mDirectories, this);
         
+        
         // wait dialog
         if (mCurrentDialog != null) {
             mCurrentDialog.dismiss();
@@ -127,8 +133,15 @@ public class UploadFilesActivity extends FileActivity implements
             
         Log_OC.d(TAG, "onCreate() end");
     }
-
-
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        // Inflate the menu items for use in the action bar
+        MenuInflater inflater = getSherlock().getMenuInflater();
+        inflater.inflate(R.menu.file_select_all, menu);     
+        this.menu = menu;
+        return true;
+    }
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         boolean retval = true;
@@ -139,12 +152,33 @@ public class UploadFilesActivity extends FileActivity implements
                 }
                 break;
             }
+            case R.id.actionbar_select_all:{
+                if(selectAllToggled){
+                    toggleOffSelectAll();
+                }else{
+                    toggleOnSelectAll(item);
+                }
+                break;
+            }
             default:
                 retval = super.onOptionsItemSelected(item);
         }
         return retval;
     }
-
+    public void toggleOffSelectAll(MenuItem item){
+        selectAllToggled = false;
+        item.setIcon(android.R.drawable.checkbox_off_background);
+        mFileListFragment.deselectAll();
+    }
+    public void toggleOffSelectAll(){
+        MenuItem item = menu.findItem(R.id.actionbar_select_all);
+        toggleOffSelectAll(item);
+    }
+    public void toggleOnSelectAll(MenuItem item){
+        selectAllToggled = true;
+        item.setIcon(android.R.drawable.checkbox_on_background);        
+        mFileListFragment.selectAll();
+    }
     
     @Override
     public boolean onNavigationItemSelected(int itemPosition, long itemId) {
@@ -175,6 +209,7 @@ public class UploadFilesActivity extends FileActivity implements
             ActionBar actionBar = getSupportActionBar(); 
             actionBar.setDisplayHomeAsUpEnabled(false);
         } 
+        toggleOffSelectAll();
     }
 
     
@@ -242,10 +277,11 @@ public class UploadFilesActivity extends FileActivity implements
      * {@inheritDoc}
      */
     @Override
-    public void onDirectoryClick(File directory) {
+    public void onDirectoryClick(File directory) { 
         pushDirname(directory);
         ActionBar actionBar = getSupportActionBar();
         actionBar.setDisplayHomeAsUpEnabled(true);
+        toggleOffSelectAll();
     }
     
     
index a9b6ad2..62b41a3 100644 (file)
@@ -18,6 +18,7 @@
 package com.owncloud.android.ui.fragment;
 
 import java.io.File;
+import java.util.ArrayList;
 
 import android.app.Activity;
 import android.os.Bundle;
@@ -97,13 +98,33 @@ public class LocalFileListFragment extends ExtendedListFragment {
         Log_OC.i(TAG, "onActivityCreated() stop");
     }
     
+    public void selectAll(){
+        int numberOfFiles = mAdapter.getCount();
+        for(int i = 0; i < numberOfFiles; i++){
+            File file = (File) mAdapter.getItem(i);
+            if (file != null) {                
+                if (!file.isDirectory()) {  
+                    /// Click on a file
+                    getListView().setItemChecked(i, true);                       
+                    // notify the change to the container Activity
+                    mContainerActivity.onFileClick(file);
+                }
+            }
+        }
+    }
+    
+    public void deselectAll(){        
+        mAdapter = new LocalFileListAdapter(mContainerActivity.getInitialDirectory(), getActivity());
+        setListAdapter(mAdapter);
+    }
     
     /**
      * Checks the file clicked over. Browses inside if it is a directory. Notifies the container activity in any case.
      */
     @Override
     public void onItemClick(AdapterView<?> l, View v, int position, long id) {
-        File file = (File) mAdapter.getItem(position); 
+        File file = (File) mAdapter.getItem(position);
+        
         if (file != null) {
             /// Click on a directory
             if (file.isDirectory()) {
@@ -209,16 +230,18 @@ public class LocalFileListFragment extends ExtendedListFragment {
      * @return      File paths to the files checked by the user.
      */
     public String[] getCheckedFilePaths() {
-        String [] result = null;
+        ArrayList<String> result = new ArrayList<String>();
         SparseBooleanArray positions = mList.getCheckedItemPositions();
         if (positions.size() > 0) {
-            Log_OC.d(TAG, "Returning " + positions.size() + " selected files");
-            result = new String[positions.size()];
-            for (int i=0; i<positions.size(); i++) {
-                result[i] = ((File) mList.getItemAtPosition(positions.keyAt(i))).getAbsolutePath();
+            for (int i = 0; i < positions.size(); i++) {
+                if (positions.get(positions.keyAt(i)) == true) {
+                    result.add(((File) mList.getItemAtPosition(positions.keyAt(i))).getAbsolutePath());
+                }
             }
+
+            Log_OC.d(TAG, "Returning " + result.size() + " selected files");
         }
-        return result;
+        return result.toArray(new String[result.size()]);
     }
 
     
index 682d2be..8c4c492 100644 (file)
@@ -18,6 +18,7 @@
 \r
 package com.owncloud.android.utils;\r
 \r
+import java.net.IDN;\r
 import java.util.Arrays;\r
 import java.util.Calendar;\r
 import java.util.Date;\r
@@ -25,6 +26,9 @@ import java.util.HashMap;
 import java.util.HashSet;\r
 import java.util.Set;\r
 \r
+import android.annotation.TargetApi;\r
+import android.os.Build;\r
+\r
 import com.owncloud.android.R;\r
 \r
 /**\r
@@ -235,4 +239,35 @@ public class DisplayUtils {
             return R.drawable.icon;\r
         }\r
     }\r
+    \r
+    /**\r
+     * Converts an internationalized domain name (IDN) in an URL to and from ASCII/Unicode.\r
+     * @param url the URL where the domain name should be converted\r
+     * @param toASCII if true converts from Unicode to ASCII, if false converts from ASCII to Unicode\r
+     * @return the URL containing the converted domain name\r
+     */\r
+    @TargetApi(Build.VERSION_CODES.GINGERBREAD)\r
+    public static String convertIdn(String url, boolean toASCII) {\r
+        \r
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {\r
+            // Find host name after '//' or '@'\r
+            int hostStart = 0;\r
+            if  (url.indexOf("//") != -1) {\r
+                hostStart = url.indexOf("//") + "//".length();\r
+            } else if (url.indexOf("@") != -1) {\r
+                hostStart = url.indexOf("@") + "@".length();\r
+            }\r
+            \r
+            int hostEnd = url.substring(hostStart).indexOf("/");\r
+            // Handle URL which doesn't have a path (path is implicitly '/')\r
+            hostEnd = (hostEnd == -1 ? url.length() : hostStart + hostEnd);\r
+            \r
+            String host = url.substring(hostStart, hostEnd);\r
+            host = (toASCII ? IDN.toASCII(host) : IDN.toUnicode(host));\r
+            \r
+            return url.substring(0, hostStart) + host + url.substring(hostEnd);\r
+        } else {\r
+            return url;\r
+        }\r
+    }\r
 }\r
index 9b141f6..26d8fe4 100644 (file)
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-       <classpathentry kind="src" path="src"/>
-       <classpathentry kind="src" path="gen"/>
        <classpathentry combineaccessrules="false" kind="src" path="/owncloud-android"/>
        <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
        <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
        <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
+       <classpathentry kind="src" path="src"/>
+       <classpathentry kind="src" path="gen"/>
        <classpathentry kind="output" path="bin/classes"/>
 </classpath>