Merge "Explictly release the surface in TV input framework"
diff --git a/core/java/android/tv/TvInputService.java b/core/java/android/tv/TvInputService.java
index 636e3b4..70e7f95 100644
--- a/core/java/android/tv/TvInputService.java
+++ b/core/java/android/tv/TvInputService.java
@@ -150,6 +150,7 @@
         private final KeyEvent.DispatcherState mDispatcherState = new KeyEvent.DispatcherState();
         private final WindowManager mWindowManager;
         private WindowManager.LayoutParams mWindowParams;
+        private Surface mSurface;
         private View mOverlayView;
         private boolean mOverlayViewEnabled;
         private IBinder mWindowToken;
@@ -346,6 +347,10 @@
          */
         void release() {
             onRelease();
+            if (mSurface != null) {
+                mSurface.release();
+                mSurface = null;
+            }
             removeOverlayView(true);
         }
 
@@ -354,6 +359,10 @@
          */
         void setSurface(Surface surface) {
             onSetSurface(surface);
+            if (mSurface != null) {
+                mSurface.release();
+            }
+            mSurface = surface;
             // TODO: Handle failure.
         }
 
diff --git a/services/core/java/com/android/server/tv/TvInputManagerService.java b/services/core/java/com/android/server/tv/TvInputManagerService.java
index 649f9dc..50dd27d 100644
--- a/services/core/java/com/android/server/tv/TvInputManagerService.java
+++ b/services/core/java/com/android/server/tv/TvInputManagerService.java
@@ -554,6 +554,10 @@
                     }
                 }
             } finally {
+                if (surface != null) {
+                    // surface is not used in TvInputManagerService.
+                    surface.release();
+                }
                 Binder.restoreCallingIdentity(identity);
             }
         }