From e31b63d00fe138afef7b8c235eeef85bec7171a9 Mon Sep 17 00:00:00 2001 From: Cole R Anderson Date: Sat, 4 Dec 2021 09:26:11 -0600 Subject: [PATCH] Fixed issue where profiles were changing operation type on save Fixed issue #409 - Profiles created with "Send Broadcast" or "Start Service" operation type revert to "Start Activity" on save. This was occurring because all intent profiles used the IntentOperationData data type and LocalSkillRegistry used this data type to match the profile with a skill. All intent profiles would match against all intent skills, so the first intent skill in the list (which was ActivityOperationSkill) would always be assigned to every intent data type. To fix this issue, new data types were created for all the intent operation skills. Associated DataFactory and SkillViewFragment classes were created as well. The IntentOperationDataTest was also updated. A intent operation utility class was created to house some shared code. --- .../intent/IntentOperationDataTest.java | 50 ++++++++++++-- .../ryey/easer/skills/LocalSkillRegistry.java | 7 +- .../operation/intent/ActivityLoader.java | 18 +++++ .../intent/ActivityOperationData.java | 24 +++++++ .../intent/ActivityOperationDataFactory.java | 27 ++++++++ .../ActivityOperationSkill.java | 20 +++--- .../intent/ActivitySkillViewFragment.java | 13 ++++ .../{operations => }/BroadcastLoader.java | 9 +-- .../intent/BroadcastOperationData.java | 24 +++++++ .../intent/BroadcastOperationDataFactory.java | 28 ++++++++ .../BroadcastOperationSkill.java | 22 +++---- .../intent/BroadcastSkillViewFragment.java | 13 ++++ .../operation/intent/IntentOperationData.java | 6 +- .../intent/IntentOperationDataFactory.java | 65 ------------------- .../intent/IntentOperationDataUtil.java | 24 +++++++ .../intent/IntentOperationSkill.java | 14 +--- .../intent/IntentSkillViewFragment.java | 12 ++-- .../operation/intent/ServiceLoader.java | 17 +++++ .../intent/ServiceOperationData.java | 24 +++++++ .../intent/ServiceOperationDataFactory.java | 27 ++++++++ .../intent/ServiceOperationSkill.java | 42 ++++++++++++ .../intent/ServiceSkillViewFragment.java | 13 ++++ .../intent/operations/ActivityLoader.java | 22 ------- .../intent/operations/ServiceLoader.java | 20 ------ .../operations/ServiceOperationSkill.java | 43 ------------ 25 files changed, 377 insertions(+), 207 deletions(-) create mode 100644 app/src/main/java/ryey/easer/skills/operation/intent/ActivityLoader.java create mode 100644 app/src/main/java/ryey/easer/skills/operation/intent/ActivityOperationData.java create mode 100644 app/src/main/java/ryey/easer/skills/operation/intent/ActivityOperationDataFactory.java rename app/src/main/java/ryey/easer/skills/operation/intent/{operations => }/ActivityOperationSkill.java (51%) create mode 100644 app/src/main/java/ryey/easer/skills/operation/intent/ActivitySkillViewFragment.java rename app/src/main/java/ryey/easer/skills/operation/intent/{operations => }/BroadcastLoader.java (74%) create mode 100644 app/src/main/java/ryey/easer/skills/operation/intent/BroadcastOperationData.java create mode 100644 app/src/main/java/ryey/easer/skills/operation/intent/BroadcastOperationDataFactory.java rename app/src/main/java/ryey/easer/skills/operation/intent/{operations => }/BroadcastOperationSkill.java (51%) create mode 100644 app/src/main/java/ryey/easer/skills/operation/intent/BroadcastSkillViewFragment.java delete mode 100644 app/src/main/java/ryey/easer/skills/operation/intent/IntentOperationDataFactory.java create mode 100644 app/src/main/java/ryey/easer/skills/operation/intent/IntentOperationDataUtil.java create mode 100644 app/src/main/java/ryey/easer/skills/operation/intent/ServiceLoader.java create mode 100644 app/src/main/java/ryey/easer/skills/operation/intent/ServiceOperationData.java create mode 100644 app/src/main/java/ryey/easer/skills/operation/intent/ServiceOperationDataFactory.java create mode 100644 app/src/main/java/ryey/easer/skills/operation/intent/ServiceOperationSkill.java create mode 100644 app/src/main/java/ryey/easer/skills/operation/intent/ServiceSkillViewFragment.java delete mode 100644 app/src/main/java/ryey/easer/skills/operation/intent/operations/ActivityLoader.java delete mode 100644 app/src/main/java/ryey/easer/skills/operation/intent/operations/ServiceLoader.java delete mode 100644 app/src/main/java/ryey/easer/skills/operation/intent/operations/ServiceOperationSkill.java diff --git a/app/src/androidTest/java/ryey/easer/skills/operation/intent/IntentOperationDataTest.java b/app/src/androidTest/java/ryey/easer/skills/operation/intent/IntentOperationDataTest.java index 9e3d9e850..1de7924df 100644 --- a/app/src/androidTest/java/ryey/easer/skills/operation/intent/IntentOperationDataTest.java +++ b/app/src/androidTest/java/ryey/easer/skills/operation/intent/IntentOperationDataTest.java @@ -19,6 +19,8 @@ package ryey.easer.skills.operation.intent; +import static org.junit.Assert.assertEquals; + import android.os.Parcel; import org.junit.Test; @@ -27,21 +29,57 @@ import ryey.easer.plugin.PluginDataFormat; import ryey.easer.skills.TestHelper; -import static org.junit.Assert.assertEquals; - public class IntentOperationDataTest { @Test - public void testParcel() { - IntentOperationData dummyData = new IntentOperationDataFactory().dummyData(); + public void testParcelActivity() { + IntentOperationData dummyData = new ActivityOperationDataFactory().dummyData(); + Parcel parcel = TestHelper.writeToParcel(dummyData); + IntentOperationData parceledData = IntentOperationData.CREATOR.createFromParcel(parcel); + assertEquals(dummyData, parceledData); + } + + @Test + public void testSerializeActivity() throws Exception { + ActivityOperationDataFactory factory = new ActivityOperationDataFactory(); + IntentOperationData dummyData = factory.dummyData(); + for (PluginDataFormat format : PluginDataFormat.values()) { + String serialized_data = dummyData.serialize(format); + IntentOperationData parsed_data = factory.parse(serialized_data, format, C.VERSION_CURRENT); + assertEquals(dummyData, parsed_data); + } + } + + @Test + public void testParcelBroadcast() { + IntentOperationData dummyData = new BroadcastOperationDataFactory().dummyData(); + Parcel parcel = TestHelper.writeToParcel(dummyData); + IntentOperationData parceledData = IntentOperationData.CREATOR.createFromParcel(parcel); + assertEquals(dummyData, parceledData); + } + + @Test + public void testSerializeBroadcast() throws Exception { + BroadcastOperationDataFactory factory = new BroadcastOperationDataFactory(); + IntentOperationData dummyData = factory.dummyData(); + for (PluginDataFormat format : PluginDataFormat.values()) { + String serialized_data = dummyData.serialize(format); + IntentOperationData parsed_data = factory.parse(serialized_data, format, C.VERSION_CURRENT); + assertEquals(dummyData, parsed_data); + } + } + + @Test + public void testParcelService() { + IntentOperationData dummyData = new ServiceOperationDataFactory().dummyData(); Parcel parcel = TestHelper.writeToParcel(dummyData); IntentOperationData parceledData = IntentOperationData.CREATOR.createFromParcel(parcel); assertEquals(dummyData, parceledData); } @Test - public void testSerialize() throws Exception { - IntentOperationDataFactory factory = new IntentOperationDataFactory(); + public void testSerializeService() throws Exception { + ServiceOperationDataFactory factory = new ServiceOperationDataFactory(); IntentOperationData dummyData = factory.dummyData(); for (PluginDataFormat format : PluginDataFormat.values()) { String serialized_data = dummyData.serialize(format); diff --git a/app/src/main/java/ryey/easer/skills/LocalSkillRegistry.java b/app/src/main/java/ryey/easer/skills/LocalSkillRegistry.java index 25ca7d660..9c10fcef3 100644 --- a/app/src/main/java/ryey/easer/skills/LocalSkillRegistry.java +++ b/app/src/main/java/ryey/easer/skills/LocalSkillRegistry.java @@ -58,14 +58,13 @@ import ryey.easer.skills.operation.bluetooth.BluetoothOperationSkill; import ryey.easer.skills.operation.bluetooth_connect.BluetoothConnectOperationSkill; import ryey.easer.skills.operation.brightness.BrightnessOperationSkill; -import ryey.easer.skills.operation.intent.IntentOperationSkill; import ryey.easer.skills.operation.cellular.CellularOperationSkill; import ryey.easer.skills.operation.command.CommandOperationSkill; import ryey.easer.skills.operation.hotspot.HotspotOperationSkill; import ryey.easer.skills.operation.http_request.HttpRequestOperationSkill; -import ryey.easer.skills.operation.intent.operations.ActivityOperationSkill; -import ryey.easer.skills.operation.intent.operations.BroadcastOperationSkill; -import ryey.easer.skills.operation.intent.operations.ServiceOperationSkill; +import ryey.easer.skills.operation.intent.ActivityOperationSkill; +import ryey.easer.skills.operation.intent.BroadcastOperationSkill; +import ryey.easer.skills.operation.intent.ServiceOperationSkill; import ryey.easer.skills.operation.launch_app.LaunchAppOperationSkill; import ryey.easer.skills.operation.media_control.MediaControlOperationSkill; import ryey.easer.skills.operation.network_transmission.NetworkTransmissionOperationSkill; diff --git a/app/src/main/java/ryey/easer/skills/operation/intent/ActivityLoader.java b/app/src/main/java/ryey/easer/skills/operation/intent/ActivityLoader.java new file mode 100644 index 000000000..02da62449 --- /dev/null +++ b/app/src/main/java/ryey/easer/skills/operation/intent/ActivityLoader.java @@ -0,0 +1,18 @@ +package ryey.easer.skills.operation.intent; + +import android.content.Context; + +import androidx.annotation.NonNull; + +public class ActivityLoader extends IntentLoader { + + public ActivityLoader(@NonNull Context context) { + super(context); + } + + @Override + public void _load(@NonNull ActivityOperationData data, @NonNull OnResultCallback callback) { + context.startActivity(this.getIntent(data)); + callback.onResult(true); + } +} diff --git a/app/src/main/java/ryey/easer/skills/operation/intent/ActivityOperationData.java b/app/src/main/java/ryey/easer/skills/operation/intent/ActivityOperationData.java new file mode 100644 index 000000000..56eeae23b --- /dev/null +++ b/app/src/main/java/ryey/easer/skills/operation/intent/ActivityOperationData.java @@ -0,0 +1,24 @@ +package ryey.easer.skills.operation.intent; + +import androidx.annotation.NonNull; + +import ryey.easer.commons.local_skill.IllegalStorageDataException; +import ryey.easer.commons.local_skill.dynamics.SolidDynamicsAssignment; +import ryey.easer.commons.local_skill.operationskill.OperationData; +import ryey.easer.plugin.PluginDataFormat; + +public class ActivityOperationData extends IntentOperationData { + ActivityOperationData(IntentData data) { + super(data); + } + + public ActivityOperationData(@NonNull String data, @NonNull PluginDataFormat format, int version) throws IllegalStorageDataException { + super(data, format, version); + } + + @NonNull + @Override + public OperationData applyDynamics(SolidDynamicsAssignment dynamicsAssignment) { + return new ActivityOperationData(((IntentOperationData) super.applyDynamics(dynamicsAssignment)).data); + } +} diff --git a/app/src/main/java/ryey/easer/skills/operation/intent/ActivityOperationDataFactory.java b/app/src/main/java/ryey/easer/skills/operation/intent/ActivityOperationDataFactory.java new file mode 100644 index 000000000..1a2582cb0 --- /dev/null +++ b/app/src/main/java/ryey/easer/skills/operation/intent/ActivityOperationDataFactory.java @@ -0,0 +1,27 @@ +package ryey.easer.skills.operation.intent; + +import androidx.annotation.NonNull; + +import ryey.easer.commons.local_skill.IllegalStorageDataException; +import ryey.easer.commons.local_skill.operationskill.OperationDataFactory; +import ryey.easer.plugin.PluginDataFormat; + +public class ActivityOperationDataFactory implements OperationDataFactory { + @NonNull + @Override + public Class dataClass() { + return ActivityOperationData.class; + } + + @NonNull + @Override + public ActivityOperationData dummyData() { + return new ActivityOperationData(IntentOperationDataUtil.getDummyIntentData()); + } + + @NonNull + @Override + public ActivityOperationData parse(@NonNull String data, @NonNull PluginDataFormat format, int version) throws IllegalStorageDataException { + return new ActivityOperationData(data, format, version); + } +} diff --git a/app/src/main/java/ryey/easer/skills/operation/intent/operations/ActivityOperationSkill.java b/app/src/main/java/ryey/easer/skills/operation/intent/ActivityOperationSkill.java similarity index 51% rename from app/src/main/java/ryey/easer/skills/operation/intent/operations/ActivityOperationSkill.java rename to app/src/main/java/ryey/easer/skills/operation/intent/ActivityOperationSkill.java index db8b430be..cf56d89c5 100644 --- a/app/src/main/java/ryey/easer/skills/operation/intent/operations/ActivityOperationSkill.java +++ b/app/src/main/java/ryey/easer/skills/operation/intent/ActivityOperationSkill.java @@ -1,4 +1,4 @@ -package ryey.easer.skills.operation.intent.operations; +package ryey.easer.skills.operation.intent; import android.content.Context; @@ -6,12 +6,10 @@ import ryey.easer.R; import ryey.easer.commons.local_skill.SkillView; +import ryey.easer.commons.local_skill.operationskill.OperationDataFactory; import ryey.easer.skills.operation.OperationLoader; -import ryey.easer.skills.operation.intent.IntentOperationData; -import ryey.easer.skills.operation.intent.IntentOperationSkill; -import ryey.easer.skills.operation.intent.IntentSkillViewFragment; -public class ActivityOperationSkill extends IntentOperationSkill { +public class ActivityOperationSkill extends IntentOperationSkill { @NonNull @Override public String id() { @@ -26,17 +24,19 @@ public int name() { @NonNull @Override - public OperationLoader loader(@NonNull Context context) { + public OperationLoader loader(@NonNull Context context) { return new ActivityLoader(context); } @NonNull @Override - public SkillView view() { - return new DummyIntentSkillViewFragment(); + public OperationDataFactory dataFactory() { + return new ActivityOperationDataFactory(); } - public static class DummyIntentSkillViewFragment extends IntentSkillViewFragment { - + @NonNull + @Override + public SkillView view() { + return new ActivitySkillViewFragment(); } } diff --git a/app/src/main/java/ryey/easer/skills/operation/intent/ActivitySkillViewFragment.java b/app/src/main/java/ryey/easer/skills/operation/intent/ActivitySkillViewFragment.java new file mode 100644 index 000000000..b4e1f8ca3 --- /dev/null +++ b/app/src/main/java/ryey/easer/skills/operation/intent/ActivitySkillViewFragment.java @@ -0,0 +1,13 @@ +package ryey.easer.skills.operation.intent; + +import androidx.annotation.NonNull; + +import ryey.easer.commons.local_skill.InvalidDataInputException; + +public class ActivitySkillViewFragment extends IntentSkillViewFragment { + @NonNull + @Override + public ActivityOperationData getData() throws InvalidDataInputException { + return new ActivityOperationData(super.getIntentData()); + } +} diff --git a/app/src/main/java/ryey/easer/skills/operation/intent/operations/BroadcastLoader.java b/app/src/main/java/ryey/easer/skills/operation/intent/BroadcastLoader.java similarity index 74% rename from app/src/main/java/ryey/easer/skills/operation/intent/operations/BroadcastLoader.java rename to app/src/main/java/ryey/easer/skills/operation/intent/BroadcastLoader.java index 80b6f6d1d..52b862a13 100644 --- a/app/src/main/java/ryey/easer/skills/operation/intent/operations/BroadcastLoader.java +++ b/app/src/main/java/ryey/easer/skills/operation/intent/BroadcastLoader.java @@ -17,24 +17,21 @@ * along with Easer. If not, see . */ -package ryey.easer.skills.operation.intent.operations; +package ryey.easer.skills.operation.intent; import android.content.Context; import androidx.annotation.NonNull; import ryey.easer.commons.local_skill.ValidData; -import ryey.easer.skills.operation.intent.IntentLoader; -import ryey.easer.skills.operation.intent.IntentOperationData; -public class BroadcastLoader extends IntentLoader { +public class BroadcastLoader extends IntentLoader { public BroadcastLoader(Context context) { super(context); } @Override - public void _load(@ValidData @NonNull IntentOperationData data, @NonNull OnResultCallback callback) { - + public void _load(@ValidData @NonNull BroadcastOperationData data, @NonNull OnResultCallback callback) { context.sendBroadcast(this.getIntent(data)); callback.onResult(true); } diff --git a/app/src/main/java/ryey/easer/skills/operation/intent/BroadcastOperationData.java b/app/src/main/java/ryey/easer/skills/operation/intent/BroadcastOperationData.java new file mode 100644 index 000000000..65f9c7b02 --- /dev/null +++ b/app/src/main/java/ryey/easer/skills/operation/intent/BroadcastOperationData.java @@ -0,0 +1,24 @@ +package ryey.easer.skills.operation.intent; + +import androidx.annotation.NonNull; + +import ryey.easer.commons.local_skill.IllegalStorageDataException; +import ryey.easer.commons.local_skill.dynamics.SolidDynamicsAssignment; +import ryey.easer.commons.local_skill.operationskill.OperationData; +import ryey.easer.plugin.PluginDataFormat; + +public class BroadcastOperationData extends IntentOperationData { + BroadcastOperationData(IntentData data) { + super(data); + } + + public BroadcastOperationData(@NonNull String data, @NonNull PluginDataFormat format, int version) throws IllegalStorageDataException { + super(data, format, version); + } + + @NonNull + @Override + public OperationData applyDynamics(SolidDynamicsAssignment dynamicsAssignment) { + return new BroadcastOperationData(((IntentOperationData) super.applyDynamics(dynamicsAssignment)).data); + } +} diff --git a/app/src/main/java/ryey/easer/skills/operation/intent/BroadcastOperationDataFactory.java b/app/src/main/java/ryey/easer/skills/operation/intent/BroadcastOperationDataFactory.java new file mode 100644 index 000000000..195575b98 --- /dev/null +++ b/app/src/main/java/ryey/easer/skills/operation/intent/BroadcastOperationDataFactory.java @@ -0,0 +1,28 @@ +package ryey.easer.skills.operation.intent; + +import androidx.annotation.NonNull; + +import ryey.easer.commons.local_skill.IllegalStorageDataException; +import ryey.easer.commons.local_skill.operationskill.OperationDataFactory; +import ryey.easer.plugin.PluginDataFormat; + +public class BroadcastOperationDataFactory implements OperationDataFactory { + + @NonNull + @Override + public Class dataClass() { + return BroadcastOperationData.class; + } + + @NonNull + @Override + public BroadcastOperationData dummyData() { + return new BroadcastOperationData(IntentOperationDataUtil.getDummyIntentData()); + } + + @NonNull + @Override + public BroadcastOperationData parse(@NonNull String data, @NonNull PluginDataFormat format, int version) throws IllegalStorageDataException { + return new BroadcastOperationData(data, format, version); + } +} diff --git a/app/src/main/java/ryey/easer/skills/operation/intent/operations/BroadcastOperationSkill.java b/app/src/main/java/ryey/easer/skills/operation/intent/BroadcastOperationSkill.java similarity index 51% rename from app/src/main/java/ryey/easer/skills/operation/intent/operations/BroadcastOperationSkill.java rename to app/src/main/java/ryey/easer/skills/operation/intent/BroadcastOperationSkill.java index d15f78b6d..5f8f06c3a 100644 --- a/app/src/main/java/ryey/easer/skills/operation/intent/operations/BroadcastOperationSkill.java +++ b/app/src/main/java/ryey/easer/skills/operation/intent/BroadcastOperationSkill.java @@ -1,4 +1,4 @@ -package ryey.easer.skills.operation.intent.operations; +package ryey.easer.skills.operation.intent; import android.content.Context; @@ -6,12 +6,10 @@ import ryey.easer.R; import ryey.easer.commons.local_skill.SkillView; +import ryey.easer.commons.local_skill.operationskill.OperationDataFactory; import ryey.easer.skills.operation.OperationLoader; -import ryey.easer.skills.operation.intent.IntentOperationData; -import ryey.easer.skills.operation.intent.IntentOperationSkill; -import ryey.easer.skills.operation.intent.IntentSkillViewFragment; -public class BroadcastOperationSkill extends IntentOperationSkill { +public class BroadcastOperationSkill extends IntentOperationSkill { @NonNull @Override public String id() { @@ -26,18 +24,20 @@ public int name() { @NonNull @Override - public OperationLoader loader(@NonNull Context context) { + public OperationLoader loader(@NonNull Context context) { return new BroadcastLoader(context); } @NonNull @Override - public SkillView view() { - return new DummyIntentSkillViewFragment(); + public OperationDataFactory dataFactory() { + return new BroadcastOperationDataFactory(); } - public static class DummyIntentSkillViewFragment extends IntentSkillViewFragment - { - + @NonNull + @Override + public SkillView view() { + return new BroadcastSkillViewFragment(); } + } diff --git a/app/src/main/java/ryey/easer/skills/operation/intent/BroadcastSkillViewFragment.java b/app/src/main/java/ryey/easer/skills/operation/intent/BroadcastSkillViewFragment.java new file mode 100644 index 000000000..0ab9370b1 --- /dev/null +++ b/app/src/main/java/ryey/easer/skills/operation/intent/BroadcastSkillViewFragment.java @@ -0,0 +1,13 @@ +package ryey.easer.skills.operation.intent; + +import androidx.annotation.NonNull; + +import ryey.easer.commons.local_skill.InvalidDataInputException; + +public class BroadcastSkillViewFragment extends IntentSkillViewFragment { + @NonNull + @Override + public BroadcastOperationData getData() throws InvalidDataInputException { + return new BroadcastOperationData(super.getIntentData()); + } +} diff --git a/app/src/main/java/ryey/easer/skills/operation/intent/IntentOperationData.java b/app/src/main/java/ryey/easer/skills/operation/intent/IntentOperationData.java index 9f5b04bd8..1dae6e23c 100644 --- a/app/src/main/java/ryey/easer/skills/operation/intent/IntentOperationData.java +++ b/app/src/main/java/ryey/easer/skills/operation/intent/IntentOperationData.java @@ -33,13 +33,13 @@ public class IntentOperationData implements OperationData { private static final String DATA = "data"; private static final String EXTRAS = "extras"; - IntentData data = new IntentData(); + protected IntentData data = new IntentData(); - IntentOperationData(IntentData data) { + protected IntentOperationData(IntentData data) { this.data = data; } - IntentOperationData(@NonNull String data, @NonNull PluginDataFormat format, int version) throws IllegalStorageDataException { + protected IntentOperationData(@NonNull String data, @NonNull PluginDataFormat format, int version) throws IllegalStorageDataException { parse(data, format, version); } diff --git a/app/src/main/java/ryey/easer/skills/operation/intent/IntentOperationDataFactory.java b/app/src/main/java/ryey/easer/skills/operation/intent/IntentOperationDataFactory.java deleted file mode 100644 index f25e27b3d..000000000 --- a/app/src/main/java/ryey/easer/skills/operation/intent/IntentOperationDataFactory.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (c) 2016 - 2019 Rui Zhao - * - * This file is part of Easer. - * - * Easer is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Easer is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Easer. If not, see . - */ - -package ryey.easer.skills.operation.intent; - -import android.net.Uri; - -import androidx.annotation.NonNull; - -import java.util.ArrayList; - -import ryey.easer.commons.local_skill.IllegalStorageDataException; -import ryey.easer.commons.local_skill.ValidData; -import ryey.easer.commons.local_skill.operationskill.OperationDataFactory; -import ryey.easer.plugin.PluginDataFormat; -import ryey.easer.skills.reusable.ExtraItem; -import ryey.easer.skills.reusable.Extras; - -class IntentOperationDataFactory implements OperationDataFactory { - @NonNull - @Override - public Class dataClass() { - return IntentOperationData.class; - } - - @ValidData - @NonNull - @Override - public IntentOperationData dummyData() { - IntentData intentData = new IntentData(); - intentData.action = "testAction"; - intentData.category = new ArrayList<>(); - intentData.category.add("testCategory"); - intentData.type = "myType"; - intentData.data = Uri.parse("myprot://seg1/seg2"); - ArrayList extras = new ArrayList<>(); - ExtraItem extraItem = new ExtraItem("extra_key1", "extra_value1", "string"); - extras.add(extraItem); - intentData.extras = Extras.mayConstruct(extras); - return new IntentOperationData(intentData); - } - - @ValidData - @NonNull - @Override - public IntentOperationData parse(@NonNull String data, @NonNull PluginDataFormat format, int version) throws IllegalStorageDataException { - return new IntentOperationData(data, format, version); - } -} diff --git a/app/src/main/java/ryey/easer/skills/operation/intent/IntentOperationDataUtil.java b/app/src/main/java/ryey/easer/skills/operation/intent/IntentOperationDataUtil.java new file mode 100644 index 000000000..f40e96323 --- /dev/null +++ b/app/src/main/java/ryey/easer/skills/operation/intent/IntentOperationDataUtil.java @@ -0,0 +1,24 @@ +package ryey.easer.skills.operation.intent; + +import android.net.Uri; + +import java.util.ArrayList; + +import ryey.easer.skills.reusable.ExtraItem; +import ryey.easer.skills.reusable.Extras; + +public class IntentOperationDataUtil { + public static IntentData getDummyIntentData() { + IntentData intentData = new IntentData(); + intentData.action = "testAction"; + intentData.category = new ArrayList<>(); + intentData.category.add("testCategory"); + intentData.type = "myType"; + intentData.data = Uri.parse("myprot://seg1/seg2"); + ArrayList extras = new ArrayList<>(); + ExtraItem extraItem = new ExtraItem("extra_key1", "extra_value1", "string"); + extras.add(extraItem); + intentData.extras = Extras.mayConstruct(extras); + return intentData; + } +} diff --git a/app/src/main/java/ryey/easer/skills/operation/intent/IntentOperationSkill.java b/app/src/main/java/ryey/easer/skills/operation/intent/IntentOperationSkill.java index 2a5e8c829..9797810ba 100644 --- a/app/src/main/java/ryey/easer/skills/operation/intent/IntentOperationSkill.java +++ b/app/src/main/java/ryey/easer/skills/operation/intent/IntentOperationSkill.java @@ -32,9 +32,7 @@ import ryey.easer.plugin.operation.Category; -public abstract class IntentOperationSkill implements OperationSkill { - - +public abstract class IntentOperationSkill implements OperationSkill { @Override public boolean isCompatible(@NonNull final Context context) { @@ -66,21 +64,15 @@ public Boolean checkPermissions(@NonNull Context context) { @Override public void requestPermissions(@NonNull Activity activity, int requestCode) { - } @NonNull @Override - public OperationDataFactory dataFactory() { - return new IntentOperationDataFactory(); - - } + public abstract OperationDataFactory dataFactory(); @NonNull @Override - public SkillView view() { - return new IntentSkillViewFragment(); - } + public abstract SkillView view(); } diff --git a/app/src/main/java/ryey/easer/skills/operation/intent/IntentSkillViewFragment.java b/app/src/main/java/ryey/easer/skills/operation/intent/IntentSkillViewFragment.java index 8d70ec9e1..4ccfffbfb 100644 --- a/app/src/main/java/ryey/easer/skills/operation/intent/IntentSkillViewFragment.java +++ b/app/src/main/java/ryey/easer/skills/operation/intent/IntentSkillViewFragment.java @@ -36,7 +36,7 @@ import ryey.easer.skills.SkillViewFragment; import ryey.easer.skills.reusable.EditExtraFragment; -public class IntentSkillViewFragment extends SkillViewFragment { +public abstract class IntentSkillViewFragment extends SkillViewFragment { private EditText m_text_action; private EditText m_text_category; private EditText m_text_type; @@ -57,7 +57,7 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup c } @Override - protected void _fill(@ValidData @NonNull IntentOperationData data) { + protected void _fill(@ValidData @NonNull T data) { IntentData rdata = data.data; m_text_action.setText(rdata.action); m_text_category.setText(Utils.StringCollectionToString(rdata.category, false)); @@ -70,15 +70,15 @@ protected void _fill(@ValidData @NonNull IntentOperationData data) { @ValidData @NonNull @Override - public IntentOperationData getData() throws InvalidDataInputException { + public abstract T getData() throws InvalidDataInputException; + + protected IntentData getIntentData() { IntentData data = new IntentData(); data.action = m_text_action.getText().toString(); data.category = Utils.stringToStringList(m_text_category.getText().toString()); data.type = m_text_type.getText().toString(); data.data = Uri.parse(m_text_data.getText().toString()); data.extras = editExtraFragment.getExtras(); - IntentOperationData broadcastOperationData = new IntentOperationData(data); - return broadcastOperationData; + return data; } - } diff --git a/app/src/main/java/ryey/easer/skills/operation/intent/ServiceLoader.java b/app/src/main/java/ryey/easer/skills/operation/intent/ServiceLoader.java new file mode 100644 index 000000000..8d7c9ffc0 --- /dev/null +++ b/app/src/main/java/ryey/easer/skills/operation/intent/ServiceLoader.java @@ -0,0 +1,17 @@ +package ryey.easer.skills.operation.intent; + +import android.content.Context; + +import androidx.annotation.NonNull; + +public class ServiceLoader extends IntentLoader { + public ServiceLoader(@NonNull Context context) { + super(context); + } + + @Override + public void _load(@NonNull ServiceOperationData data, @NonNull OnResultCallback callback) { + context.startService(this.getIntent(data)); + callback.onResult(true); + } +} diff --git a/app/src/main/java/ryey/easer/skills/operation/intent/ServiceOperationData.java b/app/src/main/java/ryey/easer/skills/operation/intent/ServiceOperationData.java new file mode 100644 index 000000000..a3ecf4967 --- /dev/null +++ b/app/src/main/java/ryey/easer/skills/operation/intent/ServiceOperationData.java @@ -0,0 +1,24 @@ +package ryey.easer.skills.operation.intent; + +import androidx.annotation.NonNull; + +import ryey.easer.commons.local_skill.IllegalStorageDataException; +import ryey.easer.commons.local_skill.dynamics.SolidDynamicsAssignment; +import ryey.easer.commons.local_skill.operationskill.OperationData; +import ryey.easer.plugin.PluginDataFormat; + +public class ServiceOperationData extends IntentOperationData { + ServiceOperationData(IntentData data) { + super(data); + } + + public ServiceOperationData(@NonNull String data, @NonNull PluginDataFormat format, int version) throws IllegalStorageDataException { + super(data, format, version); + } + + @NonNull + @Override + public OperationData applyDynamics(SolidDynamicsAssignment dynamicsAssignment) { + return new ServiceOperationData(((IntentOperationData) super.applyDynamics(dynamicsAssignment)).data); + } +} diff --git a/app/src/main/java/ryey/easer/skills/operation/intent/ServiceOperationDataFactory.java b/app/src/main/java/ryey/easer/skills/operation/intent/ServiceOperationDataFactory.java new file mode 100644 index 000000000..9cb63e672 --- /dev/null +++ b/app/src/main/java/ryey/easer/skills/operation/intent/ServiceOperationDataFactory.java @@ -0,0 +1,27 @@ +package ryey.easer.skills.operation.intent; + +import androidx.annotation.NonNull; + +import ryey.easer.commons.local_skill.IllegalStorageDataException; +import ryey.easer.commons.local_skill.operationskill.OperationDataFactory; +import ryey.easer.plugin.PluginDataFormat; + +public class ServiceOperationDataFactory implements OperationDataFactory { + @NonNull + @Override + public Class dataClass() { + return ServiceOperationData.class; + } + + @NonNull + @Override + public ServiceOperationData dummyData() { + return new ServiceOperationData(IntentOperationDataUtil.getDummyIntentData()); + } + + @NonNull + @Override + public ServiceOperationData parse(@NonNull String data, @NonNull PluginDataFormat format, int version) throws IllegalStorageDataException { + return new ServiceOperationData(data, format, version); + } +} diff --git a/app/src/main/java/ryey/easer/skills/operation/intent/ServiceOperationSkill.java b/app/src/main/java/ryey/easer/skills/operation/intent/ServiceOperationSkill.java new file mode 100644 index 000000000..9c0437cf7 --- /dev/null +++ b/app/src/main/java/ryey/easer/skills/operation/intent/ServiceOperationSkill.java @@ -0,0 +1,42 @@ +package ryey.easer.skills.operation.intent; + +import android.content.Context; + +import androidx.annotation.NonNull; + +import ryey.easer.R; +import ryey.easer.commons.local_skill.SkillView; +import ryey.easer.commons.local_skill.operationskill.OperationDataFactory; +import ryey.easer.skills.operation.OperationLoader; + +public class ServiceOperationSkill extends IntentOperationSkill { + @NonNull + @Override + public String id() { + return "start_service"; + } + + @Override + public int name() { + return R.string.operation_start_service; + } + + + @NonNull + @Override + public OperationLoader loader(@NonNull Context context) { + return new ServiceLoader(context); + } + + @NonNull + @Override + public OperationDataFactory dataFactory() { + return new ServiceOperationDataFactory(); + } + + @NonNull + @Override + public SkillView view() { + return new ServiceSkillViewFragment(); + } +} diff --git a/app/src/main/java/ryey/easer/skills/operation/intent/ServiceSkillViewFragment.java b/app/src/main/java/ryey/easer/skills/operation/intent/ServiceSkillViewFragment.java new file mode 100644 index 000000000..bd59f7f99 --- /dev/null +++ b/app/src/main/java/ryey/easer/skills/operation/intent/ServiceSkillViewFragment.java @@ -0,0 +1,13 @@ +package ryey.easer.skills.operation.intent; + +import androidx.annotation.NonNull; + +import ryey.easer.commons.local_skill.InvalidDataInputException; + +public class ServiceSkillViewFragment extends IntentSkillViewFragment { + @NonNull + @Override + public ServiceOperationData getData() throws InvalidDataInputException { + return new ServiceOperationData(super.getIntentData()); + } +} diff --git a/app/src/main/java/ryey/easer/skills/operation/intent/operations/ActivityLoader.java b/app/src/main/java/ryey/easer/skills/operation/intent/operations/ActivityLoader.java deleted file mode 100644 index 3fcbb87dc..000000000 --- a/app/src/main/java/ryey/easer/skills/operation/intent/operations/ActivityLoader.java +++ /dev/null @@ -1,22 +0,0 @@ -package ryey.easer.skills.operation.intent.operations; - -import android.content.Context; - -import androidx.annotation.NonNull; - -import ryey.easer.skills.operation.intent.IntentLoader; -import ryey.easer.skills.operation.intent.IntentOperationData; - -public class ActivityLoader extends IntentLoader { - - public ActivityLoader(@NonNull Context context) { - super(context); - } - - @Override - public void _load(@NonNull IntentOperationData data, @NonNull OnResultCallback callback) { - - context.startActivity(this.getIntent(data)); - callback.onResult(true); - } -} diff --git a/app/src/main/java/ryey/easer/skills/operation/intent/operations/ServiceLoader.java b/app/src/main/java/ryey/easer/skills/operation/intent/operations/ServiceLoader.java deleted file mode 100644 index 593c17217..000000000 --- a/app/src/main/java/ryey/easer/skills/operation/intent/operations/ServiceLoader.java +++ /dev/null @@ -1,20 +0,0 @@ -package ryey.easer.skills.operation.intent.operations; - -import android.content.Context; - -import androidx.annotation.NonNull; - -import ryey.easer.skills.operation.intent.IntentLoader; -import ryey.easer.skills.operation.intent.IntentOperationData; - -public class ServiceLoader extends IntentLoader { - public ServiceLoader(@NonNull Context context) { - super(context); - } - - @Override - public void _load(@NonNull IntentOperationData data, @NonNull OnResultCallback callback) { - context.startService(this.getIntent(data)); - callback.onResult(true); - } -} diff --git a/app/src/main/java/ryey/easer/skills/operation/intent/operations/ServiceOperationSkill.java b/app/src/main/java/ryey/easer/skills/operation/intent/operations/ServiceOperationSkill.java deleted file mode 100644 index 8e7922d6f..000000000 --- a/app/src/main/java/ryey/easer/skills/operation/intent/operations/ServiceOperationSkill.java +++ /dev/null @@ -1,43 +0,0 @@ -package ryey.easer.skills.operation.intent.operations; - -import android.content.Context; - -import androidx.annotation.NonNull; - -import ryey.easer.R; -import ryey.easer.commons.local_skill.SkillView; -import ryey.easer.skills.operation.OperationLoader; -import ryey.easer.skills.operation.intent.IntentOperationData; -import ryey.easer.skills.operation.intent.IntentOperationSkill; -import ryey.easer.skills.operation.intent.IntentSkillViewFragment; - -public class ServiceOperationSkill extends IntentOperationSkill { - @NonNull - @Override - public String id() { - return "start_service"; - } - - @Override - public int name() { - return R.string.operation_start_service; - } - - - @NonNull - @Override - public OperationLoader loader(@NonNull Context context) { - return new ServiceLoader(context); - } - - @NonNull - @Override - public SkillView view() { - return new DummyIntentSkillViewFragment(); - } - - public static class DummyIntentSkillViewFragment extends IntentSkillViewFragment - { - - } -}