release-request-31f776a2-f093-4abe-9235-1702f8bafc9d-for-git_oc-dr1-release-4054002 snap-temp-L42500000069020014

Change-Id: I21de980012ec31d146e6f7372db071fc81cbf1ea
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 996b183..361e97a 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -29,10 +29,13 @@
     <application android:label="@string/hvac_label"
         android:icon="@drawable/ic_launcher_hvac"
         android:persistent="true">
-        <service android:name=".HvacController" android:exported="false" />
+        <service android:name=".HvacController"
+            android:singleUser="true"
+            android:exported="false" />
 
         <service android:name=".HvacUiService"
-                 android:exported="false"/>
+            android:singleUser="true"
+            android:exported="false"/>
 
         <receiver android:name=".BootCompleteReceiver">
             <intent-filter>
diff --git a/src/com/android/car/hvac/HvacUiService.java b/src/com/android/car/hvac/HvacUiService.java
index 76eb19e..0478790 100644
--- a/src/com/android/car/hvac/HvacUiService.java
+++ b/src/com/android/car/hvac/HvacUiService.java
@@ -36,12 +36,17 @@
 import com.android.car.hvac.ui.SystemUiObserver;
 import com.android.car.hvac.ui.TemperatureBarOverlay;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * Creates a sliding panel for HVAC controls and adds it to the window manager above SystemUI.
  */
 public class HvacUiService extends Service {
     private static final String TAG = "HvacUiService";
 
+    private final List<View> mAddedViews = new ArrayList<>();
+
     private WindowManager mWindowManager;
 
     private View mPanel;
@@ -130,7 +135,7 @@
         mPanel = mContainer.findViewById(R.id.hvac_center_panel);
         mPanel.getLayoutParams().height = mPanelCollapsedHeight;
 
-        mWindowManager.addView(mContainer, params);
+        addViewToWindowManagerAndTrack(mContainer, params);
 
         createTemperatureBars(inflater);
         mHvacPanelController = new HvacPanelController(this /* context */, mContainer,
@@ -158,9 +163,13 @@
             adjustPosition(mPassengerTemperatureBar, visible);
             adjustPosition(mContainer, visible);
         });
-        mWindowManager.addView(observer, params);
+        addViewToWindowManagerAndTrack(observer, params);
     }
 
+    private void addViewToWindowManagerAndTrack(View view, WindowManager.LayoutParams params) {
+        mWindowManager.addView(view, params);
+        mAddedViews.add(view);
+    }
 
     private void adjustPosition(View v, boolean systemUiVisible) {
         WindowManager.LayoutParams lp = (WindowManager.LayoutParams) v.getLayoutParams();
@@ -175,7 +184,10 @@
 
     @Override
     public void onDestroy() {
-        mWindowManager.removeView(mPanel);
+        for (View view : mAddedViews) {
+            mWindowManager.removeView(view);
+        }
+        mAddedViews.clear();
         if(mHvacController != null){
             unbindService(mServiceConnection);
         }
@@ -235,7 +247,7 @@
 
         disableAnimations(params);
         button.setLayoutParams(params);
-        mWindowManager.addView(button, params);
+        addViewToWindowManagerAndTrack(button, params);
 
         return button;
     }
@@ -254,7 +266,7 @@
 
         ViewGroup overlay = new LinearLayout(this /* context */);
         overlay.setLayoutParams(params);
-        mWindowManager.addView(overlay, params);
+        addViewToWindowManagerAndTrack(overlay, params);
         return overlay;
     }