Merge "Fix colored status bar panning issues" into lmp-mr1-dev

This commit is contained in:
Adrian Roos
2014-11-03 15:44:06 +00:00
committed by Android (Google) Code Review
3 changed files with 42 additions and 0 deletions

View File

@@ -1649,6 +1649,9 @@ public final class ViewRootImpl implements ViewParent,
mLastScrolledFocus.clear(); mLastScrolledFocus.clear();
} }
mScrollY = mCurScrollY = 0; mScrollY = mCurScrollY = 0;
if (mView instanceof RootViewSurfaceTaker) {
((RootViewSurfaceTaker) mView).onRootViewScrollYChanged(mCurScrollY);
}
if (mScroller != null) { if (mScroller != null) {
mScroller.abortAnimation(); mScroller.abortAnimation();
} }
@@ -2419,6 +2422,9 @@ public final class ViewRootImpl implements ViewParent,
if (mCurScrollY != curScrollY) { if (mCurScrollY != curScrollY) {
mCurScrollY = curScrollY; mCurScrollY = curScrollY;
fullRedrawNeeded = true; fullRedrawNeeded = true;
if (mView instanceof RootViewSurfaceTaker) {
((RootViewSurfaceTaker) mView).onRootViewScrollYChanged(mCurScrollY);
}
} }
final float appScale = mAttachInfo.mApplicationScale; final float appScale = mAttachInfo.mApplicationScale;

View File

@@ -1,3 +1,18 @@
/*
* Copyright (C) 2010 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.internal.view; package com.android.internal.view;
import android.view.InputQueue; import android.view.InputQueue;
@@ -10,4 +25,5 @@ public interface RootViewSurfaceTaker {
void setSurfaceFormat(int format); void setSurfaceFormat(int format);
void setSurfaceKeepScreenOn(boolean keepOn); void setSurfaceKeepScreenOn(boolean keepOn);
InputQueue.Callback willYouTakeTheInputQueue(); InputQueue.Callback willYouTakeTheInputQueue();
void onRootViewScrollYChanged(int scrollY);
} }

View File

@@ -2190,6 +2190,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
private int mLastBottomInset = 0; private int mLastBottomInset = 0;
private int mLastRightInset = 0; private int mLastRightInset = 0;
private int mRootScrollY = 0;
public DecorView(Context context, int featureId) { public DecorView(Context context, int featureId) {
super(context); super(context);
@@ -2891,6 +2892,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
view.setId(id); view.setId(id);
addView(view, new LayoutParams(LayoutParams.MATCH_PARENT, height, addView(view, new LayoutParams(LayoutParams.MATCH_PARENT, height,
Gravity.START | verticalGravity)); Gravity.START | verticalGravity));
updateColorViewTranslations();
} }
} else { } else {
int vis = show ? VISIBLE : INVISIBLE; int vis = show ? VISIBLE : INVISIBLE;
@@ -2907,6 +2909,18 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
return view; return view;
} }
private void updateColorViewTranslations() {
// Put the color views back in place when they get moved off the screen
// due to the the ViewRootImpl panning.
int rootScrollY = mRootScrollY;
if (mStatusColorView != null) {
mStatusColorView.setTranslationY(rootScrollY > 0 ? rootScrollY : 0);
}
if (mNavigationColorView != null) {
mNavigationColorView.setTranslationY(rootScrollY < 0 ? rootScrollY : 0);
}
}
private WindowInsets updateStatusGuard(WindowInsets insets) { private WindowInsets updateStatusGuard(WindowInsets insets) {
boolean showStatusGuard = false; boolean showStatusGuard = false;
// Show the status guard when the non-overlay contextual action bar is showing // Show the status guard when the non-overlay contextual action bar is showing
@@ -3165,6 +3179,12 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
else PhoneWindow.this.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); else PhoneWindow.this.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
} }
@Override
public void onRootViewScrollYChanged(int rootScrollY) {
mRootScrollY = rootScrollY;
updateColorViewTranslations();
}
/** /**
* Clears out internal reference when the action mode is destroyed. * Clears out internal reference when the action mode is destroyed.
*/ */