soulqw / Workflow
simplify your method coupling in android
Stars: ✭ 89
Programming Languages
java
68154 projects - #9 most used programming language
Projects that are alternatives of or similar to Workflow
Alfred Open With Vscode Workflow
Alfred 3 workflow for opening files or folders in Visual Studio Code.
Stars: ✭ 74 (-16.85%)
Mutual labels: workflow
Common Workflow Language
Repository for the CWL standards. Use https://cwl.discourse.group/ for support 😊
Stars: ✭ 1,222 (+1273.03%)
Mutual labels: workflow
Flyte
Accelerate your ML and Data workflows to production. Flyte is a production grade orchestration system for your Data and ML workloads. It has been battle tested at Lyft, Spotify, freenome and others and truly open-source.
Stars: ✭ 1,242 (+1295.51%)
Mutual labels: workflow
Dataspherestudio
DataSphereStudio is a one stop data application development& management portal, covering scenarios including data exchange, desensitization/cleansing, analysis/mining, quality measurement, visualization, and task scheduling.
Stars: ✭ 1,195 (+1242.7%)
Mutual labels: workflow
Setup Msys2
GitHub Action to setup MSYS2 (MSYS, MINGW64 and/or MINGW32)
Stars: ✭ 78 (-12.36%)
Mutual labels: workflow
Luigi Warehouse
A luigi powered analytics / warehouse stack
Stars: ✭ 72 (-19.1%)
Mutual labels: workflow
Workflows
Run Cloud Native workflows on any environment using Dapr
Stars: ✭ 84 (-5.62%)
Mutual labels: workflow
Alfred Ssh
SSH workflow for Alfred for Mac with powerful hostname expansion/completion
Stars: ✭ 78 (-12.36%)
Mutual labels: workflow
Read Only Coding
Automator services to make coding in Xcode easier
Stars: ✭ 82 (-7.87%)
Mutual labels: workflow
Agilework
可视化低代码快速开发平台,面向业务、企业管理系统定制开发平台和应用平台,包括设计器、应用端。提供业务配置和集成开发能力,用户通过可视化拖拉拽配置式操作即可快速构建出能同时在PC和移动端运行的各类管理系统,对于企业客户的信息系统在管理模式、业务流程、表单界面、数据可视化展示、IoT管控等个性化需求,可以通过设计器,快速的进行个性化配置。并支持企业微信,公众号,钉钉等移动集成,实现用户跨区域移动办公。从而构建企业个性化的行业应用、集成应用和复杂的业务报表。
Stars: ✭ 76 (-14.61%)
Mutual labels: workflow
Machine
Machine is a workflow/pipeline library for processing data
Stars: ✭ 78 (-12.36%)
Mutual labels: workflow
Bartlett
A simple Jenkins command line client to serve your needs.
Stars: ✭ 81 (-8.99%)
Mutual labels: workflow
Flowr
Robust and efficient workflows using a simple language agnostic approach
Stars: ✭ 73 (-17.98%)
Mutual labels: workflow
Auto Assign Action
An action which adds reviewers to the pull request when the pull request is opened.
Stars: ✭ 78 (-12.36%)
Mutual labels: workflow
Attemper
Distributed,multi-tenancy,job-flow scheduling application(分布式多租户的支持流程编排的任务调度平台) QQ群:1029617143
Stars: ✭ 86 (-3.37%)
Mutual labels: workflow
Launch Kit
An awesome tool-kit for launching Cosmos-SDK and Tendermint-based projects
Stars: ✭ 82 (-7.87%)
Mutual labels: workflow
WorkFlow
简化顺序调用方法之间的嵌套和耦合:
- 轻松替换相互嵌套的方法之间的调用顺序
- 增删改方便,提高代码简洁性和可读性、降低维护成本
Installation:
dependencies {
implementation 'com.qw:workflow:0.0.4'
}
Usage:
场景示例1
依次顺序的展示Toast,Dialog,SnackBar:
private static final int STEP_TOAST = 1;
private static final int STEP_DIALOG = 2;
private static final int STEP_SNACK_BAR = 3;
private void startWorkFlow() {
new WorkFlow.Builder()
.withNode(WorkNode.build(STEP_TOAST, new Worker() {
@Override
public void doWork(final Node current) {
//do any work you want
Toast.makeText(MainActivity.this, "step for toast", Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
//call it when finish work
current.onCompleted();
}
}, 2000);
}
}))
.withNode(WorkNode.build(STEP_SNACK_BAR, new Worker() {
@Override
public void doWork(final Node current) {
Snackbar.make(findViewById(R.id.btn_after), "step for snack_bar", Snackbar.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
current.onCompleted();
}
}, 2000);
}
}))
.withNode(WorkNode.build(STEP_DIALOG, new Worker() {
@Override
public void doWork(final Node current) {
new AlertDialog.Builder(MainActivity.this)
.setTitle("step for show dialog")
.setPositiveButton("complete", null)
.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialogInterface) {
current.onCompleted();
}
}).create().show();
}
})).create()
.start();
}
效果如图:
假如现在需要让Dialog和SnackBar,替换位置,只需要让Dialog定义值比SnackBar大即可:
private static final int STEP_TOAST = 1;
private static final int STEP_DIALOG = 20;
private static final int STEP_SNACK_BAR = 3;
效果如下:
场景示例2
进入APP首页按顺序请求3个接口,第一个接口和第三个接口成功后启动对话框,第二个接口跳转到Web页面
public class AfterActivity extends AppCompatActivity {
private static final int REQUEST_CODE_H5 = 1;
/**
* 初次广告弹框
*/
private static final int NODE_FIRST_AD = 10;
/**
* 初次进入h5页
*/
private static final int NODE_CHECK_H5 = 20;
/**
* 初次进入的注册协议
*/
private static final int NODE_REGISTER_AGREEMENT = 30;
private WorkFlow workFlow;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_compare);
((TextView) findViewById(R.id.tv_desc)).setText("使用后");
startWorkFlow();
}
private void startWorkFlow() {
workFlow = new WorkFlow.Builder()
.withNode(getFirstAdNode())
.withNode(getShowRegisterAgreementNode())
.withNode(getShowH5Node())
.create();
workFlow.start();
}
private WorkNode getFirstAdNode() {
return WorkNode.build(NODE_FIRST_AD, new Worker() {
@Override
public void doWork(final Node current) {
Utils.fakeRequest("http://www.api1.com", new HttpCallBack() {
@Override
public void onOk() {
new AlertDialog.Builder(AfterActivity.this)
.setTitle("这是一条有态度的广告")
.setPositiveButton("我看完了", null)
.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialogInterface) {
//仅仅只需关心自己是否完成,下一个节点会自动执行
current.onCompleted();
}
}).create().show();
}
@Override
public void onFailure() {
//仅仅只需关心自己是否完成,下一个节点会自动执行
current.onCompleted();
}
});
}
});
}
private WorkNode getShowRegisterAgreementNode() {
return WorkNode.build(NODE_REGISTER_AGREEMENT, new Worker() {
@Override
public void doWork(final Node current) {
Utils.fakeRequest("http://www.api2.com", new HttpCallBack() {
@Override
public void onOk() {
new AlertDialog.Builder(AfterActivity.this)
.setTitle("这是注册协议")
.setPositiveButton("我看完了", null)
.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialogInterface) {
current.onCompleted();
}
}).create().show();
}
@Override
public void onFailure() {
current.onCompleted();
}
});
}
});
}
private WorkNode getShowH5Node() {
return (WorkNode.build(NODE_CHECK_H5, new Worker() {
@Override
public void doWork(final Node current) {
Utils.fakeRequest("http://www.api3.com", new HttpCallBack() {
@Override
public void onOk() {
startActivityForResult(new Intent(AfterActivity.this, TestH5Activity.class), REQUEST_CODE_H5);
}
@Override
public void onFailure() {
current.onCompleted();
}
});
}
}));
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case REQUEST_CODE_H5:
workFlow.continueWork();
break;
default:
break;
}
}
}
效果:
流程:
功能介绍:
-
每个节点只关注自己是否完成:
private WorkNode getFirstAdNode() { return WorkNode.build(NODE_FIRST_AD, new Worker() { @Override public void doWork(final Node current) { //仅仅只需关心自己是否完成,下一个节点会自动执行 current.onCompleted(); } }); }
-
可以操作WorkFlow对象来控制全局节点
public class WorkFlow { /** * 标记为处理完成,调用后不再能执行任何开启的操作 */ public void dispose() /** * 给workflow添加一个工作节点 * * @param workNode 节点 */ public void addNode(WorkNode workNode) /** * 开始工作,默认从第一个节点 */ public void start() /** * 基于某个节点Id 开始工作 * * @param startNodeId 节点id */ public void startWithNode(int startNodeId) /** * 让当前工作流继续工作 * 效果等同于当前节点调用 Node.onCompleted */ public void continueWork() /** * 回退 * 基于最近节点回退至上一节点 */ public void revert() }
更多代码可参考demo
工作原理和最佳示例
联系我(注明来意):
Note that the project description data, including the texts, logos, images, and/or trademarks,
for each open source project belongs to its rightful owner.
If you wish to add or remove any projects, please contact us at [email protected].