implementing upload workflow to dropbox
Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/commit/354b4f4f Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/tree/354b4f4f Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/diff/354b4f4f Branch: refs/heads/master Commit: 354b4f4f31259a508feb968e002da719ecc4300c Parents: 5b6c027 Author: larrytech7 <larrya...@gmail.com> Authored: Sun Jul 12 02:17:53 2015 +0100 Committer: larrytech7 <larrya...@gmail.com> Committed: Sun Jul 12 02:17:53 2015 +0100 ---------------------------------------------------------------------- .../workflowdetails/WorkflowdetailFragment.java | 104 +++++++++++++++++-- app/src/main/res/drawable/dropbox_icon.png | Bin 0 -> 1543 bytes app/src/main/res/drawable/google_drive_icon.png | Bin 0 -> 2014 bytes .../res/layout/fragment_workflow_detail.xml | 28 ++++- 4 files changed, 119 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/354b4f4f/app/src/main/java/org/apache/taverna/mobile/fragments/workflowdetails/WorkflowdetailFragment.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/fragments/workflowdetails/WorkflowdetailFragment.java b/app/src/main/java/org/apache/taverna/mobile/fragments/workflowdetails/WorkflowdetailFragment.java index c2c5277..786f572 100644 --- a/app/src/main/java/org/apache/taverna/mobile/fragments/workflowdetails/WorkflowdetailFragment.java +++ b/app/src/main/java/org/apache/taverna/mobile/fragments/workflowdetails/WorkflowdetailFragment.java @@ -35,6 +35,7 @@ import android.content.Intent; import android.content.Loader; import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.preference.PreferenceManager; @@ -55,6 +56,12 @@ import android.widget.TextView; import android.widget.Toast; import android.widget.ZoomControls; +import com.dropbox.client2.DropboxAPI; +import com.dropbox.client2.ProgressListener; +import com.dropbox.client2.android.AndroidAuthSession; +import com.dropbox.client2.exception.DropboxException; +import com.dropbox.client2.session.AppKeyPair; + import org.apache.taverna.mobile.R; import org.apache.taverna.mobile.activities.DashboardMainActivity; import org.apache.taverna.mobile.activities.RunResult; @@ -71,10 +78,13 @@ import org.json.JSONObject; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; +import java.net.MalformedURLException; import java.net.URL; import java.nio.charset.CharsetEncoder; @@ -101,6 +111,10 @@ public class WorkflowdetailFragment extends Fragment implements View.OnClickList static Animation zoomout; public boolean isZoomIn; public static String workflow_uri ; + final static private String BOX_APP_KEY = "doicbvkfyzligh2"; + final static private String BOX_APP_SECRET = "3uuuw36mm7jkflc"; + + private DropboxAPI<AndroidAuthSession> mDBApi; /** * Returns a new instance of this fragment for the given section @@ -121,8 +135,11 @@ public class WorkflowdetailFragment extends Fragment implements View.OnClickList } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { + public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { + + AppKeyPair appKeys = new AppKeyPair(BOX_APP_KEY, BOX_APP_SECRET); + AndroidAuthSession session = new AndroidAuthSession(appKeys); + mDBApi = new DropboxAPI<AndroidAuthSession>(session); long workflowid = getActivity().getIntent().getLongExtra("workflowid", 0); rootView = inflater.inflate(R.layout.fragment_workflow_detail, container, false); progressDialog = new ProgressDialog(getActivity()); @@ -131,14 +148,15 @@ public class WorkflowdetailFragment extends Fragment implements View.OnClickList WORKFLO_ID = workflowid; zoomin = AnimationUtils.loadAnimation(getActivity(), R.anim.zoomin); zoomout = AnimationUtils.loadAnimation(getActivity(), R.anim.zoomout); - zoomControls = (ZoomControls) rootView.findViewById(R.id.zoomControls); - zoomControls.setOnClickListener(this); + isZoomIn = false; Button createRun = (Button) rootView.findViewById(R.id.run_wk); createRun.setOnClickListener(this); Button download = (Button) rootView.findViewById(R.id.download_wk); download.setOnClickListener(this); + rootView.findViewById(R.id.saveToDropboxButton).setOnClickListener(this); + rootView.findViewById(R.id.saveToGoogleDriveButton).setOnClickListener(this); (rootView.findViewById(R.id.wkf_image)).setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { @@ -186,10 +204,11 @@ public class WorkflowdetailFragment extends Fragment implements View.OnClickList case R.id.mark_wk: //TODO mark a workflow as important and launch task to store the entry into the local database break; - case R.id.zoomControls: - zoomin.reset(); - zoomin.startNow(); - Toast.makeText(getActivity(), "Zooming", Toast.LENGTH_SHORT).show(); + case R.id.saveToDropboxButton: + mDBApi.getSession().startOAuth2Authentication(getActivity()); + + break; + case R.id.saveToGoogleDriveButton: break; } } @@ -207,6 +226,17 @@ public class WorkflowdetailFragment extends Fragment implements View.OnClickList workflow_uri = getActivity().getIntent().getStringExtra("uri"); getActivity().getLoaderManager().initLoader(1, null, this).forceLoad(); + + if (mDBApi.getSession().authenticationSuccessful()) { + try { + // Required to complete auth, sets the access token on the session + mDBApi.getSession().finishAuthentication(); + String accessToken = mDBApi.getSession().getOAuth2AccessToken(); + new WorkflowDriveUpload().execute(download_url); + } catch (IllegalStateException e) { + Log.i("DbAuthLog", "Error authenticating", e); + } + } } @Override @@ -591,4 +621,62 @@ public class WorkflowdetailFragment extends Fragment implements View.OnClickList } } + /** + * Upload workflow from myexperiment to DropBox + */ + private class WorkflowDriveUpload extends AsyncTask<String, Void, String>{ + @Override + protected void onPreExecute() { + Toast.makeText(getActivity(), "Saving workflow to dropBox", Toast.LENGTH_LONG).show(); + } + + @Override + protected String doInBackground(String... files) { + // File file = new File(files[0]); + HttpURLConnection mconn ; + // FileInputStream inputStream = null; + DropboxAPI.Entry response = null; + DropboxAPI.Entry metaDataEntry = null; + try { + mconn = (HttpURLConnection) new URL(files[0]).openConnection(); + mconn.setRequestMethod("GET"); + mconn.connect(); + + // inputStream = new FileInputStream(file); + + response = mDBApi.putFile("/"+ Uri.parse(files[0]).getLastPathSegment(), mconn.getInputStream(), + mconn.getContentLength(), null, new ProgressListener() { + @Override + public void onProgress(long l, long l2) { + if (l==l2){ + Toast.makeText(getActivity(), "Upload complete", Toast.LENGTH_LONG).show(); + } + } + }); + + Log.i("DbExampleLog", "The uploaded file's rev is: " + response.rev); + metaDataEntry = mDBApi.metadata("/"+Uri.parse(files[0]).getLastPathSegment(), 1, null, false, null); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (DropboxException e) { + e.printStackTrace(); + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + + return response.rev; + } + + @Override + protected void onPostExecute(String s) { + if(null != s) + Toast.makeText(getActivity(), "File Saved to dropbox: "+s, Toast.LENGTH_LONG).show(); + else{ + Toast.makeText(getActivity(), "Failed to save to dropbox "+s, Toast.LENGTH_LONG).show(); + } + } + } + } http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/354b4f4f/app/src/main/res/drawable/dropbox_icon.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/dropbox_icon.png b/app/src/main/res/drawable/dropbox_icon.png new file mode 100644 index 0000000..77c5fc8 Binary files /dev/null and b/app/src/main/res/drawable/dropbox_icon.png differ http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/354b4f4f/app/src/main/res/drawable/google_drive_icon.png ---------------------------------------------------------------------- diff --git a/app/src/main/res/drawable/google_drive_icon.png b/app/src/main/res/drawable/google_drive_icon.png new file mode 100644 index 0000000..cdd8b0b Binary files /dev/null and b/app/src/main/res/drawable/google_drive_icon.png differ http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/354b4f4f/app/src/main/res/layout/fragment_workflow_detail.xml ---------------------------------------------------------------------- diff --git a/app/src/main/res/layout/fragment_workflow_detail.xml b/app/src/main/res/layout/fragment_workflow_detail.xml index 9bab19c..94d3e94 100644 --- a/app/src/main/res/layout/fragment_workflow_detail.xml +++ b/app/src/main/res/layout/fragment_workflow_detail.xml @@ -93,12 +93,30 @@ limitations under the License. android:backgroundTint="@color/accent_material_light" android:backgroundTintMode="src_atop" /> - <ZoomControls - android:layout_width="wrap_content" + <LinearLayout + android:orientation="horizontal" + android:layout_width="match_parent" android:layout_height="wrap_content" - android:id="@+id/zoomControls" - android:layout_gravity="center_horizontal" - android:orientation="horizontal" /> + android:layout_gravity="center" + android:gravity="right"> + + <ImageButton + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:id="@+id/saveToDropboxButton" + android:src="@drawable/dropbox_icon" + android:layout_gravity="left" + android:layout_marginRight="20dp" + android:background="@color/button_material_light" /> + + <ImageButton + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:id="@+id/saveToGoogleDriveButton" + android:src="@drawable/google_drive_icon" + android:layout_gravity="right" + android:background="@color/button_material_light" /> + </LinearLayout> </LinearLayout> </ScrollView>