@@ -15,16 +15,16 @@ import com.androidvip.sysctlgui.R
1515import com.androidvip.sysctlgui.data.models.HomeItem
1616import com.androidvip.sysctlgui.data.utils.RootUtils
1717import com.androidvip.sysctlgui.databinding.ActivityMainBinding
18- import com.androidvip.sysctlgui.domain.models.param.DomainKernelParam
19- import com.androidvip.sysctlgui.domain.usecase.AddUserParamsUseCase
20- import com.androidvip.sysctlgui.domain.usecase.ApplyParamsUseCase
21- import com.androidvip.sysctlgui.domain.usecase.ClearUserParamUseCase
18+ import com.androidvip.sysctlgui.domain.exceptions.EmptyFileException
19+ import com.androidvip.sysctlgui.domain.exceptions.InvalidFileExtensionException
20+ import com.androidvip.sysctlgui.domain.exceptions.MalformedLineException
21+ import com.androidvip.sysctlgui.domain.exceptions.NoValidParamException
22+ import com.androidvip.sysctlgui.domain.usecase.ImportParamsUseCase
2223import com.androidvip.sysctlgui.toast
2324import com.androidvip.sysctlgui.ui.params.browse.KernelParamBrowserActivity
2425import com.androidvip.sysctlgui.ui.params.list.KernelParamListActivity
2526import com.androidvip.sysctlgui.ui.params.user.ManageFavoritesParamsActivity
2627import com.androidvip.sysctlgui.ui.settings.SettingsActivity
27- import com.androidvip.sysctlgui.utils.KernelParamUtils
2828import com.google.gson.JsonParseException
2929import com.google.gson.JsonSyntaxException
3030import kotlinx.coroutines.launch
@@ -35,9 +35,7 @@ class MainActivity : AppCompatActivity(), HomeItemAdapter.OnHomeItemClickedListe
3535 private lateinit var binding: ActivityMainBinding
3636 private val rootUtils: RootUtils by inject()
3737
38- private val applyParamsUseCase: ApplyParamsUseCase by inject()
39- private val clearUserParamUseCase: ClearUserParamUseCase by inject()
40- private val addUserParamsUseCase: AddUserParamsUseCase by inject()
38+ private val importParamsUseCase: ImportParamsUseCase by inject()
4139
4240 private val viewModel: MainViewModel by viewModel()
4341
@@ -114,22 +112,9 @@ class MainActivity : AppCompatActivity(), HomeItemAdapter.OnHomeItemClickedListe
114112 override fun onActivityResult (requestCode : Int , resultCode : Int , data : Intent ? ) {
115113 when (requestCode) {
116114 OPEN_FILE_REQUEST_CODE -> {
117- if (resultCode != Activity .RESULT_OK ) return
118-
119- data?.data?.let { uri ->
120- val fileExtension = uri.lastPathSegment
121-
122- fileExtension?.let { extension ->
123- if (extension.endsWith(" .json" ) or extension.endsWith(" .conf" )) {
124- lifecycleScope.launch {
125- applyParamsFromUri(uri, extension)
126- }
127- } else {
128- toast(R .string.import_error_invalid_file_type)
129- return
130- }
131- }
132- }
115+ if (resultCode != Activity .RESULT_OK ) return toast(R .string.import_error)
116+ val uri = data?.data ? : return toast(R .string.import_error)
117+ importParams(uri)
133118 }
134119 }
135120 super .onActivityResult(requestCode, resultCode, data)
@@ -144,8 +129,9 @@ class MainActivity : AppCompatActivity(), HomeItemAdapter.OnHomeItemClickedListe
144129 }
145130 }
146131
147- private suspend fun applyParamsFromUri (uri : Uri , fileExtension : String ) {
148- val successfulParams: MutableList <DomainKernelParam > = mutableListOf ()
132+ private fun importParams (uri : Uri ) {
133+ val extension = uri.lastPathSegment.orEmpty()
134+ val stream = contentResolver.openInputStream(uri) ? : return toast(R .string.import_error)
149135
150136 fun showResultDialog (message : String , success : Boolean ) {
151137 val dialog = AlertDialog .Builder (this )
@@ -159,44 +145,33 @@ class MainActivity : AppCompatActivity(), HomeItemAdapter.OnHomeItemClickedListe
159145 }
160146 }
161147
162- try {
163- val params: MutableList <DomainKernelParam >? = when {
164- fileExtension.endsWith(" .json" ) -> {
165- KernelParamUtils .getParamsFromJsonUri(this , uri)
166- }
167- fileExtension.endsWith(" .conf" ) -> {
168- KernelParamUtils .getParamsFromConfUri(this , uri)
169- }
170- else -> mutableListOf ()
171- }?.toMutableList()
172-
173- if (params.isNullOrEmpty()) {
174- toast(R .string.no_parameters_found)
175- return
176- }
177-
178- params.forEach {
179- // Apply the param to check if valid
180- val result = applyParamsUseCase.execute(it)
181- if (result.isSuccess) {
182- successfulParams.add(it)
183- }
184- }
185-
186- clearUserParamUseCase.execute()
187- addUserParamsUseCase.execute(successfulParams)
188- val msg = " ${
189- getString(R .string.import_success_message, successfulParams.size)
190- } \n\n ${successfulParams.joinToString()} "
191- showResultDialog(msg, true )
192- toast(R .string.done, Toast .LENGTH_LONG )
193- } catch (e: Exception ) {
194- e.printStackTrace()
195- when (e) {
148+ lifecycleScope.launch {
149+ val result = importParamsUseCase.execute(stream, extension)
150+ when (result.exceptionOrNull()) {
196151 is JsonParseException ,
197152 is JsonSyntaxException -> {
198153 showResultDialog(getString(R .string.import_error_invalid_json), false )
199154 }
155+ is InvalidFileExtensionException -> showResultDialog(
156+ getString(R .string.import_error_invalid_file_type), false
157+ )
158+ is EmptyFileException -> showResultDialog(
159+ getString(R .string.import_error_empty_file), false
160+ )
161+ is MalformedLineException -> showResultDialog(
162+ getString(R .string.import_error_malformed_line), false
163+ )
164+ is NoValidParamException -> showResultDialog(
165+ getString(R .string.no_parameters_found), false
166+ )
167+ null -> {
168+ val successfulParams = result.getOrNull().orEmpty()
169+ val msg = " ${
170+ getString(R .string.import_success_message, successfulParams.size)
171+ } \n\n ${successfulParams.joinToString()} "
172+ showResultDialog(msg, true )
173+ toast(R .string.done, Toast .LENGTH_LONG )
174+ }
200175 else -> {
201176 showResultDialog(getString(R .string.import_error), false )
202177 }
0 commit comments