Snap for 5691653 from dbf9ada7d8c0241e1eac6b5a1541b7e7ee82cc07 to qt-c2f2-release

Change-Id: Ia8c89d6c015631d4b3b4e00fd312eebcb38f944d
diff --git a/src/com/android/wallpaper/livepicker/LiveWallpaperPreview.java b/src/com/android/wallpaper/livepicker/LiveWallpaperPreview.java
index 65e0e6c..fbae006 100644
--- a/src/com/android/wallpaper/livepicker/LiveWallpaperPreview.java
+++ b/src/com/android/wallpaper/livepicker/LiveWallpaperPreview.java
@@ -154,6 +154,13 @@
 
         mWallpaperManager = WallpaperManager.getInstance(this);
         mWallpaperConnection = new WallpaperConnection(mWallpaperIntent);
+        getWindow().getDecorView().post(new Runnable() {
+            public void run() {
+                if (!mWallpaperConnection.connect()) {
+                    mWallpaperConnection = null;
+                }
+            }
+        });
 
         if (!TextUtils.isEmpty(deleteAction)) {
             mDeleteIntent = new Intent(deleteAction);
@@ -517,48 +524,17 @@
     @Override
     public void onResume() {
         super.onResume();
-        if (mWallpaperConnection != null && mWallpaperConnection.mEngine != null) {
-            try {
-                mWallpaperConnection.mEngine.setVisibility(true);
-            } catch (RemoteException e) {
-                // Ignore
-            }
+        if (mWallpaperConnection != null) {
+            mWallpaperConnection.setVisibility(true);
         }
     }
 
     @Override
     public void onPause() {
         super.onPause();
-        if (mWallpaperConnection != null && mWallpaperConnection.mEngine != null) {
-            try {
-                mWallpaperConnection.mEngine.setVisibility(false);
-            } catch (RemoteException e) {
-                // Ignore
-            }
-        }
-    }
-
-    @Override
-    public void onAttachedToWindow() {
-        super.onAttachedToWindow();
-
-        getWindow().getDecorView().post(new Runnable() {
-            public void run() {
-                if (!mWallpaperConnection.connect()) {
-                    mWallpaperConnection = null;
-                }
-            }
-        });
-    }
-
-    @Override
-    public void onDetachedFromWindow() {
-        super.onDetachedFromWindow();
-
         if (mWallpaperConnection != null) {
-            mWallpaperConnection.disconnect();
+            mWallpaperConnection.setVisibility(false);
         }
-        mWallpaperConnection = null;
     }
 
     @Override
@@ -567,6 +543,10 @@
             mLiveDataSettings.removeObserver(mSliceViewSettings);
             mLiveDataSettings = null;
         }
+        if (mWallpaperConnection != null) {
+            mWallpaperConnection.disconnect();
+        }
+        mWallpaperConnection = null;
         super.onDestroy();
     }
 
@@ -610,6 +590,8 @@
         IWallpaperService mService;
         IWallpaperEngine mEngine;
         boolean mConnected;
+        boolean mIsVisible;
+        boolean mIsEngineVisible;
 
         WallpaperConnection(Intent intent) {
             mIntent = intent;
@@ -675,10 +657,8 @@
             synchronized (this) {
                 if (mConnected) {
                     mEngine = engine;
-                    try {
-                        engine.setVisibility(true);
-                    } catch (RemoteException e) {
-                        // Ignore
+                    if (mIsVisible) {
+                        setEngineVisibility(true);
                     }
                 } else {
                     try {
@@ -712,6 +692,22 @@
                         .withEndAction(() -> mLoading.setVisibility(View.INVISIBLE));
             });
         }
+
+        public void setVisibility(boolean visible) {
+            mIsVisible = visible;
+            setEngineVisibility(visible);
+        }
+
+        private void setEngineVisibility(boolean visible) {
+            if (mEngine != null && visible != mIsEngineVisible) {
+                try {
+                    mEngine.setVisibility(visible);
+                    mIsEngineVisible = visible;
+                } catch (RemoteException e) {
+                    Log.w(LOG_TAG, "Failure setting wallpaper visibility ", e);
+                }
+            }
+        }
     }
 
     private static class WallpaperTargetAdapter extends ArrayAdapter<CharSequence> {