Add content_description to Navigation Drawer options
[pub/Android/ownCloud.git] / src / com / owncloud / android / ui / activity / FileDisplayActivity.java
index 26992ad..1d4f17a 100644 (file)
@@ -23,6 +23,7 @@
 package com.owncloud.android.ui.activity;
 
 import java.io.File;
+import java.util.ArrayList;
 
 import android.accounts.Account;
 import android.accounts.AccountManager;
@@ -71,6 +72,7 @@ import com.actionbarsherlock.view.Menu;
 import com.actionbarsherlock.view.MenuInflater;
 import com.actionbarsherlock.view.MenuItem;
 import com.actionbarsherlock.view.Window;
+import com.owncloud.android.BuildConfig;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.authentication.AccountUtils;
@@ -99,6 +101,7 @@ import com.owncloud.android.operations.RefreshFolderOperation;
 import com.owncloud.android.operations.UnshareLinkOperation;
 import com.owncloud.android.services.observer.FileObserverService;
 import com.owncloud.android.syncadapter.FileSyncAdapter;
+import com.owncloud.android.ui.NavigationDrawerItem;
 import com.owncloud.android.ui.adapter.NavigationDrawerListAdapter;
 import com.owncloud.android.ui.dialog.ConfirmationDialogFragment;
 import com.owncloud.android.ui.dialog.CreateFolderDialogFragment;
@@ -161,12 +164,21 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener {
     private static String DIALOG_UPLOAD_SOURCE = "DIALOG_UPLOAD_SOURCE";
     private static String DIALOG_CERT_NOT_SAVED = "DIALOG_CERT_NOT_SAVED";
 
-    private NavigationDrawerListAdapter adapter = null;
-
     private OCFile mWaitingToSend;
-    
+
+    // Navigation Drawer
     private DrawerLayout mDrawerLayout;
     private ActionBarDrawerToggle mDrawerToggle;
+    private ListView mDrawerList;
+
+    // Slide menu items
+    private String[] mDrawerTitles;
+    private String[] mDrawerContentDescriptions;
+
+    private ArrayList<NavigationDrawerItem> mDrawerItems;
+
+    private NavigationDrawerListAdapter mNavigationDrawerAdapter = null;
+
     private boolean mShowAccounts = false;
     
     @Override
@@ -199,16 +211,87 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener {
         // Inflate and set the layout view
         setContentView(R.layout.files);
         
-        // TODO move to another place that all activity can use it
-        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
+        // Navigation Drawer
+        initDrawer();
+
+        mDualPane = getResources().getBoolean(R.bool.large_land_layout);
+        mLeftFragmentContainer = findViewById(R.id.left_fragment_container);
+        mRightFragmentContainer = findViewById(R.id.right_fragment_container);
+        if (savedInstanceState == null) {
+            createMinFragments();
+        }
+
+        // Action bar setup
+        mDirectories = new CustomArrayAdapter<String>(this, R.layout.sherlock_spinner_dropdown_item);
+        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+        getSupportActionBar().setHomeButtonEnabled(true);       // mandatory since Android ICS, according to the official documentation
+        getSupportActionBar().setDisplayShowCustomEnabled(true); // CRUCIAL - for displaying your custom actionbar
+        getSupportActionBar().setDisplayShowTitleEnabled(true);
+        setSupportProgressBarIndeterminateVisibility(mSyncInProgress /*|| mRefreshSharesInProgress*/);    // always AFTER setContentView(...) ; to work around bug in its implementation
+
+        // TODO Remove??, it is done in onPostCreate
+        mDrawerToggle.syncState();
         
+        setBackgroundText();
+
+        Log_OC.v(TAG, "onCreate() end");
+    }
+
+    private void initDrawer(){
+        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
+        // Notification Drawer
+        LinearLayout navigationDrawerLayout = (LinearLayout) findViewById(R.id.left_drawer);
+        mDrawerList = (ListView) navigationDrawerLayout.findViewById(R.id.drawer_list);
+
+        // load Account in the Drawer Title
+        // User-Icon
+        ImageView userIcon = (ImageView) navigationDrawerLayout.findViewById(R.id.drawer_userIcon);
+        userIcon.setImageResource(DisplayUtils.getSeasonalIconId());
+
+        // Username
+        TextView username = (TextView) navigationDrawerLayout.findViewById(R.id.drawer_username);
+        Account account = AccountUtils.getCurrentOwnCloudAccount(getApplicationContext());
+
+        if (account != null) {
+            int lastAtPos = account.name.lastIndexOf("@");
+            username.setText(account.name.substring(0, lastAtPos));
+        }
+
+        // load slide menu items
+        mDrawerTitles = getResources().getStringArray(R.array.drawer_items);
+
+        // nav drawer content description from resources
+        mDrawerContentDescriptions = getResources().
+                getStringArray(R.array.drawer_content_descriptions);
+
+        // nav drawer items
+        mDrawerItems = new ArrayList<NavigationDrawerItem>();
+        // adding nav drawer items to array
+        // Accounts
+        mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[0], mDrawerContentDescriptions[0]));
+        // All Files
+        mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[1], mDrawerContentDescriptions[1]));
+
+        // TODO Enable when "On Device" is recovered
+        // On Device
+        // mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[2], mDrawerContentDescriptions[2]));
+
+        // Settings
+        mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[2], mDrawerContentDescriptions[2]));
+        // Logs
+        mDrawerItems.add(new NavigationDrawerItem(mDrawerTitles[3],mDrawerContentDescriptions[3]));
+
+        // setting the nav drawer list adapter
+        mNavigationDrawerAdapter = new NavigationDrawerListAdapter(getApplicationContext(), this,
+                mDrawerItems);
+        mDrawerList.setAdapter(mNavigationDrawerAdapter);
+
         mDrawerToggle = new ActionBarDrawerToggle(
-                this,                  
-                mDrawerLayout,         
-                R.drawable.ic_drawer,  
-                R.string.drawer_open,  
-                R.string.empty  
-                ) {
+                this,
+                mDrawerLayout,
+                R.drawable.ic_drawer,
+                R.string.drawer_open,
+                R.string.empty) {
 
             /** Called when a drawer has settled in a completely closed state. */
             public void onDrawerClosed(View view) {
@@ -227,96 +310,15 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener {
                 invalidateOptionsMenu();
             }
         };
-        
-        mDrawerToggle.setDrawerIndicatorEnabled(true);
-        
-        // Notification Drawer
-        LinearLayout notificatonDrawer = (LinearLayout) findViewById(R.id.left_drawer);
-        
-        // ListView
-        ListView listView = (ListView) notificatonDrawer.findViewById(R.id.drawer_list);
-        adapter = new NavigationDrawerListAdapter(getApplicationContext(), this);
-        
-        listView.setAdapter(adapter);
-        
-        listView.setOnItemClickListener(new OnItemClickListener() {
-            @Override
-            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
-                if (mShowAccounts && position > 0){
-                    position = position - 1;
-                }
-                switch (position){
-                    case 0: // Accounts
-                        mShowAccounts = !mShowAccounts;
-                        adapter.setShowAccounts(mShowAccounts);
-                        adapter.notifyDataSetChanged();
-                        break;
-
-                    case 1: // All Files
-                        // TODO Enable when "On Device" is recovered ?
-                        //MainApp.showOnlyFilesOnDevice(false);
-                        mDrawerLayout.closeDrawers();
-                        break;
 
-                    // TODO Enable when "On Device" is recovered ?
-//                case 2:
-//                    MainApp.showOnlyFilesOnDevice(true);
-//                    mDrawerLayout.closeDrawers();
-//                    break;
-
-                    case 2: // Settings
-                        Intent settingsIntent = new Intent(getApplicationContext(),
-                                Preferences.class);
-                        startActivity(settingsIntent);
-                        break;
-
-                    case 3: // Logs
-                        Intent loggerIntent = new Intent(getApplicationContext(),
-                                LogHistoryActivity.class);
-                        startActivity(loggerIntent);
-                        break;
-                }
-            }
-        });
-        
-        // User-Icon
-        ImageView userIcon = (ImageView) notificatonDrawer.findViewById(R.id.drawer_userIcon);
-        userIcon.setImageResource(DisplayUtils.getSeasonalIconId());
-        
-        // Username
-        TextView username = (TextView) notificatonDrawer.findViewById(R.id.drawer_username);
-        Account account = AccountUtils.getCurrentOwnCloudAccount(getApplicationContext());
-
-        if (account != null) {
-            int lastAtPos = account.name.lastIndexOf("@");
-            username.setText(account.name.substring(0, lastAtPos));
-        }
+        mDrawerToggle.setDrawerIndicatorEnabled(true);
+        // Set the list's click listener
+        mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
 
         // Set the drawer toggle as the DrawerListener
         mDrawerLayout.setDrawerListener(mDrawerToggle);
-
-        mDualPane = getResources().getBoolean(R.bool.large_land_layout);
-        mLeftFragmentContainer = findViewById(R.id.left_fragment_container);
-        mRightFragmentContainer = findViewById(R.id.right_fragment_container);
-        if (savedInstanceState == null) {
-            createMinFragments();
-        }
-
-        // Action bar setup
-        mDirectories = new CustomArrayAdapter<String>(this, R.layout.sherlock_spinner_dropdown_item);
-        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
-        getSupportActionBar().setHomeButtonEnabled(true);       // mandatory since Android ICS, according to the official documentation
-        getSupportActionBar().setDisplayShowCustomEnabled(true); // CRUCIAL - for displaying your custom actionbar
-        getSupportActionBar().setDisplayShowTitleEnabled(true);
-        setSupportProgressBarIndeterminateVisibility(mSyncInProgress /*|| mRefreshSharesInProgress*/);    // always AFTER setContentView(...) ; to work around bug in its implementation
-        
-        mDrawerToggle.syncState();
-        
-        setBackgroundText();
-
-        Log_OC.v(TAG, "onCreate() end");
     }
-    
+
     @Override
     protected void onStart() {
         Log_OC.v(TAG, "onStart() start");
@@ -636,19 +638,16 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener {
             builder.setTitle(R.string.actionbar_sort_title)
             .setSingleChoiceItems(R.array.actionbar_sortby, sortOrder , new DialogInterface.OnClickListener() {
                 public void onClick(DialogInterface dialog, int which) {
-                    
                     switch (which){
-                    case 0:
-                        sortByName(true);
-                        break;
-                    case 1:
-                        sortByDate(false);
-                        break;
-                        
+                        case 0:
+                            sortByName(true);
+                            break;
+                        case 1:
+                            sortByDate(false);
+                            break;
                     }
-                    
+
                     dialog.dismiss();
-                    
                 }
             });
             builder.create().show();
@@ -908,7 +907,7 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener {
         super.onResume();
 
         // refresh Navigation Drawer account list
-        adapter.updateAccountList();
+        mNavigationDrawerAdapter.updateAccountList();
 
         // refresh list of files
         refreshListOfFilesFragment();
@@ -1907,4 +1906,43 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener {
         mDrawerLayout.closeDrawers();
     }
 
+    private class DrawerItemClickListener implements ListView.OnItemClickListener {
+        @Override
+        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+            if (mShowAccounts && position > 0){
+                position = position - 1;
+            }
+            switch (position){
+                case 0: // Accounts
+                    mShowAccounts = !mShowAccounts;
+                    mNavigationDrawerAdapter.setShowAccounts(mShowAccounts);
+                    mNavigationDrawerAdapter.notifyDataSetChanged();
+                    break;
+
+                case 1: // All Files
+                    // TODO Enable when "On Device" is recovered ?
+                    //MainApp.showOnlyFilesOnDevice(false);
+                    mDrawerLayout.closeDrawers();
+                    break;
+
+                // TODO Enable when "On Device" is recovered ?
+//                case 2:
+//                    MainApp.showOnlyFilesOnDevice(true);
+//                    mDrawerLayout.closeDrawers();
+//                    break;
+
+                case 2: // Settings
+                    Intent settingsIntent = new Intent(getApplicationContext(),
+                            Preferences.class);
+                    startActivity(settingsIntent);
+                    break;
+
+                case 3: // Logs
+                    Intent loggerIntent = new Intent(getApplicationContext(),
+                            LogHistoryActivity.class);
+                    startActivity(loggerIntent);
+                    break;
+            }
+        }
+    }
 }