more splitting of Surface/SurfaceControl. Surface.java is now implemented in terms of Surface and SurfaceControl.

The WindowManager side of Surface.java holds a SurfaceControl, while the client-side holds a Surface. When the client is in the system process, Surface.java holds both (which is a problem we'll try to fix later).
diff --git a/include/ui/Surface.h b/include/ui/Surface.h
index 87a11c2..d1ead1d 100644
--- a/include/ui/Surface.h
+++ b/include/ui/Surface.h
@@ -75,13 +75,19 @@
 };
 
 // ---------------------------------------------------------------------------
+class Surface;
 
 class SurfaceControl : public RefBase
 {
 public:
     static bool isValid(const sp<SurfaceControl>& surface) {
-        return (surface != 0) && surface->mToken>=0 && surface->mClient!=0;
+        return (surface != 0) && surface->isValid();
     }
+    bool isValid() {
+        return mToken>=0 && mClient!=0;
+    }
+    static bool isSameSurface(
+            const sp<SurfaceControl>& lhs, const sp<SurfaceControl>& rhs);
         
     SurfaceID   ID() const      { return mToken; }
     uint32_t    getFlags() const { return mFlags; }
@@ -90,10 +96,6 @@
     // release surface data from java
     void        clear();
     
-    static sp<SurfaceControl>  readFromParcel(Parcel* parcel);
-    static status_t writeToParcel(const sp<SurfaceControl>& surface, Parcel* parcel);
-    static bool isSameSurface(const sp<SurfaceControl>& lhs, const sp<SurfaceControl>& rhs);
-
     status_t    setLayer(int32_t layer);
     status_t    setPosition(int32_t x, int32_t y);
     status_t    setSize(uint32_t w, uint32_t h);
@@ -107,7 +109,17 @@
     status_t    setMatrix(float dsdx, float dtdx, float dsdy, float dtdy);
     status_t    setFreezeTint(uint32_t tint);
 
+    static status_t writeSurfaceToParcel(
+            const sp<SurfaceControl>& control, Parcel* parcel);
+
+    sp<Surface> getSurface() const;
+
 private:
+    // can't be copied
+    SurfaceControl& operator = (SurfaceControl& rhs);
+    SurfaceControl(const SurfaceControl& rhs);
+
+    
     friend class SurfaceComposerClient;
 
     // camera and camcorder need access to the ISurface binder interface for preview
@@ -115,22 +127,22 @@
     friend class MediaRecorder;
     // mediaplayer needs access to ISurface for display
     friend class MediaPlayer;
+    // for testing
     friend class Test;
     const sp<ISurface>& getISurface() const { return mSurface; }
     
-    // can't be copied
-    SurfaceControl& operator = (SurfaceControl& rhs);
-    SurfaceControl(const SurfaceControl& rhs);
 
     friend class Surface;
-    SurfaceControl(const sp<SurfaceComposerClient>& client,
+
+    SurfaceControl(
+            const sp<SurfaceComposerClient>& client,
             const sp<ISurface>& surface,
             const ISurfaceFlingerClient::surface_data_t& data,
             uint32_t w, uint32_t h, PixelFormat format, uint32_t flags,
             bool owner = true);
 
     ~SurfaceControl();
-    
+
     status_t validate(per_client_cblk_t const* cblk) const;
     void destroy();
     
@@ -142,6 +154,8 @@
     uint32_t                    mFlags;
     const bool                  mOwner;
     mutable Mutex               mLock;
+    
+    mutable sp<Surface>         mSurfaceData;
 };
     
 // ---------------------------------------------------------------------------
@@ -160,45 +174,40 @@
         uint32_t    reserved[2];
     };
 
-    static bool isValid(const sp<Surface>& surface) {
-        return (surface != 0) && surface->mToken>=0 && surface->mClient!=0;
-    }
-        
-    SurfaceID   ID() const      { return mToken; }
+    Surface(const Parcel& data);
 
-    // release surface data from java
-    void        clear();
+    static bool isValid(const sp<Surface>& surface) {
+        return (surface != 0) && surface->isValid();
+    }
+    bool isValid() {
+        return mToken>=0 && mClient!=0;
+    }
+    static bool isSameSurface(
+            const sp<Surface>& lhs, const sp<Surface>& rhs);
+    SurfaceID   ID() const      { return mToken; }
+    uint32_t    getFlags() const { return mFlags; }
+    uint32_t    getIdentity() const { return mIdentity; }
+
 
     status_t    lock(SurfaceInfo* info, bool blocking = true);
     status_t    lock(SurfaceInfo* info, Region* dirty, bool blocking = true);
     status_t    unlockAndPost();
-    
-    uint32_t    getFlags() const { return mFlags; }
 
     // setSwapRectangle() is mainly used by EGL
     void        setSwapRectangle(const Rect& r);
     const Rect& swapRectangle() const;
 
-    static sp<Surface>  readFromParcel(Parcel* parcel);
-    static status_t     writeToParcel(const sp<Surface>& surface, Parcel* parcel);
-    static bool         isSameSurface(const sp<Surface>& lhs, const sp<Surface>& rhs);
-
-    status_t    setLayer(int32_t layer);
-    status_t    setPosition(int32_t x, int32_t y);
-    status_t    setSize(uint32_t w, uint32_t h);
-    status_t    hide();
-    status_t    show(int32_t layer = -1);
-    status_t    freeze();
-    status_t    unfreeze();
-    status_t    setFlags(uint32_t flags, uint32_t mask);
-    status_t    setTransparentRegionHint(const Region& transparent);
-    status_t    setAlpha(float alpha=1.0f);
-    status_t    setMatrix(float dsdx, float dtdx, float dsdy, float dtdy);
-    status_t    setFreezeTint(uint32_t tint);
-
-    uint32_t    getIdentity() const { return mIdentity; }
 private:
+    // can't be copied
+    Surface& operator = (Surface& rhs);
+    Surface(const Surface& rhs);
+
+    Surface(const sp<SurfaceControl>& control);
+    void init();
+     ~Surface();
+  
     friend class SurfaceComposerClient;
+    friend class SurfaceControl;
 
     // camera and camcorder need access to the ISurface binder interface for preview
     friend class Camera;
@@ -210,22 +219,8 @@
 
     status_t getBufferLocked(int index);
     
-    // can't be copied
-    Surface& operator = (Surface& rhs);
-    Surface(const Surface& rhs);
-
-    Surface(const sp<SurfaceComposerClient>& client,
-            const sp<ISurface>& surface,
-            const ISurfaceFlingerClient::surface_data_t& data,
-            uint32_t w, uint32_t h, PixelFormat format, uint32_t flags,
-            bool owner = true);
-
-    Surface(Surface const* rhs);
-
-    ~Surface();
     
-    void destroy();
-
+    
     Region dirtyRegion() const;
     void setDirtyRegion(const Region& region) const;
 
@@ -262,8 +257,6 @@
     mutable Rect                mSwapRectangle;
     mutable uint8_t             mBackbufferIndex;
     mutable Mutex               mSurfaceLock;
-    
-    sp<SurfaceControl>          mSurfaceControl;
 };
 
 }; // namespace android