Started working on the "Where is my device?" feature
[pub/Android/ownCloud.git] / src / eu / alefzero / owncloud / ui / activity / FileDisplayActivity.java
index 328128d..5ae763c 100644 (file)
@@ -21,133 +21,262 @@ package eu.alefzero.owncloud.ui.activity;
 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.AlertDialog.Builder;\r
 import android.app.Dialog;\r
 import android.app.Dialog;\r
-import android.app.ActionBar.OnNavigationListener;\r
 import android.content.DialogInterface;\r
 import android.content.DialogInterface;\r
-import android.content.Intent;\r
 import android.content.DialogInterface.OnCancelListener;\r
 import android.content.DialogInterface.OnCancelListener;\r
-import android.content.res.Configuration;\r
+import android.content.DialogInterface.OnClickListener;\r
+import android.content.Intent;\r
+import android.net.Uri;\r
 import android.os.Bundle;\r
 import android.os.Bundle;\r
-import android.support.v4.app.FragmentTransaction;\r
-import android.support.v4.view.Menu;\r
-import android.support.v4.view.MenuItem;\r
-import android.view.MenuInflater;\r
+import android.view.View;\r
+import android.view.ViewGroup;\r
 import android.widget.ArrayAdapter;\r
 import android.widget.ArrayAdapter;\r
+import android.widget.EditText;\r
+import android.widget.TextView;\r
+\r
+import com.actionbarsherlock.app.ActionBar;\r
+import com.actionbarsherlock.app.ActionBar.OnNavigationListener;\r
+import com.actionbarsherlock.app.SherlockFragmentActivity;\r
+import com.actionbarsherlock.view.Menu;\r
+import com.actionbarsherlock.view.MenuInflater;\r
+import com.actionbarsherlock.view.MenuItem;\r
+\r
 import eu.alefzero.owncloud.R;\r
 import eu.alefzero.owncloud.R;\r
-import eu.alefzero.owncloud.R.id;\r
 import eu.alefzero.owncloud.authenticator.AccountAuthenticator;\r
 import eu.alefzero.owncloud.authenticator.AccountAuthenticator;\r
-import eu.alefzero.owncloud.ui.fragment.FileDetail;\r
-import eu.alefzero.owncloud.ui.fragment.FileList;\r
+import eu.alefzero.owncloud.authenticator.AuthUtils;\r
+import eu.alefzero.owncloud.datamodel.DataStorageManager;\r
+import eu.alefzero.owncloud.datamodel.FileDataStorageManager;\r
+import eu.alefzero.owncloud.datamodel.OCFile;\r
+import eu.alefzero.owncloud.ui.fragment.FileListFragment;\r
+import eu.alefzero.webdav.WebdavClient;\r
 \r
 /**\r
  * Displays, what files the user has available in his ownCloud.\r
 \r
 /**\r
  * Displays, what files the user has available in his ownCloud.\r
+ * \r
  * @author Bartek Przybylski\r
  * @author Bartek Przybylski\r
- *\r
+ * \r
  */\r
 \r
  */\r
 \r
-public class FileDisplayActivity extends android.support.v4.app.FragmentActivity implements OnNavigationListener {\r
-  private ArrayAdapter<String> mDirectories;\r
\r
-  private static final int DIALOG_CHOOSE_ACCOUNT = 0;\r
-  \r
-  public void pushPath(String path) {\r
-    mDirectories.insert(path, 0);\r
-  }\r
-  \r
-  public boolean popPath() {\r
-    mDirectories.remove(mDirectories.getItem(0));\r
-    return !mDirectories.isEmpty();\r
-  }\r
-  \r
-  @Override\r
-  public void onCreate(Bundle savedInstanceState) {\r
-    super.onCreate(savedInstanceState);\r
-    mDirectories = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item);\r
-    mDirectories.add("/");\r
-    setContentView(R.layout.files);\r
-    getActionBar().setNavigationMode(android.support.v4.app.ActionBar.NAVIGATION_MODE_LIST);\r
-    getActionBar().setDisplayShowTitleEnabled(false);\r
-    getActionBar().setListNavigationCallbacks(mDirectories, this);\r
-\r
-    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();\r
-    ft.add(R.id.file_list_container, new FileList());\r
-    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {\r
-      ft.add(R.id.fileDetail, new FileDetail());\r
-    }\r
-    ft.commit();\r
-  }\r
-\r
-  @Override\r
-  public boolean onOptionsItemSelected(MenuItem item) {\r
-    switch (item.getItemId()) {\r
-      case R.id.settingsItem :\r
-        Intent i = new Intent(this, Preferences.class);\r
-        startActivity(i);\r
-        break;\r
-    }\r
-    return true;\r
-  }\r
-\r
-  @Override\r
-  protected Dialog onCreateDialog(int id) {\r
-    switch (id) {\r
-      case DIALOG_CHOOSE_ACCOUNT:\r
-        return createChooseAccountDialog();\r
-      default:\r
-        throw new IllegalArgumentException("Unknown dialog id: " + id);\r
-    }\r
-  }\r
-  \r
-  @Override\r
-  public boolean onCreateOptionsMenu(Menu menu) {\r
-    MenuInflater inflater = getMenuInflater();\r
-    inflater.inflate(R.menu.menu, menu);\r
-    return true;\r
-  }\r
-\r
-  private Dialog createChooseAccountDialog() {\r
-    final AccountManager accMan = AccountManager.get(this);\r
-    CharSequence[] items = new CharSequence[accMan.getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE).length];\r
-    int i = 0;\r
-    for (Account a : accMan.getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE)) {\r
-      items[i++] = a.name;\r
-    }\r
-    \r
-    AlertDialog.Builder builder = new AlertDialog.Builder(this);\r
-    builder.setTitle(R.string.common_choose_account);\r
-    builder.setCancelable(true);\r
-    builder.setItems(items, new DialogInterface.OnClickListener() {\r
-        public void onClick(DialogInterface dialog, int item) {\r
-            //mAccount = accMan.getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE)[item];\r
-            dialog.dismiss();\r
+public class FileDisplayActivity extends SherlockFragmentActivity implements\r
+               OnNavigationListener {\r
+       private ArrayAdapter<String> mDirectories;\r
+       private DataStorageManager mStorageManager;\r
+\r
+       private static final int DIALOG_CHOOSE_ACCOUNT = 0;\r
+\r
+       public void pushPath(String path) {\r
+               mDirectories.insert(path, 0);\r
+       }\r
+\r
+       public boolean popPath() {\r
+               mDirectories.remove(mDirectories.getItem(0));\r
+               return !mDirectories.isEmpty();\r
+       }\r
+\r
+       @Override\r
+       protected Dialog onCreateDialog(int id, Bundle args) {\r
+               final AlertDialog.Builder builder = new Builder(this);\r
+               final EditText dirName = new EditText(getBaseContext());\r
+               final Account a = AuthUtils.getCurrentOwnCloudAccount(this);\r
+               builder.setView(dirName);\r
+               builder.setTitle(R.string.uploader_info_dirname);\r
+               dirName.setTextColor(R.color.setup_text_typed);\r
+\r
+               builder.setPositiveButton(R.string.common_ok, new OnClickListener() {\r
+                       public void onClick(DialogInterface dialog, int which) {\r
+                               String s = dirName.getText().toString();\r
+                               if (s.trim().isEmpty()) {\r
+                                       dialog.cancel();\r
+                                       return;\r
+                               }\r
+\r
+                               String path = "";\r
+                               for (int i = mDirectories.getCount() - 2; i >= 0; --i) {\r
+                                       path += "/" + mDirectories.getItem(i);\r
+                               }\r
+                               OCFile parent = mStorageManager.getFileByPath(path + "/");\r
+                               path += s + "/";\r
+                               Thread thread = new Thread(new DirectoryCreator(path, a));\r
+                               thread.start();\r
+                               \r
+                               OCFile new_file = new OCFile(path);\r
+                               new_file.setMimetype("DIR");\r
+                               new_file.setParentId(parent.getParentId());\r
+                               mStorageManager.saveFile(new_file);\r
+\r
+                               dialog.dismiss();\r
+                       }\r
+               });\r
+               builder.setNegativeButton(R.string.common_cancel,\r
+                               new OnClickListener() {\r
+                                       public void onClick(DialogInterface dialog, int which) {\r
+                                               dialog.cancel();\r
+                                       }\r
+                               });\r
+               return builder.create();\r
+       }\r
+\r
+       @Override\r
+       public void onCreate(Bundle savedInstanceState) {\r
+               super.onCreate(savedInstanceState);\r
+               mDirectories = new CustomArrayAdapter<String>(this,\r
+                               R.layout.sherlock_spinner_dropdown_item);\r
+               mDirectories.add("/");\r
+               setContentView(R.layout.files);\r
+               mStorageManager = new FileDataStorageManager(AuthUtils.getCurrentOwnCloudAccount(this), getContentResolver());\r
+               ActionBar action_bar = getSupportActionBar();\r
+               action_bar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);\r
+               action_bar.setDisplayShowTitleEnabled(false);\r
+               action_bar.setListNavigationCallbacks(mDirectories, this);\r
+               action_bar.setDisplayHomeAsUpEnabled(true);\r
+       }\r
+\r
+       @Override\r
+       public boolean onOptionsItemSelected(MenuItem item) {\r
+               switch (item.getItemId()) {\r
+               case R.id.settingsItem: {\r
+                       Intent i = new Intent(this, Preferences.class);\r
+                       startActivity(i);\r
+                       break;\r
+               }\r
+               case R.id.createDirectoryItem: {\r
+                       showDialog(0);\r
+                       break;\r
+               }\r
+               case android.R.id.home: {\r
+                       onBackPressed();\r
+                       break;\r
+               }\r
+                       \r
+               }\r
+               return true;\r
+       }\r
+       \r
+       @Override\r
+       public void onBackPressed(){\r
+               popPath();\r
+               if(mDirectories.getCount() == 0) {\r
+                       Intent intent = new Intent(this, LandingActivity.class);\r
+                       startActivity(intent);\r
+                       return;\r
+               }\r
+               ((FileListFragment) getSupportFragmentManager().findFragmentById(R.id.fileList))\r
+                               .onNavigateUp();\r
+       }\r
+\r
+       @Override\r
+       protected Dialog onCreateDialog(int id) {\r
+               switch (id) {\r
+               case DIALOG_CHOOSE_ACCOUNT:\r
+                       return createChooseAccountDialog();\r
+               default:\r
+                       throw new IllegalArgumentException("Unknown dialog id: " + id);\r
+               }\r
+       }\r
+\r
+       @Override\r
+       public boolean onCreateOptionsMenu(Menu menu) {\r
+               MenuInflater inflater = getSherlock().getMenuInflater();\r
+               inflater.inflate(R.menu.menu, menu);\r
+               return true;\r
+       }\r
+\r
+       private Dialog createChooseAccountDialog() {\r
+               final AccountManager accMan = AccountManager.get(this);\r
+               CharSequence[] items = new CharSequence[accMan\r
+                               .getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE).length];\r
+               int i = 0;\r
+               for (Account a : accMan\r
+                               .getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE)) {\r
+                       items[i++] = a.name;\r
+               }\r
+\r
+               AlertDialog.Builder builder = new AlertDialog.Builder(this);\r
+               builder.setTitle(R.string.common_choose_account);\r
+               builder.setCancelable(true);\r
+               builder.setItems(items, new DialogInterface.OnClickListener() {\r
+                       public void onClick(DialogInterface dialog, int item) {\r
+                               // mAccount =\r
+                               // accMan.getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE)[item];\r
+                               dialog.dismiss();\r
+                       }\r
+               });\r
+               builder.setOnCancelListener(new OnCancelListener() {\r
+                       public void onCancel(DialogInterface dialog) {\r
+                               FileDisplayActivity.this.finish();\r
+                       }\r
+               });\r
+               AlertDialog alert = builder.create();\r
+               return alert;\r
+       }\r
+\r
+       @Override\r
+       public boolean onNavigationItemSelected(int itemPosition, long itemId) {\r
+               int i = itemPosition;\r
+               while (i-- != 0) {\r
+                       onBackPressed();\r
+               }\r
+               return true;\r
+       }\r
+\r
+       private class DirectoryCreator implements Runnable {\r
+               private String mTargetPath;\r
+               private Account mAccount;\r
+               private AccountManager mAm;\r
+\r
+               public DirectoryCreator(String targetPath, Account account) {\r
+                       mTargetPath = targetPath;\r
+                       mAccount = account;\r
+                       mAm = (AccountManager) getSystemService(ACCOUNT_SERVICE);\r
+               }\r
+\r
+               @Override\r
+               public void run() {\r
+                       WebdavClient wdc = new WebdavClient(Uri.parse(mAm.getUserData(\r
+                                       mAccount, AccountAuthenticator.KEY_OC_URL)));\r
+\r
+                       String username = mAccount.name.substring(0,\r
+                                       mAccount.name.lastIndexOf('@'));\r
+                       String password = mAm.getPassword(mAccount);\r
+\r
+                       wdc.setCredentials(username, password);\r
+                       wdc.allowUnsignedCertificates();\r
+                       wdc.createDirectory(mTargetPath);\r
+               }\r
+\r
+       }\r
+\r
+       // Custom array adapter to override text colors\r
+       private class CustomArrayAdapter<T> extends ArrayAdapter<T> {\r
+               \r
+               public CustomArrayAdapter(FileDisplayActivity ctx,\r
+                               int view) {\r
+                       super(ctx, view);\r
+               }\r
+\r
+               public View getView(int position, View convertView,\r
+                ViewGroup parent) {\r
+            View v = super.getView(position, convertView, parent);\r
+\r
+            ((TextView) v).setTextColor(\r
+                    getResources()\r
+                    .getColorStateList(android.R.color.white));\r
+            return v;\r
+        }\r
+               \r
+               public View getDropDownView(int position, View convertView,\r
+                ViewGroup parent) {\r
+            View v = super.getDropDownView(position, convertView,\r
+                    parent);\r
+\r
+            ((TextView) v).setTextColor(getResources().getColorStateList(\r
+                            android.R.color.white));\r
+\r
+            return v;\r
         }\r
         }\r
-    });\r
-    builder.setOnCancelListener(new OnCancelListener() {\r
-      public void onCancel(DialogInterface dialog) {\r
-        FileDisplayActivity.this.finish();\r
-      }\r
-    });\r
-    AlertDialog alert = builder.create();\r
-    return alert;\r
-  }\r
-\r
-  @Override\r
-  public boolean onNavigationItemSelected(int itemPosition, long itemId) {\r
-    int i = itemPosition;\r
-    while (i-- != 0) {\r
-      onBackPressed();\r
-    }\r
-    return true;\r
-  }\r
-  \r
-  @Override\r
-  public void onBackPressed() {\r
-    popPath();\r
-    if (mDirectories.getCount() == 0)\r
-    {\r
-      super.onBackPressed();\r
-      return;\r
-    }\r
-    ((FileList)getSupportFragmentManager().findFragmentById(id.file_list_container)).onBackPressed();\r
-  }\r
-}
\ No newline at end of file
+\r
+\r
+               \r
+       }\r
+}