am 69a4817e: Immersive activity API.
Merge commit '69a4817e3e1e368e758ff8c238deb5ee26963c04' into gingerbread-plus-aosp * commit '69a4817e3e1e368e758ff8c238deb5ee26963c04': Immersive activity API.
This commit is contained in:
@@ -3720,6 +3720,46 @@ public class Activity extends ContextThemeWrapper
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Bit indicating that this activity is "immersive" and should not be
|
||||
* interrupted by notifications if possible.
|
||||
*
|
||||
* This value is initially set by the manifest property
|
||||
* <code>android:immersive</code> but may be changed at runtime by
|
||||
* {@link #setImmersive}.
|
||||
*
|
||||
* @see android.content.pm.ActivityInfo#FLAG_IMMERSIVE
|
||||
*/
|
||||
public boolean isImmersive() {
|
||||
try {
|
||||
return ActivityManagerNative.getDefault().isImmersive(mToken);
|
||||
} catch (RemoteException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Adjust the current immersive mode setting.
|
||||
*
|
||||
* Note that changing this value will have no effect on the activity's
|
||||
* {@link android.content.pm.ActivityInfo} structure; that is, if
|
||||
* <code>android:immersive</code> is set to <code>true</code>
|
||||
* in the application's manifest entry for this activity, the {@link
|
||||
* android.content.pm.ActivityInfo#flags ActivityInfo.flags} member will
|
||||
* always have its {@link android.content.pm.ActivityInfo#FLAG_IMMERSIVE
|
||||
* FLAG_IMMERSIVE} bit set.
|
||||
*
|
||||
* @see #isImmersive
|
||||
* @see android.content.pm.ActivityInfo#FLAG_IMMERSIVE
|
||||
*/
|
||||
public void setImmersive(boolean i) {
|
||||
try {
|
||||
ActivityManagerNative.getDefault().setImmersive(mToken, i);
|
||||
} catch (RemoteException e) {
|
||||
// pass
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------ Internal API ------------------
|
||||
|
||||
final void setParent(Activity parent) {
|
||||
|
||||
@@ -1268,6 +1268,31 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM
|
||||
reply.writeNoException();
|
||||
return true;
|
||||
}
|
||||
|
||||
case IS_IMMERSIVE_TRANSACTION: {
|
||||
data.enforceInterface(IActivityManager.descriptor);
|
||||
IBinder token = data.readStrongBinder();
|
||||
reply.writeInt(isImmersive(token) ? 1 : 0);
|
||||
reply.writeNoException();
|
||||
return true;
|
||||
}
|
||||
|
||||
case SET_IMMERSIVE_TRANSACTION: {
|
||||
data.enforceInterface(IActivityManager.descriptor);
|
||||
IBinder token = data.readStrongBinder();
|
||||
boolean imm = data.readInt() == 1;
|
||||
setImmersive(token, imm);
|
||||
reply.writeNoException();
|
||||
return true;
|
||||
}
|
||||
|
||||
case IS_TOP_ACTIVITY_IMMERSIVE_TRANSACTION: {
|
||||
data.enforceInterface(IActivityManager.descriptor);
|
||||
reply.writeInt(isTopActivityImmersive() ? 1 : 0);
|
||||
reply.writeNoException();
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return super.onTransact(code, data, reply, flags);
|
||||
@@ -2802,5 +2827,45 @@ class ActivityManagerProxy implements IActivityManager
|
||||
reply.recycle();
|
||||
}
|
||||
|
||||
public void setImmersive(IBinder token, boolean immersive)
|
||||
throws RemoteException {
|
||||
Parcel data = Parcel.obtain();
|
||||
Parcel reply = Parcel.obtain();
|
||||
data.writeInterfaceToken(IActivityManager.descriptor);
|
||||
data.writeStrongBinder(token);
|
||||
data.writeInt(immersive ? 1 : 0);
|
||||
mRemote.transact(SET_IMMERSIVE_TRANSACTION, data, reply, 0);
|
||||
reply.readException();
|
||||
data.recycle();
|
||||
reply.recycle();
|
||||
}
|
||||
|
||||
public boolean isImmersive(IBinder token)
|
||||
throws RemoteException {
|
||||
Parcel data = Parcel.obtain();
|
||||
Parcel reply = Parcel.obtain();
|
||||
data.writeInterfaceToken(IActivityManager.descriptor);
|
||||
data.writeStrongBinder(token);
|
||||
mRemote.transact(IS_IMMERSIVE_TRANSACTION, data, reply, 0);
|
||||
boolean res = reply.readInt() == 1;
|
||||
reply.readException();
|
||||
data.recycle();
|
||||
reply.recycle();
|
||||
return res;
|
||||
}
|
||||
|
||||
public boolean isTopActivityImmersive()
|
||||
throws RemoteException {
|
||||
Parcel data = Parcel.obtain();
|
||||
Parcel reply = Parcel.obtain();
|
||||
data.writeInterfaceToken(IActivityManager.descriptor);
|
||||
mRemote.transact(IS_TOP_ACTIVITY_IMMERSIVE_TRANSACTION, data, reply, 0);
|
||||
boolean res = reply.readInt() == 1;
|
||||
reply.readException();
|
||||
data.recycle();
|
||||
reply.recycle();
|
||||
return res;
|
||||
}
|
||||
|
||||
private IBinder mRemote;
|
||||
}
|
||||
|
||||
@@ -311,6 +311,10 @@ public interface IActivityManager extends IInterface {
|
||||
public boolean isUserAMonkey() throws RemoteException;
|
||||
|
||||
public void finishHeavyWeightApp() throws RemoteException;
|
||||
|
||||
public void setImmersive(IBinder token, boolean immersive) throws RemoteException;
|
||||
public boolean isImmersive(IBinder token) throws RemoteException;
|
||||
public boolean isTopActivityImmersive() throws RemoteException;
|
||||
|
||||
/*
|
||||
* Private non-Binder interfaces
|
||||
@@ -524,4 +528,7 @@ public interface IActivityManager extends IInterface {
|
||||
int GET_RUNNING_EXTERNAL_APPLICATIONS_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+107;
|
||||
int FINISH_HEAVY_WEIGHT_APP_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+108;
|
||||
int HANDLE_APPLICATION_STRICT_MODE_VIOLATION_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+109;
|
||||
int IS_IMMERSIVE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+110;
|
||||
int SET_IMMERSIVE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+111;
|
||||
int IS_TOP_ACTIVITY_IMMERSIVE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+112;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user