Simplify snippet generation.
Jason parks [Thu, 28 Oct 2010 21:15:06 +0000 (16:15 -0500)]
Made ParsedNdefMessage a concrete class and moved
the getSnippet() method to ParsedNdefRecord. There
was no need for another set of classes that knew
how to generate a snippet.

ParsedNdefMessage now contains the logic for which
record to pick for the snippet.

13 files changed:
src/com/android/apps/tag/message/EmptyMessage.java [deleted file]
src/com/android/apps/tag/message/NdefMessageParser.java
src/com/android/apps/tag/message/ParsedNdefMessage.java
src/com/android/apps/tag/message/SmartPosterMessage.java [deleted file]
src/com/android/apps/tag/message/TextMessage.java [deleted file]
src/com/android/apps/tag/message/UnknownMessage.java [deleted file]
src/com/android/apps/tag/message/UriMessage.java [deleted file]
src/com/android/apps/tag/record/MimeRecord.java
src/com/android/apps/tag/record/ParsedNdefRecord.java
src/com/android/apps/tag/record/SmartPoster.java
src/com/android/apps/tag/record/TextRecord.java
src/com/android/apps/tag/record/UriRecord.java
src/com/android/apps/tag/record/VCardRecord.java

diff --git a/src/com/android/apps/tag/message/EmptyMessage.java b/src/com/android/apps/tag/message/EmptyMessage.java
deleted file mode 100644 (file)
index 0bf3fe6..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.apps.tag.message;
-
-import com.android.apps.tag.R;
-import com.android.apps.tag.record.ParsedNdefRecord;
-
-import android.content.Context;
-
-import java.util.ArrayList;
-import java.util.Locale;
-
-/**
- * A parsed message containing no elements.
- */
-class EmptyMessage extends ParsedNdefMessage {
-
-    /* package private */ EmptyMessage() {
-        super(new ArrayList<ParsedNdefRecord>());
-    }
-
-    @Override
-    public String getSnippet(Context context, Locale locale) {
-        return context.getString(R.string.tag_empty);
-    }
-
-    @Override
-    public boolean isStarred() {
-        return false;
-    }
-}
index e80d0e5..7812fb8 100644 (file)
@@ -40,27 +40,7 @@ public class NdefMessageParser {
 
     /** Parse an NdefMessage */
     public static ParsedNdefMessage parse(NdefMessage message) {
-        List<ParsedNdefRecord> elements = getRecords(message);
-
-        if (elements.isEmpty()) {
-            return new EmptyMessage();
-        }
-
-        ParsedNdefRecord first = elements.get(0);
-
-        if (elements.size() == 1) {
-            if (first instanceof SmartPoster) {
-                return new SmartPosterMessage((SmartPoster) first, elements);
-            }
-            if (first instanceof TextRecord) {
-                return new TextMessage((TextRecord) first, elements);
-            }
-            if (first instanceof UriRecord) {
-                return new UriMessage((UriRecord) first, elements);
-            }
-        }
-
-        return new UnknownMessage(elements);
+        return new ParsedNdefMessage(getRecords(message));
     }
 
     public static List<ParsedNdefRecord> getRecords(NdefMessage message) {
index b9f5210..23fa2e2 100644 (file)
 
 package com.android.apps.tag.message;
 
+import com.android.apps.tag.R;
 import com.android.apps.tag.record.ParsedNdefRecord;
+import com.android.apps.tag.record.SmartPoster;
+import com.android.apps.tag.record.UriRecord;
 import com.google.common.collect.ImmutableList;
 
 import android.content.Context;
@@ -27,7 +30,7 @@ import java.util.Locale;
 /**
  * A parsed version of an {@link android.nfc.NdefMessage}
  */
-public abstract class ParsedNdefMessage {
+public class ParsedNdefMessage {
 
     private List<ParsedNdefRecord> mRecords;
 
@@ -46,9 +49,34 @@ public abstract class ParsedNdefMessage {
      * Returns the snippet information associated with the NdefMessage
      * most appropriate for the given {@code locale}.
      */
-    public abstract String getSnippet(Context context, Locale locale);
+    public String getSnippet(Context context, Locale locale) {
+        if (mRecords.isEmpty()) {
+            return context.getString(R.string.tag_empty);
+        }
 
-    // TODO: Determine if this is the best place for holding whether
-    // the user has starred this parsed message.
-    public abstract boolean isStarred();
+        ParsedNdefRecord record = mRecords.get(0);
+
+        if (record instanceof UriRecord) {
+            // Be a good citizen of the Smart Poster spec.
+
+            int smartPosterRecord = -1;
+
+            final int size = mRecords.size();
+            for (int i = 1 ; i < size ; i++) {
+
+                ParsedNdefRecord r = mRecords.get(i);
+
+                if (r instanceof SmartPoster) {
+                    smartPosterRecord = i;
+                    break;
+                }
+            }
+
+            if (smartPosterRecord != -1) {
+                record = mRecords.get(smartPosterRecord);
+            }
+        }
+
+        return record.getSnippet(context, locale);
+    }
 }
diff --git a/src/com/android/apps/tag/message/SmartPosterMessage.java b/src/com/android/apps/tag/message/SmartPosterMessage.java
deleted file mode 100644 (file)
index b5cc743..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.apps.tag.message;
-
-import com.android.apps.tag.record.ParsedNdefRecord;
-import com.android.apps.tag.record.SmartPoster;
-import com.android.apps.tag.record.TextRecord;
-import com.google.common.base.Preconditions;
-
-import android.content.Context;
-
-import java.util.List;
-import java.util.Locale;
-
-/**
- * A message consisting of one {@link SmartPoster} object.
- */
-class SmartPosterMessage extends ParsedNdefMessage {
-    private final SmartPoster mPoster;
-
-    SmartPosterMessage(SmartPoster poster, List<ParsedNdefRecord> records) {
-        super(Preconditions.checkNotNull(records));
-        mPoster = Preconditions.checkNotNull(poster);
-    }
-
-    @Override
-    public String getSnippet(Context context, Locale locale) {
-        TextRecord title = mPoster.getTitle();
-        if (title == null) {
-            return mPoster.getUriRecord().getPrettyUriString(context);
-        }
-        return title.getText();
-    }
-
-    @Override
-    public boolean isStarred() {
-        return false;
-    }
-}
diff --git a/src/com/android/apps/tag/message/TextMessage.java b/src/com/android/apps/tag/message/TextMessage.java
deleted file mode 100644 (file)
index 025b6d3..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.apps.tag.message;
-
-import com.android.apps.tag.record.ParsedNdefRecord;
-import com.android.apps.tag.record.TextRecord;
-import com.google.common.base.Preconditions;
-
-import android.content.Context;
-
-import java.util.List;
-import java.util.Locale;
-
-/**
- * A message containing one text element
- */
-class TextMessage extends ParsedNdefMessage {
-    private final TextRecord mRecord;
-
-    TextMessage(TextRecord record, List<ParsedNdefRecord> records) {
-        super(Preconditions.checkNotNull(records));
-        mRecord = Preconditions.checkNotNull(record);
-    }
-
-    @Override
-    public String getSnippet(Context context, Locale locale) {
-        return mRecord.getText();
-    }
-
-    @Override
-    public boolean isStarred() {
-        return false;
-    }
-}
diff --git a/src/com/android/apps/tag/message/UnknownMessage.java b/src/com/android/apps/tag/message/UnknownMessage.java
deleted file mode 100644 (file)
index fff586f..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.apps.tag.message;
-
-import com.android.apps.tag.R;
-import com.android.apps.tag.record.ParsedNdefRecord;
-import com.google.common.base.Preconditions;
-
-import android.content.Context;
-
-import java.util.List;
-import java.util.Locale;
-
-/**
- * The catchall parsed message format for when nothing else better applies.
- */
-class UnknownMessage extends ParsedNdefMessage {
-
-    UnknownMessage(List<ParsedNdefRecord> records) {
-        super(Preconditions.checkNotNull(records));
-    }
-
-    @Override
-    public String getSnippet(Context context, Locale locale) {
-        return context.getString(R.string.tag_unknown);
-    }
-
-    @Override
-    public boolean isStarred() {
-        return false;
-    }
-}
diff --git a/src/com/android/apps/tag/message/UriMessage.java b/src/com/android/apps/tag/message/UriMessage.java
deleted file mode 100644 (file)
index 012306b..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.apps.tag.message;
-
-import com.android.apps.tag.record.ParsedNdefRecord;
-import com.android.apps.tag.record.UriRecord;
-import com.google.common.base.Preconditions;
-
-import android.content.Context;
-
-import java.util.List;
-import java.util.Locale;
-
-/**
- * A {@link ParsedNdefMessage} consisting of one {@link UriRecord}.
- */
-class UriMessage extends ParsedNdefMessage {
-
-    private final UriRecord mRecord;
-
-    UriMessage(UriRecord record, List<ParsedNdefRecord> records) {
-        super(Preconditions.checkNotNull(records));
-        mRecord = Preconditions.checkNotNull(record);
-    }
-
-    @Override
-    public String getSnippet(Context context, Locale locale) {
-        // URIs cannot be localized
-        return mRecord.getPrettyUriString(context);
-    }
-
-    @Override
-    public boolean isStarred() {
-        return false;
-    }
-}
index 5f53b76..11ceb20 100644 (file)
@@ -21,6 +21,7 @@ import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
 
 import android.app.Activity;
+import android.content.Context;
 import android.nfc.NdefRecord;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -29,6 +30,7 @@ import android.widget.TextView;
 
 import java.nio.charset.Charset;
 import java.util.Arrays;
+import java.util.Locale;
 
 /**
  * A {@link ParsedNdefRecord} corresponding to a MIME object.
@@ -60,6 +62,11 @@ public class MimeRecord extends ParsedNdefRecord {
         return text;
     }
 
+    @Override
+    public String getSnippet(Context context, Locale locale) {
+        return mType;
+    }
+
     public static MimeRecord parse(NdefRecord record) {
         Preconditions.checkArgument(record.getTnf() == NdefRecord.TNF_MIME_MEDIA);
         String type = new String(record.getType(), Charset.forName("US-ASCII"));
index 75b0fd9..85cd4e3 100644 (file)
 
 package com.android.apps.tag.record;
 
+import com.android.apps.tag.R;
+
 import android.app.Activity;
+import android.content.Context;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 
+import java.util.Locale;
+
 /**
  * TODO: come up with a better name.
  */
@@ -39,4 +44,8 @@ public abstract class ParsedNdefRecord {
     public RecordEditInfo getEditInfo(Activity activity) {
         return null;
     }
+
+    public String getSnippet(Context context, Locale locale) {
+        return context.getString(R.string.tag_unknown);
+    }
 }
index d3bfb30..643873d 100644 (file)
@@ -24,6 +24,7 @@ import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Iterables;
 
 import android.app.Activity;
+import android.content.Context;
 import android.nfc.FormatException;
 import android.nfc.NdefMessage;
 import android.nfc.NdefRecord;
@@ -34,6 +35,7 @@ import android.view.ViewGroup.LayoutParams;
 import android.widget.LinearLayout;
 
 import java.util.Arrays;
+import java.util.Locale;
 import java.util.NoSuchElementException;
 
 import javax.annotation.Nullable;
@@ -173,6 +175,16 @@ public class SmartPoster extends ParsedNdefRecord {
         }
     }
 
+    @Override
+    public String getSnippet(Context context, Locale locale) {
+        if (mTitleRecord != null) {
+            return mTitleRecord.getText();
+        }
+
+        return mUriRecord.getPrettyUriString(context);
+    }
+
+
     /**
      * Returns the first element of {@code elements} which is an instance
      * of {@code type}, or {@code null} if no such element exists.
index dceb334..e1945ae 100644 (file)
@@ -22,6 +22,7 @@ import com.google.common.base.Preconditions;
 import com.google.common.primitives.Bytes;
 
 import android.app.Activity;
+import android.content.Context;
 import android.nfc.NdefRecord;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -54,6 +55,11 @@ public class TextRecord extends ParsedNdefRecord {
         return text;
     }
 
+    @Override
+    public String getSnippet(Context context, Locale locale) {
+        return mText;
+    }
+
     public String getText() {
         return mText;
     }
index 407879d..3f7e175 100644 (file)
@@ -17,6 +17,8 @@
 package com.android.apps.tag.record;
 
 import com.android.apps.tag.R;
+import com.android.apps.tag.record.RecordEditInfo.EditCallbacks;
+import com.android.apps.tag.record.UriRecord.UriRecordEditInfo;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.BiMap;
@@ -48,6 +50,7 @@ import android.widget.TextView;
 import java.nio.charset.Charset;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Locale;
 
 /**
  * A parsed record containing a Uri.
@@ -151,6 +154,11 @@ public class UriRecord extends ParsedNdefRecord implements OnClickListener {
     }
 
     @Override
+    public String getSnippet(Context context, Locale locale) {
+        return getPrettyUriString(context);
+    }
+
+    @Override
     public void onClick(View view) {
         RecordUtils.ClickInfo info = (RecordUtils.ClickInfo) view.getTag();
         try {
index 1d0b074..82f74d8 100644 (file)
@@ -49,6 +49,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.lang.ref.WeakReference;
 import java.util.List;
+import java.util.Locale;
 
 /**
  * VCard Ndef Record object
@@ -76,6 +77,11 @@ public class VCardRecord extends ParsedNdefRecord implements OnClickListener {
                 activity.getString(R.string.import_vcard));
     }
 
+    @Override
+    public String getSnippet(Context context, Locale locale) {
+        return "text/x-vCard";
+    }
+
     /**
      * Returns a view in a list of record types for adding new records to a message.
      */