diff --git a/ability/DistributedScheduler/entry/src/main/config.json b/ability/DistributedScheduler/entry/src/main/config.json index 560cf9f0255857b7e50588a3d02d055621133e48..884032390298f126dea4d5d8b879dff614b6d555 100644 --- a/ability/DistributedScheduler/entry/src/main/config.json +++ b/ability/DistributedScheduler/entry/src/main/config.json @@ -14,7 +14,8 @@ "video_support" ], "deviceType": [ - "default" + "default", + "tablet" ], "distro": { "deliveryWithInstall": true, @@ -46,7 +47,10 @@ { "name": ".RemoteAbility", "type": "service", - "visible": true + "visible": true, + "permissions": [ + "zidane.permission.MainAbility" + ] }, { "name": ".PageAbility", @@ -71,6 +75,14 @@ }, { "name": "ohos.permission.DISTRIBUTED_DEVICE_STATE_CHANGE" + }, + { + "name": "zidane.permission.MainAbility" + } + ], + "defPermissions": [ + { + "name": "zidane.permission.MainAbility" } ] } diff --git a/ability/DistributedScheduler/entry/src/main/idl/ohos/samples/distributeddevices/IRemoteAgent.idl b/ability/DistributedScheduler/entry/src/main/idl/ohos/samples/distributedscheduler/IRemoteAgent.idl similarity index 100% rename from ability/DistributedScheduler/entry/src/main/idl/ohos/samples/distributeddevices/IRemoteAgent.idl rename to ability/DistributedScheduler/entry/src/main/idl/ohos/samples/distributedscheduler/IRemoteAgent.idl diff --git a/ability/DistributedScheduler/entry/src/main/java/ohos/samples/distributedscheduler/RemoteAbility.java b/ability/DistributedScheduler/entry/src/main/java/ohos/samples/distributedscheduler/RemoteAbility.java index f361d67db533f438528ef7464716085c36baca89..dad53609cdb0d3e69e330e59d7a1e4917f759a17 100644 --- a/ability/DistributedScheduler/entry/src/main/java/ohos/samples/distributedscheduler/RemoteAbility.java +++ b/ability/DistributedScheduler/entry/src/main/java/ohos/samples/distributedscheduler/RemoteAbility.java @@ -19,6 +19,8 @@ import ohos.aafwk.ability.Ability; import ohos.aafwk.content.Intent; import ohos.agp.window.dialog.ToastDialog; import ohos.app.Context; +import ohos.eventhandler.EventHandler; +import ohos.eventhandler.EventRunner; import ohos.hiviewdfx.HiLog; import ohos.hiviewdfx.HiLogLabel; import ohos.rpc.IRemoteObject; @@ -34,10 +36,11 @@ public class RemoteAbility extends Ability { private static final String DESCRIPTOR = "ohos.samples.distributedscheduler.RemoteAbility"; + RemoteAgentStub remoteAgentStub = new RemoteAgentStub(DESCRIPTOR) { @Override public void setRemoteObject(String param) throws RemoteException { - showTips(RemoteAbility.this, param); + new EventHandler(EventRunner.getMainEventRunner()).postTask(()->showTips(RemoteAbility.this, param)); } }; diff --git a/ability/DistributedScheduler/entry/src/main/java/ohos/samples/distributedscheduler/slice/MainAbilitySlice.java b/ability/DistributedScheduler/entry/src/main/java/ohos/samples/distributedscheduler/slice/MainAbilitySlice.java index bf3b1a9fdc6b17aff10412f3938bce7d8b66a674..432c2c430e52f8badc0ec2a97d1e8268347ca111 100644 --- a/ability/DistributedScheduler/entry/src/main/java/ohos/samples/distributedscheduler/slice/MainAbilitySlice.java +++ b/ability/DistributedScheduler/entry/src/main/java/ohos/samples/distributedscheduler/slice/MainAbilitySlice.java @@ -15,6 +15,9 @@ package ohos.samples.distributedscheduler.slice; +import ohos.agp.window.dialog.IDialog; +import ohos.agp.window.dialog.ListDialog; +import ohos.distributedschedule.interwork.IInitCallback; import ohos.samples.distributedscheduler.MainAbility; import ohos.samples.distributedscheduler.RemoteAgentProxy; import ohos.samples.distributedscheduler.ResourceTable; @@ -40,13 +43,15 @@ import ohos.hiviewdfx.HiLogLabel; import ohos.rpc.IRemoteObject; import ohos.rpc.RemoteException; -import java.security.SecureRandom; import java.util.List; +import static ohos.agp.components.ComponentContainer.LayoutConfig.MATCH_CONTENT; + /** * MainAbilitySlice */ public class MainAbilitySlice extends AbilitySlice implements IAbilityContinuation { + private static final int DIALOG_WIDTH = 900; private static final String TAG = MainAbility.class.getSimpleName(); private static final HiLogLabel LABEL_LOG = new HiLogLabel(3, 0xD000F00, TAG); @@ -57,14 +62,18 @@ public class MainAbilitySlice extends AbilitySlice implements IAbilityContinuati private static final String REMOTE_BUNDLE = "ohos.samples.distributedscheduler"; - private static final String REMOTE_SERVICE = "RemoteAbility"; + private static final String REMOTE_SERVICE = "ohos.samples.distributedscheduler.RemoteAbility"; - private static final String REMOTE_SERVICE_FA = "PageAbility"; + private static final String REMOTE_SERVICE_FA = "ohos.samples.distributedscheduler.PageAbility"; private Text text; private String param; + private String selectDeviceId; + + private RemoteAgentProxy remoteAgentProxy = null; + private EventHandler eventHandler = new EventHandler(EventRunner.current()) { @Override protected void processEvent(InnerEvent event) { @@ -85,11 +94,13 @@ public class MainAbilitySlice extends AbilitySlice implements IAbilityContinuati public void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ohos.samples.distributedscheduler.ResourceTable.Layout_main_ability_slice); - initComponents(); } private void initComponents() { + Component choiceDeviceButton = findComponentById(ResourceTable.Id_choice_device); + choiceDeviceButton.setClickedListener(component -> choiceDevice()); + Component startRemoteFAButton = findComponentById(ResourceTable.Id_start_fa_button); startRemoteFAButton.setClickedListener(component -> startRemoteFA()); @@ -102,16 +113,65 @@ public class MainAbilitySlice extends AbilitySlice implements IAbilityContinuati Component disconnectRemotePAButton = findComponentById(ResourceTable.Id_disconnect_pa_button); Component continueFAButton = findComponentById(ResourceTable.Id_continue_fa_button); connectRemotePAButton.setClickedListener(component -> connectService()); - disconnectRemotePAButton.setClickedListener(component -> disconnectAbility(connection)); - continueFAButton.setClickedListener(component -> continueAbility(getRemoteDeviceId())); + disconnectRemotePAButton.setClickedListener(component -> disConnectAbility()); + continueFAButton.setClickedListener(component -> continueAbility(selectDeviceId)); text = (Text) findComponentById(ResourceTable.Id_text); text.setText(param); + + } + + private void disConnectAbility() { + disconnectAbility(connection); + remoteAgentProxy = null; + } + + private void choiceDevice() { + List infoList = DeviceManager.getDeviceList(DeviceInfo.FLAG_GET_ALL_DEVICE); + if ((infoList == null) || (infoList.size() == 0)) { + selectDeviceId = null; + } + String[] items = new String[infoList.size()]; + int i = 0; + for (DeviceInfo info:infoList) { + items[i] = info.getDeviceName(); + } + ListDialog listDialog = new ListDialog(getContext()); + listDialog.setItems(items); + listDialog.setTitleText("Choice a device"); + listDialog.setSize(DIALOG_WIDTH,MATCH_CONTENT); + listDialog.setAutoClosable(true); + listDialog.setOnSingleSelectListener((IDialog dailog, int position)->{ + selectDeviceId = infoList.get(position).getDeviceId(); + try { + HiLog.info(LABEL_LOG, "initDistributedEnvironmentClick begin "); + DeviceManager.initDistributedEnvironment(selectDeviceId,iInitCallback); + dailog.destroy(); + } catch (RemoteException e) { + HiLog.info(LABEL_LOG, "RemoteException happen"); + e.printStackTrace(); + } + }); + listDialog.show(); } + private IInitCallback iInitCallback = new IInitCallback() { + @Override + public void onInitSuccess(String deviceId) { + HiLog.info(LABEL_LOG, "device id success: " + deviceId); + eventHandler.postTask(()->showTips(getContext(), "device id onInitSuccess")); + } + + @Override + public void onInitFailure(String deviceId, int errorCode) { + HiLog.info(LABEL_LOG, "device id failed: " + deviceId + "errorCode: " + errorCode); + eventHandler.postTask(()->showTips(getContext(), "device id failed,errorCode="+errorCode)); + } + }; + private Intent getRemotePageIntent(String bundleName, String serviceName) { Operation operation = new Intent.OperationBuilder() - .withDeviceId(getRemoteDeviceId()) + .withDeviceId(selectDeviceId) .withBundleName(bundleName) .withAbilityName(serviceName) .withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE) @@ -128,7 +188,7 @@ public class MainAbilitySlice extends AbilitySlice implements IAbilityContinuati private Intent getRemoteServiceIntent(String bundleName, String serviceName) { Operation operation = new Intent.OperationBuilder() - .withDeviceId(getRemoteDeviceId()) + .withDeviceId(selectDeviceId) .withBundleName(bundleName) .withAbilityName(serviceName) .withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE) @@ -153,21 +213,12 @@ public class MainAbilitySlice extends AbilitySlice implements IAbilityContinuati connectAbility(intent, connection); } - private String getRemoteDeviceId() { - List infoList = DeviceManager.getDeviceList(DeviceInfo.FLAG_GET_ALL_DEVICE); - if ((infoList == null) || (infoList.size() == 0)) { - return ""; - } - int random = new SecureRandom().nextInt(infoList.size()); - return infoList.get(random).getDeviceId(); - } - private IAbilityConnection connection = new IAbilityConnection() { @Override public void onAbilityConnectDone(ElementName elementName, IRemoteObject iRemoteObject, int resultCode) { HiLog.info(LABEL_LOG, "%{public}s", "onAbilityConnectDone resultCode : " + resultCode); eventHandler.sendEvent(EVENT_ABILITY_CONNECT_DONE); - RemoteAgentProxy remoteAgentProxy = new RemoteAgentProxy(iRemoteObject); + remoteAgentProxy = new RemoteAgentProxy(iRemoteObject); try { remoteAgentProxy.setRemoteObject("This param from client"); } catch (RemoteException e) { @@ -179,6 +230,7 @@ public class MainAbilitySlice extends AbilitySlice implements IAbilityContinuati public void onAbilityDisconnectDone(ElementName elementName, int resultCode) { HiLog.info(LABEL_LOG, "%{public}s", "onAbilityDisconnectDone resultCode : " + resultCode); eventHandler.sendEvent(EVENT_ABILITY_DISCONNECT_DONE); + remoteAgentProxy = null; } }; @@ -212,4 +264,10 @@ public class MainAbilitySlice extends AbilitySlice implements IAbilityContinuati public void onCompleteContinuation(int code) { terminate(); } + + @Override + public void onStop() { + super.onStop(); + remoteAgentProxy = null; + } } diff --git a/ability/DistributedScheduler/entry/src/main/resources/base/layout/main_ability_slice.xml b/ability/DistributedScheduler/entry/src/main/resources/base/layout/main_ability_slice.xml index 09904c73bef0216ee65ae3ae027da55e8a1a8df8..03629dc06ae63fa0c8a6615474db44328b5d8f7a 100644 --- a/ability/DistributedScheduler/entry/src/main/resources/base/layout/main_ability_slice.xml +++ b/ability/DistributedScheduler/entry/src/main/resources/base/layout/main_ability_slice.xml @@ -20,6 +20,19 @@ ohos:width="match_parent" ohos:orientation="vertical"> +