revert 8331 (broke android text)



git-svn-id: http://skia.googlecode.com/svn/trunk@8339 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/ports/SkFontHost_android.cpp b/src/ports/SkFontHost_android.cpp
index 1c1db12..5d3b583 100644
--- a/src/ports/SkFontHost_android.cpp
+++ b/src/ports/SkFontHost_android.cpp
@@ -313,6 +313,7 @@
 
     bool isSysFont() const { return fIsSysFont; }
 
+    virtual SkStream* openStream() = 0;
     virtual const char* getUniqueString() const = 0;
     virtual const char* getFilePath() const = 0;
 
@@ -337,22 +338,17 @@
         fStream->unref();
     }
 
-    virtual const char* getUniqueString() const SK_OVERRIDE { return NULL; }
-    virtual const char* getFilePath() const SK_OVERRIDE { return NULL; }
-
-protected:
-    virtual SkStream* openStream(int* ttcIndex) const SK_OVERRIDE {
-        // TODO: we should be given this when we were created
-        *ttcIndex = 0;
-
+    // overrides
+    virtual SkStream* openStream() {
         // we just ref our existing stream, since the caller will call unref()
         // when they are through
-        // TODO: replace with shallow-copy when we have that for streams
         fStream->ref();
         // must rewind each time, since the caller assumes a "new" stream
         fStream->rewind();
         return fStream;
     }
+    virtual const char* getUniqueString() const { return NULL; }
+    virtual const char* getFilePath() const { return NULL; }
 
 private:
     SkStream* fStream;
@@ -374,6 +370,10 @@
         fPath.set(path);
     }
 
+    virtual SkStream* openStream() SK_OVERRIDE {
+        return SkStream::NewFromFile(fPath.c_str());
+    }
+
     virtual const char* getUniqueString() const SK_OVERRIDE {
         const char* str = strrchr(fPath.c_str(), '/');
         if (str) {
@@ -386,14 +386,6 @@
         return fPath.c_str();
     }
 
-protected:
-    virtual SkStream* openStream(int* ttcIndex) const SK_OVERRIDE {
-        // TODO: we should be given this when we were created
-        *ttcIndex = 0;
-
-        return SkStream::NewFromFile(fPath.c_str());
-    }
-
 private:
     SkString fPath;
 
@@ -757,7 +749,7 @@
     const bool isCustomFont = !((FamilyTypeface*)face)->isSysFont();
     if (isCustomFont) {
         // store the entire font in the fontData
-        SkStream* fontStream = face->openStream(NULL);
+        SkStream* fontStream = ((FamilyTypeface*)face)->openStream();
         const uint32_t length = fontStream->getLength();
 
         stream->writePackedUInt(length);
@@ -842,7 +834,16 @@
 }
 
 SkStream* SkFontHost::OpenStream(uint32_t fontID) {
-    return NULL;
+    SkAutoMutexAcquire  ac(gFamilyHeadAndNameListMutex);
+
+    FamilyTypeface* tf = (FamilyTypeface*)find_from_uniqueID(fontID);
+    SkStream* stream = tf ? tf->openStream() : NULL;
+
+    if (stream && stream->getLength() == 0) {
+        stream->unref();
+        stream = NULL;
+    }
+    return stream;
 }
 
 SkTypeface* SkFontHost::NextLogicalTypeface(SkFontID currFontID, SkFontID origFontID) {