moving from eu.alefzero.eu to com.owncloud.android
[pub/Android/ownCloud.git] / src / eu / alefzero / owncloud / Uploader.java
diff --git a/src/eu/alefzero/owncloud/Uploader.java b/src/eu/alefzero/owncloud/Uploader.java
deleted file mode 100644 (file)
index 523db94..0000000
+++ /dev/null
@@ -1,413 +0,0 @@
-/* ownCloud Android client application\r
- *   Copyright (C) 2012  Bartek Przybylski\r
- *\r
- *   This program is free software: you can redistribute it and/or modify\r
- *   it under the terms of the GNU General Public License as published by\r
- *   the Free Software Foundation, either version 3 of the License, or\r
- *   (at your option) any later version.\r
- *\r
- *   This program is distributed in the hope that it will be useful,\r
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
- *   GNU General Public License for more details.\r
- *\r
- *   You should have received a copy of the GNU General Public License\r
- *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\r
- *\r
- */\r
-package eu.alefzero.owncloud;\r
-\r
-import java.io.File;\r
-import java.util.ArrayList;\r
-import java.util.HashMap;\r
-import java.util.LinkedList;\r
-import java.util.List;\r
-import java.util.Stack;\r
-import java.util.Vector;\r
-\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.ListActivity;\r
-import android.app.ProgressDialog;\r
-import android.content.Context;\r
-import android.content.DialogInterface;\r
-import android.content.DialogInterface.OnCancelListener;\r
-import android.content.DialogInterface.OnClickListener;\r
-import android.content.Intent;\r
-import android.database.Cursor;\r
-import android.net.Uri;\r
-import android.os.Bundle;\r
-import android.os.Parcelable;\r
-import android.provider.MediaStore.Images.Media;\r
-import android.util.Log;\r
-import android.view.View;\r
-import android.view.Window;\r
-import android.widget.AdapterView;\r
-import android.widget.AdapterView.OnItemClickListener;\r
-import android.widget.Button;\r
-import android.widget.EditText;\r
-import android.widget.SimpleAdapter;\r
-import eu.alefzero.owncloud.authenticator.AccountAuthenticator;\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.files.services.FileUploader;\r
-import eu.alefzero.webdav.WebdavClient;\r
-\r
-/**\r
- * This can be used to upload things to an ownCloud instance.\r
- * \r
- * @author Bartek Przybylski\r
- * \r
- */\r
-public class Uploader extends ListActivity implements OnItemClickListener, android.view.View.OnClickListener {\r
-    private static final String TAG = "ownCloudUploader";\r
-\r
-    private Account mAccount;\r
-    private AccountManager mAccountManager;\r
-    private Stack<String> mParents;\r
-    private ArrayList<Parcelable> mStreamsToUpload;\r
-    private boolean mCreateDir;\r
-    private String mUploadPath;\r
-    private static final String[] CONTENT_PROJECTION = { Media.DATA, Media.DISPLAY_NAME, Media.MIME_TYPE, Media.SIZE };\r
-    private DataStorageManager mStorageManager;\r
-    private OCFile mFile;\r
-\r
-    private final static int DIALOG_NO_ACCOUNT = 0;\r
-    private final static int DIALOG_WAITING = 1;\r
-    private final static int DIALOG_NO_STREAM = 2;\r
-    private final static int DIALOG_MULTIPLE_ACCOUNT = 3;\r
-    private final static int DIALOG_GET_DIRNAME = 4;\r
-\r
-    private final static int REQUEST_CODE_SETUP_ACCOUNT = 0;\r
-\r
-    @Override\r
-    protected void onCreate(Bundle savedInstanceState) {\r
-        super.onCreate(savedInstanceState);\r
-        getWindow().requestFeature(Window.FEATURE_NO_TITLE);\r
-        mParents = new Stack<String>();\r
-        mParents.add("");\r
-        if (getIntent().hasExtra(Intent.EXTRA_STREAM)) {\r
-            prepareStreamsToUpload();\r
-            mAccountManager = (AccountManager) getSystemService(Context.ACCOUNT_SERVICE);\r
-            Account[] accounts = mAccountManager.getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE);\r
-            if (accounts.length == 0) {\r
-                Log.i(TAG, "No ownCloud account is available");\r
-                showDialog(DIALOG_NO_ACCOUNT);\r
-            } else if (accounts.length > 1) {\r
-                Log.i(TAG, "More then one ownCloud is available");\r
-                showDialog(DIALOG_MULTIPLE_ACCOUNT);\r
-            } else {\r
-                mAccount = accounts[0];\r
-                setContentView(R.layout.uploader_layout);\r
-                mStorageManager = new FileDataStorageManager(mAccount, getContentResolver());\r
-                populateDirectoryList();\r
-            }\r
-        } else {\r
-            showDialog(DIALOG_NO_STREAM);\r
-        }\r
-    }\r
-    \r
-    @Override\r
-    protected Dialog onCreateDialog(final int id) {\r
-        final AlertDialog.Builder builder = new Builder(this);\r
-        switch (id) {\r
-        case DIALOG_WAITING:\r
-            ProgressDialog pDialog = new ProgressDialog(this);\r
-            pDialog.setIndeterminate(false);\r
-            pDialog.setCancelable(false);\r
-            pDialog.setMessage(getResources().getString(R.string.uploader_info_uploading));\r
-            return pDialog;\r
-        case DIALOG_NO_ACCOUNT:\r
-            builder.setIcon(android.R.drawable.ic_dialog_alert);\r
-            builder.setTitle(R.string.uploader_wrn_no_account_title);\r
-            builder.setMessage(R.string.uploader_wrn_no_account_text);\r
-            builder.setCancelable(false);\r
-            builder.setPositiveButton(R.string.uploader_wrn_no_account_setup_btn_text, new OnClickListener() {\r
-                public void onClick(DialogInterface dialog, int which) {\r
-                    if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.ECLAIR_MR1) {\r
-                        // using string value since in API7 this\r
-                        // constatn is not defined\r
-                        // in API7 < this constatant is defined in\r
-                        // Settings.ADD_ACCOUNT_SETTINGS\r
-                        // and Settings.EXTRA_AUTHORITIES\r
-                        Intent intent = new Intent("android.settings.ADD_ACCOUNT_SETTINGS");\r
-                        intent.putExtra("authorities", new String[] { AccountAuthenticator.AUTH_TOKEN_TYPE });\r
-                        startActivityForResult(intent, REQUEST_CODE_SETUP_ACCOUNT);\r
-                    } else {\r
-                        // since in API7 there is no direct call for\r
-                        // account setup, so we need to\r
-                        // show our own AccountSetupAcricity, get\r
-                        // desired results and setup\r
-                        // everything for ourself\r
-                        Intent intent = new Intent(getBaseContext(), AccountAuthenticator.class);\r
-                        startActivityForResult(intent, REQUEST_CODE_SETUP_ACCOUNT);\r
-                    }\r
-                }\r
-            });\r
-            builder.setNegativeButton(R.string.uploader_wrn_no_account_quit_btn_text, new OnClickListener() {\r
-                public void onClick(DialogInterface dialog, int which) {\r
-                    finish();\r
-                }\r
-            });\r
-            return builder.create();\r
-        /*case DIALOG_GET_DIRNAME:\r
-            final EditText dirName = new EditText(getBaseContext());\r
-            builder.setView(dirName);\r
-            builder.setTitle(R.string.uploader_info_dirname);\r
-            String pathToUpload;\r
-            if (mParents.empty()) {\r
-                pathToUpload = "/";\r
-            } else {\r
-                mCursor = managedQuery(Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_FILE, mParents.peek()), null,\r
-                        null, null, null);\r
-                mCursor.moveToFirst();\r
-                pathToUpload = mCursor.getString(mCursor.getColumnIndex(ProviderTableMeta.FILE_PATH))\r
-                        + mCursor.getString(mCursor.getColumnIndex(ProviderTableMeta.FILE_NAME)).replace(" ", "%20");   // TODO don't make this ; use WebdavUtils.encode in the right moment\r
-            }\r
-            a a = new a(pathToUpload, dirName);\r
-            builder.setPositiveButton(R.string.common_ok, a);\r
-            builder.setNegativeButton(R.string.common_cancel, new OnClickListener() {\r
-                public void onClick(DialogInterface dialog, int which) {\r
-                    dialog.cancel();\r
-                }\r
-            });\r
-            return builder.create();*/\r
-        case DIALOG_MULTIPLE_ACCOUNT:\r
-            CharSequence ac[] = new CharSequence[mAccountManager.getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE).length];\r
-            for (int i = 0; i < ac.length; ++i) {\r
-                ac[i] = mAccountManager.getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE)[i].name;\r
-            }\r
-            builder.setTitle(R.string.common_choose_account);\r
-            builder.setItems(ac, new OnClickListener() {\r
-                public void onClick(DialogInterface dialog, int which) {\r
-                    mAccount = mAccountManager.getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE)[which];\r
-                    mStorageManager = new FileDataStorageManager(mAccount, getContentResolver());\r
-                    populateDirectoryList();\r
-                }\r
-            });\r
-            builder.setCancelable(true);\r
-            builder.setOnCancelListener(new OnCancelListener() {\r
-                public void onCancel(DialogInterface dialog) {\r
-                    dialog.cancel();\r
-                    finish();\r
-                }\r
-            });\r
-            return builder.create();\r
-        default:\r
-            throw new IllegalArgumentException("Unknown dialog id: " + id);\r
-        }\r
-    }\r
-\r
-    class a implements OnClickListener {\r
-        String mPath;\r
-        EditText mDirname;\r
-\r
-        public a(String path, EditText dirname) {\r
-            mPath = path; \r
-            mDirname = dirname;\r
-        }\r
-\r
-        public void onClick(DialogInterface dialog, int which) {\r
-            Uploader.this.mUploadPath = mPath + mDirname.getText().toString();\r
-            Uploader.this.mCreateDir = true;\r
-            uploadFiles();\r
-        }\r
-    }\r
-\r
-    @Override\r
-    public void onBackPressed() {\r
-\r
-        if (mParents.size() <= 1) {\r
-            super.onBackPressed();\r
-            return;\r
-        } else {\r
-            mParents.pop();\r
-            populateDirectoryList();\r
-        }\r
-    }\r
-\r
-    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {\r
-        // click on folder in the list\r
-        Log.d(TAG, "on item click");\r
-        Vector<OCFile> tmpfiles = mStorageManager.getDirectoryContent(mFile);\r
-        if (tmpfiles == null) return;\r
-        // filter on dirtype\r
-        Vector<OCFile> files = new Vector<OCFile>();\r
-        for (OCFile f : tmpfiles)\r
-            if (f.isDirectory())\r
-                files.add(f);\r
-        if (files.size() < position) {\r
-            throw new IndexOutOfBoundsException("Incorrect item selected");\r
-        }\r
-        mParents.push(files.get(position).getFileName());\r
-        populateDirectoryList();\r
-    }\r
-\r
-    public void onClick(View v) {\r
-        // click on button\r
-        switch (v.getId()) {\r
-        case R.id.uploader_choose_folder:\r
-            mUploadPath = "";   // first element in mParents is root dir, represented by ""; init mUploadPath with "/" results in a "//" prefix\r
-            for (String p : mParents)\r
-                mUploadPath += p + OCFile.PATH_SEPARATOR;\r
-            Log.d(TAG, "Uploading file to dir " + mUploadPath);\r
-\r
-            uploadFiles();\r
-\r
-            break;\r
-        case android.R.id.button1: // dynamic action for create aditional dir\r
-            showDialog(DIALOG_GET_DIRNAME);\r
-            break;\r
-        default:\r
-            throw new IllegalArgumentException("Wrong element clicked");\r
-        }\r
-    }\r
-\r
-    @Override\r
-    protected void onActivityResult(int requestCode, int resultCode, Intent data) {\r
-        super.onActivityResult(requestCode, resultCode, data);\r
-        Log.i(TAG, "result received. req: " + requestCode + " res: " + resultCode);\r
-        if (requestCode == REQUEST_CODE_SETUP_ACCOUNT) {\r
-            dismissDialog(DIALOG_NO_ACCOUNT);\r
-            if (resultCode == RESULT_CANCELED) {\r
-                finish();\r
-            }\r
-            Account[] accounts = mAccountManager.getAccountsByType(AccountAuthenticator.AUTH_TOKEN_TYPE);\r
-            if (accounts.length == 0) {\r
-                showDialog(DIALOG_NO_ACCOUNT);\r
-            } else {\r
-                // there is no need for checking for is there more then one\r
-                // account at this point\r
-                // since account setup can set only one account at time\r
-                mAccount = accounts[0];\r
-                populateDirectoryList();\r
-            }\r
-        }\r
-    }\r
-\r
-    private void populateDirectoryList() {\r
-        setContentView(R.layout.uploader_layout);\r
-\r
-        String full_path = "";\r
-        for (String a : mParents)\r
-            full_path += a + "/";\r
-        \r
-        Log.d(TAG, "Populating view with content of : " + full_path);\r
-        \r
-        mFile = mStorageManager.getFileByPath(full_path);\r
-        if (mFile != null) {\r
-            Vector<OCFile> files = mStorageManager.getDirectoryContent(mFile);\r
-            if (files != null) {\r
-                List<HashMap<String, Object>> data = new LinkedList<HashMap<String,Object>>();\r
-                for (OCFile f : files) {\r
-                    HashMap<String, Object> h = new HashMap<String, Object>();\r
-                    if (f.isDirectory()) {\r
-                        h.put("dirname", f.getFileName());\r
-                        data.add(h);\r
-                    }\r
-                }\r
-                SimpleAdapter sa = new SimpleAdapter(this,\r
-                                                     data,\r
-                                                     R.layout.uploader_list_item_layout,\r
-                                                     new String[] {"dirname"},\r
-                                                     new int[] {R.id.textView1});\r
-                setListAdapter(sa);\r
-                Button btn = (Button) findViewById(R.id.uploader_choose_folder);\r
-                btn.setOnClickListener(this);\r
-                getListView().setOnItemClickListener(this);\r
-            }\r
-        }\r
-        /*\r
-        mCursor = managedQuery(ProviderMeta.ProviderTableMeta.CONTENT_URI, null, ProviderTableMeta.FILE_NAME\r
-                + "=? AND " + ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?", new String[] { "/", mAccount.name }, null);\r
-\r
-        if (mCursor.moveToFirst()) {\r
-            mCursor = managedQuery(\r
-                    ProviderMeta.ProviderTableMeta.CONTENT_URI,\r
-                    null,\r
-                    ProviderTableMeta.FILE_CONTENT_TYPE + "=? AND " + ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND "\r
-                            + ProviderTableMeta.FILE_PARENT + "=?",\r
-                    new String[] { "DIR", mAccount.name,\r
-                            mCursor.getString(mCursor.getColumnIndex(ProviderTableMeta._ID)) }, null);\r
-\r
-            ListView lv = getListView();\r
-            lv.setOnItemClickListener(this);\r
-            SimpleCursorAdapter sca = new SimpleCursorAdapter(this, R.layout.uploader_list_item_layout, mCursor,\r
-                    new String[] { ProviderTableMeta.FILE_NAME }, new int[] { R.id.textView1 });\r
-            setListAdapter(sca);\r
-            Button btn = (Button) findViewById(R.id.uploader_choose_folder);\r
-            btn.setOnClickListener(this);\r
-            /*\r
-             * disable this until new server interaction service wont be created\r
-             * // insert create new directory for multiple items uploading if\r
-             * (getIntent().getAction().equals(Intent.ACTION_SEND_MULTIPLE)) {\r
-             * Button createDirBtn = new Button(this);\r
-             * createDirBtn.setId(android.R.id.button1);\r
-             * createDirBtn.setText(R.string.uploader_btn_create_dir_text);\r
-             * createDirBtn.setOnClickListener(this); ((LinearLayout)\r
-             * findViewById(R.id.linearLayout1)).addView( createDirBtn,\r
-             * LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); }\r
-             *\r
-        }*/\r
-    }\r
-\r
-    private void prepareStreamsToUpload() {\r
-        if (getIntent().getAction().equals(Intent.ACTION_SEND)) {\r
-            mStreamsToUpload = new ArrayList<Parcelable>();\r
-            mStreamsToUpload.add(getIntent().getParcelableExtra(Intent.EXTRA_STREAM));\r
-        } else if (getIntent().getAction().equals(Intent.ACTION_SEND_MULTIPLE)) {\r
-            mStreamsToUpload = getIntent().getParcelableArrayListExtra(Intent.EXTRA_STREAM);\r
-        } else {\r
-            // unknow action inserted\r
-            throw new IllegalArgumentException("Unknown action given: " + getIntent().getAction());\r
-        }\r
-    }\r
-\r
-    public void uploadFiles() {\r
-        WebdavClient wdc = new WebdavClient(mAccount, getApplicationContext());\r
-        wdc.allowSelfsignedCertificates();\r
-\r
-        // create last directory in path if nessesary\r
-        if (mCreateDir) {\r
-            wdc.createDirectory(mUploadPath);\r
-        }\r
-\r
-        String[] local = new String[mStreamsToUpload.size()], remote = new String[mStreamsToUpload.size()];\r
-\r
-        for (int i = 0; i < mStreamsToUpload.size(); ++i) {\r
-            Uri uri = (Uri) mStreamsToUpload.get(i);\r
-            if (uri.getScheme().equals("content")) {\r
-                Cursor c = getContentResolver().query((Uri) mStreamsToUpload.get(i),\r
-                                                      CONTENT_PROJECTION,\r
-                                                      null,\r
-                                                      null,\r
-                                                      null);\r
-\r
-                if (!c.moveToFirst())\r
-                    continue;\r
-\r
-                final String display_name = c.getString(c.getColumnIndex(Media.DISPLAY_NAME)),\r
-                             data = c.getString(c.getColumnIndex(Media.DATA));\r
-                local[i] = data;\r
-                remote[i] = mUploadPath + display_name;\r
-            } else if (uri.getScheme().equals("file")) {\r
-                final File file = new File(Uri.decode(uri.toString()).replace(uri.getScheme() + "://", ""));\r
-                local[i] = file.getAbsolutePath();\r
-                remote[i] = mUploadPath + file.getName();\r
-            }\r
-\r
-        }\r
-        Intent intent = new Intent(getApplicationContext(), FileUploader.class);\r
-        intent.putExtra(FileUploader.KEY_UPLOAD_TYPE, FileUploader.UPLOAD_MULTIPLE_FILES);\r
-        intent.putExtra(FileUploader.KEY_LOCAL_FILE, local);\r
-        intent.putExtra(FileUploader.KEY_REMOTE_FILE, remote);\r
-        intent.putExtra(FileUploader.KEY_ACCOUNT, mAccount);\r
-        startService(intent);\r
-        finish();\r
-    }\r
-\r
-}\r