am ad8d9dfb: am ffa42480: Fix issue #2133206: dialogs/menus should auto-dismiss when screen turns off

Merge commit 'ad8d9dfb2458e5195df71afdcf07725a13ebe1c7'

* commit 'ad8d9dfb2458e5195df71afdcf07725a13ebe1c7':
  Fix issue #2133206: dialogs/menus should auto-dismiss when screen turns off
This commit is contained in:
Dianne Hackborn
2009-09-25 11:01:14 -07:00
committed by Android Git Automerger
20 changed files with 151 additions and 39 deletions

View File

@@ -126,13 +126,21 @@ public class ActivityInfo extends ComponentInfo
* {@link android.R.attr#noHistory} attribute.
*/
public static final int FLAG_NO_HISTORY = 0x0080;
/**
* Bit in {@link #flags} indicating that, when a request to close system
* windows happens, this activity is finished.
* Set from the
* {@link android.R.attr#finishOnCloseSystemDialogs} attribute.
*/
public static final int FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS = 0x0100;
/**
* Options that have been set in the activity declaration in the
* manifest: {@link #FLAG_MULTIPROCESS},
* {@link #FLAG_FINISH_ON_TASK_LAUNCH}, {@link #FLAG_CLEAR_TASK_ON_LAUNCH},
* {@link #FLAG_ALWAYS_RETAIN_TASK_STATE},
* {@link #FLAG_STATE_NOT_NEEDED}, {@link #FLAG_EXCLUDE_FROM_RECENTS},
* {@link #FLAG_ALLOW_TASK_REPARENTING}, {@link #FLAG_NO_HISTORY}.
* {@link #FLAG_ALLOW_TASK_REPARENTING}, {@link #FLAG_NO_HISTORY},
* {@link #FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS}.
*/
public int flags;

View File

@@ -1658,6 +1658,12 @@ public class PackageParser {
a.info.flags |= ActivityInfo.FLAG_ALLOW_TASK_REPARENTING;
}
if (sa.getBoolean(
com.android.internal.R.styleable.AndroidManifestActivity_finishOnCloseSystemDialogs,
false)) {
a.info.flags |= ActivityInfo.FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS;
}
if (!receiver) {
a.info.launchMode = sa.getInt(
com.android.internal.R.styleable.AndroidManifestActivity_launchMode,

View File

@@ -57,6 +57,8 @@ oneway interface IWindow {
*/
void windowFocusChanged(boolean hasFocus, boolean inTouchMode);
void closeSystemDialogs(String reason);
/**
* Called for wallpaper windows when their offsets change.
*/

View File

@@ -90,6 +90,8 @@ interface IWindowManager
void exitKeyguardSecurely(IOnKeyguardExitResult callback);
boolean inKeyguardRestrictedInputMode();
void closeSystemDialogs(String reason);
// These can only be called with the SET_ANIMATON_SCALE permission.
float getAnimationScale(int which);
float[] getAnimationScales();

View File

@@ -8098,6 +8098,13 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
(flags&HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING) != 0);
}
/**
* This needs to be a better API (NOT ON VIEW) before it is exposed. If
* it is ever exposed at all.
*/
public void onCloseSystemDialogs(String reason) {
}
/**
* Given a Drawable whose bounds have been set to draw into this view,
* update a Region being computed for {@link #gatherTransparentRegion} so

View File

@@ -1610,6 +1610,7 @@ public final class ViewRoot extends Handler implements ViewParent,
public final static int DISPATCH_KEY_FROM_IME = 1011;
public final static int FINISH_INPUT_CONNECTION = 1012;
public final static int CHECK_FOCUS = 1013;
public final static int CLOSE_SYSTEM_DIALOGS = 1014;
@Override
public void handleMessage(Message msg) {
@@ -1867,6 +1868,11 @@ public final class ViewRoot extends Handler implements ViewParent,
imm.checkFocus();
}
} break;
case CLOSE_SYSTEM_DIALOGS: {
if (mView != null) {
mView.onCloseSystemDialogs((String)msg.obj);
}
} break;
}
}
@@ -2630,6 +2636,13 @@ public final class ViewRoot extends Handler implements ViewParent,
sendMessage(msg);
}
public void dispatchCloseSystemDialogs(String reason) {
Message msg = Message.obtain();
msg.what = CLOSE_SYSTEM_DIALOGS;
msg.obj = reason;
sendMessage(msg);
}
/**
* The window is getting focus so if there is anything focused/selected
* send an {@link AccessibilityEvent} to announce that.
@@ -2869,6 +2882,13 @@ public final class ViewRoot extends Handler implements ViewParent,
}
}
public void closeSystemDialogs(String reason) {
final ViewRoot viewRoot = mViewRoot.get();
if (viewRoot != null) {
viewRoot.dispatchCloseSystemDialogs(reason);
}
}
public void dispatchWallpaperOffsets(float x, float y, boolean sync) {
if (sync) {
try {