Merge "android/media_sharing: Add box to enter the v-name to connect to"
diff --git a/android/app/src/main/java/io/v/x/media_sharing/MediaSharingActivity.java b/android/app/src/main/java/io/v/x/media_sharing/MediaSharingActivity.java
index e869fe0..4d7a970 100644
--- a/android/app/src/main/java/io/v/x/media_sharing/MediaSharingActivity.java
+++ b/android/app/src/main/java/io/v/x/media_sharing/MediaSharingActivity.java
@@ -4,29 +4,50 @@
 
 package io.v.x.media_sharing;
 
+import android.content.Context;
 import android.content.Intent;
+import android.content.SharedPreferences;
 import android.net.Uri;
 import android.support.v7.app.ActionBarActivity;
 import android.os.Bundle;
 import android.view.Menu;
 import android.view.MenuItem;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
 
 import io.v.v23.V;
 import io.v.v23.context.VContext;
 
 
 public class MediaSharingActivity extends ActionBarActivity {
-    // Target name must be entered manually. Go to namespace browser for the name you want to
-    // connect to and copy the proxied name here.
-    private static final String targetName = "";
-
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_media_sharing);
 
-        VContext vContext = V.init();
+        final VContext vContext = V.init();
 
+        final EditText namebox = (EditText)findViewById(R.id.share_name);
+        final SharedPreferences pref = this.getPreferences(Context.MODE_PRIVATE);
+        String lastName = pref.getString(getString(R.string.preference_last_name), "");
+        namebox.setText(lastName);
+
+        final Button button = (Button)findViewById(R.id.share_button);
+        button.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                String name = namebox.getText().toString();
+                SharedPreferences.Editor editor = pref.edit();
+                editor.putString(getString(R.string.preference_last_name), name);
+                editor.commit();
+                onButtonClick(vContext, name);
+                MediaSharingActivity.this.finish();
+            }
+        });
+    }
+
+    protected void onButtonClick(final VContext vContext, final String targetName) {
         String action = getIntent().getAction();
         String type = getIntent().getType();
         if (Intent.ACTION_SEND.equals(action) && type != null) {
@@ -34,10 +55,10 @@
                 Uri uri = (Uri)getIntent().getExtras().get(Intent.EXTRA_STREAM);
                 String mimeType = getIntent().getType();
 
-                new SendMediaTask(this, vContext, targetName, uri, mimeType).execute();
+                new SendMediaTask(MediaSharingActivity.this, vContext, targetName, uri, mimeType).execute();
             } else if ("text/plain".equals(type)) {
                 String url = (String)getIntent().getExtras().get(Intent.EXTRA_TEXT);
-                new SendUrlTask(vContext, targetName, url).execute();
+                new SendUrlTask(this, vContext, targetName, url).execute();
             }
         }
     }
diff --git a/android/app/src/main/java/io/v/x/media_sharing/SendMediaTask.java b/android/app/src/main/java/io/v/x/media_sharing/SendMediaTask.java
index 464a332..cd0b84f 100644
--- a/android/app/src/main/java/io/v/x/media_sharing/SendMediaTask.java
+++ b/android/app/src/main/java/io/v/x/media_sharing/SendMediaTask.java
@@ -7,6 +7,8 @@
 import android.app.Activity;
 import android.net.Uri;
 import android.os.AsyncTask;
+import android.util.Log;
+import android.widget.Toast;
 
 import org.apache.commons.io.IOUtils;
 
@@ -23,6 +25,8 @@
  * Background task to stream media without blocking the UI thread.
  */
 public class SendMediaTask extends AsyncTask<Void, Void, Void> {
+    private static final String TAG = "SendMediaTask";
+
     Activity activity;
     VContext vContext;
     String targetName;
@@ -55,10 +59,26 @@
             ClientByteOutputStream os = new ClientByteOutputStream(stream);
             IOUtils.copy(is, os);
             stream.finish();
+
+            Log.i(TAG, activity.getString(R.string.share_messsage_success));
+            activity.runOnUiThread(new Runnable() {
+                @Override
+                public void run() {
+                    Toast.makeText(activity, R.string.share_messsage_success, Toast.LENGTH_LONG).show();
+                }
+            });
             return null;
-        } catch (IOException e) {
-            throw new RuntimeException(e);
-        } catch (VException e) {
+        } catch (IOException|VException e) {
+            final String errorMessage = activity.getString(R.string.share_messsage_error) + ": " + e.toString();
+            Log.e(TAG, errorMessage);
+
+            activity.runOnUiThread(new Runnable() {
+                @Override
+                public void run() {
+                    Toast.makeText(activity, errorMessage, Toast.LENGTH_LONG).show();
+                }
+            });
+
             throw new RuntimeException(e);
         }
     }
diff --git a/android/app/src/main/java/io/v/x/media_sharing/SendUrlTask.java b/android/app/src/main/java/io/v/x/media_sharing/SendUrlTask.java
index 8dc4723..705d18c 100644
--- a/android/app/src/main/java/io/v/x/media_sharing/SendUrlTask.java
+++ b/android/app/src/main/java/io/v/x/media_sharing/SendUrlTask.java
@@ -4,7 +4,10 @@
 
 package io.v.x.media_sharing;
 
+import android.app.Activity;
 import android.os.AsyncTask;
+import android.util.Log;
+import android.widget.Toast;
 
 import io.v.v23.OptionDefs;
 import io.v.v23.Options;
@@ -15,11 +18,15 @@
  * Background task to send a URL without blocking the UI thread.
  */
 public class SendUrlTask extends AsyncTask<Void, Void, Void> {
+    private final static String TAG = "SendMediaTask";
+
+    Activity activity;
     VContext vContext;
     String targetName;
     String url;
 
-    public SendUrlTask(VContext vContext, String targetName, String url) {
+    public SendUrlTask(Activity activity, VContext vContext, String targetName, String url) {
+        this.activity = activity;
         this.vContext = vContext;
         this.targetName = targetName;
         this.url = url;
@@ -36,8 +43,24 @@
             opts.set(OptionDefs.SKIP_SERVER_ENDPOINT_AUTHORIZATION, true);
 
             client.displayUrl(vContext, url, opts);
+
+            Log.i(TAG, activity.getString(R.string.share_messsage_success));
+            activity.runOnUiThread(new Runnable() {
+                @Override
+                public void run() {
+                    Toast.makeText(activity, R.string.share_messsage_success, Toast.LENGTH_LONG).show();
+                }
+            });
             return null;
         } catch (VException e) {
+            final String errorMessage = activity.getString(R.string.share_messsage_error) + ": " + e.toString();
+            Log.e(TAG, errorMessage);
+            activity.runOnUiThread(new Runnable() {
+                @Override
+                public void run() {
+                    Toast.makeText(activity, errorMessage, Toast.LENGTH_LONG).show();
+                }
+            });
             throw new RuntimeException(e);
         }
     }
diff --git a/android/app/src/main/res/layout/fragment_media_sharing.xml b/android/app/src/main/res/layout/fragment_media_sharing.xml
index 8bd2c36..10396fe 100644
--- a/android/app/src/main/res/layout/fragment_media_sharing.xml
+++ b/android/app/src/main/res/layout/fragment_media_sharing.xml
@@ -1,12 +1,31 @@
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
     android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
     android:paddingRight="@dimen/activity_horizontal_margin"
     android:paddingTop="@dimen/activity_vertical_margin"
     android:paddingBottom="@dimen/activity_vertical_margin"
+    android:orientation="vertical"
     tools:context="io.v.x.media_sharing.MediaSharingActivityFragment">
 
-    <TextView android:text="@string/media_sharing_message" android:layout_width="wrap_content"
-        android:layout_height="wrap_content" />
+    <TextView android:text="@string/media_sharing_message"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:id="@+id/share_message" />
 
-</RelativeLayout>
+
+    <EditText
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:id="@+id/share_name"
+        android:layout_weight="1.23"
+        android:layout_gravity="center_vertical" />
+
+
+    <Button
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/button_text"
+        android:id="@+id/share_button"
+        android:layout_gravity="bottom" />
+
+</LinearLayout>
diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml
index 6f4eb76..647d7c9 100644
--- a/android/app/src/main/res/values/strings.xml
+++ b/android/app/src/main/res/values/strings.xml
@@ -2,5 +2,9 @@
     <string name="app_name">MediaSharing</string>
     <string name="title_activity_media_sharing">Media Sharing</string>
     <string name="action_settings">Settings</string>
-    <string name="media_sharing_message">Sharing Media...</string>
+    <string name="media_sharing_message">Vanadium Name to Share To:</string>
+    <string name="button_text">Share</string>
+    <string name="preference_last_name"></string>
+    <string name="share_messsage_success">Share succeeded</string>
+    <string name="share_messsage_error">Error sharing</string>
 </resources>