@@ -4,26 +4,26 @@ import android.content.Intent
44import android.media.projection.MediaProjectionManager
55import androidx.appcompat.app.AppCompatActivity
66import android.os.Bundle
7- import com.tranquilrock.androidscript.R
8- import android.view.View
7+ import android.util.Log
98import androidx.recyclerview.widget.DividerItemDecoration
109import androidx.recyclerview.widget.GridLayoutManager
1110import androidx.recyclerview.widget.LinearLayoutManager
12- import androidx.recyclerview.widget.RecyclerView
1311import com.tranquilrock.androidscript.feature.InternalStorageUser
1412import com.tranquilrock.androidscript.component.editor.BlockAdapter
1513import com.tranquilrock.androidscript.component.editor.ButtonAdapter
1614import android.widget.Toast
17- import android.widget.ToggleButton
1815import androidx.activity.result.contract.ActivityResultContracts
16+ import com.google.gson.Gson
17+ import com.google.gson.JsonSyntaxException
1918import com.tranquilrock.androidscript.App.Companion.BLOCK_DATA_KEY
20- import com.tranquilrock.androidscript.App.Companion.BLOCK_META_KEY
2119import com.tranquilrock.androidscript.App.Companion.MEDIA_PROJECTION_KEY
2220import com.tranquilrock.androidscript.App.Companion.ORIENTATION_KEY
2321import com.tranquilrock.androidscript.App.Companion.SCRIPT_NAME_KEY
2422import com.tranquilrock.androidscript.App.Companion.SCRIPT_TYPE_KEY
23+ import com.tranquilrock.androidscript.databinding.ActivityEditBinding
2524import com.tranquilrock.androidscript.feature.PermissionRequester
2625import com.tranquilrock.androidscript.service.WidgetService
26+ import java.io.IOException
2727
2828/* *
2929 * UI for editing scripts.
@@ -37,33 +37,40 @@ import com.tranquilrock.androidscript.service.WidgetService
3737 * [{"first":"Exit","second":[]},{"first":"Call","second":["EditText", "Placeholder"]}]
3838 * */
3939class EditActivity : AppCompatActivity (), InternalStorageUser, PermissionRequester {
40- private lateinit var toggleOrientation: ToggleButton
41- private lateinit var blockView: RecyclerView
42- private lateinit var buttonView: RecyclerView
40+
4341 private lateinit var blockData: ArrayList <ArrayList <String >>
4442 private lateinit var blockMeta: Array <Pair <String , List <List <String >>>>
4543 private lateinit var fileName: String
4644 private lateinit var scriptClass: String
45+ private lateinit var binding: ActivityEditBinding
4746
4847
4948 override fun onCreate (savedInstanceState : Bundle ? ) {
5049 super .onCreate(savedInstanceState)
51- setContentView(R .layout.activity_edit)
52- toggleOrientation = findViewById(R .id.toggle_orientation)
53-
54- buttonView = findViewById(R .id.edit_button_grid)
55- blockView = findViewById(R .id.edit_code_grid)
50+ binding = ActivityEditBinding .inflate(layoutInflater)
51+ setContentView(binding.root)
5652
5753 scriptClass = intent.getStringExtra(SCRIPT_TYPE_KEY )!!
5854 fileName = intent.getStringExtra(SCRIPT_NAME_KEY )!!
5955
60- blockMeta = getMetadata(this , scriptClass)
61- blockData = getScript(this , scriptClass, fileName)
56+ try {
57+ blockMeta = getMetadata(this , scriptClass)
58+ } catch (e: JsonSyntaxException ) {
59+ e.printStackTrace()
60+ Log .e(TAG , " Meta file format error!" )
61+ }
62+
63+ try {
64+ blockData = getScript(this , scriptClass, fileName)
65+ } catch (e: IOException ) {
66+ e.printStackTrace()
67+ Log .e(TAG , " Reading block file error!" )
68+ }
6269
6370 val mediaProjectionLauncher = registerForActivityResult(
6471 ActivityResultContracts .StartActivityForResult ()
6572 ) { result ->
66- if (result.resultCode == RESULT_OK ) {
73+ if (result.resultCode == RESULT_OK && result.data != null ) {
6774 startWidgetService(result.data!! )
6875 } else {
6976 Toast .makeText(
@@ -72,7 +79,7 @@ class EditActivity : AppCompatActivity(), InternalStorageUser, PermissionRequest
7279 }
7380 }
7481
75- findViewById< View >( R .id.start_service) .setOnClickListener {
82+ binding.startService .setOnClickListener {
7683 for (block in blockData) {
7784 if (block.contains(" " )) {
7885 Toast .makeText(
@@ -93,43 +100,51 @@ class EditActivity : AppCompatActivity(), InternalStorageUser, PermissionRequest
93100 }
94101 }
95102
96- findViewById< View >( R .id.save_file) .setOnClickListener {
103+ binding.saveFile .setOnClickListener {
97104 saveScript(this , scriptClass, fileName, blockData)
98105 Toast .makeText(
99106 this , " File Saved" , Toast .LENGTH_LONG
100107 ).show()
101108 }
102109
103- blockView .run {
110+ binding.editCodeGrid .run {
104111 layoutManager = LinearLayoutManager (this @EditActivity)
112+ adapter = BlockAdapter (blockMeta, blockData)
105113 addItemDecoration(
106114 DividerItemDecoration (
107115 this @EditActivity, DividerItemDecoration .VERTICAL
108116 )
109117 )
110- adapter = BlockAdapter (blockMeta, blockData)
111118 }
112119
113- buttonView .run {
120+ binding.editButtonGrid .run {
114121 layoutManager = GridLayoutManager (this @EditActivity, 2 )
115- buttonView. adapter = ButtonAdapter (
122+ adapter = ButtonAdapter (
116123 blockMeta,
117124 blockData,
118- (blockView .adapter as BlockAdapter ).onOrderChange,
125+ (binding.editCodeGrid .adapter as BlockAdapter ).onOrderChange,
119126 )
120127 }
121128 }
122129
123130 private fun startWidgetService (data : Intent ) {
131+ val blockCopy = Gson ().fromJson(Gson ().toJson(blockData), Array <Array <String >>::class .java)
132+ blockCopy.forEach {
133+ it[0 ] = blockMeta[it[0 ].toInt()].first
134+ }
135+
124136 val startServiceIntent = Intent (this , WidgetService ::class .java).apply {
125137 putExtra(SCRIPT_TYPE_KEY , scriptClass)
126138 putExtra(MEDIA_PROJECTION_KEY , data)
127- putExtra(BLOCK_DATA_KEY , blockData)
128- putExtra(BLOCK_META_KEY , blockMeta)
129- putExtra(ORIENTATION_KEY , toggleOrientation.isChecked)
139+ putExtra(BLOCK_DATA_KEY , Gson ().toJson(blockCopy))
140+ putExtra(ORIENTATION_KEY , binding.toggleOrientation.isChecked)
130141 }
131142
132143 this .startService(startServiceIntent)
133144 finishAffinity()
134145 }
146+
147+ companion object {
148+ val TAG : String = EditActivity ::class .java.simpleName
149+ }
135150}
0 commit comments