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:
Joe Onorato
2011-01-26 11:46:58 -08:00
committed by Android (Google) Code Review
8 changed files with 50 additions and 43 deletions

View File

@@ -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"

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;
}

View File

@@ -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) {

View File

@@ -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) {