Merge changes I48392c75,Id09437a4,I4a0aa878 into honeycomb
* changes: Expose the window flags for lights out mode. Make TabletStatusBar call into StatusBarManagerService when it goes out of lights out mode on its own. Make FLAG_FULLSCREEN not go into lights out mode anymore.
This commit is contained in:
@@ -225876,6 +225876,16 @@
|
||||
visibility="public"
|
||||
>
|
||||
</field>
|
||||
<field name="systemUiVisibility"
|
||||
type="int"
|
||||
transient="false"
|
||||
volatile="false"
|
||||
static="false"
|
||||
final="false"
|
||||
deprecated="not deprecated"
|
||||
visibility="public"
|
||||
>
|
||||
</field>
|
||||
<field name="token"
|
||||
type="android.os.IBinder"
|
||||
transient="false"
|
||||
|
||||
@@ -10807,6 +10807,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
|
||||
/**
|
||||
*/
|
||||
public void dispatchSystemUiVisibilityChanged(int visibility) {
|
||||
mSystemUiVisibility = visibility;
|
||||
if (mOnSystemUiVisibilityChangeListener != null) {
|
||||
mOnSystemUiVisibilityChangeListener.onSystemUiVisibilityChange(visibility);
|
||||
}
|
||||
|
||||
@@ -903,8 +903,9 @@ public final class ViewRoot extends Handler implements ViewParent,
|
||||
attachInfo.mSystemUiVisibility = 0;
|
||||
attachInfo.mHasSystemUiListeners = false;
|
||||
host.dispatchCollectViewAttributes(0);
|
||||
if (attachInfo.mKeepScreenOn != oldScreenOn ||
|
||||
attachInfo.mSystemUiVisibility != oldVis) {
|
||||
if (attachInfo.mKeepScreenOn != oldScreenOn
|
||||
|| attachInfo.mSystemUiVisibility != oldVis
|
||||
|| attachInfo.mHasSystemUiListeners) {
|
||||
params = lp;
|
||||
}
|
||||
}
|
||||
@@ -987,8 +988,10 @@ public final class ViewRoot extends Handler implements ViewParent,
|
||||
if (attachInfo.mKeepScreenOn) {
|
||||
params.flags |= WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
|
||||
}
|
||||
params.systemUiVisibility = attachInfo.mSystemUiVisibility;
|
||||
params.hasSystemUiListeners = attachInfo.mHasSystemUiListeners;
|
||||
params.subtreeSystemUiVisibility = attachInfo.mSystemUiVisibility;
|
||||
params.hasSystemUiListeners = attachInfo.mHasSystemUiListeners
|
||||
|| params.subtreeSystemUiVisibility != 0
|
||||
|| params.systemUiVisibility != 0;
|
||||
}
|
||||
if (DEBUG_LAYOUT) {
|
||||
Log.i(TAG, "host=w:" + host.getMeasuredWidth() + ", h:" +
|
||||
@@ -2854,6 +2857,9 @@ public final class ViewRoot extends Handler implements ViewParent,
|
||||
|
||||
public void handleDispatchSystemUiVisibilityChanged(int visibility) {
|
||||
if (mView == null) return;
|
||||
if (mAttachInfo != null) {
|
||||
mAttachInfo.mSystemUiVisibility = visibility;
|
||||
}
|
||||
mView.dispatchSystemUiVisibilityChanged(visibility);
|
||||
}
|
||||
|
||||
|
||||
@@ -953,10 +953,19 @@ public interface WindowManager extends ViewManager {
|
||||
|
||||
/**
|
||||
* Control the visibility of the status bar.
|
||||
* @hide
|
||||
*
|
||||
* @see View#STATUS_BAR_VISIBLE
|
||||
* @see View#STATUS_BAR_HIDDEN
|
||||
*/
|
||||
public int systemUiVisibility;
|
||||
|
||||
/**
|
||||
* @hide
|
||||
* The ui visibility as requested by the views in this hierarchy.
|
||||
* the combined value should be systemUiVisibility | subtreeSystemUiVisibility.
|
||||
*/
|
||||
public int subtreeSystemUiVisibility;
|
||||
|
||||
/**
|
||||
* Get callbacks about the system ui visibility changing.
|
||||
*
|
||||
@@ -1046,6 +1055,7 @@ public interface WindowManager extends ViewManager {
|
||||
TextUtils.writeToParcel(mTitle, out, parcelableFlags);
|
||||
out.writeInt(screenOrientation);
|
||||
out.writeInt(systemUiVisibility);
|
||||
out.writeInt(subtreeSystemUiVisibility);
|
||||
out.writeInt(hasSystemUiListeners ? 1 : 0);
|
||||
}
|
||||
|
||||
@@ -1083,6 +1093,7 @@ public interface WindowManager extends ViewManager {
|
||||
mTitle = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
|
||||
screenOrientation = in.readInt();
|
||||
systemUiVisibility = in.readInt();
|
||||
subtreeSystemUiVisibility = in.readInt();
|
||||
hasSystemUiListeners = in.readInt() != 0;
|
||||
}
|
||||
|
||||
@@ -1212,8 +1223,10 @@ public interface WindowManager extends ViewManager {
|
||||
changes |= SCREEN_ORIENTATION_CHANGED;
|
||||
}
|
||||
|
||||
if (systemUiVisibility != o.systemUiVisibility) {
|
||||
if (systemUiVisibility != o.systemUiVisibility
|
||||
|| subtreeSystemUiVisibility != o.subtreeSystemUiVisibility) {
|
||||
systemUiVisibility = o.systemUiVisibility;
|
||||
subtreeSystemUiVisibility = o.subtreeSystemUiVisibility;
|
||||
changes |= SYSTEM_UI_VISIBILITY_CHANGED;
|
||||
}
|
||||
|
||||
@@ -1298,6 +1311,10 @@ public interface WindowManager extends ViewManager {
|
||||
sb.append(" sysui=0x");
|
||||
sb.append(Integer.toHexString(systemUiVisibility));
|
||||
}
|
||||
if (subtreeSystemUiVisibility != 0) {
|
||||
sb.append(" vsysui=0x");
|
||||
sb.append(Integer.toHexString(subtreeSystemUiVisibility));
|
||||
}
|
||||
if (hasSystemUiListeners) {
|
||||
sb.append(" sysuil=");
|
||||
sb.append(hasSystemUiListeners);
|
||||
|
||||
@@ -30,7 +30,6 @@ interface IStatusBarService
|
||||
void setIcon(String slot, String iconPackage, int iconId, int iconLevel);
|
||||
void setIconVisibility(String slot, boolean visible);
|
||||
void removeIcon(String slot);
|
||||
void setActiveWindowIsFullscreen(boolean fullscreen);
|
||||
void setMenuKeyVisible(boolean visible);
|
||||
void setIMEButtonVisible(in IBinder token, boolean visible);
|
||||
|
||||
|
||||
@@ -391,8 +391,11 @@ public class TabletStatusBar extends StatusBar implements
|
||||
new View.OnTouchListener() {
|
||||
public boolean onTouch(View v, MotionEvent ev) {
|
||||
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
|
||||
mShadow.setVisibility(View.GONE);
|
||||
mBarContents.setVisibility(View.VISIBLE);
|
||||
try {
|
||||
mBarService.setSystemUiVisibility(View.STATUS_BAR_VISIBLE);
|
||||
} catch (RemoteException ex) {
|
||||
// system process dead
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1892,14 +1892,12 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
+ (topNeedsMenu ? "needs" : "does not need")
|
||||
+ " the MENU key");
|
||||
|
||||
final boolean changedFullscreen = (mTopIsFullscreen != topIsFullscreen);
|
||||
mTopIsFullscreen = topIsFullscreen;
|
||||
final boolean changedMenu = (topNeedsMenu != mShowMenuKey);
|
||||
|
||||
if (changedFullscreen || changedMenu) {
|
||||
final boolean topIsFullscreenF = topIsFullscreen;
|
||||
if (changedMenu) {
|
||||
final boolean topNeedsMenuF = topNeedsMenu;
|
||||
|
||||
mTopIsFullscreen = topIsFullscreen;
|
||||
mShowMenuKey = topNeedsMenu;
|
||||
|
||||
mHandler.post(new Runnable() {
|
||||
@@ -1918,9 +1916,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
if (changedMenu) {
|
||||
sbs.setMenuKeyVisible(topNeedsMenuF);
|
||||
}
|
||||
if (changedFullscreen) {
|
||||
sbs.setActiveWindowIsFullscreen(topIsFullscreenF);
|
||||
}
|
||||
} catch (RemoteException e) {
|
||||
// This should be impossible because we're in the same process.
|
||||
mStatusBarService = null;
|
||||
@@ -2860,7 +2855,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
// If there is no window focused, there will be nobody to handle the events
|
||||
// anyway, so just hang on in whatever state we're in until things settle down.
|
||||
if (mFocusedWindow != null) {
|
||||
final int visibility = mFocusedWindow.getAttrs().systemUiVisibility;
|
||||
final WindowManager.LayoutParams params = mFocusedWindow.getAttrs();
|
||||
final int visibility = params.systemUiVisibility | params.subtreeSystemUiVisibility;
|
||||
mHandler.post(new Runnable() {
|
||||
public void run() {
|
||||
if (mStatusBarService == null) {
|
||||
|
||||
@@ -283,33 +283,8 @@ public class StatusBarManagerService extends IStatusBarService.Stub
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This is used for the automatic version of lights-out mode. Only call this from
|
||||
* the window manager.
|
||||
*
|
||||
* @see setLightsOn(boolean)
|
||||
*/
|
||||
public void setActiveWindowIsFullscreen(boolean fullscreen) {
|
||||
// We could get away with a separate permission here, but STATUS_BAR is
|
||||
// signatureOrSystem which is probably good enough. There is no public API
|
||||
// for this, so the question is a security issue, not an API compatibility issue.
|
||||
enforceStatusBar();
|
||||
|
||||
synchronized (mLock) {
|
||||
updateLightsOnLocked(!fullscreen);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This is used for the user-controlled version of lights-out mode. Only call this from
|
||||
* the status bar itself.
|
||||
*
|
||||
* We have two different functions here, because I think we're going to want to
|
||||
* tweak the behavior when the user keeps turning lights-out mode off and the
|
||||
* app keeps trying to turn it on. For now they can just fight it out. Having
|
||||
* these two separte inputs will allow us to keep that change local to here. --joeo
|
||||
*/
|
||||
public void setSystemUiVisibility(int vis) {
|
||||
// also allows calls from window manager which is in this process.
|
||||
enforceStatusBarService();
|
||||
|
||||
synchronized (mLock) {
|
||||
|
||||
Reference in New Issue
Block a user