Suppress heads-up notifications in VR mode.

Fixes: 27884853
Change-Id: I14d2dd66bea5b18e4d710c74d443e88cfbb3c028
This commit is contained in:
Dan Sandler
2016-04-07 21:04:46 -04:00
parent db5c565380
commit dc34df5d31
4 changed files with 62 additions and 0 deletions

View File

@@ -159,6 +159,9 @@
<!-- DND access -->
<uses-permission android:name="android.permission.MANAGE_NOTIFICATIONS" />
<!-- It's like, reality, but, you know, virtual -->
<uses-permission android:name="android.permission.ACCESS_VR_MANAGER" />
<application
android:name=".SystemUIApplication"
android:persistent="true"

View File

@@ -63,6 +63,8 @@ import android.service.dreams.IDreamManager;
import android.service.notification.NotificationListenerService;
import android.service.notification.NotificationListenerService.RankingMap;
import android.service.notification.StatusBarNotification;
import android.service.vr.IVrManager;
import android.service.vr.IVrStateCallbacks;
import android.text.TextUtils;
import android.util.ArraySet;
import android.util.Log;
@@ -262,11 +264,24 @@ public abstract class BaseStatusBar extends SystemUI implements
protected AssistManager mAssistManager;
protected boolean mVrMode;
@Override // NotificationData.Environment
public boolean isDeviceProvisioned() {
return mDeviceProvisioned;
}
private final IVrStateCallbacks mVrStateCallbacks = new IVrStateCallbacks.Stub() {
@Override
public void onVrStateChanged(boolean enabled) {
mVrMode = enabled;
}
};
public boolean isDeviceInVrMode() {
return mVrMode;
}
protected final ContentObserver mSettingsObserver = new ContentObserver(mHandler) {
@Override
public void onChange(boolean selfChange) {
@@ -776,6 +791,14 @@ public abstract class BaseStatusBar extends SystemUI implements
mContext.registerReceiverAsUser(mAllUsersReceiver, UserHandle.ALL, allUsersFilter,
null, null);
updateCurrentProfilesCache();
IVrManager vrManager = IVrManager.Stub.asInterface(ServiceManager.getService("vrmanager"));
try {
vrManager.registerListener(mVrStateCallbacks);
} catch (RemoteException e) {
Slog.e(TAG, "Failed to register VR mode state listener: " + e);
}
}
protected void notifyUserAboutHiddenNotifications() {
@@ -2353,6 +2376,10 @@ public abstract class BaseStatusBar extends SystemUI implements
}
protected boolean shouldPeek(Entry entry, StatusBarNotification sbn) {
if (isDeviceInVrMode()) {
return false;
}
if (mNotificationData.shouldFilterOut(sbn)) {
if (DEBUG) Log.d(TAG, "No peeking: filtered notification: " + sbn.getKey());
return false;

View File

@@ -1374,6 +1374,10 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
}
private boolean shouldSuppressFullScreenIntent(String key) {
if (isDeviceInVrMode()) {
return true;
}
if (mPowerManager.isInteractive()) {
return mNotificationData.shouldSuppressScreenOn(key);
} else {

View File

@@ -50,6 +50,8 @@ import com.android.server.vr.EnabledComponentsObserver.EnabledComponentChangeLis
import com.android.server.utils.ManagedApplicationService;
import com.android.server.utils.ManagedApplicationService.BinderChecker;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.lang.StringBuilder;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
@@ -186,6 +188,32 @@ public class VrManagerService extends SystemService implements EnabledComponentC
return VrManagerService.this.getVrMode();
}
@Override
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
if (getContext().checkCallingOrSelfPermission(android.Manifest.permission.DUMP)
!= PackageManager.PERMISSION_GRANTED) {
pw.println("permission denied: can't dump VrManagerService from pid="
+ Binder.getCallingPid() + ", uid=" + Binder.getCallingUid());
return;
}
pw.print("mVrModeEnabled=");
pw.println(mVrModeEnabled);
pw.print("mCurrentVrModeUser=");
pw.println(mCurrentVrModeUser);
pw.print("mRemoteCallbacks=");
int i=mRemoteCallbacks.beginBroadcast(); // create the broadcast item array
while(i-->0) {
pw.print(mRemoteCallbacks.getBroadcastItem(i));
if (i>0) pw.print(", ");
}
mRemoteCallbacks.finishBroadcast();
pw.println();
pw.print("mCurrentVrService=");
pw.println(mCurrentVrService != null ? mCurrentVrService.getComponent() : "(none)");
pw.print("mCurrentVrModeComponent=");
pw.println(mCurrentVrModeComponent);
}
};
private void enforceCallerPermission(String permission) {