blocks) {
33 | viewBlockCollectionEditor = new ViewBlockCollectionEditor(context);
34 | viewBlockCollectionEditor.setScrollEnabled(true);
35 | blockPane = viewBlockCollectionEditor.getBlockPane();
36 |
37 | previewBlocks(blocks, 8, 8);
38 | l();
39 |
40 | container.removeAllViews();
41 | container.addView(viewBlockCollectionEditor);
42 | }
43 |
44 | // idk if this is necessary but here we go anyway.
45 | // Android is weird when it comes to memory leaks
46 | public void dispose() {
47 | viewBlockCollectionEditor = null;
48 | blockPane = null;
49 | context = null;
50 | }
51 |
52 | /**
53 | * THE CODE BELOW THIS POINT IS *EXTREMELY* MESSY SINCE
54 | * IT WAS DECOMPILED & PORTED TO *JUST* WORK. NO REFACTORING HAS EVEN
55 | * BEEN ATTEMPTED BECAUSE I DID NOT WANT TO GO CRAZY, I JUST WANTED
56 | * IT TO SOMEWHAT WORK.
57 | *
58 | * READ/MODIFY AT YOUR OWN RISK !!!
59 | */
60 |
61 |
62 | private void previewBlocks(ArrayList blocks, int var2, int var3) {
63 | HashMap var4 = new HashMap<>();
64 | Iterator var5 = blocks.iterator();
65 | Rs var6 = null;
66 | boolean var7 = true;
67 |
68 | while (var5.hasNext()) {
69 | Rs block = getBlock(var5.next());
70 | var4.put((Integer) block.getTag(), block);
71 | blockPane.g = Math.max(blockPane.g, 1 + (Integer) block.getTag());
72 | blockPane.a(block, var2, var3);
73 | if (var7) {
74 | var6 = block;
75 | var7 = false;
76 | }
77 | }
78 |
79 | Iterator var8 = blocks.iterator();
80 |
81 | while (true) {
82 | BlockBean var9;
83 | Rs block;
84 | if (!var8.hasNext()) {
85 | var6.k();
86 | blockPane.b();
87 | return;
88 | }
89 |
90 | var9 = var8.next();
91 | block = var4.get(Integer.valueOf(var9.id));
92 | while (block == null) {
93 | if (!var8.hasNext()) {
94 | var6.k();
95 | blockPane.b();
96 | return;
97 | }
98 |
99 | var9 = var8.next();
100 | block = var4.get(Integer.valueOf(var9.id));
101 | }
102 |
103 | int subStack1 = var9.subStack1;
104 | if (subStack1 >= 0) {
105 | Rs var20 = var4.get(subStack1);
106 | if (var20 != null) {
107 | block.e(var20);
108 | }
109 | }
110 |
111 | int subStack2 = var9.subStack2;
112 | if (subStack2 >= 0) {
113 | Rs var19 = var4.get(subStack2);
114 | if (var19 != null) {
115 | block.f(var19);
116 | }
117 | }
118 |
119 | int nextBlock = var9.nextBlock;
120 | if (nextBlock >= 0) {
121 | Rs var18 = var4.get(nextBlock);
122 | if (var18 != null) {
123 | block.b(var18);
124 | }
125 | }
126 |
127 | int paramsSize = var9.parameters.size();
128 |
129 | for (int i = 0; i < paramsSize; ++i) {
130 | String param = var9.parameters.get(i);
131 | if (param != null && param.length() > 0) {
132 | if (param.charAt(0) == 64) {
133 | Rs var17 = var4.get(Integer.valueOf(param.substring(1)));
134 | if (var17 != null && block.V.size() > 0) {
135 | block.a((Ts) block.V.get(i), var17);
136 | }
137 | } else {
138 | if (block.V.size() > 0) {
139 | ((Ss) block.V.get(i)).setArgValue(param);
140 | argOnClick(((Ss) block.V.get(i)));
141 | block.m();
142 | }
143 | }
144 | }
145 | }
146 | }
147 | }
148 |
149 | private Rs getBlock(BlockBean bean) {
150 | Rs block = new Rs(context, Integer.parseInt(bean.id), bean.spec, bean.type, bean.typeName, bean.opCode);
151 | block.e = bean.color;
152 | blockOnClick(block, bean);
153 | return block;
154 | }
155 |
156 | private void blockOnClick(Rs rs, BlockBean bean) {
157 | rs.setOnClickListener(v -> {
158 | StringBuilder info = new StringBuilder();
159 | info.append("opCode: ");
160 | info.append(bean.opCode);
161 | info.append("\n\n");
162 | info.append("spec: ");
163 | info.append(bean.spec);
164 | info.append("\n\n");
165 | info.append("type: ");
166 | info.append(bean.type.equals(" ") ? "regular" : bean.type);
167 | info.append("\n\n");
168 | if (!bean.typeName.equals("")) {
169 | info.append("typeName: ");
170 | info.append(bean.typeName);
171 | info.append("\n\n");
172 | }
173 | info.append("color: ");
174 | info.append(bean.color);
175 |
176 | dialog("Block info", info.toString());
177 | });
178 |
179 | }
180 |
181 | private void argOnClick(Ss ss) {
182 | ss.setOnClickListener(v -> dialog("Argument info", String.valueOf(ss.getArgValue())));
183 | }
184 |
185 | private void dialog(String title, String message) {
186 | AlertDialog.Builder dialog = new AlertDialog.Builder(context);
187 | dialog.setTitle(title);
188 | dialog.setMessage(message);
189 |
190 | dialog.setPositiveButton("OK", null);
191 | AlertDialog dlg = dialog.create();
192 | dlg.show();
193 |
194 | View messageView = dlg.findViewById(android.R.id.message);
195 | if (messageView instanceof TextView) {
196 | ((TextView) messageView).setTextIsSelectable(true);
197 | }
198 | }
199 |
200 | private void l() {
201 | int height = context.getResources().getDisplayMetrics().heightPixels;
202 | // this.r.measure(0, 0);
203 | int measureHeight = 0;//this.r.getMeasuredHeight();
204 | LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, height - a(context) - getStatusBarHeight(context) - measureHeight);
205 | viewBlockCollectionEditor.setLayoutParams(layoutParams);
206 | viewBlockCollectionEditor.requestLayout();
207 | }
208 |
209 | private static int a(Context context) {
210 | return (int) LayoutUtils.getDip(context, 48.0F);
211 | }
212 |
213 | @SuppressLint({"DiscouragedApi", "InternalInsetResource"})
214 | private static int getStatusBarHeight(Context context) {
215 | int statusBarHeight = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
216 | return statusBarHeight > 0 ? context.getResources().getDimensionPixelSize(statusBarHeight) : 0;
217 | }
218 | }
219 |
--------------------------------------------------------------------------------
/app/src/main/java/ma/swblockspreview/Constants.java:
--------------------------------------------------------------------------------
1 | package ma.swblockspreview;
2 |
3 | public class Constants {
4 | // 🤓
5 | public static final String SAMPLE_BLOCKS_STR =
6 | "{\"color\":-11899692,\"id\":\"99000020\",\"nextBlock\":99000021,\"opCode\":\"setVisible\",\"parameters\":[\"progressbar1\",\"GONE\"],\"spec\":\"%m.view setVisible %m.visible\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
7 | "{\"color\":-11899692,\"id\":\"99000021\",\"nextBlock\":99000010,\"opCode\":\"setVisible\",\"parameters\":[\"button1\",\"VISIBLE\"],\"spec\":\"%m.view setVisible %m.visible\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
8 | "{\"color\":-1988310,\"id\":\"99000010\",\"nextBlock\":-1,\"opCode\":\"ifElse\",\"parameters\":[\"@99000011\"],\"spec\":\"if %b then\",\"subStack1\":99000050,\"subStack2\":99000022,\"type\":\"e\",\"typeName\":\"\"}\n" +
9 | "{\"color\":-7711273,\"id\":\"99000011\",\"nextBlock\":-1,\"opCode\":\"getArg\",\"parameters\":[],\"spec\":\"success\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\"b\",\"typeName\":\"\"}\n" +
10 | "{\"color\":-1988310,\"id\":\"99000050\",\"nextBlock\":-1,\"opCode\":\"ifElse\",\"parameters\":[\"@99000024\"],\"spec\":\"if %b then\",\"subStack1\":99000025,\"subStack2\":99000047,\"type\":\"e\",\"typeName\":\"\"}\n" +
11 | "{\"color\":-1147626,\"id\":\"99000024\",\"nextBlock\":-1,\"opCode\":\"getVar\",\"parameters\":[],\"spec\":\"justregistering\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\"b\",\"typeName\":\"\"}\n" +
12 | "{\"color\":-7711273,\"id\":\"99000025\",\"nextBlock\":99000026,\"opCode\":\"definedFunc\",\"parameters\":[],\"spec\":\"hideKeyboard\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
13 | "{\"color\":-1147626,\"id\":\"99000026\",\"nextBlock\":99000028,\"opCode\":\"setVarString\",\"parameters\":[\"key\",\"@99000065\"],\"spec\":\"set %m.varStr to %s\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
14 | "{\"color\":-13851166,\"id\":\"99000065\",\"nextBlock\":-1,\"opCode\":\"firebaseauthGetUid\",\"parameters\":[],\"spec\":\"FirebaseAuth getUid\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\"s\",\"typeName\":\"\"}\n" +
15 | "{\"color\":-1147626,\"id\":\"99000028\",\"nextBlock\":99000029,\"opCode\":\"mapCreateNew\",\"parameters\":[\"registerData\"],\"spec\":\"%m.varMap create new map\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
16 | "{\"color\":-1147626,\"id\":\"99000029\",\"nextBlock\":99000031,\"opCode\":\"mapPut\",\"parameters\":[\"registerData\",\"name\",\"@99000030\"],\"spec\":\"%m.varMap put key %s value %s\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
17 | "{\"color\":-1147626,\"id\":\"99000030\",\"nextBlock\":-1,\"opCode\":\"getVar\",\"parameters\":[],\"spec\":\"temp\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\"s\",\"typeName\":\"\"}\n" +
18 | "{\"color\":-1147626,\"id\":\"99000031\",\"nextBlock\":99000033,\"opCode\":\"mapPut\",\"parameters\":[\"registerData\",\"mail\",\"@99000032\"],\"spec\":\"%m.varMap put key %s value %s\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
19 | "{\"color\":-1147626,\"id\":\"99000032\",\"nextBlock\":-1,\"opCode\":\"getVar\",\"parameters\":[],\"spec\":\"temp2\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\"s\",\"typeName\":\"\"}\n" +
20 | "{\"color\":-1147626,\"id\":\"99000033\",\"nextBlock\":99000035,\"opCode\":\"mapPut\",\"parameters\":[\"registerData\",\"key\",\"@99000034\"],\"spec\":\"%m.varMap put key %s value %s\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
21 | "{\"color\":-1147626,\"id\":\"99000034\",\"nextBlock\":-1,\"opCode\":\"getVar\",\"parameters\":[],\"spec\":\"key\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\"s\",\"typeName\":\"\"}\n" +
22 | "{\"color\":-1147626,\"id\":\"99000035\",\"nextBlock\":99000036,\"opCode\":\"mapPut\",\"parameters\":[\"registerData\",\"rank\",\"@99000045\"],\"spec\":\"%m.varMap put key %s value %s\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
23 | "{\"color\":-1147626,\"id\":\"99000045\",\"nextBlock\":-1,\"opCode\":\"getVar\",\"parameters\":[],\"spec\":\"DEFAULT_RANK\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\"s\",\"typeName\":\"\"}\n" +
24 | "{\"color\":-1147626,\"id\":\"99000036\",\"nextBlock\":99000037,\"opCode\":\"mapPut\",\"parameters\":[\"registerData\",\"about\",\"@99000046\"],\"spec\":\"%m.varMap put key %s value %s\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
25 | "{\"color\":-1147626,\"id\":\"99000046\",\"nextBlock\":-1,\"opCode\":\"getVar\",\"parameters\":[],\"spec\":\"DEFAULT_ABOUT\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\"s\",\"typeName\":\"\"}\n" +
26 | "{\"color\":-1147626,\"id\":\"99000037\",\"nextBlock\":99000038,\"opCode\":\"mapPut\",\"parameters\":[\"registerData\",\"profile_picture\",\"null\"],\"spec\":\"%m.varMap put key %s value %s\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
27 | "{\"color\":-1147626,\"id\":\"99000038\",\"nextBlock\":99000088,\"opCode\":\"mapPut\",\"parameters\":[\"registerData\",\"uid\",\"@99000042\"],\"spec\":\"%m.varMap put key %s value %s\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
28 | "{\"color\":-13851166,\"id\":\"99000042\",\"nextBlock\":-1,\"opCode\":\"firebaseauthGetUid\",\"parameters\":[],\"spec\":\"FirebaseAuth getUid\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\"s\",\"typeName\":\"\"}\n" +
29 | "{\"color\":-13851166,\"id\":\"99000088\",\"nextBlock\":99000039,\"opCode\":\"fileSetData\",\"parameters\":[\"data\",\"username\",\"@99000089\"],\"spec\":\"%m.file setData key %s value %s\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
30 | "{\"color\":-1147626,\"id\":\"99000089\",\"nextBlock\":-1,\"opCode\":\"getVar\",\"parameters\":[],\"spec\":\"temp\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\"s\",\"typeName\":\"\"}\n" +
31 | "{\"color\":-13851166,\"id\":\"99000039\",\"nextBlock\":99000059,\"opCode\":\"firebaseAdd\",\"parameters\":[\"f_db\",\"@99000040\",\"registerData\"],\"spec\":\"%m.firebase add key %s value %m.varMap\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
32 | "{\"color\":-1147626,\"id\":\"99000040\",\"nextBlock\":-1,\"opCode\":\"getVar\",\"parameters\":[],\"spec\":\"key\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\"s\",\"typeName\":\"\"}\n" +
33 | "{\"color\":-10701022,\"id\":\"99000059\",\"nextBlock\":99000051,\"opCode\":\"addSourceDirectly\",\"parameters\":[\"f_auth.getCurrentUser().sendEmailVerification().addOnCompleteListener(new OnCompleteListener\\u003cVoid\\u003e() { \\n@Override\\npublic void onComplete(@android.support.annotation.NonNull Task\\u003cVoid\\u003e task) {\\nif (task.isSuccessful()) {\"],\"spec\":\"add source directly %s.inputOnly\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
34 | "{\"color\":-13851166,\"id\":\"99000051\",\"nextBlock\":99000052,\"opCode\":\"firebaseauthSignOutUser\",\"parameters\":[],\"spec\":\"FirebaseAuth signOut\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
35 | "{\"color\":-7711273,\"id\":\"99000052\",\"nextBlock\":99000053,\"opCode\":\"definedFunc\",\"parameters\":[\"Registered successfully. Please check your email for verification\"],\"spec\":\"createSnackBar %s.message\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
36 | "{\"color\":-1147626,\"id\":\"99000053\",\"nextBlock\":99000055,\"opCode\":\"setVarBoolean\",\"parameters\":[\"LoginMode\",\"@99000054\"],\"spec\":\"set %m.varBool to %b\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
37 | "{\"color\":-10701022,\"id\":\"99000054\",\"nextBlock\":-1,\"opCode\":\"true\",\"parameters\":[],\"spec\":\"true\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\"b\",\"typeName\":\"\"}\n" +
38 | "{\"color\":-7711273,\"id\":\"99000055\",\"nextBlock\":99000043,\"opCode\":\"definedFunc\",\"parameters\":[],\"spec\":\"refreshMode\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
39 | "{\"color\":-11899692,\"id\":\"99000043\",\"nextBlock\":99000044,\"opCode\":\"setVisible\",\"parameters\":[\"progressbar1\",\"GONE\"],\"spec\":\"%m.view setVisible %m.visible\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
40 | "{\"color\":-11899692,\"id\":\"99000044\",\"nextBlock\":99000060,\"opCode\":\"setVisible\",\"parameters\":[\"button1\",\"VISIBLE\"],\"spec\":\"%m.view setVisible %m.visible\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
41 | "{\"color\":-10701022,\"id\":\"99000060\",\"nextBlock\":99000061,\"opCode\":\"addSourceDirectly\",\"parameters\":[\"} else {\"],\"spec\":\"add source directly %s.inputOnly\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
42 | "{\"color\":-10701022,\"id\":\"99000061\",\"nextBlock\":-1,\"opCode\":\"addSourceDirectly\",\"parameters\":[\"}}});\"],\"spec\":\"add source directly %s.inputOnly\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
43 | "{\"color\":-10701022,\"id\":\"99000047\",\"nextBlock\":99000083,\"opCode\":\"addSourceDirectly\",\"parameters\":[\"if (f_auth.getCurrentUser().isEmailVerified()) {\"],\"spec\":\"add source directly %s.inputOnly\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
44 | "{\"color\":-1988310,\"id\":\"99000083\",\"nextBlock\":99000049,\"opCode\":\"ifElse\",\"parameters\":[\"@99000084\"],\"spec\":\"if %b then\",\"subStack1\":99000086,\"subStack2\":99000015,\"type\":\"e\",\"typeName\":\"\"}\n" +
45 | "{\"color\":-3384542,\"id\":\"99000084\",\"nextBlock\":-1,\"opCode\":\"containListStr\",\"parameters\":[\"banned\",\"@99000085\"],\"spec\":\"%m.listStr contains %s\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\"b\",\"typeName\":\"\"}\n" +
46 | "{\"color\":-13851166,\"id\":\"99000085\",\"nextBlock\":-1,\"opCode\":\"firebaseauthGetUid\",\"parameters\":[],\"spec\":\"FirebaseAuth getUid\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\"s\",\"typeName\":\"\"}\n" +
47 | "{\"color\":-7711273,\"id\":\"99000086\",\"nextBlock\":99000087,\"opCode\":\"definedFunc\",\"parameters\":[\"Your account has been banned. Contact us if you think it\\u0027s mistake.\"],\"spec\":\"createSnackBar %s.message\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
48 | "{\"color\":-13851166,\"id\":\"99000087\",\"nextBlock\":-1,\"opCode\":\"firebaseauthSignOutUser\",\"parameters\":[],\"spec\":\"FirebaseAuth signOut\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
49 | "{\"color\":-13851166,\"id\":\"99000015\",\"nextBlock\":99000012,\"opCode\":\"doToast\",\"parameters\":[\"@99000017\"],\"spec\":\"Toast %s\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
50 | "{\"color\":-10701022,\"id\":\"99000017\",\"nextBlock\":-1,\"opCode\":\"stringJoin\",\"parameters\":[\"Welcome back, \",\"@99000016\"],\"spec\":\"join %s and %s\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\"s\",\"typeName\":\"\"}\n" +
51 | "{\"color\":-13851166,\"id\":\"99000016\",\"nextBlock\":-1,\"opCode\":\"firebaseauthGetCurrentUser\",\"parameters\":[],\"spec\":\"FirebaseAuth getEmail\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\"s\",\"typeName\":\"\"}\n" +
52 | "{\"color\":-13851166,\"id\":\"99000012\",\"nextBlock\":99000013,\"opCode\":\"intentSetScreen\",\"parameters\":[\"intent\",\"HomeActivity\"],\"spec\":\"%m.intent setScreen %m.activity\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
53 | "{\"color\":-13851166,\"id\":\"99000013\",\"nextBlock\":99000048,\"opCode\":\"startActivity\",\"parameters\":[\"intent\"],\"spec\":\"StartActivity %m.intent\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
54 | "{\"color\":-10701022,\"id\":\"99000048\",\"nextBlock\":-1,\"opCode\":\"addSourceDirectly\",\"parameters\":[\"finish();\"],\"spec\":\"add source directly %s.inputOnly\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
55 | "{\"color\":-10701022,\"id\":\"99000049\",\"nextBlock\":99000058,\"opCode\":\"addSourceDirectly\",\"parameters\":[\"} else {\"],\"spec\":\"add source directly %s.inputOnly\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
56 | "{\"color\":-13851166,\"id\":\"99000058\",\"nextBlock\":99000064,\"opCode\":\"firebaseauthSignOutUser\",\"parameters\":[],\"spec\":\"FirebaseAuth signOut\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
57 | "{\"color\":-7711273,\"id\":\"99000064\",\"nextBlock\":99000056,\"opCode\":\"definedFunc\",\"parameters\":[\"Please verify your email address\"],\"spec\":\"createSnackBar %s.message\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
58 | "{\"color\":-10701022,\"id\":\"99000056\",\"nextBlock\":-1,\"opCode\":\"addSourceDirectly\",\"parameters\":[\"}\"],\"spec\":\"add source directly %s.inputOnly\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
59 | "{\"color\":-7711273,\"id\":\"99000022\",\"nextBlock\":-1,\"opCode\":\"definedFunc\",\"parameters\":[\"@99000019\"],\"spec\":\"createSnackBar %s.message\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\" \",\"typeName\":\"\"}\n" +
60 | "{\"color\":-7711273,\"id\":\"99000019\",\"nextBlock\":-1,\"opCode\":\"getArg\",\"parameters\":[],\"spec\":\"errorMessage\",\"subStack1\":-1,\"subStack2\":-1,\"type\":\"s\",\"typeName\":\"\"}\n";
61 | }
62 |
--------------------------------------------------------------------------------
/app/src/main/java/ma/swblockspreview/MainActivity.java:
--------------------------------------------------------------------------------
1 | package ma.swblockspreview;
2 |
3 | import android.app.Activity;
4 | import android.os.Bundle;
5 | import android.widget.LinearLayout;
6 |
7 | import com.google.gson.Gson;
8 |
9 | import java.util.ArrayList;
10 |
11 | import ma.swblockspreview.bean.BlockBean;
12 |
13 | public class MainActivity extends Activity {
14 | private BlockPreviewer blockPreviewer;
15 |
16 | @Override
17 | protected void onCreate(Bundle savedInstanceState) {
18 | super.onCreate(savedInstanceState);
19 | setContentView(R.layout.activity_main);
20 |
21 | blockPreviewer = new BlockPreviewer(this);
22 | LinearLayout container = findViewById(R.id.lnContainer);
23 |
24 | findViewById(R.id.btnPreview).setOnClickListener(v -> {
25 | var gson = new Gson();
26 | var blocks = new ArrayList();
27 |
28 | for (var line : Constants.SAMPLE_BLOCKS_STR.split("\n")) {
29 | blocks.add(gson.fromJson(line, BlockBean.class));
30 | }
31 |
32 | blockPreviewer.previewInto(container, blocks);
33 | });
34 | }
35 |
36 | @Override
37 | protected void onDestroy() {
38 | blockPreviewer.dispose();
39 | super.onDestroy();
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/app/src/main/java/ma/swblockspreview/bean/BlockBean.java:
--------------------------------------------------------------------------------
1 | package ma.swblockspreview.bean;
2 |
3 | import com.google.gson.annotations.Expose;
4 |
5 | import java.util.ArrayList;
6 |
7 | import ma.swblockspreview.util.Gx;
8 | import ma.swblockspreview.util.mq;
9 |
10 | public class BlockBean {
11 | public Gx classInfo;
12 | @Expose
13 | public int color;
14 | @Expose
15 | public String id;
16 | @Expose
17 | public int nextBlock;
18 | @Expose
19 | public String opCode;
20 | public ArrayList paramClassInfo;
21 | @Expose
22 | public ArrayList parameters;
23 | @Expose
24 | public String spec;
25 | @Expose
26 | public int subStack1;
27 | @Expose
28 | public int subStack2;
29 | @Expose
30 | public String type;
31 | @Expose
32 | public String typeName;
33 |
34 | public BlockBean() {
35 | parameters = new ArrayList<>();
36 | subStack1 = -1;
37 | subStack2 = -1;
38 | nextBlock = -1;
39 | }
40 |
41 | public BlockBean(String var1, String var2, String var3, String var4) {
42 | this(var1, var2, var3, "", var4);
43 | }
44 |
45 | public BlockBean(String var1, String var2, String var3, String var4, String var5) {
46 | id = var1;
47 | spec = var2;
48 | type = var3;
49 | typeName = var4;
50 | opCode = var5;
51 | parameters = new ArrayList<>();
52 | subStack1 = -1;
53 | subStack2 = -1;
54 | nextBlock = -1;
55 | buildClassInfo();
56 | }
57 |
58 | private void buildClassInfo() {
59 | classInfo = mq.a(type, typeName);
60 | paramClassInfo = mq.a(spec);
61 | }
62 |
63 | public BlockBean clone() {
64 | BlockBean var1 = new BlockBean();
65 | var1.copy(this);
66 | return var1;
67 | }
68 |
69 | public void copy(BlockBean var1) {
70 | id = var1.id;
71 | spec = var1.spec;
72 | type = var1.type;
73 | typeName = var1.typeName;
74 | opCode = var1.opCode;
75 | color = var1.color;
76 | parameters = new ArrayList<>(var1.parameters);
77 | subStack1 = var1.subStack1;
78 | subStack2 = var1.subStack2;
79 | nextBlock = var1.nextBlock;
80 | buildClassInfo();
81 | }
82 |
83 | }
84 |
--------------------------------------------------------------------------------
/app/src/main/java/ma/swblockspreview/editor/Rs.java:
--------------------------------------------------------------------------------
1 | package ma.swblockspreview.editor;
2 |
3 | import android.content.Context;
4 | import android.graphics.Rect;
5 | import android.graphics.Typeface;
6 | import android.view.View;
7 | import android.widget.TextView;
8 |
9 | import java.util.ArrayList;
10 |
11 | import ma.swblockspreview.bean.BlockBean;
12 | import ma.swblockspreview.editor.logic.BlockPane;
13 | import ma.swblockspreview.util.StringUtils;
14 | import ma.swblockspreview.util.kq;
15 |
16 | public class Rs extends Ts {
17 | public String T;
18 | public String U;
19 | public ArrayList V;
20 | public int W = 30;
21 | public int aa = 50;
22 | public int ba = 90;
23 | public int ca = 90;
24 | public int da = 4;
25 | public boolean ea = false;
26 | public boolean fa = false;
27 | public boolean ga = false;
28 | public int ha = -1;
29 | public int ia = -1;
30 | public int ja = -1;
31 | public ArrayList ka = new ArrayList<>();
32 | public ArrayList la = new ArrayList<>();
33 | public TextView ma = null;
34 | public int na = 0;
35 | public int oa = 0;
36 | public BlockPane pa = null;
37 | public String qa;
38 | public String ra;
39 |
40 | public Rs(Context var1, int var2, String var3, String var4, String var5) {
41 | super(var1, var4, false);
42 | setTag(Integer.valueOf(var2));
43 | T = var3;
44 | U = var5;
45 | l();
46 | }
47 |
48 | public Rs(Context var1, int var2, String var3, String var4, String var5, String var6) {
49 | super(var1, var4, var5, false);
50 | setTag(Integer.valueOf(var2));
51 | T = var3;
52 | U = var6;
53 | l();
54 | }
55 |
56 | public final int a(TextView var1) {
57 | Rect var2 = new Rect();
58 | var1.getPaint().getTextBounds(var1.getText().toString(), 0, var1.getText().length(), var2);
59 | return var2.width();
60 | }
61 |
62 | public final TextView a(String var1) {
63 | TextView var2 = new TextView(super.a);
64 | if (U.equals("getVar") || U.equals("getArg")) {
65 | String var3 = super.c;
66 | if (var3 != null && var3.length() > 0) {
67 | var1 = super.c + " : " + var1;
68 | }
69 | }
70 |
71 | var2.setText(var1);
72 | var2.setTextSize(10.0F);
73 | var2.setPadding(0, 0, 0, 0);
74 | var2.setGravity(16);
75 | var2.setTextColor(-1);
76 | var2.setTypeface(null, Typeface.BOLD);
77 | LayoutParams var4 = new LayoutParams(-2, super.G);
78 | var4.setMargins(0, 0, 0, 0);
79 | var2.setLayoutParams(var4);
80 | return var2;
81 | }
82 |
83 | public final void a(Rs var1) {
84 | if (b() && -1 == ia) {
85 | e(var1);
86 | } else {
87 | Rs var2 = h();
88 | var2.ha = ((Integer) var1.getTag()).intValue();
89 | var1.E = var2;
90 | }
91 | }
92 |
93 | public void a(Ts var1, Rs var2) {
94 | int var3 = ka.indexOf(var1);
95 | if (var3 >= 0) {
96 | boolean var4 = var1 instanceof Rs;
97 | if (var4) {
98 | Rs var6 = (Rs) var1;
99 | var2.qa = var6.qa;
100 | var2.ra = var6.ra;
101 | } else if (var1 instanceof Ss) {
102 | var2.qa = var1.b;
103 | var2.ra = var1.c;
104 | }
105 |
106 | if (!var4) {
107 | removeView(var1);
108 | }
109 |
110 | ka.set(var3, var2);
111 | var2.E = this;
112 | i();
113 | o();
114 | if (var1 != var2 && var4) {
115 | var1.E = null;
116 | var1.setX(10.0F + getX() + (float) getWidthSum());
117 | var1.setY(5.0F + getY());
118 | ((Rs) var1).k();
119 | }
120 |
121 | }
122 | }
123 |
124 | public final void a(String var1, int var2) {
125 | ArrayList var3 = StringUtils.tokenize(var1);
126 | ka = new ArrayList<>();
127 | la = new ArrayList<>();
128 |
129 | for (int var4 = 0; var4 < var3.size(); ++var4) {
130 | View var5 = b(var3.get(var4), var2);
131 | if (var5 instanceof Ts) {
132 | ((Ts) var5).E = this;
133 | }
134 |
135 | ka.add(var5);
136 | String var7;
137 | if (var5 instanceof Ss) {
138 | var7 = var3.get(var4);
139 | } else {
140 | var7 = "icon";
141 | }
142 |
143 | if (var5 instanceof TextView) {
144 | var7 = "label";
145 | }
146 |
147 | la.add(var7);
148 | }
149 |
150 | }
151 |
152 | public final View b(String var1, int var2) {
153 | if (var1.length() >= 2 && var1.charAt(0) == 37) {
154 | char var3 = var1.charAt(1);
155 | String var4 = "";
156 | if (var3 == 98) {
157 | return new Ss(super.a, "b", var4);
158 | }
159 |
160 | if (var3 == 100) {
161 | return new Ss(super.a, "d", var4);
162 | }
163 |
164 | if (var3 == 109) {
165 | return new Ss(super.a, "m", var1.substring(3));
166 | }
167 |
168 | if (var3 == 115) {
169 | Context var5 = super.a;
170 | if (var1.length() > 2) {
171 | var4 = var1.substring(3);
172 | }
173 |
174 | return new Ss(var5, "s", var4);
175 | }
176 | }
177 |
178 | return a(StringUtils.unescape(var1));
179 | }
180 |
181 | public void b(Rs var1) {
182 | View var2 = pa.findViewWithTag(Integer.valueOf(ha));
183 | if (var2 != null) {
184 | ((Rs) var2).E = null;
185 | }
186 |
187 | var1.E = this;
188 | ha = ((Integer) var1.getTag()).intValue();
189 | if (var2 != null) {
190 | var1.a((Rs) var2);
191 | }
192 |
193 | }
194 |
195 | public void c(Rs var1) {
196 | var1.setX(getX());
197 | var1.setY(getY() - (float) var1.getHeightSum() + (float) super.h);
198 | var1.h().b(this);
199 | }
200 |
201 | public void d(Rs var1) {
202 | var1.setX(getX() - (float) super.j);
203 | var1.setY(getY() - (float) f());
204 | super.E = var1;
205 | var1.ia = ((Integer) getTag()).intValue();
206 | }
207 |
208 | public void e(Rs var1) {
209 | View var2 = pa.findViewWithTag(Integer.valueOf(ia));
210 | if (var2 != null) {
211 | ((Rs) var2).E = null;
212 | }
213 |
214 | var1.E = this;
215 | ia = ((Integer) var1.getTag()).intValue();
216 | if (var2 != null) {
217 | var1.a((Rs) var2);
218 | }
219 |
220 | }
221 |
222 | public void f(Rs var1) {
223 | View var2 = pa.findViewWithTag(Integer.valueOf(ja));
224 | if (var2 != null) {
225 | ((Rs) var2).E = null;
226 | }
227 |
228 | var1.E = this;
229 | ja = ((Integer) var1.getTag()).intValue();
230 | if (var2 != null) {
231 | var1.a((Rs) var2);
232 | }
233 |
234 | }
235 |
236 | public void g(Rs var1) {
237 | if (ha == ((Integer) var1.getTag()).intValue()) {
238 | ha = -1;
239 | }
240 |
241 | if (ia == ((Integer) var1.getTag()).intValue()) {
242 | ia = -1;
243 | }
244 |
245 | if (ja == ((Integer) var1.getTag()).intValue()) {
246 | ja = -1;
247 | }
248 |
249 | if (var1.fa) {
250 | int var2 = ka.indexOf(var1);
251 | if (var2 < 0) {
252 | return;
253 | }
254 |
255 | var1.qa = "";
256 | var1.ra = "";
257 | View var3 = b(la.get(var2), super.e);
258 | if (var3 instanceof Ts) {
259 | ((Ts) var3).E = this;
260 | }
261 |
262 | ka.set(var2, var3);
263 | addView(var3);
264 | i();
265 | o();
266 | }
267 |
268 | p().k();
269 | }
270 |
271 | public ArrayList getAllChildren() {
272 | ArrayList var1 = new ArrayList<>();
273 | Rs var2 = this;
274 |
275 | while (true) {
276 | var1.add(var2);
277 |
278 | for (View var10 : var2.ka) {
279 | if (var10 instanceof Rs) {
280 | var1.addAll(((Rs) var10).getAllChildren());
281 | }
282 | }
283 |
284 | if (var2.b()) {
285 | int var8 = var2.ia;
286 | if (var8 != -1) {
287 | var1.addAll(((Rs) pa.findViewWithTag(Integer.valueOf(var8))).getAllChildren());
288 | }
289 | }
290 |
291 | if (var2.c()) {
292 | int var6 = var2.ja;
293 | if (var6 != -1) {
294 | var1.addAll(((Rs) pa.findViewWithTag(Integer.valueOf(var6))).getAllChildren());
295 | }
296 | }
297 |
298 | int var5 = var2.ha;
299 | if (var5 == -1) {
300 | return var1;
301 | }
302 |
303 | var2 = pa.findViewWithTag(Integer.valueOf(var5));
304 | }
305 | }
306 |
307 | public BlockBean getBean() {
308 | BlockBean var1 = new BlockBean(getTag().toString(), T, super.b, super.c, U);
309 | var1.color = super.e;
310 |
311 | for (View var3 : V) {
312 | if (var3 instanceof Ss) {
313 | var1.parameters.add(((Ss) var3).getArgValue().toString());
314 | } else if (var3 instanceof Rs) {
315 | ArrayList var4 = var1.parameters;
316 | String var5 = "@" + var3.getTag().toString();
317 | var4.add(var5);
318 | }
319 | }
320 |
321 | var1.subStack1 = ia;
322 | var1.subStack2 = ja;
323 | var1.nextBlock = ha;
324 | return var1;
325 | }
326 |
327 | public int getBlockType() {
328 | return oa;
329 | }
330 |
331 | public int getDepth() {
332 | int var1 = 0;
333 | Rs var2 = this;
334 |
335 | while (true) {
336 | var2 = var2.E;
337 | if (var2 == null) {
338 | return var1;
339 | }
340 |
341 | ++var1;
342 | }
343 | }
344 |
345 | public int getHeightSum() {
346 | int var1 = 0;
347 | Rs var2 = this;
348 |
349 | while (true) {
350 | if (var1 > 0) {
351 | var1 -= super.h;
352 | }
353 |
354 | var1 += var2.getTotalHeight();
355 | int var3 = var2.ha;
356 | if (var3 == -1) {
357 | return var1;
358 | }
359 |
360 | var2 = pa.findViewWithTag(Integer.valueOf(var3));
361 | }
362 | }
363 |
364 | public int getWidthSum() {
365 | int var1 = 0;
366 | Rs var2 = this;
367 |
368 | while (true) {
369 | var1 = Math.max(var1, var2.getW());
370 | if (var2.b()) {
371 | int var5 = var2.ia;
372 | if (var5 != -1) {
373 | var1 = Math.max(var1, super.j + ((Rs) pa.findViewWithTag(Integer.valueOf(var5))).getWidthSum());
374 | }
375 | }
376 |
377 | if (var2.c()) {
378 | int var4 = var2.ja;
379 | if (var4 != -1) {
380 | var1 = Math.max(var1, super.j + ((Rs) pa.findViewWithTag(Integer.valueOf(var4))).getWidthSum());
381 | }
382 | }
383 |
384 | int var3 = var2.ha;
385 | if (var3 == -1) {
386 | return var1;
387 | }
388 |
389 | var2 = pa.findViewWithTag(Integer.valueOf(var3));
390 | }
391 | }
392 |
393 | public Rs h() {
394 | Rs var1 = this;
395 |
396 | while (true) {
397 | int var2 = var1.ha;
398 | if (var2 == -1) {
399 | return var1;
400 | }
401 |
402 | var1 = pa.findViewWithTag(Integer.valueOf(var2));
403 | }
404 | }
405 |
406 | public final void i() {
407 | V = new ArrayList<>();
408 |
409 | for (int var1 = 0; var1 < ka.size(); ++var1) {
410 | View var2 = ka.get(var1);
411 | if (var2 instanceof Rs || var2 instanceof Ss) {
412 | V.add(var2);
413 | }
414 | }
415 |
416 | }
417 |
418 | public final void j() {
419 | TextView var1 = ma;
420 | if (var1 != null) {
421 | var1.bringToFront();
422 | ma.setX((float) super.w);
423 | ma.setY((float) (g() - super.n));
424 | }
425 |
426 | }
427 |
428 | public void k() {
429 | bringToFront();
430 | int var1 = super.w;
431 |
432 | for (int var2 = 0; var2 < ka.size(); ++var2) {
433 | View var12 = ka.get(var2);
434 | var12.bringToFront();
435 | boolean var13 = var12 instanceof Rs;
436 | if (var13) {
437 | var12.setX(getX() + (float) var1);
438 | } else {
439 | var12.setX((float) var1);
440 | }
441 |
442 | int var14;
443 | if (la.get(var2).equals("label")) {
444 | var14 = a((TextView) var12);
445 | } else {
446 | var14 = 0;
447 | }
448 |
449 | if (var12 instanceof Ss) {
450 | var14 = ((Ss) var12).getW();
451 | }
452 |
453 | if (var13) {
454 | var14 = ((Rs) var12).getWidthSum();
455 | }
456 |
457 | var1 += var14 + da;
458 | if (var13) {
459 | float var15 = getY() + (float) super.u;
460 | int var16 = na;
461 | Rs var17 = (Rs) var12;
462 | var12.setY(var15 + (float) ((var16 - var17.na - 1) * super.y));
463 | var17.k();
464 | } else {
465 | var12.setY((float) (super.u + na * super.y));
466 | }
467 | }
468 |
469 | if (super.b.equals("b") || super.b.equals("d") || super.b.equals("s") || super.b.equals("a")) {
470 | var1 = Math.max(var1, W);
471 | }
472 |
473 | if (super.b.equals(" ") || super.b.equals("") || super.b.equals("f")) {
474 | var1 = Math.max(var1, aa);
475 | }
476 |
477 | if (super.b.equals("c") || super.b.equals("e")) {
478 | var1 = Math.max(var1, ca);
479 | }
480 |
481 | if (super.b.equals("h")) {
482 | var1 = Math.max(var1, ba);
483 | }
484 |
485 | a((float) (var1 + super.x), (float) (super.u + super.G + 2 * na * super.y + super.v), true);
486 | if (b()) {
487 | int var5 = super.i;
488 | int var6 = ia;
489 | if (var6 > -1) {
490 | Rs var11 = pa.findViewWithTag(Integer.valueOf(var6));
491 | var11.setX(getX() + (float) super.j);
492 | var11.setY(getY() + (float) f());
493 | var11.bringToFront();
494 | var11.k();
495 | var5 = var11.getHeightSum();
496 | }
497 |
498 | setSubstack1Height(var5);
499 | int var7 = super.i;
500 | int var8 = ja;
501 | if (var8 > -1) {
502 | Rs var9 = pa.findViewWithTag(Integer.valueOf(var8));
503 | var9.setX(getX() + (float) super.j);
504 | var9.setY(getY() + (float) g());
505 | var9.bringToFront();
506 | var9.k();
507 | int var10 = var9.getHeightSum();
508 | if (var9.h().ga) {
509 | var7 = var10 + super.h;
510 | } else {
511 | var7 = var10;
512 | }
513 | }
514 |
515 | setSubstack2Height(var7);
516 | j();
517 | }
518 |
519 | int var3 = ha;
520 | if (var3 > -1) {
521 | Rs var4 = pa.findViewWithTag(Integer.valueOf(var3));
522 | var4.setX(getX());
523 | var4.setY(getY() + (float) d());
524 | var4.bringToFront();
525 | var4.k();
526 | }
527 |
528 | }
529 |
530 | public void l() {
531 | byte var5;
532 | label84:
533 | {
534 | setDrawingCacheEnabled(false);
535 | float var1 = (float) W;
536 | float var2 = super.D;
537 | W = (int) (var1 * var2);
538 | aa = (int) (var2 * (float) aa);
539 | ba = (int) (var2 * (float) ba);
540 | ca = (int) (var2 * (float) ca);
541 | da = (int) (var2 * (float) da);
542 | String var3 = super.b;
543 | int var4 = var3.hashCode();
544 | if (var4 != 32) {
545 | if (var4 != 104) {
546 | if (var4 != 108) {
547 | if (var4 != 112) {
548 | if (var4 != 115) {
549 | if (var4 != 118) {
550 | switch (var4) {
551 | case 97:
552 | if (var3.equals("a")) {
553 | var5 = 7;
554 | break label84;
555 | }
556 | break;
557 | case 98:
558 | if (var3.equals("b")) {
559 | var5 = 1;
560 | break label84;
561 | }
562 | break;
563 | case 99:
564 | if (var3.equals("c")) {
565 | var5 = 8;
566 | break label84;
567 | }
568 | break;
569 | case 100:
570 | if (var3.equals("d")) {
571 | var5 = 3;
572 | break label84;
573 | }
574 | break;
575 | case 101:
576 | if (var3.equals("e")) {
577 | var5 = 9;
578 | break label84;
579 | }
580 | break;
581 | case 102:
582 | if (var3.equals("f")) {
583 | var5 = 10;
584 | break label84;
585 | }
586 | }
587 | } else if (var3.equals("v")) {
588 | var5 = 4;
589 | break label84;
590 | }
591 | } else if (var3.equals("s")) {
592 | var5 = 2;
593 | break label84;
594 | }
595 | } else if (var3.equals("p")) {
596 | var5 = 5;
597 | break label84;
598 | }
599 | } else if (var3.equals("l")) {
600 | var5 = 6;
601 | break label84;
602 | }
603 | } else if (var3.equals("h")) {
604 | var5 = 11;
605 | break label84;
606 | }
607 | } else if (var3.equals(" ")) {
608 | var5 = 0;
609 | break label84;
610 | }
611 |
612 | var5 = -1;
613 | }
614 |
615 | switch (var5) {
616 | case 0:
617 | case 8:
618 | case 9:
619 | default:
620 | break;
621 | case 1:
622 | case 2:
623 | case 3:
624 | case 4:
625 | case 5:
626 | case 6:
627 | case 7:
628 | fa = true;
629 | break;
630 | case 10:
631 | ga = true;
632 | break;
633 | case 11:
634 | ea = true;
635 | }
636 |
637 | /*
638 | if(!this.ea && !this.U.equals("definedFunc") && !this.U.equals("getVar") && !this.U.equals("getArg")) {
639 | this.T = xB.b().a(this.getContext(), this.U);
640 | }
641 | */
642 |
643 | /*if(this.T.equals("")) {
644 | this.T = MakeBlock.getSpecBlock(this.U);
645 | }*/
646 |
647 | setSpec(T);
648 |
649 | int colorc = kq.getBlockColor(U, super.b);
650 |
651 | if (colorc != -12289797) {
652 | super.e = colorc;
653 | }
654 |
655 | //super.e = /* MakeBlock.getColorBlock(*/kq.a(this.U, super.b);//, this.U);
656 | }
657 |
658 | public void m() {
659 | Rs var1 = this;
660 |
661 | do {
662 | var1.n();
663 | var1 = var1.E;
664 | } while (var1 != null);
665 |
666 | }
667 |
668 | public void n() {
669 | int var1 = super.w;
670 |
671 | for (int var2 = 0; var2 < ka.size(); ++var2) {
672 | View var4 = ka.get(var2);
673 | int var5;
674 | if (la.get(var2).equals("label")) {
675 | var5 = a((TextView) var4);
676 | } else {
677 | var5 = 0;
678 | }
679 |
680 | if (var4 instanceof Ss) {
681 | var5 = ((Ss) var4).getW();
682 | }
683 |
684 | if (var4 instanceof Rs) {
685 | var5 = ((Rs) var4).getWidthSum();
686 | }
687 |
688 | var1 += var5 + da;
689 | }
690 |
691 | if (super.b.equals("b") || super.b.equals("d") || super.b.equals("s") || super.b.equals("a")) {
692 | var1 = Math.max(var1, W);
693 | }
694 |
695 | if (super.b.equals(" ") || super.b.equals("") || super.b.equals("o")) {
696 | var1 = Math.max(var1, aa);
697 | }
698 |
699 | if (super.b.equals("c") || super.b.equals("e")) {
700 | var1 = Math.max(var1, ca);
701 | }
702 |
703 | if (super.b.equals("h")) {
704 | var1 = Math.max(var1, ba);
705 | }
706 |
707 | TextView var3 = ma;
708 | if (var3 != null) {
709 | var1 = Math.max(var1, 2 + super.w + var3.getWidth());
710 | }
711 |
712 | a((float) (var1 + super.x), (float) (super.u + super.G + 2 * na * super.y + super.v), false);
713 | }
714 |
715 | public void o() {
716 | for (Rs var1 = this; var1 != null; var1 = var1.E) {
717 | int var2 = 0;
718 |
719 | for (View var4 : var1.V) {
720 | if (var4 instanceof Rs) {
721 | var2 = Math.max(var2, 1 + ((Rs) var4).na);
722 | }
723 | }
724 |
725 | var1.na = var2;
726 | var1.n();
727 | if (!var1.fa) {
728 | return;
729 | }
730 | }
731 |
732 | }
733 |
734 | public Rs p() {
735 | Rs var1 = this;
736 |
737 | while (true) {
738 | Rs var2 = var1.E;
739 | if (var2 == null) {
740 | return var1;
741 | }
742 |
743 | var1 = var2;
744 | }
745 | }
746 |
747 | public void setBlockType(int var1) {
748 | oa = var1;
749 | }
750 |
751 | public void setSpec(String var1) {
752 | T = var1;
753 | removeAllViews();
754 | a(T, super.e);
755 |
756 | for (View view : ka) {
757 | addView(view);
758 | }
759 |
760 | i();
761 | if (super.b.equals("e") && U.equals("ifElse")) {
762 | ma = a("else");
763 | addView(ma);
764 | }
765 |
766 | if (super.b.equals("e") && U.equals("tryCatch")) {
767 | ma = a("Catch");
768 | addView(ma);
769 | }
770 |
771 | k();
772 | }
773 | }
774 |
--------------------------------------------------------------------------------
/app/src/main/java/ma/swblockspreview/editor/Ss.java:
--------------------------------------------------------------------------------
1 | package ma.swblockspreview.editor;
2 |
3 | import android.content.Context;
4 | import android.graphics.Paint;
5 | import android.graphics.Rect;
6 | import android.graphics.Typeface;
7 | import android.widget.TextView;
8 |
9 | import ma.swblockspreview.util.kq;
10 |
11 | public class Ss extends Ts {
12 | public Context T;
13 | public Object U = "";
14 | public TextView V;
15 | public TextView W;
16 | public int aa = 20;
17 | public int ba = 4;
18 | public int ca = 2;
19 | public int da = 0;
20 | public int ea = 0;
21 |
22 | public Ss(Context context, String str, String str2) {
23 | super(context, str, str2, true);
24 | T = context;
25 | as(context);
26 | }
27 |
28 | private void as(Context var1) {
29 | byte var4;
30 | label68:
31 | {
32 | String var2 = super.b;
33 | int var3 = var2.hashCode();
34 | if (var3 != 98) {
35 | if (var3 != 100) {
36 | if (var3 != 115) {
37 | if (var3 != 109) {
38 | if (var3 == 110 && var2.equals("n")) {
39 | var4 = 2;
40 | break label68;
41 | }
42 | } else if (var2.equals("m")) {
43 | var4 = 4;
44 | break label68;
45 | }
46 | } else if (var2.equals("s")) {
47 | var4 = 3;
48 | break label68;
49 | }
50 | } else if (var2.equals("d")) {
51 | var4 = 1;
52 | break label68;
53 | }
54 | } else if (var2.equals("b")) {
55 | var4 = 0;
56 | break label68;
57 | }
58 |
59 | var4 = -1;
60 | }
61 |
62 | if (var4 != 0) {
63 | if (var4 != 1) {
64 | if (var4 != 2) {
65 | if (var4 != 3) {
66 | if (var4 == 4) {
67 | super.e = 805306368;
68 | }
69 | } else {
70 | super.e = -1;
71 | }
72 | } else {
73 | super.e = -3155748;
74 | }
75 | } else {
76 | super.e = -657931;
77 | }
78 | } else {
79 | super.e = 1342177280;
80 | aa = 25;
81 | }
82 |
83 | float var5 = (float) aa;
84 | float var6 = super.D;
85 | aa = (int) (var5 * var6);
86 | ba = (int) (var6 * (float) ba);
87 | ca = (int) (var6 * (float) ca);
88 | da = ca;
89 | if (super.b.equals("m") && a(super.c).length() >= 0) {
90 | W = b(super.c);
91 | addView(W);
92 | da = getDropdownTypeWidth();
93 | }
94 |
95 | if (super.b.equals("m") || super.b.equals("d") || super.b.equals("n") || super.b.equals("s")) {
96 | V = c("");
97 | addView(V);
98 | }
99 |
100 | a((float) (aa + da), (float) super.G, false);
101 | }
102 |
103 | private int getDropdownTypeWidth() {
104 | Rect rect = new Rect();
105 | Paint paint = W.getPaint();
106 | String a = a(c);
107 | paint.getTextBounds(a, 0, a.length(), rect);
108 | return rect.width() + (ca * 2);
109 | }
110 |
111 | private int getLabelWidth() {
112 | Rect rect = new Rect();
113 | V.getPaint().getTextBounds(V.getText().toString(), 0, V.getText().length(), rect);
114 | return rect.width() + ba;
115 | }
116 |
117 | public final String a(String str) {
118 | String b = kq.b(str);
119 | if (b.length() <= 0) {
120 | return b;
121 | }
122 | return b + " : ";
123 | }
124 |
125 | public final TextView b(String str) {
126 | TextView textView = new TextView(T);
127 | textView.setText(a(str));
128 | textView.setTextSize(8.0f);
129 | textView.setTypeface(null, Typeface.BOLD);
130 | LayoutParams layoutParams = new LayoutParams(-2, G);
131 | int i = ca;
132 | layoutParams.setMargins(i, 0, i, 0);
133 | textView.setPadding(0, 0, 0, 0);
134 | textView.setLayoutParams(layoutParams);
135 | textView.setBackgroundColor(0);
136 | textView.setSingleLine();
137 | textView.setGravity(17);
138 | textView.setTextColor(-1);
139 | return textView;
140 | }
141 |
142 | public final TextView c(String str) {
143 | TextView textView = new TextView(T);
144 | textView.setText(str);
145 | textView.setTextSize(9.0f);
146 | LayoutParams layoutParams = new LayoutParams(aa, G);
147 | layoutParams.setMargins(da, 0, ea, 0);
148 | textView.setPadding(0, 0, 0, 0);
149 | textView.setLayoutParams(layoutParams);
150 | textView.setBackgroundColor(0);
151 | textView.setSingleLine();
152 | textView.setGravity(17);
153 | if (b.equals("m")) {
154 | textView.setTextColor(-251658241);
155 | } else {
156 | textView.setTextColor(-268435456);
157 | }
158 | return textView;
159 | }
160 |
161 | public Object getArgValue() {
162 | return (b.equals("d") || b.equals("m") || b.equals("s")) ? V.getText() : U;
163 | }
164 |
165 | public String getMenuName() {
166 | return c;
167 | }
168 |
169 | public void setArgValue(Object obj) {
170 | U = obj;
171 | if (b.equals("d") || b.equals("m") || b.equals("s")) {
172 | V.setText(obj.toString());
173 | int max = Math.max(aa, getLabelWidth());
174 | V.getLayoutParams().width = max;
175 | a((float) (max + da), (float) G, true);
176 | }
177 | }
178 | }
179 |
--------------------------------------------------------------------------------
/app/src/main/java/ma/swblockspreview/editor/Ts.java:
--------------------------------------------------------------------------------
1 | package ma.swblockspreview.editor;
2 |
3 | import android.content.Context;
4 | import android.graphics.Canvas;
5 | import android.graphics.Paint;
6 | import android.graphics.Path;
7 | import android.graphics.Rect;
8 | import android.graphics.RectF;
9 | import android.view.View;
10 | import android.widget.RelativeLayout;
11 |
12 | import ma.swblockspreview.util.Gx;
13 | import ma.swblockspreview.util.mq;
14 | import ma.swblockspreview.util.LayoutUtils;
15 |
16 | public class Ts extends RelativeLayout {
17 | public int A;
18 | public int B;
19 | public int C;
20 | public float D;
21 | public Rs E;
22 | public int F;
23 | public int G;
24 | public int H;
25 | public int I;
26 | public int J;
27 | public boolean K;
28 | public boolean L;
29 | public Paint M;
30 | public Paint N;
31 | public Paint O;
32 | public int P;
33 | public int Q;
34 | public int R;
35 | public Gx S;
36 | public Context a;
37 | public String b;
38 | public String c;
39 | public int d;
40 | public int e;
41 | public Paint f;
42 | public boolean g;
43 | public int h;
44 | public int i;
45 | public int j;
46 | public int k;
47 | public int l;
48 | public int m;
49 | public int n;
50 | public int o;
51 | public int p;
52 | public int q;
53 | public int r;
54 | public int s;
55 | public int t;
56 | public int u;
57 | public int v;
58 | public int w;
59 | public int x;
60 | public int y;
61 | public int z;
62 |
63 | public Ts(Context var1, String var2, String var3, boolean var4) {
64 | super(var1);
65 | h = 3;
66 | i = 12;
67 | j = 15;
68 | k = 3;
69 | l = 2;
70 | m = 15;
71 | n = 15;
72 | o = 15;
73 | int var5 = o;
74 | int var6 = h;
75 | p = var5 + var6;
76 | q = 10 + p;
77 | r = var6 + q;
78 | s = 6;
79 | t = 60;
80 | u = 2;
81 | v = 2;
82 | w = 3;
83 | x = 0;
84 | y = 2;
85 | int var7 = i;
86 | B = var7;
87 | C = var7;
88 | E = null;
89 | F = 100;
90 | G = 14;
91 | H = 15;
92 | I = 6;
93 | J = 4;
94 | K = false;
95 | L = false;
96 | P = 1;
97 | Q = 1;
98 | R = 805306368;
99 | S = null;
100 | a = var1;
101 | b = var2;
102 | if (var3 != null && var3.indexOf(".") > 0) {
103 | c = var3.substring(0, var3.indexOf("."));
104 | } else {
105 | c = var3;
106 | }
107 |
108 | byte var10;
109 | label86:
110 | {
111 | a();
112 | String var8 = b;
113 | int var9 = var8.hashCode();
114 | if (var9 != 32) {
115 | if (var9 != 104) {
116 | if (var9 != 112) {
117 | if (var9 != 115) {
118 | if (var9 != 118) {
119 | switch (var9) {
120 | case 97:
121 | if (var8.equals("a")) {
122 | var10 = 13;
123 | break label86;
124 | }
125 | break;
126 | case 98:
127 | if (var8.equals("b")) {
128 | var10 = 1;
129 | break label86;
130 | }
131 | break;
132 | case 99:
133 | if (var8.equals("c")) {
134 | var10 = 4;
135 | break label86;
136 | }
137 | break;
138 | case 100:
139 | if (var8.equals("d")) {
140 | var10 = 2;
141 | break label86;
142 | }
143 | break;
144 | case 101:
145 | if (var8.equals("e")) {
146 | var10 = 5;
147 | break label86;
148 | }
149 | break;
150 | case 102:
151 | if (var8.equals("f")) {
152 | var10 = 6;
153 | break label86;
154 | }
155 | break;
156 | default:
157 | switch (var9) {
158 | case 108:
159 | if (var8.equals("l")) {
160 | var10 = 12;
161 | break label86;
162 | }
163 | break;
164 | case 109:
165 | if (var8.equals("m")) {
166 | var10 = 8;
167 | break label86;
168 | }
169 | break;
170 | case 110:
171 | if (var8.equals("n")) {
172 | var10 = 3;
173 | break label86;
174 | }
175 | }
176 | }
177 | } else if (var8.equals("v")) {
178 | var10 = 10;
179 | break label86;
180 | }
181 | } else if (var8.equals("s")) {
182 | var10 = 9;
183 | break label86;
184 | }
185 | } else if (var8.equals("p")) {
186 | var10 = 11;
187 | break label86;
188 | }
189 | } else if (var8.equals("h")) {
190 | var10 = 7;
191 | break label86;
192 | }
193 | } else if (var8.equals(" ")) {
194 | var10 = 0;
195 | break label86;
196 | }
197 |
198 | var10 = -1;
199 | }
200 |
201 | switch (var10) {
202 | case 0:
203 | u = 4;
204 | d = 4;
205 | break;
206 | case 1:
207 | w = 8;
208 | x = 5;
209 | d = 2;
210 | break;
211 | case 2:
212 | d = 3;
213 | w = 4;
214 | break;
215 | case 3:
216 | d = 3;
217 | break;
218 | case 4:
219 | u = 4;
220 | d = 10;
221 | break;
222 | case 5:
223 | u = 4;
224 | d = 12;
225 | break;
226 | case 6:
227 | u = 4;
228 | d = 5;
229 | break;
230 | case 7:
231 | u = 8;
232 | d = 7;
233 | break;
234 | case 8:
235 | d = 9;
236 | break;
237 | case 9:
238 | case 10:
239 | case 11:
240 | case 12:
241 | case 13:
242 | d = 1;
243 | }
244 |
245 | e = R;
246 | g = var4;
247 | setWillNotDraw(false);
248 | a(var1);
249 | }
250 |
251 | public Ts(Context var1, String var2, boolean var3) {
252 | this(var1, var2, "", var3);
253 | }
254 |
255 | private float[] getBooleanReflections() {
256 | float[] var1 = new float[8];
257 | int var2 = A / 2;
258 | int var3 = P;
259 | var1[0] = (float) (0 + var3 / 2);
260 | float var4 = (float) var2;
261 | var1[1] = var4;
262 | var1[2] = var4;
263 | var1[3] = (float) (0 + var3 / 2);
264 | var1[4] = var4;
265 | var1[5] = (float) (0 + var3 / 2);
266 | var1[6] = (float) (z - var2);
267 | var1[7] = (float) (0 + var3 / 2);
268 | return var1;
269 | }
270 |
271 | private float[] getBooleanShadows() {
272 | float[] var1 = new float[8];
273 | int var2 = A;
274 | int var3 = var2 / 2;
275 | int var4 = z;
276 | int var5 = P;
277 | var1[0] = (float) (var4 - var5 / 2);
278 | float var6 = (float) var3;
279 | var1[1] = var6;
280 | var1[2] = (float) (var4 - var3);
281 | var1[3] = (float) (var2 - var5 / 2);
282 | var1[4] = (float) (var4 - var3);
283 | var1[5] = (float) (var2 - var5 / 2);
284 | var1[6] = var6;
285 | var1[7] = (float) (var2 - var5 / 2);
286 | return var1;
287 | }
288 |
289 | private float[] getNumberBottomShadows() {
290 | float[] var1 = new float[4];
291 | int var2 = A;
292 | int var3 = var2 / 2;
293 | var1[0] = (float) (z - var3);
294 | int var4 = P;
295 | var1[1] = (float) (var2 - var4 / 2);
296 | var1[2] = (float) var3;
297 | var1[3] = (float) (var2 - var4 / 2);
298 | return var1;
299 | }
300 |
301 | private float[] getNumberTopReflections() {
302 | float[] var1 = new float[4];
303 | int var2 = A / 2;
304 | var1[0] = (float) var2;
305 | int var3 = P;
306 | var1[1] = (float) (0 + var3 / 2);
307 | var1[2] = (float) (z - var2);
308 | var1[3] = (float) (0 + var3 / 2);
309 | return var1;
310 | }
311 |
312 | private float[] getRectReflections() {
313 | float[] var1 = new float[8];
314 | var1[0] = 0.0F;
315 | int var2 = P;
316 | var1[1] = (float) (0 + var2 / 2);
317 | var1[2] = (float) (z - var2 / 2);
318 | var1[3] = (float) (0 + var2 / 2);
319 | var1[4] = (float) (0 + var2 / 2);
320 | var1[5] = 0.0F;
321 | var1[6] = (float) (0 + var2 / 2);
322 | var1[7] = (float) (A - var2 / 2);
323 | return var1;
324 | }
325 |
326 | private float[] getRectShadows() {
327 | float[] var1 = new float[8];
328 | int var2 = z;
329 | int var3 = P;
330 | var1[0] = (float) (var2 - var3 / 2);
331 | var1[1] = 0.0F;
332 | var1[2] = (float) (var2 - var3 / 2);
333 | int var4 = A;
334 | var1[3] = (float) (var4 - var3 / 2);
335 | var1[4] = (float) (var2 - var3 / 2);
336 | var1[5] = (float) (var4 - var3 / 2);
337 | var1[6] = 0.0F;
338 | var1[7] = (float) (var4 - var3 / 2);
339 | return var1;
340 | }
341 |
342 | public void a() {
343 | S = mq.a(b, c);
344 | }
345 |
346 | public void a(float var1, float var2, boolean var3) {
347 | if (d == 9) {
348 | z = (int) var1 + H;
349 | } else {
350 | z = (int) var1;
351 | }
352 |
353 | A = (int) var2;
354 | if (var3) {
355 | e();
356 | }
357 |
358 | }
359 |
360 | public void a(Ts var1, boolean var2, boolean var3, int var4) {
361 | e = -16777216;
362 | d = var1.d;
363 | z = var1.z;
364 | A = var1.A;
365 | B = var1.B;
366 | C = var1.C;
367 | if (!var2) {
368 | if (var3) {
369 | d = 4;
370 | A = (int) (6.0F * D);
371 | } else if (var4 > 0) {
372 | B = var4 - h;
373 | }
374 | }
375 |
376 | e();
377 | }
378 |
379 | public final void a(Context var1) {
380 | D = LayoutUtils.getDip(var1, 1.0F);
381 | float var2 = (float) h;
382 | float var3 = D;
383 | h = (int) (var2 * var3);
384 | i = (int) (var3 * (float) i);
385 | j = (int) (var3 * (float) j);
386 | m = (int) (var3 * (float) m);
387 | n = (int) (var3 * (float) n);
388 | k = (int) (var3 * (float) k);
389 | l = (int) (var3 * (float) l);
390 | o = (int) (var3 * (float) o);
391 | p = (int) (var3 * (float) p);
392 | q = (int) (var3 * (float) q);
393 | r = (int) (var3 * (float) r);
394 | s = (int) (var3 * (float) s);
395 | t = (int) (var3 * (float) t);
396 | B = (int) (var3 * (float) B);
397 | C = (int) (var3 * (float) C);
398 | w = (int) (var3 * (float) w);
399 | u = (int) (var3 * (float) u);
400 | x = (int) (var3 * (float) x);
401 | v = (int) (var3 * (float) v);
402 | y = (int) (var3 * (float) y);
403 | F = (int) (var3 * (float) F);
404 | G = (int) (var3 * (float) G);
405 | I = (int) (var3 * (float) I);
406 | J = (int) (var3 * (float) J);
407 | H = (int) (var3 * (float) H);
408 | P = (int) (var3 * (float) P);
409 | Q = (int) (var3 * (float) Q);
410 | if (P < 2) {
411 | P = 2;
412 | }
413 |
414 | if (Q < 2) {
415 | Q = 2;
416 | }
417 |
418 | f = new Paint();
419 | if (!g) {
420 | K = true;
421 | L = true;
422 | }
423 |
424 | M = new Paint();
425 | M.setColor(-536870912);
426 | M.setStrokeWidth((float) P);
427 | N = new Paint();
428 | N.setColor(-1610612736);
429 | N.setStyle(Paint.Style.STROKE);
430 | N.setStrokeWidth((float) P);
431 | O = new Paint();
432 | O.setColor(-1593835521);
433 | O.setStyle(Paint.Style.STROKE);
434 | O.setStrokeWidth((float) Q);
435 | setLayerType(View.LAYER_TYPE_SOFTWARE, null);
436 | a((float) F, (float) (G + u + v), false);
437 | }
438 |
439 | public final void a(Canvas var1) {
440 | Path var2 = new Path();
441 | int var3 = A;
442 | int var4 = var3 / 2;
443 | float var5 = (float) var4;
444 | var2.moveTo(var5, (float) var3);
445 | var2.lineTo(0.0F, var5);
446 | var2.lineTo(var5, 0.0F);
447 | var2.lineTo((float) (z - var4), 0.0F);
448 | var2.lineTo((float) z, var5);
449 | var2.lineTo((float) (z - var4), (float) A);
450 | var1.drawPath(var2, f);
451 | if (K) {
452 | var1.drawLines(getBooleanShadows(), N);
453 | }
454 |
455 | if (L) {
456 | var1.drawLines(getBooleanReflections(), O);
457 | }
458 |
459 | }
460 |
461 | public final void a(Path var1) {
462 | var1.moveTo(0.0F, (float) k);
463 | var1.lineTo((float) k, 0.0F);
464 | var1.lineTo((float) o, 0.0F);
465 | var1.lineTo((float) p, (float) h);
466 | var1.lineTo((float) q, (float) h);
467 | var1.lineTo((float) r, 0.0F);
468 | var1.lineTo((float) (z - k), 0.0F);
469 | var1.lineTo((float) z, (float) k);
470 | }
471 |
472 | public final void a(Path var1, int var2) {
473 | var1.lineTo((float) j, (float) (var2 - l));
474 | float var3 = (float) (j + l);
475 | float var4 = (float) var2;
476 | var1.lineTo(var3, var4);
477 | var1.lineTo((float) (z - k), var4);
478 | var1.lineTo((float) z, (float) (var2 + k));
479 | }
480 |
481 | public final void a(Path var1, int var2, boolean var3, int var4) {
482 | var1.lineTo((float) z, (float) (var2 - k));
483 | float var5 = (float) (z - k);
484 | float var6 = (float) var2;
485 | var1.lineTo(var5, var6);
486 | if (var3) {
487 | var1.lineTo((float) (var4 + r), var6);
488 | var1.lineTo((float) (var4 + q), (float) (var2 + h));
489 | var1.lineTo((float) (var4 + p), (float) (var2 + h));
490 | var1.lineTo((float) (var4 + o), var6);
491 | }
492 |
493 | if (var4 > 0) {
494 | var1.lineTo((float) (var4 + l), var6);
495 | var1.lineTo((float) var4, (float) (var2 + l));
496 | } else {
497 | var1.lineTo((float) (var4 + k), var6);
498 | var1.lineTo(0.0F, (float) (var2 - k));
499 | }
500 | }
501 |
502 | public final float[] a(int var1) {
503 | float[] var2 = new float[24];
504 | int var3 = P;
505 | var2[0] = (float) (0 + var3 / 2);
506 | int var4 = k;
507 | var2[1] = (float) (var1 - var4);
508 | var2[2] = (float) (0 + var3 / 2);
509 | var2[3] = (float) var4;
510 | var2[4] = (float) (0 + var3 / 2);
511 | var2[5] = (float) var4;
512 | var2[6] = (float) var4;
513 | var2[7] = (float) (0 + var3 / 2);
514 | var2[8] = (float) var4;
515 | var2[9] = (float) (0 + var3 / 2);
516 | var2[10] = (float) o;
517 | var2[11] = (float) (0 + var3 / 2);
518 | var2[12] = (float) p;
519 | int var5 = h;
520 | var2[13] = (float) (var5 + var3 / 2);
521 | int var6 = q;
522 | var2[14] = (float) var6;
523 | var2[15] = (float) (var5 + var3 / 2);
524 | var2[16] = (float) var6;
525 | var2[17] = (float) (var5 + var3 / 2);
526 | int var7 = r;
527 | var2[18] = (float) var7;
528 | var2[19] = (float) (0 + var3 / 2);
529 | var2[20] = (float) var7;
530 | var2[21] = (float) (0 + var3 / 2);
531 | var2[22] = (float) (z - var4);
532 | var2[23] = (float) (0 + var3 / 2);
533 | return var2;
534 | }
535 |
536 | public final float[] a(int var1, int var2) {
537 | float[] var3 = new float[8];
538 | int var4 = j;
539 | int var5 = l;
540 | var3[0] = (float) (var4 + var5);
541 | int var6 = P;
542 | var3[1] = (float) (var1 - var6 / 2);
543 | var3[2] = (float) (var4 - var6 / 2);
544 | var3[3] = (float) (var1 + var5);
545 | var3[4] = (float) (var4 - var6 / 2);
546 | var3[5] = (float) (var1 + var5);
547 | var3[6] = (float) (var4 - var6 / 2);
548 | var3[7] = (float) (var2 - var5);
549 | return var3;
550 | }
551 |
552 | public final float[] a(int var1, boolean var2, int var3) {
553 | float[] var4;
554 | if (var2) {
555 | var4 = new float[24];
556 | } else {
557 | var4 = new float[8];
558 | }
559 |
560 | int var5 = z;
561 | var4[0] = (float) var5;
562 | int var6 = k;
563 | int var7 = var1 - var6;
564 | int var8 = P;
565 | var4[1] = (float) (var7 - var8 / 2);
566 | var4[2] = (float) (var5 - var6);
567 | var4[3] = (float) (var1 - var8 / 2);
568 | if (var2) {
569 | var4[4] = (float) (var5 - var6);
570 | var4[5] = (float) (var1 - var8 / 2);
571 | int var9 = r;
572 | var4[6] = (float) (var3 + var9);
573 | var4[7] = (float) (var1 - var8 / 2);
574 | var4[8] = (float) (var9 + var3);
575 | var4[9] = (float) (var1 - var8 / 2);
576 | int var10 = q;
577 | var4[10] = (float) (var3 + var10);
578 | int var11 = h;
579 | var4[11] = (float) (var1 + var11 - var8 / 2);
580 | var4[12] = (float) (var10 + var3);
581 | var4[13] = (float) (var1 + var11 - var8 / 2);
582 | int var12 = p;
583 | var4[14] = (float) (var3 + var12);
584 | var4[15] = (float) (var1 + var11 - var8 / 2);
585 | var4[16] = (float) (var12 + var3);
586 | var4[17] = (float) (var11 + var1 - var8 / 2);
587 | int var13 = o;
588 | var4[18] = (float) (var3 + var13);
589 | var4[19] = (float) (var1 - var8 / 2);
590 | if (var3 > 0) {
591 | var4[20] = (float) (var13 + var3);
592 | var4[21] = (float) (var1 - var8 / 2);
593 | var4[22] = (float) (var3 + l);
594 | var4[23] = (float) (var1 - var8 / 2);
595 | return var4;
596 | } else {
597 | var4[20] = (float) (var13 + var3);
598 | var4[21] = (float) (var1 - var8 / 2);
599 | var4[22] = (float) (var3 + var6);
600 | var4[23] = (float) (var1 - var8 / 2);
601 | return var4;
602 | }
603 | } else if (var3 > 0) {
604 | var4[4] = (float) (var5 - var6);
605 | var4[5] = (float) (var1 - var8 / 2);
606 | var4[6] = (float) (var3 + l);
607 | var4[7] = (float) (var1 - var8 / 2);
608 | return var4;
609 | } else {
610 | var4[4] = (float) (var5 - var6);
611 | var4[5] = (float) (var1 - var8 / 2);
612 | var4[6] = (float) (var3 + var6);
613 | var4[7] = (float) (var1 - var8 / 2);
614 | return var4;
615 | }
616 | }
617 |
618 | public final void b(Canvas var1) {
619 | Path var2 = new Path();
620 | a(var2);
621 | int var3 = A;
622 | int var4 = d;
623 | boolean var5 = true;
624 | boolean var6;
625 | var6 = var4 != 5;
626 |
627 | a(var2, var3, var6, 0);
628 | var1.drawPath(var2, f);
629 | if (K) {
630 | var1.drawLines(b(0, A), N);
631 | int var7 = A;
632 | if (d == 5) {
633 | var5 = false;
634 | }
635 |
636 | var1.drawLines(a(var7, var5, 0), N);
637 | }
638 |
639 | if (L) {
640 | var1.drawLines(a(A), O);
641 | }
642 |
643 | }
644 |
645 | public boolean b() {
646 | return d >= 10;
647 | }
648 |
649 | public final float[] b(int var1, int var2) {
650 | float[] var3 = new float[4];
651 | int var4 = z;
652 | int var5 = P;
653 | var3[0] = (float) (var4 - var5 / 2);
654 | int var6 = k;
655 | var3[1] = (float) (var1 + var6);
656 | var3[2] = (float) (var4 - var5 / 2);
657 | var3[3] = (float) (var2 - var6);
658 | return var3;
659 | }
660 |
661 | public final void c(Canvas var1) {
662 | var1.drawRect(new Rect(0, 0, z, A), f);
663 | Path var2 = new Path();
664 | int var3 = z;
665 | int var4 = J;
666 | var2.moveTo((float) (var3 - var4), (float) var4);
667 | int var5 = z;
668 | int var6 = J;
669 | int var7 = var5 - var6;
670 | int var8 = I;
671 | var2.lineTo((float) (var7 - var8 / 2), (float) (var6 + var8));
672 | int var9 = z;
673 | int var10 = J;
674 | var2.lineTo((float) (var9 - var10 - I), (float) var10);
675 | var1.drawPath(var2, M);
676 | }
677 |
678 | public boolean c() {
679 | return d == 12;
680 | }
681 |
682 | public final float[] c(int var1, int var2) {
683 | float[] var3 = new float[4];
684 | var3[0] = (float) (var2 + l);
685 | int var4 = P;
686 | var3[1] = (float) (var1 + var4 / 2);
687 | var3[2] = (float) (z - k);
688 | var3[3] = (float) (var1 + var4 / 2);
689 | return var3;
690 | }
691 |
692 | public int d() {
693 | return getTotalHeight() - h;
694 | }
695 |
696 | public final void d(Canvas var1) {
697 | Path var2 = new Path();
698 | var2.moveTo(0.0F, (float) s);
699 | var2.arcTo(new RectF(0.0F, 0.0F, (float) t, (float) (2 * s)), 180.0F, 180.0F);
700 | var2.lineTo((float) (z - k), (float) s);
701 | var2.lineTo((float) z, (float) (s + k));
702 | a(var2, A, true, 0);
703 | var1.drawPath(var2, f);
704 | if (K) {
705 | var1.drawLines(b(s, A), N);
706 | var1.drawLines(a(A, true, 0), N);
707 | }
708 |
709 | }
710 |
711 | public void e() {
712 | requestLayout();
713 | }
714 |
715 | public final void e(Canvas var1) {
716 | Path var2 = new Path();
717 | int var3 = A + B;
718 | int var4 = h;
719 | int var5 = var3 - var4;
720 | int var6 = var5 + n + C - var4;
721 | a(var2);
722 | a(var2, A, true, j);
723 | a(var2, var5);
724 | a(var2, var5 + n, true, j);
725 | a(var2, var6);
726 | a(var2, var6 + m, true, 0);
727 | var1.drawPath(var2, f);
728 | if (K) {
729 | var1.drawLines(b(0, A), N);
730 | var1.drawLines(a(A, true, j), N);
731 | var1.drawLines(a(A, var5), N);
732 | var1.drawLines(b(var5, var5 + n), N);
733 | var1.drawLines(a(var5 + n, true, j), N);
734 | var1.drawLines(a(var5 + n, var6), N);
735 | var1.drawLines(b(var6, var6 + m), N);
736 | var1.drawLines(a(var6 + m, true, 0), N);
737 | }
738 |
739 | if (L) {
740 | var1.drawLines(a(var6 + m), O);
741 | var1.drawLines(c(var5, j), O);
742 | var1.drawLines(c(var6, j), O);
743 | }
744 |
745 | }
746 |
747 | public int f() {
748 | return A;
749 | }
750 |
751 | public final void f(Canvas var1) {
752 | Path var2 = new Path();
753 | int var3 = A + B - h;
754 | a(var2);
755 | int var4 = A;
756 | int var5 = j;
757 | boolean var6 = true;
758 | a(var2, var4, var6, var5);
759 | a(var2, var3);
760 | int var7 = var3 + m;
761 | boolean var8;
762 | var8 = d == 10;
763 |
764 | a(var2, var7, var8, 0);
765 | var1.drawPath(var2, f);
766 | if (K) {
767 | var1.drawLines(b(0, A), N);
768 | var1.drawLines(a(A, var6, j), N);
769 | var1.drawLines(a(A, var3), N);
770 | var1.drawLines(b(var3, var3 + m), N);
771 | int var9 = var3 + m;
772 | if (d != 10) {
773 | var6 = false;
774 | }
775 |
776 | var1.drawLines(a(var9, var6, 0), N);
777 | }
778 |
779 | if (L) {
780 | var1.drawLines(a(var3 + m), O);
781 | var1.drawLines(c(var3, j), O);
782 | }
783 |
784 | }
785 |
786 | public int g() {
787 | return A + B + n - h;
788 | }
789 |
790 | public final void g(Canvas var1) {
791 | Path var2 = new Path();
792 | int var3 = A;
793 | int var4 = var3 / 2;
794 | var2.moveTo((float) var4, (float) var3);
795 | int var5 = A;
796 | var2.arcTo(new RectF(0.0F, 0.0F, (float) var5, (float) var5), 90.0F, 180.0F);
797 | var2.lineTo((float) (z - var4), 0.0F);
798 | int var6 = z;
799 | int var7 = A;
800 | var2.arcTo(new RectF((float) (var6 - var7), 0.0F, (float) var6, (float) var7), 270.0F, 180.0F);
801 | var1.drawPath(var2, f);
802 | if (K) {
803 | int var16 = z;
804 | int var17 = A;
805 | float var18 = (float) (var16 - var17);
806 | int var19 = P;
807 | var1.drawArc(new RectF(var18, 0.0F, (float) (var16 - var19 / 2), (float) (var17 - var19 / 2)), 330.0F, 120.0F, false, N);
808 | var1.drawLines(getNumberBottomShadows(), N);
809 | int var20 = P;
810 | float var21 = (float) (0 + var20 / 2);
811 | int var22 = A;
812 | var1.drawArc(new RectF(var21, 0.0F, (float) var22, (float) (var22 - var20 / 2)), 90.0F, 30.0F, false, N);
813 | }
814 |
815 | if (L) {
816 | int var8 = P;
817 | float var9 = (float) (0 + var8 / 2);
818 | float var10 = (float) (0 + var8 / 2);
819 | int var11 = A;
820 | var1.drawArc(new RectF(var9, var10, (float) var11, (float) var11), 150.0F, 120.0F, false, O);
821 | var1.drawLines(getNumberTopReflections(), O);
822 | int var12 = z;
823 | int var13 = A;
824 | float var14 = (float) (var12 - var13);
825 | int var15 = P;
826 | var1.drawArc(new RectF(var14, (float) (0 + var15 / 2), (float) (var12 - var15 / 2), (float) var13), 270.0F, 30.0F, false, O);
827 | }
828 |
829 | }
830 |
831 | public Gx getClassInfo() {
832 | if (S == null) {
833 | a();
834 | }
835 |
836 | return S;
837 | }
838 |
839 | public int getTopH() {
840 | return A;
841 | }
842 |
843 | public int getTotalHeight() {
844 | int var1 = A;
845 | if (b()) {
846 | var1 += n + B - h;
847 | }
848 |
849 | if (c()) {
850 | var1 += m + C - h;
851 | }
852 |
853 | int var2 = d;
854 | if (var2 == 4 || var2 == 7 || var2 == 10 || var2 == 12) {
855 | var1 += h;
856 | }
857 |
858 | return var1;
859 | }
860 |
861 | public int getTotalWidth() {
862 | return z;
863 | }
864 |
865 | public int getW() {
866 | return z;
867 | }
868 |
869 | public final void h(Canvas var1) {
870 | var1.drawRect(new Rect(0, 0, z, A), f);
871 | if (K) {
872 | var1.drawLines(getRectShadows(), N);
873 | }
874 |
875 | if (L) {
876 | var1.drawLines(getRectReflections(), O);
877 | }
878 |
879 | }
880 |
881 | public void onDraw(Canvas var1) {
882 | f.setColor(e);
883 | switch (d) {
884 | case 1:
885 | h(var1);
886 | break;
887 | case 2:
888 | a(var1);
889 | break;
890 | case 3:
891 | g(var1);
892 | break;
893 | case 4:
894 | case 5:
895 | b(var1);
896 | case 6:
897 | case 8:
898 | default:
899 | break;
900 | case 7:
901 | d(var1);
902 | break;
903 | case 9:
904 | c(var1);
905 | break;
906 | case 10:
907 | case 11:
908 | f(var1);
909 | break;
910 | case 12:
911 | e(var1);
912 | }
913 |
914 | super.onDraw(var1);
915 | }
916 |
917 | public void onMeasure(int var1, int var2) {
918 | super.onMeasure(MeasureSpec.makeMeasureSpec(getTotalWidth(), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(getTotalHeight(), MeasureSpec.EXACTLY));
919 | }
920 |
921 | public void setSubstack1Height(int var1) {
922 | int var2 = Math.max(var1, i);
923 | if (var2 != B) {
924 | B = var2;
925 | }
926 |
927 | }
928 |
929 | public void setSubstack2Height(int var1) {
930 | int var2 = Math.max(var1, i);
931 | if (var2 != C) {
932 | C = var2;
933 | }
934 |
935 | }
936 | }
937 |
--------------------------------------------------------------------------------
/app/src/main/java/ma/swblockspreview/editor/ViewBlockCollectionEditor.java:
--------------------------------------------------------------------------------
1 | package ma.swblockspreview.editor;
2 |
3 | import android.content.Context;
4 | import android.util.AttributeSet;
5 | import android.view.ViewGroup;
6 |
7 | import ma.swblockspreview.editor.logic.BlockPane;
8 | import ma.swblockspreview.editor.view.LogicEditorScrollView;
9 |
10 | public class ViewBlockCollectionEditor extends LogicEditorScrollView {
11 | private Context context;
12 | private BlockPane blockPane;
13 | private boolean k = true;
14 |
15 | public ViewBlockCollectionEditor(Context context) {
16 | super(context);
17 | initialize(context);
18 | }
19 |
20 | public ViewBlockCollectionEditor(Context context, AttributeSet attrs) {
21 | super(context, attrs);
22 | initialize(context);
23 | }
24 |
25 | private void initialize(Context context) {
26 | this.context = context;
27 | blockPane = new BlockPane(this.context);
28 | blockPane.setLayoutParams(new LayoutParams(
29 | ViewGroup.LayoutParams.WRAP_CONTENT,
30 | ViewGroup.LayoutParams.WRAP_CONTENT));
31 | addView(blockPane);
32 | }
33 |
34 | public BlockPane getBlockPane() {
35 | return blockPane;
36 | }
37 |
38 | @Override
39 | public void onLayout(boolean changed, int left, int top, int right, int bottom) {
40 | super.onLayout(changed, left, top, right, bottom);
41 | if (k) {
42 | blockPane.getLayoutParams().width = right - left;
43 | blockPane.getLayoutParams().height = bottom - top;
44 | blockPane.b();
45 | k = false;
46 | }
47 |
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/app/src/main/java/ma/swblockspreview/editor/logic/BlockPane.java:
--------------------------------------------------------------------------------
1 | package ma.swblockspreview.editor.logic;
2 |
3 | import android.content.Context;
4 | import android.view.View;
5 | import android.widget.RelativeLayout;
6 |
7 | import java.util.ArrayList;
8 |
9 | import ma.swblockspreview.bean.BlockBean;
10 | import ma.swblockspreview.editor.Rs;
11 | import ma.swblockspreview.editor.Ss;
12 | import ma.swblockspreview.editor.Ts;
13 | import ma.swblockspreview.util.Gx;
14 | import ma.swblockspreview.util.LayoutUtils;
15 | import ma.swblockspreview.util.mq;
16 |
17 | public class BlockPane extends RelativeLayout {
18 | public Context a;
19 | public int[] b = new int[2];
20 | public Ts c;
21 | public Rs d;
22 | public ArrayList e = new ArrayList<>();
23 | public Object[] f = null;
24 | public int g = 10;
25 | public float h = LayoutUtils.getDip(getContext(), 1.0F);
26 |
27 | public BlockPane(Context var1) {
28 | super(var1);
29 | a(var1);
30 | }
31 |
32 | public Rs a(int var1) {
33 | return findViewWithTag(Integer.valueOf(var1));
34 | }
35 |
36 | public Rs a(Rs block, int x, int y) {
37 | getLocationOnScreen(b);
38 | if (block.getBlockType() == 1) {
39 | Context var4 = getContext();
40 | int var5 = g;
41 | g = var5 + 1;
42 | block = new Rs(var4, var5, block.T, block.b, block.c, block.U);
43 | }
44 |
45 | block.pa = this;
46 | addView(block);
47 | block.setX((float) (x - b[0] - getPaddingLeft()));
48 | block.setY((float) (y - b[1] - getPaddingTop()));
49 | return block;
50 | }
51 |
52 | public Rs a(Rs var1, int var2, int var3, boolean var4) {
53 | Rs var5;
54 | if (!var4) {
55 | var5 = a(var1, var2, var3);
56 | } else {
57 | var1.setX((float) (var2 - b[0] - getPaddingLeft()));
58 | var1.setY((float) (var3 - b[1] - getPaddingTop()));
59 | var5 = var1;
60 | }
61 |
62 | Object[] var6 = f;
63 | if (var6 != null) {
64 | if (var1.fa) {
65 | ((Ts) var6[1]).E.a((Ts) var6[1], var5);
66 | } else {
67 | Rs var7 = (Rs) var6[1];
68 | int var8 = ((Integer) var6[2]).intValue();
69 | if (var8 != 0) {
70 | if (var8 != 1) {
71 | if (var8 != 2) {
72 | if (var8 != 3) {
73 | if (var8 == 4) {
74 | var7.d(var5);
75 | }
76 | } else {
77 | var7.f(var5);
78 | }
79 | } else {
80 | var7.e(var5);
81 | }
82 | } else {
83 | var7.c(var5);
84 | }
85 | } else {
86 | var7.b(var5);
87 | }
88 | }
89 |
90 | }
91 | var5.p().k();
92 | b();
93 | return var5;
94 | }
95 |
96 | public Rs a(String var1) {
97 | return findViewWithTag(Integer.valueOf(var1));
98 | }
99 |
100 | public final void a() {
101 | if (c == null) {
102 | c = new Ts(a, " ", true);
103 | }
104 |
105 | c.a(10.0F, 10.0F, false);
106 | addView(c);
107 | d();
108 | }
109 |
110 | public void a(Rs var1) {
111 | boolean var2 = var1.h().ga;
112 | boolean var3;
113 | var3 = var1.b() && -1 == var1.ia;
114 |
115 | boolean var4 = var1.fa;
116 | a(var1.getTag().toString(), var2, var3, var4, var1.getHeight(), var1.f());
117 | f = null;
118 | }
119 |
120 | public void a(Rs var1, int var2) {
121 | while (true) {
122 | if (var1 != null) {
123 | var1.setVisibility(var2);
124 |
125 | for (View var7 : var1.V) {
126 | if (var7 instanceof Rs) {
127 | a((Rs) var7, var2);
128 | }
129 | }
130 |
131 | if (var1.b()) {
132 | int var6 = var1.ia;
133 | if (var6 != -1) {
134 | a(findViewWithTag(Integer.valueOf(var6)), var2);
135 | }
136 | }
137 |
138 | if (var1.c()) {
139 | int var5 = var1.ja;
140 | if (var5 != -1) {
141 | a(findViewWithTag(Integer.valueOf(var5)), var2);
142 | }
143 | }
144 |
145 | int var4 = var1.ha;
146 | if (var4 != -1) {
147 | var1 = findViewWithTag(Integer.valueOf(var4));
148 | continue;
149 | }
150 | }
151 |
152 | return;
153 | }
154 | }
155 |
156 | public final void a(Rs var1, String var2) {
157 | while (true) {
158 | if (var1 != null) {
159 | if (!var1.ea) {
160 | for (int var6 = 0; var6 < var1.V.size(); ++var6) {
161 | View var7 = var1.V.get(var6);
162 | boolean var8 = var7 instanceof Rs;
163 | if ((var8 || var7 instanceof Ss) && (!var8 || !var7.getTag().toString().equals(var2))) {
164 | int[] var9 = new int[2];
165 | var7.getLocationOnScreen(var9);
166 | a(var9, var7, 0);
167 | if (var8) {
168 | a((Rs) var7, var2);
169 | }
170 | }
171 | }
172 | }
173 |
174 | int var3 = var1.ia;
175 | if (var3 != -1) {
176 | a(findViewWithTag(Integer.valueOf(var3)), var2);
177 | }
178 |
179 | int var4 = var1.ja;
180 | if (var4 != -1) {
181 | a(findViewWithTag(Integer.valueOf(var4)), var2);
182 | }
183 |
184 | int var5 = var1.ha;
185 | if (var5 != -1) {
186 | var1 = findViewWithTag(Integer.valueOf(var5));
187 | continue;
188 | }
189 | }
190 |
191 | return;
192 | }
193 | }
194 |
195 | public void a(Rs var1, ArrayList var2) {
196 | if (var2.size() <= 0) {
197 | a(var1);
198 | } else {
199 | BlockBean var3;
200 | BlockBean var4;
201 | byte var7;
202 | label64:
203 | {
204 | var3 = (BlockBean) var2.get(0);
205 | var4 = (BlockBean) var2.get(var2.size() - 1);
206 | String var5 = var3.type;
207 | int var6 = var5.hashCode();
208 | if (var6 != 97) {
209 | if (var6 != 98) {
210 | if (var6 != 100) {
211 | if (var6 != 108) {
212 | if (var6 != 112) {
213 | if (var6 != 115) {
214 | if (var6 == 118 && var5.equals("v")) {
215 | var7 = 3;
216 | break label64;
217 | }
218 | } else if (var5.equals("s")) {
219 | var7 = 1;
220 | break label64;
221 | }
222 | } else if (var5.equals("p")) {
223 | var7 = 4;
224 | break label64;
225 | }
226 | } else if (var5.equals("l")) {
227 | var7 = 5;
228 | break label64;
229 | }
230 | } else if (var5.equals("d")) {
231 | var7 = 2;
232 | break label64;
233 | }
234 | } else if (var5.equals("b")) {
235 | var7 = 0;
236 | break label64;
237 | }
238 | } else if (var5.equals("a")) {
239 | var7 = 6;
240 | break label64;
241 | }
242 |
243 | var7 = -1;
244 | }
245 |
246 | boolean var8;
247 | switch (var7) {
248 | case 0:
249 | case 1:
250 | case 2:
251 | case 3:
252 | case 4:
253 | case 5:
254 | case 6:
255 | var8 = true;
256 | break;
257 | default:
258 | var8 = false;
259 | }
260 |
261 | boolean var9 = var4.type.equals("f");
262 | boolean var10;
263 | var10 = (var3.type.equals("c") || var3.type.equals("e")) && var3.subStack1 <= 0;
264 |
265 | a(var3.id, var9, var10, var8, var1.getHeight(), var1.f());
266 | f = null;
267 | }
268 | }
269 |
270 | public final void a(Rs var1, boolean var2) {
271 | while (var1.getVisibility() != View.GONE) {
272 | if (!var1.ga && (!var2 || -1 == var1.ha)) {
273 | int[] var8 = new int[2];
274 | var1.getLocationOnScreen(var8);
275 | var8[1] += var1.d();
276 | a(var8, var1, 0);
277 | }
278 |
279 | if (var1.b() && (!var2 || var1.ia == -1)) {
280 | int[] var7 = new int[2];
281 | var1.getLocationOnScreen(var7);
282 | var7[0] += var1.j;
283 | var7[1] += var1.f();
284 | a(var7, var1, 2);
285 | }
286 |
287 | if (var1.c() && (!var2 || var1.ja == -1)) {
288 | int[] var6 = new int[2];
289 | var1.getLocationOnScreen(var6);
290 | var6[0] += var1.j;
291 | var6[1] += var1.g();
292 | a(var6, var1, 3);
293 | }
294 |
295 | int var3 = var1.ia;
296 | if (var3 != -1) {
297 | a(findViewWithTag(Integer.valueOf(var3)), var2);
298 | }
299 |
300 | int var4 = var1.ja;
301 | if (var4 != -1) {
302 | a(findViewWithTag(Integer.valueOf(var4)), var2);
303 | }
304 |
305 | int var5 = var1.ha;
306 | if (var5 == -1) {
307 | return;
308 | }
309 |
310 | var1 = findViewWithTag(Integer.valueOf(var5));
311 | }
312 |
313 | }
314 |
315 | public final void a(Context var1) {
316 | a = var1;
317 | a();
318 | }
319 |
320 | public void a(BlockBean var1, boolean var2) {
321 | String var3 = var1.id;
322 | if (var3 != null && !var3.equals("")) {
323 | if (var1.id.equals("0")) {
324 | return;
325 | }
326 |
327 | Rs var4 = findViewWithTag(Integer.valueOf(var1.id));
328 | if (var4 == null) {
329 | return;
330 | }
331 |
332 | Rs var5 = var4.E;
333 | if (var4 != var5) {
334 | c(var4);
335 | removeView(var4);
336 | } else {
337 | removeView(var4);
338 | }
339 |
340 | if (var2 && var5 != null) {
341 | var5.p().k();
342 | }
343 | }
344 |
345 | }
346 |
347 | public void a(String var1, String var2) {
348 | d = new Rs(getContext(), 0, var1, "h", var2);
349 | d.pa = this;
350 | addView(d);
351 | float var5 = LayoutUtils.getDip(getContext(), 1.0F);
352 | float var7 = var5 * 8.0F;
353 | d.setX(var7);
354 | d.setY(var7);
355 | }
356 |
357 | public void a(String str, boolean z, boolean z2, boolean z3, int i, int i2) {
358 | e = new ArrayList<>();
359 | int i3 = (int) (3.0f * h);
360 | for (int i4 = 0; i4 < getChildCount(); i4++) {
361 | View childAt = getChildAt(i4);
362 | if (childAt instanceof Rs) {
363 | Rs rs = (Rs) childAt;
364 | if (rs.getVisibility() != View.GONE && rs.E == null) {
365 | if (z3) {
366 | a(rs, str);
367 | } else if (!rs.fa) {
368 | int[] iArr;
369 | boolean z4 = true;
370 | if (!(z || rs.ea)) {
371 | iArr = new int[2];
372 | rs.getLocationOnScreen(iArr);
373 | iArr[1] = iArr[1] - (i - i3);
374 | a(iArr, rs, 1);
375 | }
376 | if (z2 && !rs.ea) {
377 | iArr = new int[2];
378 | rs.getLocationOnScreen(iArr);
379 | iArr[0] = iArr[0] - rs.j;
380 | iArr[1] = iArr[1] - (i2 - i3);
381 | a(iArr, rs, 4);
382 | }
383 | if (!z || z2) {
384 | z4 = false;
385 | }
386 | a(rs, z4);
387 | }
388 | }
389 | }
390 | }
391 | }
392 |
393 | public final void a(int[] var1, View var2, int var3) {
394 | Object[] var4 = new Object[]{var1, var2, Integer.valueOf(var3)};
395 | e.add(var4);
396 | }
397 |
398 | public final boolean a(Rs var1, View var2) {
399 | if (!var1.fa) {
400 | return true;
401 | } else {
402 | if (var2 instanceof Ts) {
403 | Gx var3 = var1.getClassInfo();
404 | if (var3 == null) {
405 | return false;
406 | }
407 |
408 | Gx var4 = ((Ts) var2).getClassInfo();
409 | if (var4 == null) {
410 | return false;
411 | }
412 |
413 | if (var3.a(var4)) {
414 | return true;
415 | }
416 |
417 | return var2 instanceof Rs && var3.a(mq.b(((Rs) var2).ra));
418 | }
419 |
420 | return false;
421 | }
422 | }
423 |
424 | public void b() {
425 | int var1 = getChildCount();
426 | int var2 = getLayoutParams().width;
427 | int var3 = getLayoutParams().width;
428 |
429 | for (int var4 = 0; var4 < var1; ++var4) {
430 | View var5 = getChildAt(var4);
431 | if (var5 instanceof Rs) {
432 | float var6 = var5.getX();
433 | Rs var7 = (Rs) var5;
434 | var2 = Math.max(150 + (int) (var6 + (float) var7.getWidthSum()), var2);
435 | var3 = Math.max(150 + (int) (var5.getY() + (float) var7.getHeightSum()), var3);
436 | }
437 | }
438 |
439 | getLayoutParams().width = var2;
440 | getLayoutParams().height = var3;
441 | }
442 |
443 | public void c(Rs var1) {
444 | Rs var2 = var1.E;
445 | if (var2 != null) {
446 | if (var2 != null) {
447 | var2.g(var1);
448 | var1.E = null;
449 | }
450 |
451 | }
452 | }
453 |
454 | public void d() {
455 | c.setVisibility(View.GONE);
456 | }
457 |
458 | }
459 |
--------------------------------------------------------------------------------
/app/src/main/java/ma/swblockspreview/editor/view/LogicEditorScrollView.java:
--------------------------------------------------------------------------------
1 | package ma.swblockspreview.editor.view;
2 |
3 | import android.content.Context;
4 | import android.util.AttributeSet;
5 | import android.view.MotionEvent;
6 | import android.view.View;
7 | import android.view.ViewConfiguration;
8 | import android.widget.FrameLayout;
9 |
10 | public class LogicEditorScrollView extends FrameLayout {
11 | public float a = 0.0F;
12 | public float b = 0.0F;
13 | public int c = 0;
14 | public boolean d = false;
15 | public boolean e = true;
16 | public boolean f = true;
17 | public float g = -1.0F;
18 | public float h = -1.0F;
19 |
20 | public LogicEditorScrollView(Context var1) {
21 | super(var1);
22 | a(var1);
23 | }
24 |
25 | public LogicEditorScrollView(Context var1, AttributeSet var2) {
26 | super(var1, var2);
27 | a(var1);
28 | }
29 |
30 | public final void a(Context var1) {
31 | c = ViewConfiguration.get(var1).getScaledTouchSlop();
32 | }
33 |
34 | public boolean a() {
35 | if (getChildCount() <= 0) {
36 | return false;
37 | } else {
38 | boolean var1 = f;
39 | boolean var2 = false;
40 | if (var1) {
41 | if (!e) {
42 | return false;
43 | }
44 |
45 | View var3 = getChildAt(0);
46 | int var4 = var3.getWidth();
47 | int var5 = var3.getHeight();
48 | if (getWidth() >= var4 + getPaddingLeft() + getPaddingRight()) {
49 | int var6 = getHeight();
50 | int var7 = var5 + getPaddingTop() + getPaddingBottom();
51 | var2 = false;
52 | if (var6 >= var7) {
53 | return var2;
54 | }
55 | }
56 |
57 | var2 = true;
58 | }
59 |
60 | return var2;
61 | }
62 | }
63 |
64 | @Override
65 | public void addView(View var1) {
66 | if (getChildCount() <= 1) {
67 | super.addView(var1);
68 | } else {
69 | throw new IllegalStateException("BothDirectionScrollView should have child View only one");
70 | }
71 | }
72 |
73 | public boolean getScrollEnabled() {
74 | return e;
75 | }
76 |
77 | public boolean getUseScroll() {
78 | return f;
79 | }
80 |
81 | @Override
82 | public boolean onInterceptTouchEvent(MotionEvent var1) {
83 | if (!a()) {
84 | return false;
85 | } else {
86 | int var2 = var1.getAction();
87 | if (var2 == 2 && d) {
88 | return true;
89 | } else {
90 | float var3 = var1.getX();
91 | float var4 = var1.getY();
92 | if (var2 != 0) {
93 | if (var2 != 1) {
94 | if (var2 == 2) {
95 | int var5 = (int) Math.abs(a - var3);
96 | int var6 = (int) Math.abs(b - var4);
97 | int var7 = c;
98 | if (var5 > var7 || var6 > var7) {
99 | d = true;
100 | }
101 | }
102 | } else {
103 | d = false;
104 | }
105 | } else {
106 | a = var3;
107 | b = var4;
108 | d = false;
109 | }
110 |
111 | return d;
112 | }
113 | }
114 | }
115 |
116 | @Override
117 | public boolean onTouchEvent(MotionEvent motionEvent) {
118 | if (!a()) {
119 | return false;
120 | } else {
121 | View var2 = getChildAt(0);
122 | int var3 = motionEvent.getAction();
123 | float var4 = motionEvent.getX();
124 | float var5 = motionEvent.getY();
125 | if (var3 != 0) {
126 | if (var3 == 1) {
127 | g = -1.0F;
128 | h = -1.0F;
129 | return true;
130 | }
131 |
132 | if (var3 != 2) {
133 | return true;
134 | }
135 |
136 | if (g < 0.0F) {
137 | g = var4;
138 | }
139 |
140 | if (h < 0.0F) {
141 | h = var5;
142 | }
143 |
144 | int var6 = (int) (g - var4);
145 | int var7 = (int) (h - var5);
146 | g = var4;
147 | h = var5;
148 | int var9;
149 | if (var6 <= 0) {
150 | if (getScrollX() <= 0) {
151 | var6 = 0;
152 | }
153 |
154 | var9 = Math.max(-getScrollX(), var6);
155 | } else {
156 | int var8 = var2.getRight() - getScrollX() - getWidth() - getPaddingRight();
157 | if (var8 > 0) {
158 | var9 = Math.min(var8, var6);
159 | } else {
160 | var9 = 0;
161 | }
162 | }
163 |
164 | int var11;
165 | if (var7 <= 0) {
166 | if (getScrollY() <= 0) {
167 | var7 = 0;
168 | }
169 |
170 | var11 = Math.max(-getScrollY(), var7);
171 | } else {
172 | int var10 = var2.getBottom() - getScrollY() - getHeight() - getPaddingBottom();
173 | var11 = 0;
174 | if (var10 > 0) {
175 | var11 = Math.min(var10, var7);
176 | }
177 | }
178 |
179 | if (var9 != 0 || var11 != 0) {
180 | scrollBy(var9, var11);
181 | return true;
182 | }
183 | } else {
184 | g = var4;
185 | h = var5;
186 | }
187 |
188 | return true;
189 | }
190 | }
191 |
192 | public void setScrollEnabled(boolean var1) {
193 | e = var1;
194 | }
195 |
196 | public void setUseScroll(boolean var1) {
197 | f = var1;
198 | }
199 | }
200 |
--------------------------------------------------------------------------------
/app/src/main/java/ma/swblockspreview/util/Gx.java:
--------------------------------------------------------------------------------
1 | package ma.swblockspreview.util;
2 |
3 | import ma.swblockspreview.BlockPreviewer;
4 |
5 | public class Gx {
6 | public String a;
7 | public String[] b;
8 |
9 | public Gx(String classInfo) {
10 | a = classInfo;
11 | b = null;
12 | e();
13 | }
14 |
15 | public String a() {
16 | return a;
17 | }
18 |
19 | public boolean a(Gx gx) {
20 | return a(gx.a);
21 | }
22 |
23 | public boolean a(String classInfo) {
24 | if (classInfo.equals("!") || classInfo.equals(a)) {
25 | return true;
26 | } else {
27 | for (String s : b) {
28 | if (s.equals(classInfo)) return true;
29 | }
30 | return false;
31 | }
32 | }
33 |
34 | public boolean b() {
35 | return a("List");
36 | }
37 |
38 | public boolean b(String classInfo) {
39 | return a.equals(classInfo);
40 | }
41 |
42 | public boolean c() {
43 | return a("Var");
44 | }
45 |
46 | public boolean d() {
47 | return a("View");
48 | }
49 |
50 | private void e() {
51 | String classInfos = "";
52 | switch (a) {
53 | case "boolean":
54 | classInfos = "Var.boolean";
55 | break;
56 |
57 | case "double":
58 | classInfos = "Var.double";
59 | break;
60 |
61 | case "String":
62 | classInfos = "Var.String";
63 | break;
64 |
65 | case "Map":
66 | classInfos = "Var.Map";
67 | break;
68 |
69 | case "ListInt":
70 | classInfos = "List.ListInt";
71 | break;
72 |
73 | case "ListString":
74 | classInfos = "List.ListString";
75 | break;
76 |
77 | case "ListMap":
78 | classInfos = "List.ListMap";
79 | break;
80 |
81 | case "List":
82 | classInfos = "List";
83 | break;
84 |
85 | case "View":
86 | break;
87 |
88 | case "TextView":
89 | classInfos = "View.Clickable.TextView";
90 | break;
91 |
92 | case "Button":
93 | classInfos = "View.Clickable.TextView.Button";
94 | break;
95 |
96 | case "EditText":
97 | classInfos = "View.Clickable.TextView.EditText";
98 | break;
99 |
100 | case "ImageView":
101 | classInfos = "View.Clickable.ImageView";
102 | break;
103 |
104 | case "CheckBox":
105 | classInfos = "View.Clickable.TextView.Button.CompoundButton.CheckBox";
106 | break;
107 |
108 | case "Spinner":
109 | classInfos = "View.AdapterView.AbsSpinner.Spinner";
110 | break;
111 |
112 | case "ListView":
113 | classInfos = "View.AdapterView.AbsListView.ListView";
114 | break;
115 |
116 | case "WebView":
117 | classInfos = "View.AbsoluteLayout.WebView";
118 | break;
119 |
120 | case "Switch":
121 | classInfos = "View.Clickable.TextView.Button.CompoundButton.Switch";
122 | break;
123 |
124 | case "SeekBar":
125 | classInfos = "View.SeekBar";
126 | break;
127 |
128 | case "CalendarView":
129 | classInfos = "View.FrameLayout.CalendarView";
130 | break;
131 |
132 | case "AdView":
133 | classInfos = "View.AdView";
134 | break;
135 |
136 | case "MapView":
137 | classInfos = "View.MapView";
138 | break;
139 |
140 | case "FloatingActionButton":
141 | classInfos = "View.Clickable.FloatingActionButton";
142 | break;
143 |
144 | case "LinearLayout":
145 | classInfos = "View.Clickable.ViewGroup.LinearLayout";
146 | break;
147 |
148 | case "ScrollView":
149 | classInfos = "View.ViewGroup.FrameLayout.ScrollView";
150 | break;
151 |
152 | case "HorizontalScrollView":
153 | classInfos = "View.ViewGroup.FrameLayout.HorizontalScrollView";
154 | break;
155 |
156 | case "Intent":
157 | classInfos = "Component.Intent";
158 | break;
159 |
160 | case "SharedPreferences":
161 | classInfos = "Component.SharedPreferences";
162 | break;
163 |
164 | case "Calendar":
165 | classInfos = "Component.Calendar";
166 | break;
167 |
168 | case "Vibrator":
169 | classInfos = "Component.Vibrator";
170 | break;
171 |
172 | case "Timer":
173 | classInfos = "Component.Timer";
174 | break;
175 |
176 | case "Dialog":
177 | classInfos = "Component.Dialog";
178 | break;
179 |
180 | case "MediaPlayer":
181 | classInfos = "Component.MediaPlayer";
182 | break;
183 |
184 | case "SoundPool":
185 | classInfos = "Component.SoundPool";
186 | break;
187 |
188 | case "ObjectAnimator":
189 | classInfos = "Component.ObjectAnimator";
190 | break;
191 |
192 | case "FirebaseDB":
193 | classInfos = "Component.FirebaseDB";
194 | break;
195 |
196 | case "FirebaseAuth":
197 | classInfos = "Component.FirebaseAuth";
198 | break;
199 |
200 | case "Gyroscope":
201 | classInfos = "Component.Gyroscope";
202 | break;
203 |
204 | case "FirebaseStorage":
205 | classInfos = "Component.FirebaseStorage";
206 | break;
207 |
208 | case "Camera":
209 | classInfos = "Component.Camera";
210 | break;
211 |
212 | case "FilePicker":
213 | classInfos = "Component.FilePicker";
214 | break;
215 |
216 | case "RequestNetwork":
217 | classInfos = "Component.RequestNetwork";
218 | break;
219 |
220 | case "ProgressBar":
221 | classInfos = "View.SeekBar.ProgressBar";
222 | break;
223 |
224 | case "TextToSpeech":
225 | classInfos = "Component.TextToSpeech";
226 | break;
227 |
228 | case "SpeechToText":
229 | classInfos = "Component.SpeechToText";
230 | break;
231 |
232 | case "BluetoothConnect":
233 | classInfos = "Component.BluetoothConnect";
234 | break;
235 |
236 | case "LocationManager":
237 | classInfos = "Component.LocationManager";
238 | break;
239 |
240 | case "RadioButton":
241 | classInfos = "View.Clickable.TextView.Button.CompoundButton.RadioButton";
242 | break;
243 |
244 | case "RatingBar":
245 | classInfos = "View.Clickable.RatingBar";
246 | break;
247 |
248 | case "SearchView":
249 | classInfos = "View.ViewGroup.LinearLayoutCompat.SearchView";
250 | break;
251 |
252 | case "VideoView":
253 | classInfos = "View.VideoView";
254 | break;
255 |
256 | case "AutoCompleteTextView":
257 | classInfos = "View.Clickable.TextView.EditText.AutoCompleteTextView";
258 | break;
259 |
260 | case "MultiAutoCompleteTextView":
261 | classInfos = "View.Clickable.TextView.EditText.MultiAutoCompleteTextView";
262 | break;
263 |
264 | case "GridView":
265 | classInfos = "View.ViewGroup.AdapterView.AbsListView.GridView";
266 | break;
267 |
268 | case "AnalogClock":
269 | classInfos = "View.Clickable.AnalogClock";
270 | break;
271 |
272 | case "DigitalClock":
273 | classInfos = "View.Clickable.DigitalClock";
274 | break;
275 |
276 | case "DatePicker":
277 | classInfos = "View.Clickable.DatePicker";
278 | break;
279 |
280 | case "TimePicker":
281 | classInfos = "View.Clickable.TimePicker";
282 | break;
283 |
284 | case "TabLayout":
285 | classInfos = "View.TabLayout";
286 | break;
287 |
288 | case "ViewPager":
289 | classInfos = "View.ViewGroup.AdapterView.ViewPager";
290 | break;
291 |
292 | case "BottomNavigationView":
293 | classInfos = "View.ViewGroup.BottomNavigationView";
294 | break;
295 |
296 | case "BadgeView":
297 | classInfos = "View.Clickable.FrameLayout.BadgeView";
298 | break;
299 |
300 | case "PatternLockView":
301 | classInfos = "View.PatternLockView";
302 | break;
303 |
304 | case "WaveSideBar":
305 | classInfos = "View.FrameLayout.RelativeLayout.WaveSideBar";
306 | break;
307 |
308 | case "SignInButton":
309 | classInfos = "View.Clickable.Button.SignInButton";
310 | break;
311 |
312 | case "MaterialButton":
313 | classInfos = "View.Clickable.TextView.Button";
314 | break;
315 |
316 | case "CircleImageView":
317 | classInfos = "View.Clickable.ImageView.CircleImageView";
318 | break;
319 |
320 | case "CollapsingToolbarLayout":
321 | classInfos = "View.ViewGroup.LinearLayout.CollapsingToolbarLayout";
322 | break;
323 |
324 | case "SwipeRefreshLayout":
325 | classInfos = "View.ViewGroup.LinearLayout.SwipeRefreshLayout";
326 | break;
327 |
328 | case "TextInputLayout":
329 | classInfos = "View.ViewGroup.LinearLayout.TextInputLayout";
330 | break;
331 |
332 | case "RadioGroup":
333 | classInfos = "View.ViewGroup.LinearLayout.RadioGroup";
334 | break;
335 |
336 | case "CardView":
337 | classInfos = "View.Clickable.ViewGroup.LinearLayout.CardView";
338 | break;
339 |
340 | case "LottieAnimationView":
341 | classInfos = "View.Clickable.LottieAnimation";
342 | break;
343 |
344 | case "YoutubePlayerView":
345 | classInfos = "View.Clickable.YoutubePlayer";
346 | break;
347 |
348 | case "OTPView":
349 | classInfos = "View.Clickable.OTPView";
350 | break;
351 |
352 | case "RecyclerView":
353 | classInfos = "View.RecyclerView";
354 | break;
355 |
356 | case "FBAdsInterstitial":
357 | classInfos = "Component.FBAdsInterstitial";
358 | break;
359 |
360 | case "Videos":
361 | classInfos = "Component.Videos";
362 | break;
363 |
364 | case "FirebaseAdmin":
365 | classInfos = "Component.OneSignal";
366 | break;
367 |
368 | case "FirebaseCloudMessage":
369 | classInfos = "Component.FirebaseCloudMessage";
370 | break;
371 |
372 | case "TimePickerDialog":
373 | classInfos = "Component.TimePickerDialog";
374 | break;
375 |
376 | case "FBAdsBanner":
377 | classInfos = "Component.FBAdsBanner";
378 | break;
379 |
380 | case "Notification":
381 | classInfos = "Component.Notification";
382 | break;
383 |
384 | case "ProgressDialog":
385 | classInfos = "Component.ProgressDialog";
386 | break;
387 |
388 | case "FirebaseGoogleLogin":
389 | classInfos = "Component.FirebaseGoogleLogin";
390 | break;
391 |
392 | case "FirebaseDynamicLink":
393 | classInfos = "Component.FirebaseDynamicLink";
394 | break;
395 |
396 | case "PopupMenu":
397 | classInfos = "Component.PopupMenu";
398 | break;
399 |
400 | case "DatePickerDialog":
401 | classInfos = "Component.DatePickerDialog";
402 | break;
403 |
404 | case "FirebasePhoneAuth":
405 | classInfos = "Component.FirebasePhoneAuth";
406 | break;
407 |
408 | case "MediaController":
409 | classInfos = "Component.MediaController";
410 | break;
411 |
412 | default:
413 | classInfos = "";
414 | }
415 |
416 | b = classInfos.split("\\.");
417 | }
418 | }
419 |
--------------------------------------------------------------------------------
/app/src/main/java/ma/swblockspreview/util/LayoutUtils.java:
--------------------------------------------------------------------------------
1 | package ma.swblockspreview.util;
2 |
3 | import android.content.Context;
4 | import android.util.TypedValue;
5 | import android.view.LayoutInflater;
6 | import android.view.View;
7 | import android.view.ViewGroup;
8 |
9 | public class LayoutUtils {
10 | public static float getDip(Context var0, float var1) {
11 | return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, var1, var0.getResources().getDisplayMetrics());
12 | }
13 |
14 | public static View inflate(Context var0, ViewGroup var1, int var2) {
15 | return ((LayoutInflater) var0.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(var2, var1, true);
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/main/java/ma/swblockspreview/util/StringUtils.java:
--------------------------------------------------------------------------------
1 | package ma.swblockspreview.util;
2 |
3 | import java.util.ArrayList;
4 |
5 | public class StringUtils {
6 |
7 | public static class StringTokenizer {
8 | public String src;
9 | public int index;
10 |
11 | public StringTokenizer(String text) {
12 | src = text;
13 | index = 0;
14 | }
15 |
16 | public boolean atEnd() {
17 | return index >= src.length();
18 | }
19 |
20 | public String nextToken() {
21 | skipWhiteSpace();
22 | boolean atEnd = atEnd();
23 | StringBuilder stringBuilder = new StringBuilder();
24 | if (!atEnd) {
25 | boolean isArg = false;
26 | int startIndex = index;
27 |
28 | while (index < src.length()) {
29 | if (src.charAt(index) == 32) {
30 | return stringBuilder.toString();
31 | }
32 |
33 | char var5 = src.charAt(index);
34 | if (var5 == 92) {
35 | stringBuilder.append(var5 + src.charAt(1 + index));
36 | index += 2;
37 | } else {
38 | if (var5 == 37) {
39 | if (index > startIndex) {
40 | return stringBuilder.toString();
41 | }
42 |
43 | isArg = true;
44 | }
45 |
46 | if (isArg) {
47 | if (var5 == 63) {
48 | break;
49 | }
50 |
51 | if (var5 == 45) {
52 | return stringBuilder.toString();
53 | }
54 | }
55 |
56 | String var9 = String.valueOf(stringBuilder) + var5;
57 | stringBuilder = new StringBuilder(var9);
58 | ++index;
59 | }
60 | }
61 |
62 | }
63 | return stringBuilder.toString();
64 | }
65 |
66 | public void skipWhiteSpace() {
67 | while (index < src.length() && src.charAt(index) == 32) {
68 | ++index;
69 | }
70 | }
71 | }
72 |
73 |
74 | public static ArrayList tokenize(String text) {
75 | ArrayList tokenList = new ArrayList<>();
76 | StringTokenizer stringTokenizer = new StringTokenizer(text);
77 |
78 | while (!stringTokenizer.atEnd()) {
79 | String nextToken = stringTokenizer.nextToken();
80 | if (nextToken.length() > 0) {
81 | tokenList.add(nextToken);
82 | }
83 | }
84 |
85 | return tokenList;
86 | }
87 |
88 | public static String unescape(String text) {
89 | StringBuilder stringBuilder = new StringBuilder();
90 |
91 | for (int i = 0; i < text.length(); ++i) {
92 | char charAt = text.charAt(i);
93 | if (charAt == 92) {
94 | StringBuilder sb = new StringBuilder();
95 | sb.append(stringBuilder);
96 | ++i;
97 | sb.append(text.charAt(i));
98 | stringBuilder = new StringBuilder(sb.toString());
99 | } else {
100 | stringBuilder.append(charAt);
101 | }
102 | }
103 |
104 | return stringBuilder.toString();
105 | }
106 | }
107 |
--------------------------------------------------------------------------------
/app/src/main/java/ma/swblockspreview/util/mq.java:
--------------------------------------------------------------------------------
1 | package ma.swblockspreview.util;
2 |
3 | import java.util.ArrayList;
4 |
5 | public class mq {
6 |
7 | public static Gx a(String type, String typeName) {
8 | switch (type) {
9 | case "b":
10 | return new Gx("boolean");
11 |
12 | case "d":
13 | case "n":
14 | return new Gx("double");
15 |
16 | case "s":
17 | if ("inputOnly".equals(typeName)) {
18 | return new Gx("Input");
19 | }
20 | return new Gx("String");
21 |
22 | case "a":
23 | return new Gx("Map");
24 |
25 | case "l":
26 | switch (typeName) {
27 | case "List Map":
28 | return new Gx("ListMap");
29 |
30 | case "List String":
31 | return new Gx("ListString");
32 |
33 | case "List Number":
34 | return new Gx("ListInt");
35 | }
36 |
37 | case "v":
38 | return new Gx(typeName);
39 |
40 | case "p":
41 | case "m":
42 | return new Gx(b(typeName));
43 |
44 | default:
45 | return null;
46 | }
47 | }
48 |
49 |
50 | public static String b(String name) {
51 | switch (name) {
52 | case "intent":
53 | case "Intent":
54 | return "Intent";
55 |
56 | case "file":
57 | case "File":
58 | case "File (Shared Preferences)":
59 | return "SharedPreferences";
60 |
61 | case "calendar":
62 | case "Calendar":
63 | return "Calendar";
64 |
65 | case "vibrator":
66 | case "Vibrator":
67 | return "Vibrator";
68 |
69 | case "Timer":
70 | return "Timer";
71 |
72 | case "dialog":
73 | case "Dialog":
74 | return "Dialog";
75 |
76 | case "MediaPlayer":
77 | return "MediaPlayer";
78 |
79 | case "SoundPool":
80 | return "SoundPool";
81 |
82 | case "ObjectAnimator":
83 | return "ObjectAnimator";
84 |
85 | case "firebase":
86 | case "Firebase":
87 | case "Firebase DB":
88 | return "FirebaseDB";
89 |
90 | case "firebaseauth":
91 | case "Firebase Auth":
92 | return "FirebaseAuth";
93 |
94 | case "gyroscope":
95 | case "Gyroscope":
96 | return "Gyroscope";
97 |
98 | case "InterstitialAd":
99 | return "InterstitialAd";
100 |
101 | case "varBool":
102 | return "boolean.SelectBoolean";
103 |
104 | case "varInt":
105 | return "double.SelectDouble";
106 |
107 | case "varStr":
108 | return "String.SelectString";
109 |
110 | case "varMap":
111 | return "Map";
112 |
113 | case "listInt":
114 | return "ListInt";
115 |
116 | case "listStr":
117 | return "ListString";
118 |
119 | case "listMap":
120 | return "ListMap";
121 |
122 | case "list":
123 | return "List";
124 |
125 | case "view":
126 | return "View";
127 |
128 | case "textview":
129 | return "TextView";
130 |
131 | case "edittext":
132 | return "EditText";
133 |
134 | case "imageview":
135 | return "ImageView";
136 |
137 | case "compoundButton":
138 | return "CompoundButton";
139 |
140 | case "checkbox":
141 | return "CheckBox";
142 |
143 | case "switch":
144 | return "Switch";
145 |
146 | case "listSpn":
147 | return "AdapterView";
148 |
149 | case "listview":
150 | return "ListView";
151 |
152 | case "spinner":
153 | return "Spinner";
154 |
155 | case "webview":
156 | return "WebView";
157 |
158 | case "calendarview":
159 | return "CalendarView";
160 |
161 | case "adview":
162 | return "AdView";
163 |
164 | case "mapview":
165 | return "MapView";
166 |
167 | case "timer":
168 | return "Timer";
169 |
170 | case "mediaplayer":
171 | return "MediaPlayer";
172 |
173 | case "soundpool":
174 | return "SoundPool";
175 |
176 | case "objectanimator":
177 | return "ObjectAnimator";
178 |
179 | case "seekbar":
180 | return "SeekBar";
181 |
182 | case "interstitialad":
183 | return "InterstitialAd";
184 |
185 | case "firebasestorage":
186 | return "FirebaseStorage";
187 |
188 | case "camera":
189 | return "Camera";
190 |
191 | case "filepicker":
192 | return "FilePicker";
193 |
194 | case "requestnetwork":
195 | return "RequestNetwork";
196 |
197 | case "progressbar":
198 | return "ProgressBar";
199 |
200 | case "texttospeech":
201 | return "TextToSpeech";
202 |
203 | case "speechtotext":
204 | return "SpeechToText";
205 |
206 | case "bluetoothconnect":
207 | return "BluetoothConnect";
208 |
209 | case "locationmanager":
210 | return "LocationManager";
211 |
212 | case "radiobutton":
213 | return "RadioButton";
214 |
215 | case "ratingbar":
216 | return "RatingBar";
217 |
218 | case "videoview":
219 | return "VideoView";
220 |
221 | case "searchview":
222 | return "SearchView";
223 |
224 | case "gridview":
225 | return "GridView";
226 |
227 | case "actv":
228 | return "AutoCompleteTextView";
229 |
230 | case "mactv":
231 | return "MultiAutoCompleteTextView";
232 |
233 | case "tablayout":
234 | return "TabLayout";
235 |
236 | case "viewpager":
237 | return "ViewPager";
238 |
239 | case "badgeview":
240 | return "BadgeView";
241 |
242 | case "bottomnavigation":
243 | return "BottomNavigationView";
244 |
245 | case "patternview":
246 | return "PatternLockView";
247 |
248 | case "sidebar":
249 | return "WaveSideBar";
250 |
251 | default:
252 | return name;
253 | }
254 | }
255 |
256 | public static ArrayList a(String spec) {
257 | ArrayList paramClass = new ArrayList<>();
258 | ArrayList specList = StringUtils.tokenize(spec);
259 | for (String params : specList) {
260 | if (params.charAt(0) == '%' && params.length() >= 2) {
261 | String type = String.valueOf(params.charAt(1));
262 | String typeName;
263 | if (params.length() > 3) {
264 | typeName = params.substring(3);
265 | } else {
266 | typeName = "";
267 | }
268 | paramClass.add(a(type, typeName));
269 | }
270 | }
271 | return paramClass;
272 | }
273 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable-v24/ic_launcher_foreground.xml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
9 |
15 |
18 |
21 |
22 |
23 |
24 |
30 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_launcher_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
15 |
20 |
25 |
30 |
35 |
40 |
45 |
50 |
55 |
60 |
65 |
70 |
75 |
80 |
85 |
90 |
95 |
100 |
105 |
110 |
115 |
120 |
125 |
130 |
135 |
140 |
145 |
150 |
155 |
160 |
165 |
170 |
171 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
15 |
16 |
21 |
22 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omeraydindev/sw-blocks-preview/b5412f6757ec995c86b38ccc949ef8f2b050184b/app/src/main/res/mipmap-hdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omeraydindev/sw-blocks-preview/b5412f6757ec995c86b38ccc949ef8f2b050184b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omeraydindev/sw-blocks-preview/b5412f6757ec995c86b38ccc949ef8f2b050184b/app/src/main/res/mipmap-mdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omeraydindev/sw-blocks-preview/b5412f6757ec995c86b38ccc949ef8f2b050184b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omeraydindev/sw-blocks-preview/b5412f6757ec995c86b38ccc949ef8f2b050184b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omeraydindev/sw-blocks-preview/b5412f6757ec995c86b38ccc949ef8f2b050184b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omeraydindev/sw-blocks-preview/b5412f6757ec995c86b38ccc949ef8f2b050184b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omeraydindev/sw-blocks-preview/b5412f6757ec995c86b38ccc949ef8f2b050184b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omeraydindev/sw-blocks-preview/b5412f6757ec995c86b38ccc949ef8f2b050184b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omeraydindev/sw-blocks-preview/b5412f6757ec995c86b38ccc949ef8f2b050184b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #FFBB86FC
4 | #FF6200EE
5 | #FF3700B3
6 | #FF03DAC5
7 | #FF018786
8 | #FF000000
9 | #FFFFFFFF
10 |
--------------------------------------------------------------------------------
/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | SW Blocks Preview
3 |
--------------------------------------------------------------------------------
/app/src/main/res/values/themes.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/backup_rules.xml:
--------------------------------------------------------------------------------
1 |
8 |
9 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/data_extraction_rules.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
12 |
13 |
19 |
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 | plugins {
3 | id 'com.android.application' version '7.3.1' apply false
4 | id 'com.android.library' version '7.3.1' apply false
5 | }
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 | # IDE (e.g. Android Studio) users:
3 | # Gradle settings configured through the IDE *will override*
4 | # any settings specified in this file.
5 | # For more details on how to configure your build environment visit
6 | # http://www.gradle.org/docs/current/userguide/build_environment.html
7 | # Specifies the JVM arguments used for the daemon process.
8 | # The setting is particularly useful for tweaking memory settings.
9 | org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
10 | # When configured, Gradle will run in incubating parallel mode.
11 | # This option should only be used with decoupled projects. More details, visit
12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
13 | # org.gradle.parallel=true
14 | # AndroidX package structure to make it clearer which packages are bundled with the
15 | # Android operating system, and which are packaged with your app's APK
16 | # https://developer.android.com/topic/libraries/support-library/androidx-rn
17 | android.useAndroidX=true
18 | # Enables namespacing of each library's R class so that its R class includes only the
19 | # resources declared in the library itself and none from the library's dependencies,
20 | # thereby reducing the size of the R class for that library
21 | android.nonTransitiveRClass=true
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omeraydindev/sw-blocks-preview/b5412f6757ec995c86b38ccc949ef8f2b050184b/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Mon Jan 16 20:51:15 TRT 2023
2 | distributionBase=GRADLE_USER_HOME
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
4 | distributionPath=wrapper/dists
5 | zipStorePath=wrapper/dists
6 | zipStoreBase=GRADLE_USER_HOME
7 |
--------------------------------------------------------------------------------
/gradlew:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 |
3 | #
4 | # Copyright 2015 the original author or authors.
5 | #
6 | # Licensed under the Apache License, Version 2.0 (the "License");
7 | # you may not use this file except in compliance with the License.
8 | # You may obtain a copy of the License at
9 | #
10 | # https://www.apache.org/licenses/LICENSE-2.0
11 | #
12 | # Unless required by applicable law or agreed to in writing, software
13 | # distributed under the License is distributed on an "AS IS" BASIS,
14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | # See the License for the specific language governing permissions and
16 | # limitations under the License.
17 | #
18 |
19 | ##############################################################################
20 | ##
21 | ## Gradle start up script for UN*X
22 | ##
23 | ##############################################################################
24 |
25 | # Attempt to set APP_HOME
26 | # Resolve links: $0 may be a link
27 | PRG="$0"
28 | # Need this for relative symlinks.
29 | while [ -h "$PRG" ] ; do
30 | ls=`ls -ld "$PRG"`
31 | link=`expr "$ls" : '.*-> \(.*\)$'`
32 | if expr "$link" : '/.*' > /dev/null; then
33 | PRG="$link"
34 | else
35 | PRG=`dirname "$PRG"`"/$link"
36 | fi
37 | done
38 | SAVED="`pwd`"
39 | cd "`dirname \"$PRG\"`/" >/dev/null
40 | APP_HOME="`pwd -P`"
41 | cd "$SAVED" >/dev/null
42 |
43 | APP_NAME="Gradle"
44 | APP_BASE_NAME=`basename "$0"`
45 |
46 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
47 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
48 |
49 | # Use the maximum available, or set MAX_FD != -1 to use that value.
50 | MAX_FD="maximum"
51 |
52 | warn () {
53 | echo "$*"
54 | }
55 |
56 | die () {
57 | echo
58 | echo "$*"
59 | echo
60 | exit 1
61 | }
62 |
63 | # OS specific support (must be 'true' or 'false').
64 | cygwin=false
65 | msys=false
66 | darwin=false
67 | nonstop=false
68 | case "`uname`" in
69 | CYGWIN* )
70 | cygwin=true
71 | ;;
72 | Darwin* )
73 | darwin=true
74 | ;;
75 | MINGW* )
76 | msys=true
77 | ;;
78 | NONSTOP* )
79 | nonstop=true
80 | ;;
81 | esac
82 |
83 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
84 |
85 |
86 | # Determine the Java command to use to start the JVM.
87 | if [ -n "$JAVA_HOME" ] ; then
88 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
89 | # IBM's JDK on AIX uses strange locations for the executables
90 | JAVACMD="$JAVA_HOME/jre/sh/java"
91 | else
92 | JAVACMD="$JAVA_HOME/bin/java"
93 | fi
94 | if [ ! -x "$JAVACMD" ] ; then
95 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
96 |
97 | Please set the JAVA_HOME variable in your environment to match the
98 | location of your Java installation."
99 | fi
100 | else
101 | JAVACMD="java"
102 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
103 |
104 | Please set the JAVA_HOME variable in your environment to match the
105 | location of your Java installation."
106 | fi
107 |
108 | # Increase the maximum file descriptors if we can.
109 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
110 | MAX_FD_LIMIT=`ulimit -H -n`
111 | if [ $? -eq 0 ] ; then
112 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
113 | MAX_FD="$MAX_FD_LIMIT"
114 | fi
115 | ulimit -n $MAX_FD
116 | if [ $? -ne 0 ] ; then
117 | warn "Could not set maximum file descriptor limit: $MAX_FD"
118 | fi
119 | else
120 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
121 | fi
122 | fi
123 |
124 | # For Darwin, add options to specify how the application appears in the dock
125 | if $darwin; then
126 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
127 | fi
128 |
129 | # For Cygwin or MSYS, switch paths to Windows format before running java
130 | if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
131 | APP_HOME=`cygpath --path --mixed "$APP_HOME"`
132 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
133 |
134 | JAVACMD=`cygpath --unix "$JAVACMD"`
135 |
136 | # We build the pattern for arguments to be converted via cygpath
137 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
138 | SEP=""
139 | for dir in $ROOTDIRSRAW ; do
140 | ROOTDIRS="$ROOTDIRS$SEP$dir"
141 | SEP="|"
142 | done
143 | OURCYGPATTERN="(^($ROOTDIRS))"
144 | # Add a user-defined pattern to the cygpath arguments
145 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then
146 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
147 | fi
148 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
149 | i=0
150 | for arg in "$@" ; do
151 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
152 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
153 |
154 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
155 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
156 | else
157 | eval `echo args$i`="\"$arg\""
158 | fi
159 | i=`expr $i + 1`
160 | done
161 | case $i in
162 | 0) set -- ;;
163 | 1) set -- "$args0" ;;
164 | 2) set -- "$args0" "$args1" ;;
165 | 3) set -- "$args0" "$args1" "$args2" ;;
166 | 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
167 | 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
168 | 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
169 | 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
170 | 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
171 | 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
172 | esac
173 | fi
174 |
175 | # Escape application args
176 | save () {
177 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
178 | echo " "
179 | }
180 | APP_ARGS=`save "$@"`
181 |
182 | # Collect all arguments for the java command, following the shell quoting and substitution rules
183 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
184 |
185 | exec "$JAVACMD" "$@"
186 |
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @rem
2 | @rem Copyright 2015 the original author or authors.
3 | @rem
4 | @rem Licensed under the Apache License, Version 2.0 (the "License");
5 | @rem you may not use this file except in compliance with the License.
6 | @rem You may obtain a copy of the License at
7 | @rem
8 | @rem https://www.apache.org/licenses/LICENSE-2.0
9 | @rem
10 | @rem Unless required by applicable law or agreed to in writing, software
11 | @rem distributed under the License is distributed on an "AS IS" BASIS,
12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | @rem See the License for the specific language governing permissions and
14 | @rem limitations under the License.
15 | @rem
16 |
17 | @if "%DEBUG%" == "" @echo off
18 | @rem ##########################################################################
19 | @rem
20 | @rem Gradle startup script for Windows
21 | @rem
22 | @rem ##########################################################################
23 |
24 | @rem Set local scope for the variables with windows NT shell
25 | if "%OS%"=="Windows_NT" setlocal
26 |
27 | set DIRNAME=%~dp0
28 | if "%DIRNAME%" == "" set DIRNAME=.
29 | set APP_BASE_NAME=%~n0
30 | set APP_HOME=%DIRNAME%
31 |
32 | @rem Resolve any "." and ".." in APP_HOME to make it shorter.
33 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
34 |
35 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
36 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
37 |
38 | @rem Find java.exe
39 | if defined JAVA_HOME goto findJavaFromJavaHome
40 |
41 | set JAVA_EXE=java.exe
42 | %JAVA_EXE% -version >NUL 2>&1
43 | if "%ERRORLEVEL%" == "0" goto execute
44 |
45 | echo.
46 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
47 | echo.
48 | echo Please set the JAVA_HOME variable in your environment to match the
49 | echo location of your Java installation.
50 |
51 | goto fail
52 |
53 | :findJavaFromJavaHome
54 | set JAVA_HOME=%JAVA_HOME:"=%
55 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
56 |
57 | if exist "%JAVA_EXE%" goto execute
58 |
59 | echo.
60 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
61 | echo.
62 | echo Please set the JAVA_HOME variable in your environment to match the
63 | echo location of your Java installation.
64 |
65 | goto fail
66 |
67 | :execute
68 | @rem Setup the command line
69 |
70 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
71 |
72 |
73 | @rem Execute Gradle
74 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
75 |
76 | :end
77 | @rem End local scope for the variables with windows NT shell
78 | if "%ERRORLEVEL%"=="0" goto mainEnd
79 |
80 | :fail
81 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
82 | rem the _cmd.exe /c_ return code!
83 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
84 | exit /b 1
85 |
86 | :mainEnd
87 | if "%OS%"=="Windows_NT" endlocal
88 |
89 | :omega
90 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | pluginManagement {
2 | repositories {
3 | gradlePluginPortal()
4 | google()
5 | mavenCentral()
6 | }
7 | }
8 | dependencyResolutionManagement {
9 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
10 | repositories {
11 | google()
12 | mavenCentral()
13 | }
14 | }
15 | rootProject.name = "SW Blocks Preview"
16 | include ':app'
17 |
--------------------------------------------------------------------------------