summaryrefslogtreecommitdiff
path: root/samples/VirtualDeviceManager/host/src/com/example/android/vdmdemo/host/VdmService.java
diff options
context:
space:
mode:
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.java127
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);
}
}
}