Better failure handling in files renaming and removal
[pub/Android/ownCloud.git] / src / eu / alefzero / owncloud / ui / activity / FileDisplayActivity.java
index 163fea4..c440847 100644 (file)
@@ -24,6 +24,7 @@ import java.util.ArrayList;
 import android.accounts.Account;\r
 import android.accounts.AccountManager;\r
 import android.app.AlertDialog;\r
 import android.accounts.Account;\r
 import android.accounts.AccountManager;\r
 import android.app.AlertDialog;\r
+import android.app.ProgressDialog;\r
 import android.app.AlertDialog.Builder;\r
 import android.app.Dialog;\r
 import android.content.BroadcastReceiver;\r
 import android.app.AlertDialog.Builder;\r
 import android.app.Dialog;\r
 import android.content.BroadcastReceiver;\r
@@ -36,9 +37,11 @@ import android.content.IntentFilter;
 import android.content.SharedPreferences;\r
 import android.content.pm.PackageInfo;\r
 import android.content.pm.PackageManager.NameNotFoundException;\r
 import android.content.SharedPreferences;\r
 import android.content.pm.PackageInfo;\r
 import android.content.pm.PackageManager.NameNotFoundException;\r
+import android.content.res.Resources.NotFoundException;\r
 import android.database.Cursor;\r
 import android.net.Uri;\r
 import android.os.Bundle;\r
 import android.database.Cursor;\r
 import android.net.Uri;\r
 import android.os.Bundle;\r
+import android.os.Handler;\r
 import android.preference.PreferenceManager;\r
 import android.provider.MediaStore;\r
 import android.support.v4.app.FragmentTransaction;\r
 import android.preference.PreferenceManager;\r
 import android.provider.MediaStore;\r
 import android.support.v4.app.FragmentTransaction;\r
@@ -80,7 +83,7 @@ import eu.alefzero.webdav.WebdavClient;
  */\r
 \r
 public class FileDisplayActivity extends SherlockFragmentActivity implements\r
  */\r
 \r
 public class FileDisplayActivity extends SherlockFragmentActivity implements\r
-    FileListFragment.ContainerActivity, OnNavigationListener, OnClickListener, android.view.View.OnClickListener  {\r
+    FileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNavigationListener, OnClickListener, android.view.View.OnClickListener  {\r
     \r
     private ArrayAdapter<String> mDirectories;\r
     private OCFile mCurrentDir;\r
     \r
     private ArrayAdapter<String> mDirectories;\r
     private OCFile mCurrentDir;\r
@@ -104,9 +107,13 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
     private static final int DIALOG_SETUP_ACCOUNT = 0;\r
     private static final int DIALOG_CREATE_DIR = 1;\r
     private static final int DIALOG_ABOUT_APP = 2;\r
     private static final int DIALOG_SETUP_ACCOUNT = 0;\r
     private static final int DIALOG_CREATE_DIR = 1;\r
     private static final int DIALOG_ABOUT_APP = 2;\r
+    public static final int DIALOG_SHORT_WAIT = 3;\r
     \r
     private static final int ACTION_SELECT_FILE = 1;\r
     \r
     \r
     private static final int ACTION_SELECT_FILE = 1;\r
     \r
+    private static final String TAG = "FileDisplayActivity";\r
+    \r
+    \r
     @Override\r
     public void onCreate(Bundle savedInstanceState) {\r
         Log.i(getClass().toString(), "onCreate() start");\r
     @Override\r
     public void onCreate(Bundle savedInstanceState) {\r
         Log.i(getClass().toString(), "onCreate() start");\r
@@ -185,7 +192,7 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
                 action = action.setType("*/*")\r
                         .addCategory(Intent.CATEGORY_OPENABLE);\r
                 startActivityForResult(\r
                 action = action.setType("*/*")\r
                         .addCategory(Intent.CATEGORY_OPENABLE);\r
                 startActivityForResult(\r
-                        Intent.createChooser(action, "Upload file from..."),\r
+                        Intent.createChooser(action, getString(R.string.upload_chooser_title)),\r
                         ACTION_SELECT_FILE);\r
                 break;\r
             }\r
                         ACTION_SELECT_FILE);\r
                 break;\r
             }\r
@@ -441,7 +448,7 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
             break;\r
         case DIALOG_ABOUT_APP: {\r
             builder = new AlertDialog.Builder(this);\r
             break;\r
         case DIALOG_ABOUT_APP: {\r
             builder = new AlertDialog.Builder(this);\r
-            builder.setTitle("About");\r
+            builder.setTitle(getString(R.string.about_title));\r
             PackageInfo pkg;\r
             try {\r
                 pkg = getPackageManager().getPackageInfo(getPackageName(), 0);\r
             PackageInfo pkg;\r
             try {\r
                 pkg = getPackageManager().getPackageInfo(getPackageName(), 0);\r
@@ -451,7 +458,7 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
             } catch (NameNotFoundException e) {\r
                 builder = null;\r
                 dialog = null;\r
             } catch (NameNotFoundException e) {\r
                 builder = null;\r
                 dialog = null;\r
-                e.printStackTrace();\r
+                Log.e(TAG, "Error while showing about dialog", e);\r
             }\r
             break;\r
         }\r
             }\r
             break;\r
         }\r
@@ -486,18 +493,12 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
                             \r
                             // Create directory\r
                             path += directoryName + OCFile.PATH_SEPARATOR;\r
                             \r
                             // Create directory\r
                             path += directoryName + OCFile.PATH_SEPARATOR;\r
-                            Thread thread = new Thread(new DirectoryCreator(path, a));\r
+                            Thread thread = new Thread(new DirectoryCreator(path, a, new Handler()));\r
                             thread.start();\r
                             thread.start();\r
-    \r
-                            // Save new directory in local database\r
-                            OCFile newDir = new OCFile(path);\r
-                            newDir.setMimetype("DIR");\r
-                            newDir.setParentId(mCurrentDir.getFileId());\r
-                            mStorageManager.saveFile(newDir);\r
-    \r
-                            // Display the new folder right away\r
+                            \r
                             dialog.dismiss();\r
                             dialog.dismiss();\r
-                            mFileList.listDirectory(mCurrentDir);\r
+                            \r
+                            showDialog(DIALOG_SHORT_WAIT);\r
                         }\r
                     });\r
             builder.setNegativeButton(R.string.common_cancel,\r
                         }\r
                     });\r
             builder.setNegativeButton(R.string.common_cancel,\r
@@ -509,6 +510,15 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
             dialog = builder.create();\r
             break;\r
         }\r
             dialog = builder.create();\r
             break;\r
         }\r
+        case DIALOG_SHORT_WAIT: {\r
+            ProgressDialog working_dialog = new ProgressDialog(this);\r
+            working_dialog.setMessage(getResources().getString(\r
+                    R.string.wait_a_moment));\r
+            working_dialog.setIndeterminate(true);\r
+            working_dialog.setCancelable(false);\r
+            dialog = working_dialog;\r
+            break;\r
+        }\r
         default:\r
             dialog = null;\r
         }\r
         default:\r
             dialog = null;\r
         }\r
@@ -582,11 +592,13 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
         private String mTargetPath;\r
         private Account mAccount;\r
         private AccountManager mAm;\r
         private String mTargetPath;\r
         private Account mAccount;\r
         private AccountManager mAm;\r
+        private Handler mHandler; \r
     \r
     \r
-        public DirectoryCreator(String targetPath, Account account) {\r
+        public DirectoryCreator(String targetPath, Account account, Handler handler) {\r
             mTargetPath = targetPath;\r
             mAccount = account;\r
             mAm = (AccountManager) getSystemService(ACCOUNT_SERVICE);\r
             mTargetPath = targetPath;\r
             mAccount = account;\r
             mAm = (AccountManager) getSystemService(ACCOUNT_SERVICE);\r
+            mHandler = handler;\r
         }\r
     \r
         @Override\r
         }\r
     \r
         @Override\r
@@ -599,7 +611,39 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
     \r
             wdc.setCredentials(username, password);\r
             wdc.allowSelfsignedCertificates();\r
     \r
             wdc.setCredentials(username, password);\r
             wdc.allowSelfsignedCertificates();\r
-            wdc.createDirectory(mTargetPath);\r
+            boolean created = wdc.createDirectory(mTargetPath);\r
+            if (created) {\r
+                mHandler.post(new Runnable() {\r
+                    @Override\r
+                    public void run() { \r
+                        dismissDialog(DIALOG_SHORT_WAIT);\r
+                        \r
+                        // Save new directory in local database\r
+                        OCFile newDir = new OCFile(mTargetPath);\r
+                        newDir.setMimetype("DIR");\r
+                        newDir.setParentId(mCurrentDir.getFileId());\r
+                        mStorageManager.saveFile(newDir);\r
+    \r
+                        // Display the new folder right away\r
+                        mFileList.listDirectory(mCurrentDir);\r
+                    }\r
+                });\r
+                \r
+            } else {\r
+                mHandler.post(new Runnable() {\r
+                    @Override\r
+                    public void run() {\r
+                        dismissDialog(DIALOG_SHORT_WAIT);\r
+                        try {\r
+                            Toast msg = Toast.makeText(FileDisplayActivity.this, R.string.create_dir_fail_msg, Toast.LENGTH_LONG); \r
+                            msg.show();\r
+                        \r
+                        } catch (NotFoundException e) {\r
+                            Log.e(TAG, "Error while trying to show fail message " , e);\r
+                        }\r
+                    }\r
+                });\r
+            }\r
         }\r
     \r
     }\r
         }\r
     \r
     }\r
@@ -788,6 +832,19 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
         }\r
     }\r
     \r
         }\r
     }\r
     \r
+    \r
+    /**\r
+     * {@inheritDoc}\r
+     */\r
+    @Override\r
+    public void onFileStateChanged() {\r
+        FileListFragment fileListFragment = (FileListFragment) getSupportFragmentManager().findFragmentById(R.id.fileList);\r
+        if (fileListFragment != null) { \r
+            fileListFragment.listDirectory();\r
+        }\r
+    }\r
+    \r
+    \r
     /**\r
      *  Operations in this method should be preferably performed in onCreate to have a lighter onResume method. \r
      * \r
     /**\r
      *  Operations in this method should be preferably performed in onCreate to have a lighter onResume method. \r
      * \r