1- /* UI for editing scripts.
2- * This will read from scriptClass.meta to get blocks and buttons definition, for example:
3- * {
4- * "Exit": [],
5- * "Call": ["file", "arg1"],
6- * "ClickPic": ["Pic"],
7- * }
8- * {"Exit":"[]","T":"[(Spinner, [1, 2, 3]), (EditText, [Placeholder])]"}
9- * */
10- package com.tranquilrock.androidscript.activity.editor
1+ package com.tranquilrock.androidscript.activity
112
123import android.content.Intent
134import android.media.projection.MediaProjectionManager
145import androidx.appcompat.app.AppCompatActivity
156import android.os.Bundle
16- import android.util.Log
177import com.tranquilrock.androidscript.R
188import android.view.View
199import androidx.recyclerview.widget.DividerItemDecoration
2010import androidx.recyclerview.widget.GridLayoutManager
2111import androidx.recyclerview.widget.LinearLayoutManager
2212import androidx.recyclerview.widget.RecyclerView
23- import com.tranquilrock.androidscript.feature.InternalStorageReader
24- import com.tranquilrock.androidscript.activity .editor.component .BlockAdapter
25- import com.tranquilrock.androidscript.activity .editor.component .ButtonAdapter
13+ import com.tranquilrock.androidscript.feature.InternalStorageUser
14+ import com.tranquilrock.androidscript.component .editor.BlockAdapter
15+ import com.tranquilrock.androidscript.component .editor.ButtonAdapter
2616import android.widget.Toast
2717import android.widget.ToggleButton
2818import androidx.activity.result.contract.ActivityResultContracts
@@ -35,83 +25,99 @@ import com.tranquilrock.androidscript.App.Companion.SCRIPT_TYPE_KEY
3525import com.tranquilrock.androidscript.feature.PermissionRequester
3626import com.tranquilrock.androidscript.service.WidgetService
3727
38- class EditActivity : AppCompatActivity (), InternalStorageReader, PermissionRequester {
28+ /* *
29+ * UI for editing scripts.
30+ * This will read from scriptClass.meta to get blocks and buttons definition, for example:
31+ * [
32+ * Pair("Exit", []),
33+ * Pair("Call", ["EditText", "Placeholder"]),
34+ * ...
35+ * ]
36+ * will be stored as:
37+ * [{"first":"Exit","second":[]},{"first":"Call","second":["EditText", "Placeholder"]}]
38+ * */
39+ class EditActivity : AppCompatActivity (), InternalStorageUser, PermissionRequester {
3940 private lateinit var toggleOrientation: ToggleButton
4041 private lateinit var blockView: RecyclerView
4142 private lateinit var buttonView: RecyclerView
4243 private lateinit var blockData: ArrayList <ArrayList <String >>
43- private lateinit var blockMeta: Array <Array < Any >>
44+ private lateinit var blockMeta: Array <Pair < String , List < List < String >> >>
4445 private lateinit var fileName: String
4546 private lateinit var scriptClass: String
4647
4748
4849 override fun onCreate (savedInstanceState : Bundle ? ) {
4950 super .onCreate(savedInstanceState)
5051 setContentView(R .layout.activity_edit)
51- toggleOrientation = findViewById< ToggleButton ?> (R .id.toggle_orientation)
52+ toggleOrientation = findViewById(R .id.toggle_orientation)
5253
5354 buttonView = findViewById(R .id.edit_button_grid)
5455 blockView = findViewById(R .id.edit_code_grid)
5556
5657 scriptClass = intent.getStringExtra(SCRIPT_TYPE_KEY )!!
5758 fileName = intent.getStringExtra(SCRIPT_NAME_KEY )!!
5859
59- blockMeta = getMetadata(this , scriptClass).also {
60- Log .d(TAG , " Metadata: $it " )
61- }
62- blockData = getScript(this , scriptClass, fileName).also {
63- Log .d(TAG , " Block data: $it " )
64- }
65-
60+ blockMeta = getMetadata(this , scriptClass)
61+ blockData = getScript(this , scriptClass, fileName)
6662
67- val mediaProjectionManager = getSystemService(MediaProjectionManager ::class .java)
68-
69- val startMediaProjection = registerForActivityResult(
63+ val mediaProjectionLauncher = registerForActivityResult(
7064 ActivityResultContracts .StartActivityForResult ()
7165 ) { result ->
7266 if (result.resultCode == RESULT_OK ) {
7367 startWidgetService(result.data!! )
7468 } else {
7569 Toast .makeText(
76- this ,
77- " Please Enable Media Projection" ,
78- Toast .LENGTH_LONG
70+ this , " Please Enable Media Projection" , Toast .LENGTH_SHORT
7971 ).show()
8072 }
8173 }
8274
8375 findViewById<View >(R .id.start_service).setOnClickListener {
76+ for (block in blockData) {
77+ if (block.contains(" " )) {
78+ Toast .makeText(
79+ this , " Block not filled." , Toast .LENGTH_SHORT
80+ ).show()
81+ return @setOnClickListener
82+ }
83+ }
84+
8485 if (! canDrawOverlays(this )) {
85- Log .d(TAG , " Requesting Overlays" )
8686 requestDrawOverlays(this )
8787 } else if (! accessibilityEnabled(contentResolver)) {
8888 requestAccessibility(this )
89- Log .d(TAG , " Requesting Accessibility" )
9089 } else {
91- startMediaProjection.launch(mediaProjectionManager.createScreenCaptureIntent())
92- // Start Service Within Callback.
90+ mediaProjectionLauncher.launch(
91+ getSystemService(MediaProjectionManager ::class .java).createScreenCaptureIntent()
92+ )
9393 }
9494 }
9595
9696 findViewById<View >(R .id.save_file).setOnClickListener {
9797 saveScript(this , scriptClass, fileName, blockData)
9898 Toast .makeText(
99- this ,
100- " File Saved" ,
101- Toast .LENGTH_LONG
99+ this , " File Saved" , Toast .LENGTH_LONG
102100 ).show()
103101 }
104102
105- blockView.layoutManager = LinearLayoutManager (this )
106- blockView.addItemDecoration(DividerItemDecoration (this , DividerItemDecoration .VERTICAL ))
107- blockView.adapter = BlockAdapter (blockMeta, blockData)
103+ blockView.run {
104+ layoutManager = LinearLayoutManager (this @EditActivity)
105+ addItemDecoration(
106+ DividerItemDecoration (
107+ this @EditActivity, DividerItemDecoration .VERTICAL
108+ )
109+ )
110+ adapter = BlockAdapter (blockMeta, blockData)
111+ }
108112
109- buttonView.layoutManager = GridLayoutManager (this , 2 )
110- buttonView.adapter = ButtonAdapter (
111- blockMeta,
112- blockData,
113- (blockView.adapter as BlockAdapter ).onOrderChange,
114- )
113+ buttonView.run {
114+ layoutManager = GridLayoutManager (this @EditActivity, 2 )
115+ buttonView.adapter = ButtonAdapter (
116+ blockMeta,
117+ blockData,
118+ (blockView.adapter as BlockAdapter ).onOrderChange,
119+ )
120+ }
115121 }
116122
117123 private fun startWidgetService (data : Intent ) {
@@ -125,10 +131,5 @@ class EditActivity : AppCompatActivity(), InternalStorageReader, PermissionReque
125131
126132 this .startService(startServiceIntent)
127133 finishAffinity()
128- Log .d(TAG , " Start Service" )
129- }
130-
131- companion object {
132- private val TAG = EditActivity ::class .java.simpleName
133134 }
134135}
0 commit comments