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();
}
mScrollY = mCurScrollY = 0;
if (mView instanceof RootViewSurfaceTaker) {
((RootViewSurfaceTaker) mView).onRootViewScrollYChanged(mCurScrollY);
}
if (mScroller != null) {
mScroller.abortAnimation();
}
@@ -2419,6 +2422,9 @@ public final class ViewRootImpl implements ViewParent,
if (mCurScrollY != curScrollY) {
mCurScrollY = curScrollY;
fullRedrawNeeded = true;
if (mView instanceof RootViewSurfaceTaker) {
((RootViewSurfaceTaker) mView).onRootViewScrollYChanged(mCurScrollY);
}
}
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;
import android.view.InputQueue;
@@ -10,4 +25,5 @@ public interface RootViewSurfaceTaker {
void setSurfaceFormat(int format);
void setSurfaceKeepScreenOn(boolean keepOn);
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 mLastRightInset = 0;
private int mRootScrollY = 0;
public DecorView(Context context, int featureId) {
super(context);
@@ -2891,6 +2892,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
view.setId(id);
addView(view, new LayoutParams(LayoutParams.MATCH_PARENT, height,
Gravity.START | verticalGravity));
updateColorViewTranslations();
}
} else {
int vis = show ? VISIBLE : INVISIBLE;
@@ -2907,6 +2909,18 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
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) {
boolean showStatusGuard = false;
// 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);
}
@Override
public void onRootViewScrollYChanged(int rootScrollY) {
mRootScrollY = rootScrollY;
updateColorViewTranslations();
}
/**
* Clears out internal reference when the action mode is destroyed.
*/