diff options
10 files changed, 88 insertions, 267 deletions
diff --git a/cmds/svc/src/com/android/commands/svc/UsbCommand.java b/cmds/svc/src/com/android/commands/svc/UsbCommand.java index 34f6d7de0cc9..adbe9d015626 100644 --- a/cmds/svc/src/com/android/commands/svc/UsbCommand.java +++ b/cmds/svc/src/com/android/commands/svc/UsbCommand.java @@ -18,7 +18,6 @@ package com.android.commands.svc; import android.content.Context; import android.hardware.usb.IUsbManager; -import android.hardware.usb.UsbManager; import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemProperties; @@ -39,9 +38,6 @@ public class UsbCommand extends Svc.Command { + "\n" + "usage: svc usb setFunction [function] [usbDataUnlocked=false]\n" + " Set the current usb function and optionally the data lock state.\n\n" - + " svc usb setScreenUnlockedFunctions [function]\n" - + " Sets the functions which, if the device was charging," - + " become current on screen unlock.\n" + " svc usb getFunction\n" + " Gets the list of currently enabled functions\n"; } @@ -66,16 +62,6 @@ public class UsbCommand extends Svc.Command { } else if ("getFunction".equals(args[1])) { System.err.println(SystemProperties.get("sys.usb.config")); return; - } else if ("setScreenUnlockedFunctions".equals(args[1])) { - IUsbManager usbMgr = IUsbManager.Stub.asInterface(ServiceManager.getService( - Context.USB_SERVICE)); - try { - usbMgr.setScreenUnlockedFunctions((args.length >= 3 ? args[2] : - UsbManager.USB_FUNCTION_NONE)); - } catch (RemoteException e) { - System.err.println("Error communicating with UsbManager: " + e); - } - return; } } System.err.println(longHelp()); diff --git a/core/java/android/app/ActivityManagerInternal.java b/core/java/android/app/ActivityManagerInternal.java index f2160e192623..c8d983933fc6 100644 --- a/core/java/android/app/ActivityManagerInternal.java +++ b/core/java/android/app/ActivityManagerInternal.java @@ -268,11 +268,4 @@ public abstract class ActivityManagerInternal { * @param token The IApplicationToken for the activity */ public abstract void setFocusedActivity(IBinder token); - - public interface ScreenObserver { - public void onAwakeStateChanged(boolean isAwake); - public void onKeyguardStateChanged(boolean isShowing); - } - - public abstract void registerScreenObserver(ScreenObserver observer); } diff --git a/core/java/android/hardware/usb/IUsbManager.aidl b/core/java/android/hardware/usb/IUsbManager.aidl index 4e8c45dc2c46..025d46d12567 100644 --- a/core/java/android/hardware/usb/IUsbManager.aidl +++ b/core/java/android/hardware/usb/IUsbManager.aidl @@ -96,11 +96,6 @@ interface IUsbManager */ void setCurrentFunction(String function, boolean usbDataUnlocked); - /* Sets the screen unlocked USB function(s), which will be set automatically - * when the screen is unlocked. - */ - void setScreenUnlockedFunctions(String function); - /* Allow USB debugging from the attached host. If alwaysAllow is true, add the * the public key to list of host keys that the user has approved. */ diff --git a/core/java/android/hardware/usb/UsbManager.java b/core/java/android/hardware/usb/UsbManager.java index 48e8d342db65..d73d3d8b04cf 100644 --- a/core/java/android/hardware/usb/UsbManager.java +++ b/core/java/android/hardware/usb/UsbManager.java @@ -590,32 +590,6 @@ public class UsbManager { } /** - * Sets the screen unlocked functions, which are persisted and set as the current functions - * whenever the screen is unlocked. - * <p> - * The allowed values are: {@link #USB_FUNCTION_NONE}, - * {@link #USB_FUNCTION_MIDI}, {@link #USB_FUNCTION_MTP}, {@link #USB_FUNCTION_PTP}, - * or {@link #USB_FUNCTION_RNDIS}. - * {@link #USB_FUNCTION_NONE} has the effect of switching off this feature, so functions - * no longer change on screen unlock. - * </p><p> - * Note: When the screen is on, this method will apply given functions as current functions, - * which is asynchronous and may fail silently without applying the requested changes. - * </p> - * - * @param function function to set as default - * - * {@hide} - */ - public void setScreenUnlockedFunctions(String function) { - try { - mService.setScreenUnlockedFunctions(function); - } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); - } - } - - /** * Returns a list of physical USB ports on the device. * <p> * This list is guaranteed to contain all dual-role USB Type C ports but it might diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java index 13617f127b3e..533771a31d0e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java @@ -265,9 +265,7 @@ public class LightBarController implements BatteryController.BatteryStateChangeC mStatusBarIconController.getTransitionsController().dump(fd, pw, args); pw.println(); pw.println(" NavigationBarTransitionsController:"); - if (mNavigationBarController != null) { - mNavigationBarController.dump(fd, pw, args); - } + mNavigationBarController.dump(fd, pw, args); pw.println(); } } diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 002381a5a3f0..6cdd068f15ed 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -200,7 +200,6 @@ import android.app.ActivityManager.StackInfo; import android.app.ActivityManager.TaskSnapshot; import android.app.ActivityManager.TaskThumbnailInfo; import android.app.ActivityManagerInternal; -import android.app.ActivityManagerInternal.ScreenObserver; import android.app.ActivityManagerInternal.SleepToken; import android.app.ActivityOptions; import android.app.ActivityThread; @@ -1549,8 +1548,6 @@ public class ActivityManagerService extends IActivityManager.Stub } } - final List<ScreenObserver> mScreenObservers = new ArrayList<>(); - final RemoteCallbackList<IProcessObserver> mProcessObservers = new RemoteCallbackList<>(); ProcessChangeItem[] mActiveProcessChanges = new ProcessChangeItem[5]; @@ -1692,8 +1689,6 @@ public class ActivityManagerService extends IActivityManager.Stub static final int PUSH_TEMP_WHITELIST_UI_MSG = 68; static final int SERVICE_FOREGROUND_CRASH_MSG = 69; static final int DISPATCH_OOM_ADJ_OBSERVER_MSG = 70; - static final int DISPATCH_SCREEN_AWAKE_MSG = 71; - static final int DISPATCH_SCREEN_KEYGUARD_MSG = 72; static final int START_USER_SWITCH_FG_MSG = 712; static final int NOTIFY_VR_KEYGUARD_MSG = 74; @@ -2417,17 +2412,11 @@ public class ActivityManagerService extends IActivityManager.Stub } } } break; - case DISPATCH_SCREEN_AWAKE_MSG: { - final boolean isAwake = msg.arg1 != 0; - for (int i = mScreenObservers.size() - 1; i >= 0; i--) { - mScreenObservers.get(i).onAwakeStateChanged(isAwake); - } + case NOTIFY_VR_SLEEPING_MSG: { + notifyVrManagerOfSleepState(msg.arg1 != 0); } break; - case DISPATCH_SCREEN_KEYGUARD_MSG: { - final boolean isShowing = msg.arg1 != 0; - for (int i = mScreenObservers.size() - 1; i >= 0; i--) { - mScreenObservers.get(i).onKeyguardStateChanged(isShowing); - } + case NOTIFY_VR_KEYGUARD_MSG: { + notifyVrManagerOfKeyguardState(msg.arg1 != 0); } break; case HANDLE_TRUST_STORAGE_UPDATE_MSG: { synchronized (ActivityManagerService.this) { @@ -3271,6 +3260,32 @@ public class ActivityManagerService extends IActivityManager.Stub mHandler.obtainMessage(VR_MODE_CHANGE_MSG, 0, 0, r)); } + private void sendNotifyVrManagerOfSleepState(boolean isSleeping) { + mHandler.sendMessage( + mHandler.obtainMessage(NOTIFY_VR_SLEEPING_MSG, isSleeping ? 1 : 0, 0)); + } + + private void notifyVrManagerOfSleepState(boolean isSleeping) { + final VrManagerInternal vrService = LocalServices.getService(VrManagerInternal.class); + if (vrService == null) { + return; + } + vrService.onSleepStateChanged(isSleeping); + } + + private void sendNotifyVrManagerOfKeyguardState(boolean isShowing) { + mHandler.sendMessage( + mHandler.obtainMessage(NOTIFY_VR_KEYGUARD_MSG, isShowing ? 1 : 0, 0)); + } + + private void notifyVrManagerOfKeyguardState(boolean isShowing) { + final VrManagerInternal vrService = LocalServices.getService(VrManagerInternal.class); + if (vrService == null) { + return; + } + vrService.onKeyguardStateChanged(isShowing); + } + final void showAskCompatModeDialogLocked(ActivityRecord r) { Message msg = Message.obtain(); msg.what = SHOW_COMPAT_MODE_DIALOG_UI_MSG; @@ -12489,8 +12504,7 @@ public class ActivityManagerService extends IActivityManager.Stub if (wasAwake != isAwake) { // Also update state in a special way for running foreground services UI. mServices.updateScreenStateLocked(isAwake); - mHandler.obtainMessage(DISPATCH_SCREEN_AWAKE_MSG, isAwake ? 1 : 0, 0) - .sendToTarget(); + sendNotifyVrManagerOfSleepState(!isAwake); } } } @@ -12643,9 +12657,7 @@ public class ActivityManagerService extends IActivityManager.Stub Binder.restoreCallingIdentity(ident); } } - - mHandler.obtainMessage(DISPATCH_SCREEN_KEYGUARD_MSG, showing ? 1 : 0, 0) - .sendToTarget(); + sendNotifyVrManagerOfKeyguardState(showing); } @Override @@ -24253,11 +24265,6 @@ public class ActivityManagerService extends IActivityManager.Stub } } } - - @Override - public void registerScreenObserver(ScreenObserver observer) { - mScreenObservers.add(observer); - } } /** diff --git a/services/core/java/com/android/server/vr/VrManagerInternal.java b/services/core/java/com/android/server/vr/VrManagerInternal.java index 35b6ad3079a5..7b1e12e24072 100644 --- a/services/core/java/com/android/server/vr/VrManagerInternal.java +++ b/services/core/java/com/android/server/vr/VrManagerInternal.java @@ -59,6 +59,13 @@ public abstract class VrManagerInternal { int userId, int processId, @NonNull ComponentName calling); /** + * Set whether the system has acquired a sleep token. + * + * @param isAsleep is {@code true} if the device is asleep, or {@code false} otherwise. + */ + public abstract void onSleepStateChanged(boolean isAsleep); + + /** * Set whether the display used for VR output is on. * * @param isScreenOn is {@code true} if the display is on and can receive commands, @@ -67,6 +74,13 @@ public abstract class VrManagerInternal { public abstract void onScreenStateChanged(boolean isScreenOn); /** + * Set whether the keyguard is currently active/showing. + * + * @param isShowing is {@code true} if the keyguard is active/showing. + */ + public abstract void onKeyguardStateChanged(boolean isShowing); + + /** * Return NO_ERROR if the given package is installed on the device and enabled as a * VrListenerService for the given current user, or a negative error code indicating a failure. * diff --git a/services/core/java/com/android/server/vr/VrManagerService.java b/services/core/java/com/android/server/vr/VrManagerService.java index 56cacf4e6aa1..b0fd248b2b39 100644 --- a/services/core/java/com/android/server/vr/VrManagerService.java +++ b/services/core/java/com/android/server/vr/VrManagerService.java @@ -19,7 +19,6 @@ import static android.view.Display.INVALID_DISPLAY; import android.Manifest; import android.app.ActivityManagerInternal; -import android.app.ActivityManagerInternal.ScreenObserver; import android.app.ActivityManager; import android.app.AppOpsManager; import android.app.INotificationManager; @@ -105,8 +104,7 @@ import java.util.Objects; * * @hide */ -public class VrManagerService extends SystemService - implements EnabledComponentChangeListener, ScreenObserver { +public class VrManagerService extends SystemService implements EnabledComponentChangeListener{ public static final String TAG = "VrManagerService"; static final boolean DBG = false; @@ -233,17 +231,15 @@ public class VrManagerService extends SystemService } } - private void setScreenOn(boolean isScreenOn) { - setSystemState(FLAG_SCREEN_ON, isScreenOn); + private void setSleepState(boolean isAsleep) { + setSystemState(FLAG_AWAKE, !isAsleep); } - @Override - public void onAwakeStateChanged(boolean isAwake) { - setSystemState(FLAG_AWAKE, isAwake); + private void setScreenOn(boolean isScreenOn) { + setSystemState(FLAG_SCREEN_ON, isScreenOn); } - @Override - public void onKeyguardStateChanged(boolean isShowing) { + private void setKeyguardShowing(boolean isShowing) { setSystemState(FLAG_KEYGUARD_UNLOCKED, !isShowing); } @@ -679,11 +675,21 @@ public class VrManagerService extends SystemService } @Override + public void onSleepStateChanged(boolean isAsleep) { + VrManagerService.this.setSleepState(isAsleep); + } + + @Override public void onScreenStateChanged(boolean isScreenOn) { VrManagerService.this.setScreenOn(isScreenOn); } @Override + public void onKeyguardStateChanged(boolean isShowing) { + VrManagerService.this.setKeyguardShowing(isShowing); + } + + @Override public boolean isCurrentVrListener(String packageName, int userId) { return VrManagerService.this.isCurrentVrListener(packageName, userId); } @@ -734,9 +740,6 @@ public class VrManagerService extends SystemService @Override public void onBootPhase(int phase) { if (phase == SystemService.PHASE_SYSTEM_SERVICES_READY) { - LocalServices.getService(ActivityManagerInternal.class) - .registerScreenObserver(this); - mNotificationManager = INotificationManager.Stub.asInterface( ServiceManager.getService(Context.NOTIFICATION_SERVICE)); synchronized (mLock) { diff --git a/services/usb/java/com/android/server/usb/UsbDeviceManager.java b/services/usb/java/com/android/server/usb/UsbDeviceManager.java index 4a7072d03067..1b057f9b9681 100644 --- a/services/usb/java/com/android/server/usb/UsbDeviceManager.java +++ b/services/usb/java/com/android/server/usb/UsbDeviceManager.java @@ -16,9 +16,6 @@ package com.android.server.usb; -import android.app.ActivityManager; -import android.app.ActivityManagerInternal; -import android.app.KeyguardManager; import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; @@ -29,7 +26,6 @@ import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; -import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.content.res.Resources; import android.database.ContentObserver; @@ -42,7 +38,6 @@ import android.hardware.usb.UsbManager; import android.hardware.usb.UsbPort; import android.hardware.usb.UsbPortStatus; import android.os.BatteryManager; -import android.os.Environment; import android.os.FileUtils; import android.os.Handler; import android.os.Looper; @@ -65,7 +60,6 @@ import com.android.internal.notification.SystemNotificationChannels; import com.android.internal.os.SomeArgs; import com.android.internal.util.IndentingPrintWriter; import com.android.server.FgThread; -import com.android.server.LocalServices; import java.io.File; import java.io.FileNotFoundException; @@ -81,7 +75,7 @@ import java.util.Set; /** * UsbDeviceManager manages USB state in device mode. */ -public class UsbDeviceManager implements ActivityManagerInternal.ScreenObserver { +public class UsbDeviceManager { private static final String TAG = "UsbDeviceManager"; private static final boolean DEBUG = false; @@ -103,12 +97,6 @@ public class UsbDeviceManager implements ActivityManagerInternal.ScreenObserver private static final String USB_STATE_PROPERTY = "sys.usb.state"; /** - * The SharedPreference setting per user that stores the screen unlocked functions between - * sessions. - */ - private static final String UNLOCKED_CONFIG_PREF = "usb-screen-unlocked-config-%d"; - - /** * ro.bootmode value when phone boots into usual Android. */ private static final String NORMAL_BOOT = "normal"; @@ -140,8 +128,6 @@ public class UsbDeviceManager implements ActivityManagerInternal.ScreenObserver private static final int MSG_UPDATE_CHARGING_STATE = 9; private static final int MSG_UPDATE_HOST_STATE = 10; private static final int MSG_LOCALE_CHANGED = 11; - private static final int MSG_SET_SCREEN_UNLOCKED_FUNCTIONS = 12; - private static final int MSG_UPDATE_SCREEN_LOCK = 13; private static final int AUDIO_MODE_SOURCE = 1; @@ -183,7 +169,6 @@ public class UsbDeviceManager implements ActivityManagerInternal.ScreenObserver private Intent mBroadcastedIntent; private boolean mPendingBootBroadcast; private static Set<Integer> sBlackListedInterfaces; - private SharedPreferences mSettings; static { sBlackListedInterfaces = new HashSet<>(); @@ -232,31 +217,6 @@ public class UsbDeviceManager implements ActivityManagerInternal.ScreenObserver } }; - @Override - public void onKeyguardStateChanged(boolean isShowing) { - int userHandle = ActivityManager.getCurrentUser(); - boolean secure = mContext.getSystemService(KeyguardManager.class) - .isDeviceSecure(userHandle); - boolean unlocking = mContext.getSystemService(UserManager.class) - .isUserUnlockingOrUnlocked(userHandle); - if (DEBUG) { - Slog.v(TAG, "onKeyguardStateChanged: isShowing:" + isShowing + " secure:" + secure - + " unlocking:" + unlocking + " user:" + userHandle); - } - // We are unlocked when the keyguard is down or non-secure, and user storage is unlocked. - mHandler.sendMessage(MSG_UPDATE_SCREEN_LOCK, (isShowing && secure) || !unlocking); - } - - @Override - public void onAwakeStateChanged(boolean isAwake) { - // ignore - } - - /** Called when a user is unlocked. */ - public void onUnlockUser(int userHandle) { - onKeyguardStateChanged(false); - } - public UsbDeviceManager(Context context, UsbAlsaManager alsaManager, UsbSettingsManager settingsManager) { mContext = context; @@ -343,8 +303,6 @@ public class UsbDeviceManager implements ActivityManagerInternal.ScreenObserver public void systemReady() { if (DEBUG) Slog.d(TAG, "systemReady"); - LocalServices.getService(ActivityManagerInternal.class).registerScreenObserver(this); - mNotificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); @@ -449,14 +407,6 @@ public class UsbDeviceManager implements ActivityManagerInternal.ScreenObserver return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_LEANBACK); } - private SharedPreferences getPinnedSharedPrefs(Context context) { - final File prefsFile = new File(new File( - Environment.getDataUserCePackageDirectory(StorageManager.UUID_PRIVATE_INTERNAL, - context.getUserId(), context.getPackageName()), "shared_prefs"), - UsbDeviceManager.class.getSimpleName() + ".xml"); - return context.getSharedPreferences(prefsFile, Context.MODE_PRIVATE); - } - private final class UsbHandler extends Handler { // current USB state @@ -473,13 +423,11 @@ public class UsbDeviceManager implements ActivityManagerInternal.ScreenObserver private UsbAccessory mCurrentAccessory; private int mUsbNotificationId; private boolean mAdbNotificationShown; - private int mCurrentUser; + private int mCurrentUser = UserHandle.USER_NULL; private boolean mUsbCharging; private String mCurrentOemFunctions; private boolean mHideUsbNotification; private boolean mSupportsAllCombinations; - private String mScreenUnlockedFunctions = UsbManager.USB_FUNCTION_NONE; - private boolean mScreenLocked; public UsbHandler(Looper looper) { super(looper); @@ -501,9 +449,6 @@ public class UsbDeviceManager implements ActivityManagerInternal.ScreenObserver SystemProperties.get(USB_STATE_PROPERTY)); } - mCurrentUser = ActivityManager.getCurrentUser(); - mScreenLocked = true; - /* * Use the normal bootmode persistent prop to maintain state of adb across * all boot modes. @@ -708,7 +653,7 @@ public class UsbDeviceManager implements ActivityManagerInternal.ScreenObserver private boolean trySetEnabledFunctions(String functions, boolean forceRestart) { if (functions == null || applyAdbFunction(functions) .equals(UsbManager.USB_FUNCTION_NONE)) { - functions = getChargingFunctions(); + functions = getDefaultFunctions(); } functions = applyAdbFunction(functions); @@ -931,14 +876,6 @@ public class UsbDeviceManager implements ActivityManagerInternal.ScreenObserver mMidiEnabled && mConfigured, mMidiCard, mMidiDevice); } - private void setScreenUnlockedFunctions() { - setEnabledFunctions(mScreenUnlockedFunctions, false, - UsbManager.containsFunction(mScreenUnlockedFunctions, - UsbManager.USB_FUNCTION_MTP) - || UsbManager.containsFunction(mScreenUnlockedFunctions, - UsbManager.USB_FUNCTION_PTP)); - } - @Override public void handleMessage(Message msg) { switch (msg.what) { @@ -958,13 +895,7 @@ public class UsbDeviceManager implements ActivityManagerInternal.ScreenObserver if (mBootCompleted) { if (!mConnected && !hasMessages(MSG_ACCESSORY_MODE_ENTER_TIMEOUT)) { // restore defaults when USB is disconnected - if (!mScreenLocked - && !UsbManager.USB_FUNCTION_NONE.equals( - mScreenUnlockedFunctions)) { - setScreenUnlockedFunctions(); - } else { - setEnabledFunctions(null, !mAdbEnabled, false); - } + setEnabledFunctions(null, !mAdbEnabled, false); } updateUsbFunctions(); } else { @@ -1047,47 +978,6 @@ public class UsbDeviceManager implements ActivityManagerInternal.ScreenObserver String functions = (String) msg.obj; setEnabledFunctions(functions, false, msg.arg1 == 1); break; - case MSG_SET_SCREEN_UNLOCKED_FUNCTIONS: - mScreenUnlockedFunctions = (String) msg.obj; - SharedPreferences.Editor editor = mSettings.edit(); - editor.putString(String.format(Locale.ENGLISH, UNLOCKED_CONFIG_PREF, - mCurrentUser), mScreenUnlockedFunctions); - editor.commit(); - if (!mScreenLocked && !UsbManager.USB_FUNCTION_NONE.equals( - mScreenUnlockedFunctions)) { - // If the screen is unlocked, also set current functions. - setScreenUnlockedFunctions(); - } - break; - case MSG_UPDATE_SCREEN_LOCK: - if (msg.arg1 == 1 == mScreenLocked) { - break; - } - mScreenLocked = msg.arg1 == 1; - if (mSettings == null && !mScreenLocked) { - // Shared preferences aren't accessible until the user has been unlocked. - mSettings = getPinnedSharedPrefs(mContext); - mScreenUnlockedFunctions = mSettings.getString( - String.format(Locale.ENGLISH, UNLOCKED_CONFIG_PREF, mCurrentUser), - UsbManager.USB_FUNCTION_NONE); - } - if (!mBootCompleted) { - break; - } - if (mScreenLocked) { - if (!mConnected) { - setEnabledFunctions(null, false, false); - } - } else { - if (!UsbManager.USB_FUNCTION_NONE.equals(mScreenUnlockedFunctions) - && (UsbManager.USB_FUNCTION_ADB.equals(mCurrentFunctions) - || (UsbManager.USB_FUNCTION_MTP.equals(mCurrentFunctions) - && !mUsbDataUnlocked))) { - // Set the screen unlocked functions if current function is charging. - setScreenUnlockedFunctions(); - } - } - break; case MSG_UPDATE_USER_RESTRICTIONS: // Restart the USB stack if USB transfer is enabled but no longer allowed. final boolean forceRestart = mUsbDataUnlocked @@ -1111,13 +1001,7 @@ public class UsbDeviceManager implements ActivityManagerInternal.ScreenObserver updateUsbStateBroadcastIfNeeded(false); mPendingBootBroadcast = false; } - - if (!mScreenLocked - && !UsbManager.USB_FUNCTION_NONE.equals(mScreenUnlockedFunctions)) { - setScreenUnlockedFunctions(); - } else { - setEnabledFunctions(null, false, false); - } + setEnabledFunctions(null, false, false); if (mCurrentAccessory != null) { getCurrentSettings().accessoryAttached(mCurrentAccessory); } @@ -1127,15 +1011,16 @@ public class UsbDeviceManager implements ActivityManagerInternal.ScreenObserver break; case MSG_USER_SWITCHED: { if (mCurrentUser != msg.arg1) { - if (DEBUG) { - Slog.v(TAG, "Current user switched to " + msg.arg1); + // Restart the USB stack and re-apply user restrictions for MTP or PTP. + if (mUsbDataUnlocked + && isUsbDataTransferActive() + && mCurrentUser != UserHandle.USER_NULL) { + Slog.v(TAG, "Current user switched to " + msg.arg1 + + "; resetting USB host stack for MTP or PTP"); + // avoid leaking sensitive data from previous user + setEnabledFunctions(null, true, false); } mCurrentUser = msg.arg1; - mScreenLocked = true; - mScreenUnlockedFunctions = mSettings.getString( - String.format(Locale.ENGLISH, UNLOCKED_CONFIG_PREF, mCurrentUser), - UsbManager.USB_FUNCTION_NONE); - setEnabledFunctions(null, false, false); } break; } @@ -1187,12 +1072,20 @@ public class UsbDeviceManager implements ActivityManagerInternal.ScreenObserver titleRes = com.android.internal.R.string.usb_unsupported_audio_accessory_title; id = SystemMessage.NOTE_USB_AUDIO_ACCESSORY_NOT_SUPPORTED; } else if (mConnected) { - if (UsbManager.containsFunction(mCurrentFunctions, - UsbManager.USB_FUNCTION_MTP) && mUsbDataUnlocked) { + if (!mUsbDataUnlocked) { + if (mSourcePower) { + titleRes = com.android.internal.R.string.usb_supplying_notification_title; + id = SystemMessage.NOTE_USB_SUPPLYING; + } else { + titleRes = com.android.internal.R.string.usb_charging_notification_title; + id = SystemMessage.NOTE_USB_CHARGING; + } + } else if (UsbManager.containsFunction(mCurrentFunctions, + UsbManager.USB_FUNCTION_MTP)) { titleRes = com.android.internal.R.string.usb_mtp_notification_title; id = SystemMessage.NOTE_USB_MTP; } else if (UsbManager.containsFunction(mCurrentFunctions, - UsbManager.USB_FUNCTION_PTP) && mUsbDataUnlocked) { + UsbManager.USB_FUNCTION_PTP)) { titleRes = com.android.internal.R.string.usb_ptp_notification_title; id = SystemMessage.NOTE_USB_PTP; } else if (UsbManager.containsFunction(mCurrentFunctions, @@ -1343,7 +1236,7 @@ public class UsbDeviceManager implements ActivityManagerInternal.ScreenObserver } } - private String getChargingFunctions() { + private String getDefaultFunctions() { String func = SystemProperties.get(getPersistProp(true), UsbManager.USB_FUNCTION_NONE); // if ADB is enabled, reset functions to ADB @@ -1360,8 +1253,6 @@ public class UsbDeviceManager implements ActivityManagerInternal.ScreenObserver pw.println(" mCurrentFunctions: " + mCurrentFunctions); pw.println(" mCurrentOemFunctions: " + mCurrentOemFunctions); pw.println(" mCurrentFunctionsApplied: " + mCurrentFunctionsApplied); - pw.println(" mScreenUnlockedFunctions: " + mScreenUnlockedFunctions); - pw.println(" mScreenLocked: " + mScreenLocked); pw.println(" mConnected: " + mConnected); pw.println(" mConfigured: " + mConfigured); pw.println(" mUsbDataUnlocked: " + mUsbDataUnlocked); @@ -1418,17 +1309,6 @@ public class UsbDeviceManager implements ActivityManagerInternal.ScreenObserver mHandler.sendMessage(MSG_SET_CURRENT_FUNCTIONS, functions, usbDataUnlocked); } - /** - * Sets the functions which are set when the screen is unlocked. - * @param functions Functions to set. - */ - public void setScreenUnlockedFunctions(String functions) { - if (DEBUG) { - Slog.d(TAG, "setScreenUnlockedFunctions(" + functions + ")"); - } - mHandler.sendMessage(MSG_SET_SCREEN_UNLOCKED_FUNCTIONS, functions); - } - private void readOemUsbOverrideConfig() { String[] configList = mContext.getResources().getStringArray( com.android.internal.R.array.config_oemUsbModeOverride); diff --git a/services/usb/java/com/android/server/usb/UsbService.java b/services/usb/java/com/android/server/usb/UsbService.java index 039597cf473a..e4fcea77fa44 100644 --- a/services/usb/java/com/android/server/usb/UsbService.java +++ b/services/usb/java/com/android/server/usb/UsbService.java @@ -87,11 +87,6 @@ public class UsbService extends IUsbManager.Stub { public void onStopUser(int userHandle) { mUsbService.onStopUser(UserHandle.of(userHandle)); } - - @Override - public void onUnlockUser(int userHandle) { - mUsbService.onUnlockUser(userHandle); - } } private static final String TAG = "UsbService"; @@ -210,13 +205,6 @@ public class UsbService extends IUsbManager.Stub { } } - /** Called when a user is unlocked. */ - public void onUnlockUser(int user) { - if (mDeviceManager != null) { - mDeviceManager.onUnlockUser(user); - } - } - /* Returns a list of all currently attached USB devices (host mdoe) */ @Override public void getDeviceList(Bundle devices) { @@ -401,23 +389,6 @@ public class UsbService extends IUsbManager.Stub { } } - @Override - public void setScreenUnlockedFunctions(String function) { - mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null); - - if (!isSupportedCurrentFunction(function)) { - Slog.w(TAG, "Caller of setScreenUnlockedFunctions() requested unsupported USB function:" - + function); - function = UsbManager.USB_FUNCTION_NONE; - } - - if (mDeviceManager != null) { - mDeviceManager.setScreenUnlockedFunctions(function); - } else { - throw new IllegalStateException("USB device mode not supported"); - } - } - private static boolean isSupportedCurrentFunction(String function) { if (function == null) return true; |