Loading services/tests/servicestests/src/com/android/server/uwb/UwbServiceImplTest.java +1 −0 Original line number Diff line number Diff line Loading @@ -82,6 +82,7 @@ public class UwbServiceImplTest { MockitoAnnotations.initMocks(this); when(mUwbInjector.getVendorService()).thenReturn(mVendorService); when(mUwbInjector.checkUwbRangingPermissionForDataDelivery(any(), any())).thenReturn(true); when(mUwbInjector.isPersistedUwbStateEnabled()).thenReturn(true); when(mVendorService.asBinder()).thenReturn(mVendorServiceBinder); mUwbServiceImpl = new UwbServiceImpl(mContext, mUwbInjector); } Loading services/uwb/java/com/android/server/uwb/UwbInjector.java +15 −0 Original line number Diff line number Diff line Loading @@ -21,10 +21,13 @@ import static android.content.PermissionChecker.PERMISSION_GRANTED; import android.annotation.NonNull; import android.content.AttributionSource; import android.content.ContentResolver; import android.content.Context; import android.content.PermissionChecker; import android.os.IBinder; import android.os.ServiceManager; import android.provider.Settings; import android.uwb.AdapterState; import android.uwb.IUwbAdapter; Loading Loading @@ -80,4 +83,16 @@ public class UwbInjector { mContext, UWB_RANGING, -1, attributionSource, message); return permissionCheckResult == PERMISSION_GRANTED; } /** Returns true if UWB state saved in Settings is enabled. */ public boolean isPersistedUwbStateEnabled() { final ContentResolver cr = mContext.getContentResolver(); try { return Settings.Global.getInt(cr, Settings.Global.UWB_ENABLED) == AdapterState.STATE_ENABLED_ACTIVE; } catch (Settings.SettingNotFoundException e) { Settings.Global.putInt(cr, Settings.Global.UWB_ENABLED, AdapterState.STATE_DISABLED); return false; } } } services/uwb/java/com/android/server/uwb/UwbServiceImpl.java +13 −1 Original line number Diff line number Diff line Loading @@ -18,13 +18,16 @@ package com.android.server.uwb; import android.annotation.NonNull; import android.content.AttributionSource; import android.content.ContentResolver; import android.content.Context; import android.os.Binder; import android.os.IBinder; import android.os.PersistableBundle; import android.os.RemoteException; import android.provider.Settings; import android.util.ArrayMap; import android.util.Log; import android.uwb.AdapterState; import android.uwb.IUwbAdapter; import android.uwb.IUwbAdapterStateCallbacks; import android.uwb.IUwbRangingCallbacks; Loading Loading @@ -225,13 +228,15 @@ public class UwbServiceImpl extends IUwbAdapter.Stub implements IBinder.DeathRec mVendorUwbAdapter = null; } private synchronized IUwbAdapter getVendorUwbAdapter() throws IllegalStateException { private synchronized IUwbAdapter getVendorUwbAdapter() throws IllegalStateException, RemoteException { if (mVendorUwbAdapter != null) return mVendorUwbAdapter; mVendorUwbAdapter = mUwbInjector.getVendorService(); if (mVendorUwbAdapter == null) { throw new IllegalStateException("No vendor service found!"); } Log.i(TAG, "Retrieved vendor service"); mVendorUwbAdapter.setEnabled(mUwbInjector.isPersistedUwbStateEnabled()); linkToVendorServiceDeath(); return mVendorUwbAdapter; } Loading Loading @@ -320,6 +325,13 @@ public class UwbServiceImpl extends IUwbAdapter.Stub implements IBinder.DeathRec @Override public synchronized void setEnabled(boolean enabled) throws RemoteException { persistUwbState(enabled); getVendorUwbAdapter().setEnabled(enabled); } private void persistUwbState(boolean enabled) { final ContentResolver cr = mContext.getContentResolver(); int state = enabled ? AdapterState.STATE_ENABLED_ACTIVE : AdapterState.STATE_DISABLED; Settings.Global.putInt(cr, Settings.Global.UWB_ENABLED, state); } } Loading
services/tests/servicestests/src/com/android/server/uwb/UwbServiceImplTest.java +1 −0 Original line number Diff line number Diff line Loading @@ -82,6 +82,7 @@ public class UwbServiceImplTest { MockitoAnnotations.initMocks(this); when(mUwbInjector.getVendorService()).thenReturn(mVendorService); when(mUwbInjector.checkUwbRangingPermissionForDataDelivery(any(), any())).thenReturn(true); when(mUwbInjector.isPersistedUwbStateEnabled()).thenReturn(true); when(mVendorService.asBinder()).thenReturn(mVendorServiceBinder); mUwbServiceImpl = new UwbServiceImpl(mContext, mUwbInjector); } Loading
services/uwb/java/com/android/server/uwb/UwbInjector.java +15 −0 Original line number Diff line number Diff line Loading @@ -21,10 +21,13 @@ import static android.content.PermissionChecker.PERMISSION_GRANTED; import android.annotation.NonNull; import android.content.AttributionSource; import android.content.ContentResolver; import android.content.Context; import android.content.PermissionChecker; import android.os.IBinder; import android.os.ServiceManager; import android.provider.Settings; import android.uwb.AdapterState; import android.uwb.IUwbAdapter; Loading Loading @@ -80,4 +83,16 @@ public class UwbInjector { mContext, UWB_RANGING, -1, attributionSource, message); return permissionCheckResult == PERMISSION_GRANTED; } /** Returns true if UWB state saved in Settings is enabled. */ public boolean isPersistedUwbStateEnabled() { final ContentResolver cr = mContext.getContentResolver(); try { return Settings.Global.getInt(cr, Settings.Global.UWB_ENABLED) == AdapterState.STATE_ENABLED_ACTIVE; } catch (Settings.SettingNotFoundException e) { Settings.Global.putInt(cr, Settings.Global.UWB_ENABLED, AdapterState.STATE_DISABLED); return false; } } }
services/uwb/java/com/android/server/uwb/UwbServiceImpl.java +13 −1 Original line number Diff line number Diff line Loading @@ -18,13 +18,16 @@ package com.android.server.uwb; import android.annotation.NonNull; import android.content.AttributionSource; import android.content.ContentResolver; import android.content.Context; import android.os.Binder; import android.os.IBinder; import android.os.PersistableBundle; import android.os.RemoteException; import android.provider.Settings; import android.util.ArrayMap; import android.util.Log; import android.uwb.AdapterState; import android.uwb.IUwbAdapter; import android.uwb.IUwbAdapterStateCallbacks; import android.uwb.IUwbRangingCallbacks; Loading Loading @@ -225,13 +228,15 @@ public class UwbServiceImpl extends IUwbAdapter.Stub implements IBinder.DeathRec mVendorUwbAdapter = null; } private synchronized IUwbAdapter getVendorUwbAdapter() throws IllegalStateException { private synchronized IUwbAdapter getVendorUwbAdapter() throws IllegalStateException, RemoteException { if (mVendorUwbAdapter != null) return mVendorUwbAdapter; mVendorUwbAdapter = mUwbInjector.getVendorService(); if (mVendorUwbAdapter == null) { throw new IllegalStateException("No vendor service found!"); } Log.i(TAG, "Retrieved vendor service"); mVendorUwbAdapter.setEnabled(mUwbInjector.isPersistedUwbStateEnabled()); linkToVendorServiceDeath(); return mVendorUwbAdapter; } Loading Loading @@ -320,6 +325,13 @@ public class UwbServiceImpl extends IUwbAdapter.Stub implements IBinder.DeathRec @Override public synchronized void setEnabled(boolean enabled) throws RemoteException { persistUwbState(enabled); getVendorUwbAdapter().setEnabled(enabled); } private void persistUwbState(boolean enabled) { final ContentResolver cr = mContext.getContentResolver(); int state = enabled ? AdapterState.STATE_ENABLED_ACTIVE : AdapterState.STATE_DISABLED; Settings.Global.putInt(cr, Settings.Global.UWB_ENABLED, state); } }