diff --git a/services/core/java/com/android/server/gpu/GpuService.java b/services/core/java/com/android/server/gpu/GpuService.java index 647727f795da6..0f73f379900ba 100644 --- a/services/core/java/com/android/server/gpu/GpuService.java +++ b/services/core/java/com/android/server/gpu/GpuService.java @@ -36,6 +36,7 @@ import android.os.Build; import android.os.Handler; import android.os.SystemProperties; import android.os.UserHandle; +import android.provider.DeviceConfig; import android.provider.Settings; import android.util.Base64; import android.util.Slog; @@ -69,9 +70,11 @@ public class GpuService extends SystemService { private final String mDriverPackageName; private final PackageManager mPackageManager; private final Object mLock = new Object(); + private final Object mDeviceConfigLock = new Object(); private ContentResolver mContentResolver; private long mGameDriverVersionCode; private SettingsObserver mSettingsObserver; + private DeviceConfigListener mDeviceConfigListener; @GuardedBy("mLock") private Blacklists mBlacklists; @@ -101,10 +104,11 @@ public class GpuService extends SystemService { public void onBootPhase(int phase) { if (phase == PHASE_BOOT_COMPLETED) { mContentResolver = mContext.getContentResolver(); - mSettingsObserver = new SettingsObserver(); if (mDriverPackageName == null || mDriverPackageName.isEmpty()) { return; } + mSettingsObserver = new SettingsObserver(); + mDeviceConfigListener = new DeviceConfigListener(); fetchGameDriverPackageProperties(); processBlacklists(); setBlacklist(); @@ -134,6 +138,24 @@ public class GpuService extends SystemService { } } + private final class DeviceConfigListener implements DeviceConfig.OnPropertyChangedListener { + + DeviceConfigListener() { + super(); + DeviceConfig.addOnPropertyChangedListener(DeviceConfig.NAMESPACE_GAME_DRIVER, + mContext.getMainExecutor(), this); + } + @Override + public void onPropertyChanged(String namespace, String name, String value) { + synchronized (mDeviceConfigLock) { + if (Settings.Global.GAME_DRIVER_BLACKLISTS.equals(name)) { + parseBlacklists(value != null ? value : ""); + setBlacklist(); + } + } + } + } + private final class PackageReceiver extends BroadcastReceiver { @Override public void onReceive(@NonNull final Context context, @NonNull final Intent intent) { @@ -229,13 +251,17 @@ public class GpuService extends SystemService { } private void processBlacklists() { - // TODO(b/121350991) Switch to DeviceConfig with property listener. - String base64String = - Settings.Global.getString(mContentResolver, Settings.Global.GAME_DRIVER_BLACKLISTS); - if (base64String == null || base64String.isEmpty()) { - return; + String base64String = DeviceConfig.getProperty(DeviceConfig.NAMESPACE_GAME_DRIVER, + Settings.Global.GAME_DRIVER_BLACKLISTS); + if (base64String == null) { + base64String = + Settings.Global.getString(mContentResolver, + Settings.Global.GAME_DRIVER_BLACKLISTS); } + parseBlacklists(base64String != null ? base64String : ""); + } + private void parseBlacklists(String base64String) { synchronized (mLock) { // Reset all blacklists mBlacklists = null;