diff options
Diffstat (limited to 'samples/VirtualDeviceManager/host/src/com/example/android/vdmdemo/host/VdmService.java')
-rw-r--r-- | samples/VirtualDeviceManager/host/src/com/example/android/vdmdemo/host/VdmService.java | 127 |
1 files changed, 53 insertions, 74 deletions
diff --git a/samples/VirtualDeviceManager/host/src/com/example/android/vdmdemo/host/VdmService.java b/samples/VirtualDeviceManager/host/src/com/example/android/vdmdemo/host/VdmService.java index 53c6d1d70..622a2a2f1 100644 --- a/samples/VirtualDeviceManager/host/src/com/example/android/vdmdemo/host/VdmService.java +++ b/samples/VirtualDeviceManager/host/src/com/example/android/vdmdemo/host/VdmService.java @@ -63,6 +63,8 @@ import com.google.common.util.concurrent.MoreExecutors; import dagger.hilt.android.AndroidEntryPoint; +import java.util.Arrays; +import java.util.Map; import java.util.Objects; import java.util.function.Consumer; @@ -96,7 +98,7 @@ public final class VdmService extends Hilt_VdmService { @Inject ConnectionManager mConnectionManager; @Inject RemoteIo mRemoteIo; @Inject AudioStreamer mAudioStreamer; - @Inject Settings mSettings; + @Inject PreferenceController mPreferenceController; @Inject DisplayRepository mDisplayRepository; private RemoteSensorManager mRemoteSensorManager = null; @@ -196,14 +198,47 @@ public final class VdmService extends Hilt_VdmService { mRemoteIo.addMessageConsumer(mRemoteEventConsumer); - if (mSettings.audioEnabled) { + if (mPreferenceController.getBoolean(R.string.pref_enable_client_audio)) { mAudioStreamer.start(); } + + mPreferenceController.addPreferenceObserver(this, Map.of( + R.string.pref_enable_recents, + b -> updateDevicePolicy(POLICY_TYPE_RECENTS, !(Boolean) b), + + R.string.pref_enable_cross_device_clipboard, + b -> updateDevicePolicy(POLICY_TYPE_CLIPBOARD, (Boolean) b), + + R.string.pref_show_pointer_icon, + b -> { + if (mVirtualDevice != null) mVirtualDevice.setShowPointerIcon((Boolean) b); + }, + + R.string.pref_enable_client_audio, + b -> { + if ((Boolean) b) mAudioStreamer.start(); else mAudioStreamer.stop(); + }, + + R.string.pref_display_ime_policy, + s -> { + if (mVirtualDevice != null) { + int policy = Integer.valueOf((String) s); + Arrays.stream(mDisplayRepository.getDisplayIds()).forEach( + displayId -> mVirtualDevice.setDisplayImePolicy(displayId, policy)); + } + }, + + R.string.pref_enable_client_sensors, v -> recreateVirtualDevice(), + R.string.pref_device_profile, v -> recreateVirtualDevice(), + R.string.pref_always_unlocked_device, v -> recreateVirtualDevice(), + R.string.pref_enable_custom_home, v -> recreateVirtualDevice() + )); } @Override public void onDestroy() { super.onDestroy(); + mPreferenceController.removePreferenceObserver(this); mConnectionManager.removeConnectionCallback(mConnectionCallback); closeVirtualDevice(); mRemoteIo.removeMessageConsumer(mRemoteEventConsumer); @@ -224,7 +259,7 @@ public final class VdmService extends Hilt_VdmService { mVirtualDevice, mRemoteIo, mPendingDisplayType, - mSettings); + mPreferenceController); mDisplayRepository.addDisplay(remoteDisplay); mPendingDisplayType = RemoteDisplay.DISPLAY_TYPE_APP; if (mPendingRemoteIntent != null) { @@ -241,10 +276,7 @@ public final class VdmService extends Hilt_VdmService { CompanionDeviceManager cdm = Objects.requireNonNull(getSystemService(CompanionDeviceManager.class)); RoleManager rm = Objects.requireNonNull(getSystemService(RoleManager.class)); - final String deviceProfile = - mSettings.deviceStreaming - ? AssociationRequest.DEVICE_PROFILE_NEARBY_DEVICE_STREAMING - : AssociationRequest.DEVICE_PROFILE_APP_STREAMING; + final String deviceProfile = mPreferenceController.getString(R.string.pref_device_profile); for (AssociationInfo associationInfo : cdm.getMyAssociations()) { // Flashing the device clears the role and the permissions, but not the CDM // associations. @@ -305,24 +337,24 @@ public final class VdmService extends Hilt_VdmService { .setDevicePolicy(POLICY_TYPE_AUDIO, DEVICE_POLICY_CUSTOM) .setAudioPlaybackSessionId(mAudioStreamer.getPlaybackSessionId()); - if (mSettings.alwaysUnlocked) { + if (mPreferenceController.getBoolean(R.string.pref_always_unlocked_device)) { virtualDeviceBuilder.setLockState(LOCK_STATE_ALWAYS_UNLOCKED); } - if (mSettings.customHome) { + if (mPreferenceController.getBoolean(R.string.pref_enable_custom_home)) { virtualDeviceBuilder.setHomeComponent( new ComponentName(this, CustomLauncherActivity.class)); } - if (!mSettings.includeInRecents) { + if (!mPreferenceController.getBoolean(R.string.pref_enable_recents)) { virtualDeviceBuilder.setDevicePolicy(POLICY_TYPE_RECENTS, DEVICE_POLICY_CUSTOM); } - if (mSettings.crossDeviceClipboardEnabled) { + if (mPreferenceController.getBoolean(R.string.pref_enable_cross_device_clipboard)) { virtualDeviceBuilder.setDevicePolicy(POLICY_TYPE_CLIPBOARD, DEVICE_POLICY_CUSTOM); } - if (mSettings.sensorsEnabled) { + if (mPreferenceController.getBoolean(R.string.pref_enable_client_sensors)) { for (SensorCapabilities sensor : mDeviceCapabilities.getSensorCapabilitiesList()) { virtualDeviceBuilder.addVirtualSensorConfig( new VirtualSensorConfig.Builder( @@ -353,7 +385,8 @@ public final class VdmService extends Hilt_VdmService { mRemoteSensorManager.setVirtualSensors(mVirtualDevice.getVirtualSensorList()); } - mVirtualDevice.setShowPointerIcon(mSettings.showPointerIcon); + mVirtualDevice.setShowPointerIcon( + mPreferenceController.getBoolean(R.string.pref_show_pointer_icon)); mVirtualDevice.addActivityListener( MoreExecutors.directExecutor(), @@ -447,73 +480,19 @@ public final class VdmService extends Hilt_VdmService { .ifPresent(d -> d.launchIntent(pendingIntent)); } - void setDisplayRotationEnabled(boolean enabled) { - mSettings.displayRotationEnabled = enabled; - } - - void setSensorsEnabled(boolean enabled) { - recreateVirtualDevice(() -> mSettings.sensorsEnabled = enabled); - } - - void setIncludeInRecents(boolean include) { - mSettings.includeInRecents = include; + private void recreateVirtualDevice() { if (mVirtualDevice != null) { - mVirtualDevice.setDevicePolicy( - POLICY_TYPE_RECENTS, include ? DEVICE_POLICY_DEFAULT : DEVICE_POLICY_CUSTOM); + closeVirtualDevice(); + if (mDeviceCapabilities != null) { + associateAndCreateVirtualDevice(); + } } } - void setCrossDeviceClipboardEnabled(boolean enabled) { - mSettings.crossDeviceClipboardEnabled = enabled; + private void updateDevicePolicy(int policyType, boolean custom) { if (mVirtualDevice != null) { mVirtualDevice.setDevicePolicy( - POLICY_TYPE_CLIPBOARD, enabled ? DEVICE_POLICY_CUSTOM : DEVICE_POLICY_DEFAULT); - } - } - - void setAlwaysUnlocked(boolean enabled) { - recreateVirtualDevice(() -> mSettings.alwaysUnlocked = enabled); - } - - void setDeviceStreaming(boolean enabled) { - recreateVirtualDevice(() -> mSettings.deviceStreaming = enabled); - } - - void setRecordEncoderOutput(boolean enabled) { - recreateVirtualDevice(() -> mSettings.recordEncoderOutput = enabled); - } - - void setShowPointerIcon(boolean enabled) { - mSettings.showPointerIcon = enabled; - if (mVirtualDevice != null) { - mVirtualDevice.setShowPointerIcon(enabled); - } - } - - void setAudioEnabled(boolean enabled) { - mSettings.audioEnabled = enabled; - if (enabled) { - mAudioStreamer.start(); - } else { - mAudioStreamer.stop(); - } - } - - void setCustomHome(boolean enabled) { - recreateVirtualDevice(() -> mSettings.customHome = enabled); - } - - private interface DeviceSettingsChange { - void apply(); - } - - private void recreateVirtualDevice(DeviceSettingsChange settingsChange) { - if (mVirtualDevice != null) { - closeVirtualDevice(); - } - settingsChange.apply(); - if (mDeviceCapabilities != null) { - associateAndCreateVirtualDevice(); + policyType, custom ? DEVICE_POLICY_CUSTOM : DEVICE_POLICY_DEFAULT); } } } |