Merge pull request #914 from owncloud/accessibility
authorDavid A. Velasco <dvelasco@owncloud.com>
Thu, 19 Mar 2015 11:59:17 +0000 (12:59 +0100)
committerDavid A. Velasco <dvelasco@owncloud.com>
Thu, 19 Mar 2015 11:59:17 +0000 (12:59 +0100)
Added accesibility descriptions as a mean to add automatic tests un UI.

res/layout-land/account_setup.xml
res/layout/account_setup.xml
res/menu/main_menu.xml
res/values/strings.xml
src/com/owncloud/android/ui/activity/FileDisplayActivity.java
src/com/owncloud/android/ui/activity/Preferences.java
src/com/owncloud/android/ui/adapter/FileListListAdapter.java

index 61ca2dd..fa357c2 100644 (file)
@@ -38,7 +38,8 @@
                        android:layout_weight="1"\r
                        android:layout_gravity="center"\r
                        android:background="@color/login_logo_background_color"\r
-                       android:src="@drawable/logo" \r
+                       android:src="@drawable/logo"\r
+            android:contentDescription="@string/app_name"\r
                        />\r
                \r
                <ScrollView\r
@@ -65,7 +66,8 @@
                                        android:layout_marginBottom="10dp"\r
                        android:onClick="onRefreshClick"\r
                                    android:text="@string/auth_check_server"\r
-                                   android:visibility="gone" />\r
+                                   android:visibility="gone"\r
+                    android:contentDescription="@string/auth_check_server"/>\r
                                <TextView\r
                                    android:id="@+id/instructions_message"\r
                                    android:layout_width="wrap_content"\r
@@ -73,7 +75,8 @@
                                    android:layout_gravity="fill_horizontal"\r
                                    android:text="@string/auth_expired_basic_auth_toast" \r
                                    android:visibility="gone"\r
-                                   android:layout_marginBottom="10dp"/>\r
+                                   android:layout_marginBottom="10dp"\r
+                    android:contentDescription="@string/auth_expired_basic_auth_toast"/>\r
                            <FrameLayout \r
                                android:id="@+id/hostUrlFrame"\r
                                        android:layout_width="match_parent"\r
@@ -89,6 +92,7 @@
                                                android:inputType="textUri"\r
                                                android:drawablePadding="5dp"\r
                                                android:paddingRight="55dp"\r
+                                               android:contentDescription="@string/auth_host_address"\r
                                                >\r
                                                <requestFocus />\r
                                        </EditText>\r
                                android:onClick="onRefreshClick"\r
                                            android:visibility="gone"\r
                                                android:background="@android:color/transparent"\r
+                        android:contentDescription="@string/auth_refresh_button"\r
                                            />\r
                                </FrameLayout>\r
                \r
                                        android:drawableLeft="@android:drawable/stat_notify_sync"\r
                                        android:drawablePadding="5dp"\r
                                        android:gravity="center_vertical"\r
-                                       android:text="@string/auth_testing_connection" />\r
+                                       android:text="@string/auth_testing_connection"\r
+                    android:contentDescription="@string/auth_testing_connection"/>\r
                             \r
                                <CheckBox\r
                                        android:id="@+id/oauth_onOff_check"\r
                                        android:onClick="onCheckClick"\r
                                        android:text="@string/oauth_check_onoff"\r
                                        android:textAppearance="?android:attr/textAppearanceSmall"\r
+                    android:contentDescription="@string/oauth_check_onoff"\r
                                        />\r
                \r
                                <EditText\r
                                        android:text="@string/oauth2_url_endpoint_auth"\r
                                        android:singleLine="true"\r
                                        android:inputType="textUri"\r
-                                       android:visibility="gone" >\r
+                                       android:visibility="gone">\r
                                </EditText>            \r
                                \r
                                <EditText\r
                                        android:text="@string/oauth2_url_endpoint_access"\r
                                        android:singleLine="true"\r
                                        android:inputType="textUri"\r
-                                       android:visibility="gone" >\r
+                                       android:visibility="gone">\r
                                        <requestFocus />\r
                                </EditText>            \r
                \r
                                        android:layout_height="wrap_content"\r
                                        android:ems="10"\r
                                        android:hint="@string/auth_username"\r
-                                       android:inputType="textNoSuggestions" />\r
+                                       android:inputType="textNoSuggestions"\r
+                                       android:contentDescription="@string/auth_username"/>\r
                \r
                                <EditText\r
                                    android:id="@+id/account_password"\r
                                        android:hint="@string/auth_password"\r
                                        android:inputType="textPassword"\r
                                        android:drawablePadding="5dp"\r
+                                       android:contentDescription="@string/auth_password"\r
                                        />\r
                        \r
                                <TextView\r
                                        android:text="@string/auth_unauthorized"\r
                                        android:drawableLeft="@android:drawable/stat_notify_sync"\r
                                        android:drawablePadding="5dip"\r
+                    android:contentDescription="@string/auth_unauthorized"\r
                                        />\r
 \r
                        </LinearLayout>\r
                    android:layout_gravity="center_horizontal"\r
                    android:enabled="false"\r
                    android:onClick="onOkClick"\r
-                   android:text="@string/setup_btn_connect" />\r
+                   android:text="@string/setup_btn_connect"\r
+            android:contentDescription="@string/setup_btn_connect"/>\r
                \r
                <Button\r
                    android:id="@+id/welcome_link"\r
                    android:paddingBottom="5dp"\r
                    android:paddingTop="5dp"\r
                    android:text="@string/auth_register"\r
-                   android:textColor="#0000FF"/>\r
+                   android:textColor="#0000FF"\r
+            android:contentDescription="@string/auth_register"/>\r
        </LinearLayout>\r
                \r
 </RelativeLayout>\r
index 830dd55..1f712ee 100644 (file)
@@ -41,7 +41,8 @@
             android:layout_marginBottom="10dp"\r
             android:layout_marginTop="10dp"\r
             android:background="@color/login_logo_background_color"\r
-            android:src="@drawable/logo" />\r
+            android:src="@drawable/logo"\r
+            android:contentDescription="@string/app_name"/>\r
 \r
         <Button\r
             android:id="@+id/centeredRefreshButton"\r
@@ -51,7 +52,8 @@
             android:layout_marginBottom="10dp"\r
             android:onClick="onRefreshClick"\r
             android:text="@string/auth_check_server"\r
-            android:visibility="gone" />\r
+            android:visibility="gone"\r
+            android:contentDescription="@string/auth_check_server"/>\r
         \r
         <TextView\r
             android:id="@+id/instructions_message"\r
@@ -60,7 +62,8 @@
             android:layout_gravity="fill_horizontal"\r
             android:text="@string/auth_expired_basic_auth_toast"\r
             android:visibility="gone"\r
-            android:layout_marginBottom="10dp" />\r
+            android:layout_marginBottom="10dp"\r
+            android:contentDescription="@string/auth_expired_basic_auth_toast"/>\r
 \r
            <FrameLayout \r
                android:id="@+id/hostUrlFrame"\r
@@ -77,6 +80,7 @@
                                android:inputType="textUri"\r
                                android:drawablePadding="5dp"\r
                                android:paddingRight="55dp"\r
+                               android:contentDescription="@string/auth_host_address"\r
                                >\r
                                <requestFocus />\r
                        </EditText>\r
@@ -92,6 +96,7 @@
                android:onClick="onRefreshClick"\r
                                android:visibility="gone"\r
                                android:background="@android:color/transparent"\r
+                android:contentDescription="@string/auth_refresh_button"\r
                            />\r
                </FrameLayout>\r
 \r
             android:drawableLeft="@android:drawable/stat_notify_sync"\r
             android:drawablePadding="5dp"\r
             android:gravity="center_vertical"\r
-            android:text="@string/auth_testing_connection" />\r
+            android:text="@string/auth_testing_connection"\r
+            android:contentDescription="@string/auth_testing_connection"/>\r
 \r
         <CheckBox\r
             android:id="@+id/oauth_onOff_check"\r
             android:onClick="onCheckClick"\r
             android:text="@string/oauth_check_onoff"\r
             android:textAppearance="?android:attr/textAppearanceSmall"\r
+            android:contentDescription="@string/oauth_check_onoff"\r
             />\r
 \r
         <EditText\r
             android:text="@string/oauth2_url_endpoint_auth"\r
             android:singleLine="true"\r
             android:inputType="textUri"\r
-            android:visibility="gone" >\r
+            android:visibility="gone">\r
         </EditText>\r
 \r
         <EditText\r
             android:text="@string/oauth2_url_endpoint_access"\r
             android:singleLine="true"\r
             android:inputType="textUri"\r
-            android:visibility="gone" />\r
+            android:visibility="gone"/>\r
 \r
         <EditText\r
             android:id="@+id/account_username"\r
             android:layout_height="wrap_content"\r
             android:ems="10"\r
             android:hint="@string/auth_username"\r
-            android:inputType="textNoSuggestions" \r
+            android:inputType="textNoSuggestions"\r
+            android:contentDescription="@string/auth_username"\r
                        />\r
 \r
                <EditText\r
                    android:drawablePadding="5dp"\r
                    android:ems="10"\r
                    android:hint="@string/auth_password"\r
-                   android:inputType="textPassword" \r
+                   android:inputType="textPassword"\r
+                   android:contentDescription="@string/auth_password"\r
             />\r
         \r
         <TextView\r
             android:drawableLeft="@android:drawable/stat_notify_sync"\r
             android:drawablePadding="5dp"\r
             android:gravity="center_vertical"\r
-            android:text="@string/auth_unauthorized" />\r
+            android:text="@string/auth_unauthorized"\r
+            android:contentDescription="@string/auth_unauthorized"/>\r
 \r
         <Button\r
             android:id="@+id/buttonOK"\r
             android:layout_gravity="center_horizontal"\r
             android:enabled="false"\r
             android:onClick="onOkClick"\r
-            android:text="@string/setup_btn_connect" />\r
+            android:text="@string/setup_btn_connect"\r
+            android:contentDescription="@string/setup_btn_connect"/>\r
 \r
         <Button\r
             android:id="@+id/welcome_link"\r
             android:paddingBottom="5dp"\r
             android:paddingTop="5dp"\r
             android:text="@string/auth_register"\r
-            android:textColor="#0000FF"/>\r
+            android:textColor="#0000FF"\r
+            android:contentDescription="@string/auth_register"/>\r
 \r
     </LinearLayout>\r
 \r
index 4f1f890..d35eba0 100644 (file)
         android:icon="@drawable/ic_action_upload"
         android:orderInCategory="2"
         android:showAsAction="always"
-        android:title="@string/actionbar_upload"/>
+        android:title="@string/actionbar_upload"
+        android:contentDescription="@string/actionbar_upload"/>
     <item
         android:id="@+id/action_create_dir"
         android:icon="@drawable/ic_action_create_dir"
         android:orderInCategory="2"
         android:showAsAction="always"
-        android:title="@string/actionbar_mkdir"/>
+        android:title="@string/actionbar_mkdir"
+        android:contentDescription="@string/actionbar_mkdir"/>
     <item
         android:id="@+id/action_sync_account"
         android:icon="@drawable/ic_action_refresh"
         android:orderInCategory="2"
         android:showAsAction="never"
-        android:title="@string/actionbar_sync"/>
+        android:title="@string/actionbar_sync"
+        android:contentDescription="@string/actionbar_sync"/>
     <item
         android:id="@+id/action_settings"
         android:icon="@drawable/ic_action_settings"
         android:orderInCategory="2"
         android:showAsAction="never"
-        android:title="@string/actionbar_settings"/>
+        android:title="@string/actionbar_settings"
+        android:contentDescription="@string/actionbar_settings"/>
     <item
         android:id="@+id/action_logger"
         android:icon="@drawable/ic_action_settings"
         android:orderInCategory="2"
         android:showAsAction="never"
-        android:title="@string/actionbar_logger"/>
+        android:title="@string/actionbar_logger"
+        android:contentDescription="@string/actionbar_logger"/>
        <item
         android:id="@+id/action_sort"
         android:icon="@android:drawable/ic_menu_sort_alphabetically"
         android:orderInCategory="2"
         android:showAsAction="never"
-        android:title="@string/actionbar_sort"/>
+        android:title="@string/actionbar_sort"
+        android:contentDescription="@string/actionbar_sort"/>
 
     <!-- <item android:id="@+id/search" android:title="@string/actionbar_search" android:icon="@drawable/ic_action_search"></item> -->
 
index b6513e3..8b2224b 100644 (file)
        <string name="auth_no_net_conn_title">No network connection</string>
        <string name="auth_nossl_plain_ok_title">Secure connection unavailable.</string>
        <string name="auth_connection_established">Connection established</string>
-       <string name="auth_testing_connection">Testing connection&#8230;</string>
+       <string name="auth_testing_connection">Testing connection</string>
        <string name="auth_not_configured_title">Malformed server configuration</string>
        <string name="auth_account_not_new">An account for the same user and server already exists in the device</string>
        <string name="auth_account_not_the_same">The entered user does not match the user of this account</string>
 
        <string name="subject_token">%1$s shared \"%2$s\" with you</string>
 
+    <string name="auth_refresh_button">Refresh connection</string>
+    <string name="auth_host_address">Server address</string>
+
 </resources>
index 9c6f6dc..5efe423 100644 (file)
@@ -1380,7 +1380,11 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener {
      * TODO
      */
     private void updateNavigationElementsInActionBar(OCFile chosenFile) {
-        ActionBar actionBar = getSupportActionBar(); 
+        ActionBar actionBar = getSupportActionBar();
+
+        // For adding content description tag to a title field in the action bar
+        int actionBarTitleId = getResources().getIdentifier("action_bar_title", "id", "android");
+
         if (chosenFile == null || mDualPane) {
             // only list of files - set for browsing through folders
             OCFile currentDir = getCurrentDir();
@@ -1389,6 +1393,7 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener {
             actionBar.setDisplayShowTitleEnabled(!noRoot); 
             if (!noRoot) {
                 actionBar.setTitle(getString(R.string.default_display_name_for_root_folder));
+                getWindow().getDecorView().findViewById(actionBarTitleId).setContentDescription(getString(R.string.default_display_name_for_root_folder));
             }
             actionBar.setNavigationMode(!noRoot ? ActionBar.NAVIGATION_MODE_STANDARD : ActionBar.NAVIGATION_MODE_LIST);
             actionBar.setListNavigationCallbacks(mDirectories, this);   // assuming mDirectories is updated
@@ -1398,6 +1403,7 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener {
             actionBar.setDisplayShowTitleEnabled(true);
             actionBar.setTitle(chosenFile.getFileName());
             actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
+            getWindow().getDecorView().findViewById(actionBarTitleId).setContentDescription(chosenFile.getFileName());
         }
     }
 
index d71968a..2eb48fa 100644 (file)
@@ -117,6 +117,10 @@ public class Preferences extends SherlockPreferenceActivity
         actionBar.setDisplayHomeAsUpEnabled(true);
         actionBar.setTitle(R.string.actionbar_settings);
 
+        // For adding content description tag to a title field in the action bar
+        int actionBarTitleId = getResources().getIdentifier("action_bar_title", "id", "android");
+        getWindow().getDecorView().findViewById(actionBarTitleId).setContentDescription(getString(R.string.actionbar_settings));
+
         // Load the accounts category for adding the list of accounts
         mAccountsPrefCategory = (PreferenceCategory) findPreference("accounts_category");
 
index 9fd7efe..d4c1c7b 100644 (file)
@@ -39,6 +39,7 @@ import android.view.ViewGroup;
 import android.widget.AbsListView;\r
 import android.widget.BaseAdapter;\r
 import android.widget.ImageView;\r
+import android.widget.LinearLayout;\r
 import android.widget.ListAdapter;\r
 import android.widget.TextView;\r
 \r
@@ -94,7 +95,6 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
         // Read sorting order, default to sort by name ascending\r
         FileStorageUtils.mSortOrder = mAppPreferences.getInt("sortOrder", 0);\r
         FileStorageUtils.mSortAscending = mAppPreferences.getBoolean("sortAscending", true);\r
-\r
         \r
         // initialise thumbnails cache on background thread\r
         new ThumbnailsCacheManager.InitDiskCacheTask().execute();\r
@@ -176,9 +176,13 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
         if (file != null){\r
 \r
             ImageView fileIcon = (ImageView) view.findViewById(R.id.thumbnail);\r
+\r
             fileIcon.setTag(file.getFileId());\r
             TextView fileName;\r
-            String name;\r
+            String name = file.getFileName();\r
+\r
+            LinearLayout linearLayout = (LinearLayout) view.findViewById(R.id.ListItemLayout);\r
+            linearLayout.setContentDescription("LinearLayout-" + name);\r
 \r
             switch (viewType){\r
                 case LIST_ITEM:\r
@@ -316,6 +320,7 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
                     fileIcon.setImageResource(DisplayUtils.getFileTypeIconId(file.getMimetype(),\r
                             file.getFileName()));\r
                 }\r
+\r
             } else {\r
                 // Folder\r
                 if (checkIfFileIsSharedWithMe(file)) {\r