1616
1717package com .android .server .usb ;
1818
19- import android .app .PendingIntent ;
2019import android .app .Notification ;
2120import android .app .NotificationManager ;
21+ import android .app .PendingIntent ;
2222import android .content .BroadcastReceiver ;
2323import android .content .ComponentName ;
2424import android .content .ContentResolver ;
3030import android .database .ContentObserver ;
3131import android .hardware .usb .UsbAccessory ;
3232import android .hardware .usb .UsbManager ;
33- import android .net .Uri ;
34- import android .os .Binder ;
35- import android .os .Bundle ;
3633import android .os .FileUtils ;
3734import android .os .Handler ;
3835import android .os .HandlerThread ;
3936import android .os .Looper ;
4037import android .os .Message ;
41- import android .os .Parcelable ;
4238import android .os .ParcelFileDescriptor ;
4339import android .os .Process ;
44- import android .os .UserHandle ;
45- import android .os .storage .StorageManager ;
46- import android .os .storage .StorageVolume ;
4740import android .os .SystemClock ;
4841import android .os .SystemProperties ;
4942import android .os .UEventObserver ;
43+ import android .os .UserHandle ;
44+ import android .os .storage .StorageManager ;
45+ import android .os .storage .StorageVolume ;
5046import android .provider .Settings ;
5147import android .util .Pair ;
5248import android .util .Slog ;
5652import java .io .FileNotFoundException ;
5753import java .io .IOException ;
5854import java .io .PrintWriter ;
59- import java .util .ArrayList ;
55+ import java .util .HashMap ;
6056import java .util .LinkedList ;
6157import java .util .List ;
62- import java .util .HashMap ;
6358import java .util .Map ;
6459import java .util .Scanner ;
6560
@@ -106,9 +101,12 @@ public class UsbDeviceManager {
106101 private UsbHandler mHandler ;
107102 private boolean mBootCompleted ;
108103
104+ private final Object mLock = new Object ();
105+
109106 private final Context mContext ;
110107 private final ContentResolver mContentResolver ;
111- private final UsbSettingsManager mSettingsManager ;
108+ // @GuardedBy("mLock")
109+ private UsbSettingsManager mCurrentSettings ;
112110 private NotificationManager mNotificationManager ;
113111 private final boolean mHasUsbAccessory ;
114112 private boolean mUseUsbNotification ;
@@ -149,10 +147,9 @@ public void onUEvent(UEventObserver.UEvent event) {
149147 }
150148 };
151149
152- public UsbDeviceManager (Context context , UsbSettingsManager settingsManager ) {
150+ public UsbDeviceManager (Context context ) {
153151 mContext = context ;
154152 mContentResolver = context .getContentResolver ();
155- mSettingsManager = settingsManager ;
156153 PackageManager pm = mContext .getPackageManager ();
157154 mHasUsbAccessory = pm .hasSystemFeature (PackageManager .FEATURE_USB_ACCESSORY );
158155 initRndisAddress ();
@@ -175,6 +172,18 @@ public UsbDeviceManager(Context context, UsbSettingsManager settingsManager) {
175172 }
176173 }
177174
175+ public void setCurrentSettings (UsbSettingsManager settings ) {
176+ synchronized (mLock ) {
177+ mCurrentSettings = settings ;
178+ }
179+ }
180+
181+ private UsbSettingsManager getCurrentSettings () {
182+ synchronized (mLock ) {
183+ return mCurrentSettings ;
184+ }
185+ }
186+
178187 public void systemReady () {
179188 if (DEBUG ) Slog .d (TAG , "systemReady" );
180189
@@ -516,7 +525,7 @@ private void updateCurrentAccessory() {
516525 Slog .d (TAG , "entering USB accessory mode: " + mCurrentAccessory );
517526 // defer accessoryAttached if system is not ready
518527 if (mBootCompleted ) {
519- mSettingsManager .accessoryAttached (mCurrentAccessory );
528+ getCurrentSettings () .accessoryAttached (mCurrentAccessory );
520529 } // else handle in mBootCompletedReceiver
521530 } else {
522531 Slog .e (TAG , "nativeGetAccessoryStrings failed" );
@@ -529,7 +538,7 @@ private void updateCurrentAccessory() {
529538
530539 if (mCurrentAccessory != null ) {
531540 if (mBootCompleted ) {
532- mSettingsManager .accessoryDetached (mCurrentAccessory );
541+ getCurrentSettings () .accessoryDetached (mCurrentAccessory );
533542 }
534543 mCurrentAccessory = null ;
535544 mAccessoryStrings = null ;
@@ -618,7 +627,7 @@ public void handleMessage(Message msg) {
618627 case MSG_BOOT_COMPLETED :
619628 mBootCompleted = true ;
620629 if (mCurrentAccessory != null ) {
621- mSettingsManager .accessoryAttached (mCurrentAccessory );
630+ getCurrentSettings () .accessoryAttached (mCurrentAccessory );
622631 }
623632 if (mDebuggingManager != null ) {
624633 mDebuggingManager .setAdbEnabled (mAdbEnabled );
@@ -774,7 +783,7 @@ public ParcelFileDescriptor openAccessory(UsbAccessory accessory) {
774783 + currentAccessory ;
775784 throw new IllegalArgumentException (error );
776785 }
777- mSettingsManager .checkPermission (accessory );
786+ getCurrentSettings () .checkPermission (accessory );
778787 return nativeOpenAccessory ();
779788 }
780789
0 commit comments