Merge changes from topic 'vr-fixes' into nyc-dev
* changes: Suppress immersive mode confirmation in VR mode. Suppress heads-up notifications in VR mode.
This commit is contained in:
committed by
Android (Google) Code Review
commit
064e612779
@@ -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"
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -27,8 +27,11 @@ import android.graphics.PixelFormat;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import android.os.RemoteException;
|
||||
import android.os.ServiceManager;
|
||||
import android.os.UserHandle;
|
||||
import android.provider.Settings;
|
||||
import android.service.vr.IVrManager;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.util.Slog;
|
||||
import android.util.SparseBooleanArray;
|
||||
@@ -45,6 +48,7 @@ import android.widget.Button;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
import com.android.internal.R;
|
||||
import com.android.server.vr.VrManagerService;
|
||||
|
||||
/**
|
||||
* Helper to manage showing/hiding a confirmation prompt when the navigation bar is hidden
|
||||
@@ -66,6 +70,7 @@ public class ImmersiveModeConfirmation {
|
||||
private long mPanicTime;
|
||||
private WindowManager mWindowManager;
|
||||
private int mCurrentUserId;
|
||||
private IVrManager mVrManager;
|
||||
|
||||
public ImmersiveModeConfirmation(Context context) {
|
||||
mContext = context;
|
||||
@@ -75,6 +80,8 @@ public class ImmersiveModeConfirmation {
|
||||
.getInteger(R.integer.config_immersive_mode_confirmation_panic);
|
||||
mWindowManager = (WindowManager)
|
||||
mContext.getSystemService(Context.WINDOW_SERVICE);
|
||||
mVrManager = (IVrManager) IVrManager.Stub.asInterface(
|
||||
ServiceManager.getService(VrManagerService.VR_MANAGER_BINDER_SERVICE));
|
||||
}
|
||||
|
||||
private long getNavBarExitDuration() {
|
||||
@@ -112,6 +119,14 @@ public class ImmersiveModeConfirmation {
|
||||
}
|
||||
}
|
||||
|
||||
private boolean getVrMode() {
|
||||
boolean vrMode = false;
|
||||
try {
|
||||
vrMode = mVrManager.getVrModeState();
|
||||
} catch (RemoteException ex) { }
|
||||
return vrMode;
|
||||
}
|
||||
|
||||
public void immersiveModeChanged(String pkg, boolean isImmersiveMode,
|
||||
boolean userSetupComplete) {
|
||||
mHandler.removeMessages(H.SHOW);
|
||||
@@ -119,7 +134,10 @@ public class ImmersiveModeConfirmation {
|
||||
final boolean disabled = PolicyControl.disableImmersiveConfirmation(pkg);
|
||||
if (DEBUG) Slog.d(TAG, String.format("immersiveModeChanged() disabled=%s mConfirmed=%s",
|
||||
disabled, mConfirmed));
|
||||
if (!disabled && (DEBUG_SHOW_EVERY_TIME || !mConfirmed) && userSetupComplete) {
|
||||
if (!disabled
|
||||
&& (DEBUG_SHOW_EVERY_TIME || !mConfirmed)
|
||||
&& userSetupComplete
|
||||
&& !getVrMode()) {
|
||||
mHandler.sendEmptyMessageDelayed(H.SHOW, mShowDelayMs);
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user