diff options
author | Joy Babafemi <jbabs@google.com> | 2021-09-23 21:08:58 +0000 |
---|---|---|
committer | Joy Babafemi <jbabs@google.com> | 2021-09-24 16:45:16 +0000 |
commit | bd74ef8918ec3520ed21622c1b51b14841c7d4a7 (patch) | |
tree | 8a902a1ada2c632942f5b433449cda03854042ae /services/uwb | |
parent | e97b0e8fbbe9cef1e3c737be52c5e422af8a8ada (diff) |
DO NOT MERGE: Disable UWB in airplane mode.
Bug: 199933856
Test: Manual
Change-Id: I13c5986e28e7a1a9277518ca96da9a22c5e1c21e
Diffstat (limited to 'services/uwb')
-rw-r--r-- | services/uwb/java/com/android/server/uwb/UwbInjector.java | 6 | ||||
-rw-r--r-- | services/uwb/java/com/android/server/uwb/UwbServiceImpl.java | 29 |
2 files changed, 33 insertions, 2 deletions
diff --git a/services/uwb/java/com/android/server/uwb/UwbInjector.java b/services/uwb/java/com/android/server/uwb/UwbInjector.java index 379a2ff9411e..a7a0500483c2 100644 --- a/services/uwb/java/com/android/server/uwb/UwbInjector.java +++ b/services/uwb/java/com/android/server/uwb/UwbInjector.java @@ -96,4 +96,10 @@ public class UwbInjector { return true; } } + + /** Returns true if airplane mode is turned on. */ + public boolean isAirplaneModeOn() { + return Settings.Global.getInt(mContext.getContentResolver(), + Settings.Global.AIRPLANE_MODE_ON, 0) == 1; + } } diff --git a/services/uwb/java/com/android/server/uwb/UwbServiceImpl.java b/services/uwb/java/com/android/server/uwb/UwbServiceImpl.java index 8d2c80a5677b..70d6aab542a2 100644 --- a/services/uwb/java/com/android/server/uwb/UwbServiceImpl.java +++ b/services/uwb/java/com/android/server/uwb/UwbServiceImpl.java @@ -18,8 +18,11 @@ package com.android.server.uwb; import android.annotation.NonNull; import android.content.AttributionSource; +import android.content.BroadcastReceiver; import android.content.ContentResolver; import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; import android.os.Binder; import android.os.IBinder; import android.os.PersistableBundle; @@ -238,7 +241,7 @@ public class UwbServiceImpl extends IUwbAdapter.Stub implements IBinder.DeathRec Log.i(TAG, "Retrieved vendor service"); long token = Binder.clearCallingIdentity(); try { - mVendorUwbAdapter.setEnabled(mUwbInjector.isPersistedUwbStateEnabled()); + mVendorUwbAdapter.setEnabled(isEnabled()); } finally { Binder.restoreCallingIdentity(token); } @@ -249,6 +252,7 @@ public class UwbServiceImpl extends IUwbAdapter.Stub implements IBinder.DeathRec UwbServiceImpl(@NonNull Context context, @NonNull UwbInjector uwbInjector) { mContext = context; mUwbInjector = uwbInjector; + registerAirplaneModeReceiver(); } private void enforceUwbPrivilegedPermission() { @@ -331,7 +335,7 @@ public class UwbServiceImpl extends IUwbAdapter.Stub implements IBinder.DeathRec @Override public synchronized void setEnabled(boolean enabled) throws RemoteException { persistUwbState(enabled); - getVendorUwbAdapter().setEnabled(enabled); + getVendorUwbAdapter().setEnabled(isEnabled()); } private void persistUwbState(boolean enabled) { @@ -339,4 +343,25 @@ public class UwbServiceImpl extends IUwbAdapter.Stub implements IBinder.DeathRec int state = enabled ? AdapterState.STATE_ENABLED_ACTIVE : AdapterState.STATE_DISABLED; Settings.Global.putInt(cr, Settings.Global.UWB_ENABLED, state); } + + private void registerAirplaneModeReceiver() { + mContext.registerReceiver(new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + handleAirplaneModeEvent(); + } + }, new IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED)); + } + + private void handleAirplaneModeEvent() { + try { + getVendorUwbAdapter().setEnabled(isEnabled()); + } catch (RemoteException e) { + Log.e(TAG, "Unable to set UWB Adapter state.", e); + } + } + + private boolean isEnabled() { + return mUwbInjector.isPersistedUwbStateEnabled() && !mUwbInjector.isAirplaneModeOn(); + } } |