Add support for sharing URL's via My Tag.
Ben Komalo [Wed, 27 Oct 2010 22:46:48 +0000 (15:46 -0700)]
Change-Id: I39af6516ec2287e1af0c9dc46ca946cbb65cec22

src/com/android/apps/tag/EditTagActivity.java
src/com/android/apps/tag/MyTagActivity.java
src/com/android/apps/tag/record/UriRecord.java

index cbef8f0..50c4df9 100644 (file)
@@ -60,7 +60,7 @@ public abstract class EditTagActivity extends Activity implements OnClickListene
     /**
      * Records contained in the current message being edited.
      */
-    private final ArrayList<RecordEditInfo> mRecords = Lists.newArrayList();
+    protected final ArrayList<RecordEditInfo> mRecords = Lists.newArrayList();
 
     /**
      * The container where the subviews for each record are housed.
@@ -143,7 +143,7 @@ public abstract class EditTagActivity extends Activity implements OnClickListene
         root.addView(editView);
     }
 
-    private void rebuildChildViews() {
+    protected void rebuildChildViews() {
         ViewGroup root = getContentRoot();
         root.removeAllViews();
         for (RecordEditInfo editInfo : mRecords) {
index cac538c..24ed01f 100644 (file)
@@ -20,6 +20,7 @@ import com.android.apps.tag.message.NdefMessageParser;
 import com.android.apps.tag.message.ParsedNdefMessage;
 import com.android.apps.tag.record.ParsedNdefRecord;
 import com.android.apps.tag.record.TextRecord;
+import com.android.apps.tag.record.UriRecord;
 import com.google.common.collect.Lists;
 
 import android.app.Activity;
@@ -33,6 +34,9 @@ import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.CheckBox;
 import android.widget.EditText;
+
+import java.net.MalformedURLException;
+import java.net.URL;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
@@ -73,12 +77,9 @@ public class MyTagActivity extends EditTagActivity implements OnClickListener {
                 // TODO: prompt user for confirmation about wiping their old tag.
             }
 
-            String title = getIntent().getStringExtra(Intent.EXTRA_SUBJECT);
-            String text = getIntent().getStringExtra(Intent.EXTRA_TEXT);
-
-            mEnabled.setChecked(true);
-            mTitleView.setText((title == null) ? "" : title);
-            mTextView.setText((text == null) ? "" : text);
+            if (buildFromIntent(getIntent())) {
+                return;
+            }
 
         } else if (localMessage == null) {
             mEnabled.setChecked(false);
@@ -102,6 +103,41 @@ public class MyTagActivity extends EditTagActivity implements OnClickListener {
     }
 
     /**
+     * Populates the editor from extras in a given {@link Intent}
+     * @param intent the {@link Intent} to parse.
+     * @return whether or not the {@link Intent} could be handled.
+     */
+    private boolean buildFromIntent(final Intent intent) {
+        String type = intent.getType();
+
+        if ("text/plain".equals(type)) {
+            String title = getIntent().getStringExtra(Intent.EXTRA_SUBJECT);
+            mTitleView.setText((title == null) ? "" : title);
+
+            String text = getIntent().getStringExtra(Intent.EXTRA_TEXT);
+
+            try {
+                URL parsed = new URL(text);
+
+                // Valid URL.
+                mTextView.setText("");
+                mRecords.add(new UriRecord.UriRecordEditInfo(text));
+                rebuildChildViews();
+
+            } catch (MalformedURLException ex) {
+                // Ignore. Just treat as plain text.
+                mTextView.setText((text == null) ? "" : text);
+            }
+
+            mEnabled.setChecked(true);
+            onSave();
+            return true;
+        }
+        // TODO: handle vcards and images.
+        return false;
+    }
+
+    /**
      * Persists content to store.
      */
     private void onSave() {
index 590c275..e11815b 100644 (file)
@@ -265,18 +265,21 @@ public class UriRecord extends ParsedNdefRecord implements OnClickListener {
                 NdefRecord.RTD_URI, EMPTY, payload);
     }
 
-    private static class UriRecordEditInfo extends RecordEditInfo implements TextWatcher {
+    public static class UriRecordEditInfo extends RecordEditInfo implements TextWatcher {
         private String mCurrentValue;
         private EditText mEditText;
 
-        public UriRecordEditInfo() {
+        public UriRecordEditInfo(String initialValue) {
             super(RECORD_TYPE);
-            mCurrentValue = "";
+            mCurrentValue = Preconditions.checkNotNull(initialValue);
+        }
+
+        public UriRecordEditInfo() {
+            this("");
         }
 
         protected UriRecordEditInfo(Parcel parcel) {
-            super(parcel);
-            mCurrentValue = parcel.readString();
+            this(parcel.readString());
         }
 
         @Override