--- /dev/null
+<?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>
<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>
<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>
<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>
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
\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
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
if (obj != null && obj instanceof LongClickableCheckBoxPreference) {
mShowContextMenu = true;
- mAccountName = obj.toString();
+ mAccountName = ((LongClickableCheckBoxPreference) obj).getKey();
Preferences.this.openContextMenu(listView);
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
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;
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) {
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
actionBar.setListNavigationCallbacks(mDirectories, this);
+
// wait dialog
if (mCurrentDialog != null) {
mCurrentDialog.dismiss();
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;
}
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) {
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(false);
}
+ toggleOffSelectAll();
}
* {@inheritDoc}
*/
@Override
- public void onDirectoryClick(File directory) {
+ public void onDirectoryClick(File directory) {
pushDirname(directory);
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
+ toggleOffSelectAll();
}
package com.owncloud.android.ui.fragment;
import java.io.File;
+import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
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()) {
* @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()]);
}
\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
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
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
<?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>