diff --git a/app/src/main/java/com/puutaro/commandclick/component/adapter/ListIndexForEditAdapter.kt b/app/src/main/java/com/puutaro/commandclick/component/adapter/ListIndexForEditAdapter.kt old mode 100755 new mode 100644 index 87ffedd86..36df8d1d8 --- a/app/src/main/java/com/puutaro/commandclick/component/adapter/ListIndexForEditAdapter.kt +++ b/app/src/main/java/com/puutaro/commandclick/component/adapter/ListIndexForEditAdapter.kt @@ -3,6 +3,7 @@ package com.puutaro.commandclick.component.adapter import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.RelativeLayout import androidx.appcompat.widget.AppCompatImageView import androidx.appcompat.widget.AppCompatTextView import androidx.appcompat.widget.LinearLayoutCompat @@ -13,8 +14,10 @@ import com.google.android.material.card.MaterialCardView import com.puutaro.commandclick.common.variable.variables.CommandClickScriptVariable import com.puutaro.commandclick.common.variable.variables.FannelListVariable import com.puutaro.commandclick.common.variable.variant.SettingVariableSelects +import com.puutaro.commandclick.component.adapter.lib.ImageAdapterTool import com.puutaro.commandclick.fragment.EditFragment import com.puutaro.commandclick.proccess.list_index_for_edit.ListIndexEditConfig +import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.LayoutSettingsForListIndex import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.ListSettingsForListIndex import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.PerformSettingForListIndex import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.TypeSettingsForListIndex @@ -23,6 +26,7 @@ import com.puutaro.commandclick.proccess.qr.qr_dialog_config.config_settings.QrL import com.puutaro.commandclick.proccess.qr.qr_dialog_config.config_settings.QrModeSettingKeysForQrDialog import com.puutaro.commandclick.util.CommandClickVariables import com.puutaro.commandclick.util.SettingVariableReader +import com.puutaro.commandclick.util.file.AssetsFileManager import com.puutaro.commandclick.util.file.FileSystems import com.puutaro.commandclick.util.file.ReadText import com.puutaro.commandclick.util.map.CmdClickMap @@ -47,9 +51,27 @@ class ListIndexForEditAdapter( private val editExecuteAlways = SettingVariableSelects.EditExecuteSelects.ALWAYS.name private val busyboxExecutor = editFragment.busyboxExecutor + private val listIndexConfigMap = editFragment.listIndexConfigMap + private val layoutConfigMap = LayoutSettingsForListIndex.getLayoutConfigMap( + listIndexConfigMap + ) + private val layoutType = LayoutSettingsForListIndex.decideLayoutType( + layoutConfigMap + ) + private var performMap: Map = mapOf() + + val checkItemConfigMap = CmdClickMap.createMap( + listIndexConfigMap?.get( + ListIndexEditConfig.ListIndexConfigKey.CHECK_ITEM.key + ), + '|' + ).toMap() private val qrDialogConfigMap = editFragment.qrDialogConfig ?: mapOf() - + private val textImagePngBitMap = ImageAdapterTool.makeFileMarkBitMap( + context, + AssetsFileManager.textImagePingPath + ) private val qrLogoConfigMap = QrLogoSettingsForQrDialog.makeLogoConfigMap( qrDialogConfigMap ) @@ -62,15 +84,6 @@ class ListIndexForEditAdapter( editFragment, iconConfigMap, ) - private val listIndexConfigMap = editFragment.listIndexConfigMap - private var performMap: Map = mapOf() - - val checkItemConfigMap = CmdClickMap.createMap( - listIndexConfigMap?.get( - ListIndexEditConfig.ListIndexConfigKey.CHECK_ITEM.key - ), - '|' - ).toMap() private var recentAppDirPath = String() private var filterDir = String() private var filterPrefix = String() @@ -82,7 +95,6 @@ class ListIndexForEditAdapter( } } - companion object { var indexListMap: Map = mapOf() var deleteConfigMap: Map = mapOf() @@ -92,18 +104,31 @@ class ListIndexForEditAdapter( val activity: FragmentActivity?, val view: View ): RecyclerView.ViewHolder(view) { + val baseLinearLayout = + view.findViewById( + com.puutaro.commandclick.R.id.list_index_edit_adapter_horizontal_linearlayout + ) val materialCardView = view.findViewById( com.puutaro.commandclick.R.id.list_index_edit_adapter_mterial_card_view ) val fileContentsQrLogoLinearLayout = - view.findViewById( + view.findViewById( com.puutaro.commandclick.R.id.list_index_edit_adapter_logo_linearlayout ) val fileContentsQrLogoView = view.findViewById( com.puutaro.commandclick.R.id.list_index_edit_adapter_contents ) + val qrLogoImageCaptionTextView = + view.findViewById( + com.puutaro.commandclick.R.id.list_index_edit_adapter_image_caption + ) + + val rightLinearlayout = + view.findViewById( + com.puutaro.commandclick.R.id.list_index_edit_adapter_vertical_linearlayout + ) val fileNameTextView = view.findViewById( com.puutaro.commandclick.R.id.list_index_edit_adapter_file_name @@ -147,6 +172,13 @@ class ListIndexForEditAdapter( ) return initListProperty(listIndexPosition) CoroutineScope(Dispatchers.IO).launch { +// withContext(Dispatchers.Main) { +// delay(200) +//// val backstackCount = TitleImageAndViewSetter.makeBackstackCount(editFragment) +//// if (backstackCount == 0) { +//// delay(100) +//// } +// } withContext(Dispatchers.Main) { ListIndexEditConfig.setCheckToMaterialCardView( holder.materialCardView, @@ -162,8 +194,8 @@ class ListIndexForEditAdapter( holder.fileName = FannelListVariable.getFannelName( fileNameOrInstallFannelLine ) - withContext(Dispatchers.Main) { - ListIndexEditConfig.setFileNameTextView( + val fileNameText = withContext(Dispatchers.Main) { + ListIndexEditConfig.makeFileNameText( listIndexTypeKey, holder.fileNameTextView, holder.fileName, @@ -171,38 +203,32 @@ class ListIndexForEditAdapter( busyboxExecutor, ) } - - val fileConList = withContext(Dispatchers.IO) { - if ( - listIndexConfigMap.isNullOrEmpty() - ) return@withContext emptyList() - if( - PerformSettingForListIndex.howFastMode(performMap) - || listIndexTypeKey == TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT - ) return@withContext emptyList() - ReadText( - File(filterDir, holder.fileName).absolutePath, - ).textToList().take(maxTakeSize) - } - val descCon = withContext(Dispatchers.IO){ - val makeFileDescArgsMaker = ListIndexEditConfig.MakeFileDescArgsMaker( - filterDir, - fileNameOrInstallFannelLine, - fileConList.joinToString("\n"), - listIndexConfigMap, - busyboxExecutor, - ) - ListIndexEditConfig.makeFileDesc( - makeFileDescArgsMaker, - ) - } - withContext(Dispatchers.Main) { - when(descCon.isNullOrEmpty()){ - true -> holder.fileDescTextView.isVisible = false - else -> holder.fileDescTextView.text = descCon + val fileConList = makeFileConList(holder.fileName) + when(layoutType){ + LayoutSettingsForListIndex.LayoutTypeValueStr.LINEAR -> { + withContext(Dispatchers.Main){ + if( + fileNameText.isNullOrEmpty() + ) return@withContext + holder.fileNameTextView?.text = fileNameText + } + setDescView( + holder.fileDescTextView, + fileNameOrInstallFannelLine, + fileConList.joinToString("\n"), + ) + } + LayoutSettingsForListIndex.LayoutTypeValueStr.GRID -> { + withContext(Dispatchers.Main){ + holder.rightLinearlayout.isVisible = false + if( + fileNameText.isNullOrEmpty() + ) return@withContext + holder.qrLogoImageCaptionTextView.isVisible = true + holder.qrLogoImageCaptionTextView.text = fileNameText + } } } - val fileConBackGroundColorInt = withContext(Dispatchers.IO) { val editExecuteValueForInstallFannel = when( listIndexTypeKey @@ -219,6 +245,7 @@ class ListIndexForEditAdapter( editExecuteValueForInstallFannel, ) } + withContext(Dispatchers.Main) { context?.let { holder.fileContentsQrLogoLinearLayout.backgroundTintList = @@ -226,10 +253,13 @@ class ListIndexForEditAdapter( } } withContext(Dispatchers.Main) { - QrLogoSettingsForQrDialog.OneSideLength.set( + QrLogoSettingsForQrDialog.OneSideLength.setLayout( editFragment, + holder.baseLinearLayout, + holder.materialCardView, holder.fileContentsQrLogoLinearLayout, - qrLogoConfigMap + qrLogoConfigMap, + layoutType ) } withContext(Dispatchers.Main) { @@ -316,6 +346,44 @@ class ListIndexForEditAdapter( ) } + private fun makeFileConList( + fileName: String, + ): List { + if ( + listIndexConfigMap.isNullOrEmpty() + ) return emptyList() + if( + PerformSettingForListIndex.howFastMode(performMap) + || listIndexTypeKey == TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT + ) return emptyList() + return ReadText( + File(filterDir, fileName).absolutePath, + ).textToList().take(maxTakeSize) + } + + private suspend fun setDescView( + fileDescTextView: AppCompatTextView, + fileNameOrInstallFannelLine: String, + fileCon: String, + ){ + val makeFileDescArgsMaker = ListIndexEditConfig.MakeFileDescArgsMaker( + filterDir, + fileNameOrInstallFannelLine, + fileCon, + listIndexConfigMap, + busyboxExecutor, + ) + val descCon = ListIndexEditConfig.makeFileDesc( + makeFileDescArgsMaker, + ) + withContext(Dispatchers.Main) { + when (descCon.isNullOrEmpty()) { + true -> fileDescTextView.isVisible = false + else -> fileDescTextView.text = descCon + } + } + } + private fun setFileContentsBackColor( fileConList: List, fileName: String, @@ -362,12 +430,15 @@ class ListIndexForEditAdapter( val itemName = holder.fileName.split("\t").lastOrNull() ?: String() val okSetIcon = QrLogoSettingsForQrDialog.QrIconSettingKeysForQrDialog.set( context, + filterDir, + listIndexTypeKey, itemName, holder.fileContentsQrLogoView, holder.fileContentsQrLogoLinearLayout, qrLogoConfigMap, iconConfigMap, - itemNameToNameColorConfigMap + itemNameToNameColorConfigMap, + textImagePngBitMap ) if(okSetIcon) return val qrMode = QrModeSettingKeysForQrDialog.getQrMode(qrDialogConfigMap) @@ -384,7 +455,7 @@ class ListIndexForEditAdapter( filterDir, holder.fileName, holder.fileContentsQrLogoView, - holder.fileContentsQrLogoLinearLayout, +// holder.fileContentsQrLogoLinearLayout, ) } withContext(Dispatchers.Main) { @@ -444,4 +515,7 @@ class ListIndexForEditAdapter( ListSettingsForListIndex.ListSettingKey.SUFFIX.key ) ?: String() } + fun getLayoutConfigMap(): Map { + return layoutConfigMap + } } diff --git a/app/src/main/java/com/puutaro/commandclick/component/adapter/lib/list_index_adapter/ListViewToolForListIndexAdapter.kt b/app/src/main/java/com/puutaro/commandclick/component/adapter/lib/list_index_adapter/ListViewToolForListIndexAdapter.kt index b4d962be7..ad3b14aac 100755 --- a/app/src/main/java/com/puutaro/commandclick/component/adapter/lib/list_index_adapter/ListViewToolForListIndexAdapter.kt +++ b/app/src/main/java/com/puutaro/commandclick/component/adapter/lib/list_index_adapter/ListViewToolForListIndexAdapter.kt @@ -1,9 +1,9 @@ package com.puutaro.commandclick.component.adapter.lib.list_index_adapter import androidx.core.view.isVisible +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.puutaro.commandclick.component.adapter.ListIndexForEditAdapter -import com.puutaro.commandclick.custom_manager.PreLoadLayoutManager import com.puutaro.commandclick.fragment.EditFragment import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -46,7 +46,8 @@ object ListViewToolForListIndexAdapter { ){ listIndexScrollToBottomJob?.cancel() listIndexScrollToBottomJob = CoroutineScope(Dispatchers.Main).launch { - val layoutManager = editListRecyclerView.layoutManager as? PreLoadLayoutManager + val layoutManager = + editListRecyclerView.layoutManager as? LinearLayoutManager val scrollToPosi = listIndexForEditAdapter.itemCount - 1 withContext(Dispatchers.Main){ for(i in 1..30){ @@ -74,7 +75,7 @@ object ListViewToolForListIndexAdapter { } private fun execScroll( - layoutManager: PreLoadLayoutManager?, + layoutManager: LinearLayoutManager?, scrollToPosi: Int, ){ try { diff --git a/app/src/main/java/com/puutaro/commandclick/custom_manager/PreLoadGridLayoutManager.kt b/app/src/main/java/com/puutaro/commandclick/custom_manager/PreLoadGridLayoutManager.kt index 2bf06998c..6c1f4d9af 100644 --- a/app/src/main/java/com/puutaro/commandclick/custom_manager/PreLoadGridLayoutManager.kt +++ b/app/src/main/java/com/puutaro/commandclick/custom_manager/PreLoadGridLayoutManager.kt @@ -1,4 +1,32 @@ package com.puutaro.commandclick.custom_manager -class PreLoadGridLayoutManager { +import android.content.Context +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView + +class PreLoadGridLayoutManager( + context: Context?, + col: Int, + reverseLayout: Boolean = false +) : + GridLayoutManager( + context, + col, + LinearLayoutManager.VERTICAL, + reverseLayout + ) { + private val mDisplayHeight: Int + + + init { + mDisplayHeight = context?.resources?.displayMetrics?.heightPixels ?: 0 + } + override fun calculateExtraLayoutSpace( + state: RecyclerView.State, + extraLayoutSpace: IntArray + ) { + extraLayoutSpace[0] = mDisplayHeight * 100 + extraLayoutSpace[1] = mDisplayHeight * 100 + } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/custom_manager/PreLoadLayoutManager.kt b/app/src/main/java/com/puutaro/commandclick/custom_manager/PreLoadLayoutManager.kt index 7eb7f95dd..b771f8ff0 100755 --- a/app/src/main/java/com/puutaro/commandclick/custom_manager/PreLoadLayoutManager.kt +++ b/app/src/main/java/com/puutaro/commandclick/custom_manager/PreLoadLayoutManager.kt @@ -7,11 +7,13 @@ import androidx.recyclerview.widget.RecyclerView class PreLoadLayoutManager( - private val context: Context?) : + context: Context?, + reverseLayout: Boolean = false +) : LinearLayoutManager( context, LinearLayoutManager.VERTICAL, - false + reverseLayout ) { private val mDisplayHeight: Int diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/OnlyImageGridJsDialog.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/OnlyImageGridJsDialog.kt index 2c4582e4e..7eff41439 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/OnlyImageGridJsDialog.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/OnlyImageGridJsDialog.kt @@ -9,6 +9,7 @@ import android.widget.LinearLayout import androidx.fragment.app.activityViewModels import com.puutaro.commandclick.component.adapter.OnlyImageAdapter import com.puutaro.commandclick.fragment.TerminalFragment +import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.EditableListContentsMultiSelectGridViewProducer import com.puutaro.commandclick.proccess.lib.LinearLayoutForTotal import com.puutaro.commandclick.proccess.lib.NestLinearLayout import com.puutaro.commandclick.proccess.lib.SearchTextLinearWeight @@ -97,7 +98,7 @@ class OnlyImageGridJsDialog( ) { val imagePathList = imagePathListTabSepaStr - .split("\n ") + .split("\n") .toMutableList() val context = context ?: return val linearLayoutForGridView = createLinearLayoutForGridView( @@ -127,6 +128,20 @@ class OnlyImageGridJsDialog( .setView(linearLayoutForGridView) .create() } + onlyImageGridDialog?.getButton( + DialogInterface.BUTTON_POSITIVE + )?.setTextColor( + context.getColor( + android.R.color.black + ) as Int + ) + onlyImageGridDialog?.getButton( + DialogInterface.BUTTON_NEGATIVE + )?.setTextColor( + context.getColor( + android.R.color.black + ) as Int + ) onlyImageGridDialog?.window?.setLayout( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/toolbar/JsFileOrDirGetter.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/toolbar/JsFileOrDirGetter.kt index a1ce03269..205e01477 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/toolbar/JsFileOrDirGetter.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/toolbar/JsFileOrDirGetter.kt @@ -72,9 +72,5 @@ class JsFileOrDirGetter( filterFilterSuffixListCon, filterShellPathCon, ) -// fileOrDirGetterForSettingButton?.get( -// parentDirPath, -// onDirectoryPick -// ) } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/WithIndexListView.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/WithIndexListView.kt index b3b06fe07..20a18e52b 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/WithIndexListView.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/WithIndexListView.kt @@ -5,6 +5,8 @@ import android.text.TextWatcher import android.view.View import androidx.appcompat.widget.AppCompatEditText import androidx.core.view.isVisible +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.LinearLayoutManager import com.puutaro.commandclick.common.variable.edit.EditParameters import com.puutaro.commandclick.common.variable.path.UsePath import com.puutaro.commandclick.common.variable.variables.CommandClickScriptVariable @@ -17,6 +19,7 @@ import com.puutaro.commandclick.fragment_lib.edit_fragment.common.TitleImageAndV import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.lib.list_index.FannelLogoLongClickDoForListIndex import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.lib.list_index.ItemTouchHelperCallbackForListIndexAdapter import com.puutaro.commandclick.proccess.list_index_for_edit.ListIndexEditConfig +import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.LayoutSettingsForListIndex import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.ListSettingsForListIndex import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.SearchBoxSettingsForListIndex import com.puutaro.commandclick.proccess.qr.qr_dialog_config.QrDialogClickHandler @@ -102,14 +105,18 @@ class WithIndexListView( ) editListRecyclerView.adapter = listIndexForEditAdapter - val preLoadLayoutManager = PreLoadLayoutManager( - context, - ) - preLoadLayoutManager.reverseLayout = ListSettingsForListIndex.howReverseLayout( + + + val isReverseLayout = ListSettingsForListIndex.howReverseLayout( editFragment, indexListMap ) - editListRecyclerView.layoutManager = preLoadLayoutManager + LayoutSettingsForListIndex.setLayout( + context, + listIndexForEditAdapter.getLayoutConfigMap(), + editListRecyclerView, + isReverseLayout, + ) ListViewToolForListIndexAdapter.scrollToBottom( editListRecyclerView, listIndexForEditAdapter, diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/edit_setting_extra/FilterPathTool.kt b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/edit_setting_extra/FilterPathTool.kt index f40782fa6..8c3bf2989 100644 --- a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/edit_setting_extra/FilterPathTool.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/edit_setting_extra/FilterPathTool.kt @@ -24,31 +24,33 @@ object FilterPathTool { separator ) val isFile = File("${dirPath}/$targetFileName").isFile + || File(targetFileName).isFile return okPrefix && okSuffix && isFile } fun isFilterByDir( - targetFileName: String, + targetDirName: String, dirPath: String, filterPrefixListCon: String, filterSuffixListCon: String, separator: String ): Boolean { val okPrefix = judgeByPrefix( - targetFileName, + targetDirName, filterPrefixListCon, separator ) val okSuffix = judgeBySuffix( - targetFileName, + targetDirName, filterSuffixListCon, separator ) val isDir = File( - "${dirPath}/$targetFileName" + "${dirPath}/$targetDirName" ).isDirectory + || File(targetDirName).isDirectory return okPrefix && okSuffix && isDir @@ -59,8 +61,11 @@ object FilterPathTool { filterPrefixListCon: String, separator: String, ): Boolean { + val compareFileOrDirName = makeNameForComparePrefix( + targetStr, + ) return filterPrefixListCon.split(separator).any { - targetStr.startsWith(it) + compareFileOrDirName.startsWith(it) } } @@ -76,4 +81,17 @@ object FilterPathTool { } return !Regex("\\..*$").containsMatchIn(targetStr) } + + private fun makeNameForComparePrefix( + name: String, + ): String { + val fileOrDirName = File(name).name + val isFileOrDirName = + fileOrDirName == name + if( + isFileOrDirName + ) return name + return fileOrDirName + + } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/ListIndexConfig.kt b/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/ListIndexConfig.kt index e030dab2a..4d1d7a597 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/ListIndexConfig.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/ListIndexConfig.kt @@ -12,7 +12,6 @@ import com.puutaro.commandclick.component.adapter.ListIndexForEditAdapter import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.ClickScriptSaver import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.ExecClickUpdate import com.puutaro.commandclick.fragment.EditFragment -import com.puutaro.commandclick.fragment_lib.edit_fragment.processor.ScriptFileSaver import com.puutaro.commandclick.proccess.js_macro_libs.edit_setting_extra.MaxStringLength import com.puutaro.commandclick.proccess.js_macro_libs.common_libs.JsActionTool import com.puutaro.commandclick.proccess.js_macro_libs.exec_handler.JsPathHandlerForQrAndListIndex @@ -20,11 +19,9 @@ import com.puutaro.commandclick.proccess.list_index_for_edit.libs.ListIndexArgsM import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.CheckItemSettingsForListIndex import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.DescSettingsForListIndex import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.FileNameKeyForListIndex -import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.ListSettingsForListIndex import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.TypeSettingsForListIndex import com.puutaro.commandclick.proccess.ubuntu.BusyboxExecutor import com.puutaro.commandclick.util.CcPathTool -import com.puutaro.commandclick.util.file.FileSystems import com.puutaro.commandclick.util.map.CmdClickMap import com.puutaro.commandclick.util.file.ReadText import com.puutaro.commandclick.util.state.SharePrefTool @@ -195,13 +192,13 @@ object ListIndexEditConfig { materialCardView.isChecked = true } - fun setFileNameTextView( + fun makeFileNameText( listIndexTypeKey: TypeSettingsForListIndex.ListIndexTypeKey, fileNameTextView: AppCompatTextView?, fileName: String, listIndexConfigMap: Map?, busyboxExecutor: BusyboxExecutor?, - ) { + ): String? { val fileNameConfigMap = CmdClickMap.createMap( listIndexConfigMap?.get( ListIndexConfigKey.NAME.key @@ -213,7 +210,7 @@ object ListIndexEditConfig { ) if (isHide) { fileNameTextView?.isVisible = false - return + return null } val fileNameBeforeCut = makeFileName( listIndexTypeKey, @@ -221,11 +218,16 @@ object ListIndexEditConfig { fileNameConfigMap, busyboxExecutor ) - fileNameTextView?.text = MaxStringLength.cut( + return MaxStringLength.cut( fileNameBeforeCut, - 100, - fileNameConfigMap.get(FileNameKeyForListIndex.ListIndexFileNameKey.LENGTH.key) + 100, + fileNameConfigMap.get(FileNameKeyForListIndex.ListIndexFileNameKey.LENGTH.key) ) +// fileNameTextView?.text = MaxStringLength.cut( +// fileNameBeforeCut, +// 100, +// fileNameConfigMap.get(FileNameKeyForListIndex.ListIndexFileNameKey.LENGTH.key) +// ) } private fun makeFileName( @@ -391,6 +393,7 @@ object ListIndexEditConfig { val key: String, ) { TYPE("type"), + LAYOUT("layout"), NAME("name"), DESC("desc"), CHECK_ITEM("checkItem"), diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/config_settings/LayoutSettingsForListIndex.kt b/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/config_settings/LayoutSettingsForListIndex.kt index 9707b4c62..611b348cd 100644 --- a/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/config_settings/LayoutSettingsForListIndex.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/config_settings/LayoutSettingsForListIndex.kt @@ -1,4 +1,83 @@ package com.puutaro.commandclick.proccess.list_index_for_edit.config_settings +import android.content.Context +import androidx.recyclerview.widget.RecyclerView +import com.puutaro.commandclick.custom_manager.PreLoadGridLayoutManager +import com.puutaro.commandclick.custom_manager.PreLoadLayoutManager +import com.puutaro.commandclick.proccess.list_index_for_edit.ListIndexEditConfig + object LayoutSettingsForListIndex { + + enum class LayoutSettingKey( + val key: String + ) { + TYPE("type"), + COL("col"), + } + + enum class LayoutTypeValueStr( + val valueStr: String + ){ + LINEAR("linear"), + GRID("grid"), + } + + fun getLayoutConfigMap( + listIndexConfigMap: Map?, + ): Map { + return ListIndexEditConfig.getConfigKeyMap( + listIndexConfigMap, + ListIndexEditConfig.ListIndexConfigKey.LAYOUT.key + ) + } + + + + fun decideLayoutType( + layoutConfigMap: Map + ): LayoutTypeValueStr { + val defaultLayoutType = + LayoutTypeValueStr.LINEAR + val layoutTypeStr = + layoutConfigMap.get(LayoutSettingKey.TYPE.key) + return LayoutTypeValueStr.values().firstOrNull { + it.valueStr == layoutTypeStr + } ?: defaultLayoutType + } + + fun setLayout( + context: Context?, + layoutConfigMap: Map, + editListRecyclerView: RecyclerView, + isReverseLayout: Boolean, + ){ + val layoutType = decideLayoutType(layoutConfigMap) + when(layoutType){ + LayoutTypeValueStr.LINEAR -> + editListRecyclerView.layoutManager = PreLoadLayoutManager( + context, + isReverseLayout, + ) + LayoutTypeValueStr.GRID -> + editListRecyclerView.layoutManager = PreLoadGridLayoutManager( + context, + decideColNum(layoutConfigMap), + isReverseLayout + ) + } + } + + private fun decideColNum( + layoutConfigMap: Map?, + ): Int { + val defaultColNum = 2 + val colNum = layoutConfigMap?.get( + LayoutSettingKey.COL.key + ) ?: return defaultColNum + return try { + colNum.toInt() + } catch (e: Exception){ + defaultColNum + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/qr/QrDialogConfig.kt b/app/src/main/java/com/puutaro/commandclick/proccess/qr/QrDialogConfig.kt index 6f8135840..456fcca19 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/qr/QrDialogConfig.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/qr/QrDialogConfig.kt @@ -31,6 +31,6 @@ object QrDialogConfig { val parentDirPath: String, val fileName: String, val fannelContentsQrLogoView: AppCompatImageView?, - val fileContentsQrLogoLinearLayout: LinearLayoutCompat? +// val fileContentsQrLogoLinearLayout: LinearLayoutCompat? ) } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/qr/qr_dialog_config/config_settings/LogoSettingKeyForQrDialog.kt b/app/src/main/java/com/puutaro/commandclick/proccess/qr/qr_dialog_config/config_settings/LogoSettingKeyForQrDialog.kt index 98d22d149..4694fe14f 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/qr/qr_dialog_config/config_settings/LogoSettingKeyForQrDialog.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/qr/qr_dialog_config/config_settings/LogoSettingKeyForQrDialog.kt @@ -1,26 +1,38 @@ package com.puutaro.commandclick.proccess.qr.qr_dialog_config.config_settings import android.content.Context +import android.graphics.Bitmap +import android.graphics.BitmapFactory import android.view.Gravity +import android.view.ViewGroup +import android.widget.RelativeLayout import androidx.appcompat.content.res.AppCompatResources import androidx.appcompat.widget.AppCompatImageView import androidx.appcompat.widget.LinearLayoutCompat +import androidx.core.view.marginBottom import androidx.fragment.app.Fragment import coil.load +import com.google.android.material.card.MaterialCardView import com.puutaro.commandclick.common.variable.path.UsePath import com.puutaro.commandclick.common.variable.res.CmdClickColor import com.puutaro.commandclick.common.variable.res.CmdClickIcons +import com.puutaro.commandclick.component.adapter.lib.ImageAdapterTool import com.puutaro.commandclick.fragment.EditFragment import com.puutaro.commandclick.proccess.edit.lib.SetReplaceVariabler +import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.LayoutSettingsForListIndex +import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.TypeSettingsForListIndex import com.puutaro.commandclick.proccess.qr.QrDialogConfig import com.puutaro.commandclick.proccess.qr.QrLogo import com.puutaro.commandclick.util.CcPathTool import com.puutaro.commandclick.util.ScreenSizeCalculator +import com.puutaro.commandclick.util.file.AssetsFileManager import com.puutaro.commandclick.util.file.ReadText +import com.puutaro.commandclick.util.image_tools.BitmapTool import com.puutaro.commandclick.util.map.CmdClickMap import com.puutaro.commandclick.util.state.SharePrefTool import java.io.File + object QrLogoSettingsForQrDialog { enum class QrLogoSettingKey( val key: String @@ -180,15 +192,34 @@ object QrLogoSettingsForQrDialog { object OneSideLength { - fun set( + fun setLayout( fragment: Fragment, - fileContentsQrLogoLinearLayout: LinearLayoutCompat?, - qrLogoConfigMap: Map + baseLinearLayoutCompat: LinearLayoutCompat?, + materialCardView: MaterialCardView?, + fileContentsQrLogoLinearLayout: RelativeLayout?, + qrLogoConfigMap: Map, + layoutType: LayoutSettingsForListIndex.LayoutTypeValueStr, ){ - val oneSideLength = culc( - fragment, - qrLogoConfigMap - ) + when(layoutType) { + LayoutSettingsForListIndex.LayoutTypeValueStr.LINEAR + -> {} + LayoutSettingsForListIndex.LayoutTypeValueStr.GRID + -> { +// val layoutParams = +// baseLinearLayoutCompat?.layoutParams as ViewGroup.MarginLayoutParams +// layoutParams.setMargins(0, 0, 0, 0) +// baseLinearLayoutCompat.requestLayout() + } + } + val oneSideLength = when(layoutType) { + LayoutSettingsForListIndex.LayoutTypeValueStr.LINEAR -> + culc( + fragment.context, + qrLogoConfigMap + ) + LayoutSettingsForListIndex.LayoutTypeValueStr.GRID -> + RelativeLayout.LayoutParams.MATCH_PARENT + } val linearLayoutParam = LinearLayoutCompat.LayoutParams( oneSideLength, oneSideLength @@ -200,35 +231,27 @@ object QrLogoSettingsForQrDialog { // "oneSideLength: ${oneSideLength}", // ).joinToString("\n\n") // ) - linearLayoutParam.setMargins(10, 10, 0, 10) + when(layoutType) { + LayoutSettingsForListIndex.LayoutTypeValueStr.LINEAR -> + linearLayoutParam.setMargins(10, 10, 0, 10) + LayoutSettingsForListIndex.LayoutTypeValueStr.GRID -> + linearLayoutParam.apply { + setMargins(0, 0, 0, 0) + } + } linearLayoutParam.gravity = Gravity.CENTER fileContentsQrLogoLinearLayout?.layoutParams = linearLayoutParam - } - private fun culc( - fragment: Fragment, - qrLogoSettingMap: Map, - ): Int { - val defaultOnsideLengthSrc = 100 - val defaultOneSideLength = ScreenSizeCalculator.toDp( - fragment.context, - defaultOnsideLengthSrc - ) - val oneSideLengthKeyName = QrLogoSettingKey.ONE_SIDE_LENGTH.key - if( - qrLogoSettingMap.isEmpty() - ) return defaultOneSideLength - return qrLogoSettingMap.get(oneSideLengthKeyName).let { - if( - it.isNullOrEmpty() - ) return@let defaultOneSideLength - try { - ScreenSizeCalculator.toDp( - fragment.context, - it.toFloat() + when(layoutType) { + LayoutSettingsForListIndex.LayoutTypeValueStr.LINEAR + -> {} + LayoutSettingsForListIndex.LayoutTypeValueStr.GRID + -> { + val cardViewLayoutParams = materialCardView?.layoutParams as ViewGroup.MarginLayoutParams + cardViewLayoutParams.setMargins(1, 1, 1, 1) + materialCardView.requestLayout() + fileContentsQrLogoLinearLayout?.setPadding( + 0, 0, 0, 0 ) -// it.toInt() - } catch (e: Exception){ - defaultOneSideLength } } } @@ -244,15 +267,24 @@ object QrLogoSettingsForQrDialog { DISABLE("disable"), } private val disableOn = "ON" + enum class ImageMacro( + val str: String, + val id: Int, + ) { + IMAGE_PATH("imagePath", -10) + } fun set( context: Context?, + filterDir: String, + listIndexTypeKey: TypeSettingsForListIndex.ListIndexTypeKey, itemName: String, fannelContentsQrLogoView: AppCompatImageView?, - fileContentsQrLogoLinearLayout: LinearLayoutCompat?, + fileContentsQrLogoLinearLayout: RelativeLayout?, qrLogoConfigMap: Map, iconConfigMap: Map, itemNameToNameColorConfigMap: Map?, + textImagePngBitMap: Bitmap, ): Boolean { if( context == null @@ -282,11 +314,111 @@ object QrLogoSettingsForQrDialog { val iconId = getIconId(iconNameColorConfigMap) ?: return false - fannelContentsQrLogoView.load( + when(iconId){ + ImageMacro.IMAGE_PATH.id -> setImagePath( + context, + fannelContentsQrLogoView, + listIndexTypeKey, + qrLogoConfigMap, + filterDir, + itemName, + textImagePngBitMap, + ) + else -> setIconOrQr( + context, + fannelContentsQrLogoView, + fileContentsQrLogoLinearLayout, + iconNameColorConfigMap, + iconId, + ) + } + return true + } + + private fun setImagePath( + context: Context, + fannelContentsQrLogoView: AppCompatImageView?, + listIndexTypeKey: TypeSettingsForListIndex.ListIndexTypeKey, + qrLogoConfigMap: Map, + filterDir: String, + itemName: String, + textImagePngBitMap: Bitmap, + ) { + val itemPath = when(listIndexTypeKey){ + TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL + -> return + TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT -> + itemName + TypeSettingsForListIndex.ListIndexTypeKey.NORMAL + -> File(filterDir, itemName).absolutePath + } +// fannelContentsQrLogoView?.load( +// itemPath +// ) + val maxHeight = culc( + context, + qrLogoConfigMap + ) + val myBitmap = makeBitMap( + itemPath, + maxHeight, + textImagePngBitMap + ) + + fannelContentsQrLogoView?.setImageBitmap(myBitmap) +// FileSystems.updateFile( +// File(UsePath.cmdclickDefaultAppDirPath, "logo.txt").absolutePath, +// listOf( +// "qrLogoConfigMap: ${qrLogoConfigMap}", +// "macheigt: ${maxHeight}", +// "listIndexTypeKey: ${listIndexTypeKey.key}", +// "filterDir: ${filterDir}", +// "itemName: ${itemName}", +// "itemPath: ${itemPath}", +// "itemPath.isFile: ${File(itemPath).isFile}", +// ).joinToString("\n\n") +// ) + return + } + + private fun makeBitMap( + itemPath: String, + maxHeight: Int, + textImagePngBitMap: Bitmap, + ): Bitmap { + val myBitmap: Bitmap = try { + BitmapFactory.decodeFile(itemPath) + } catch (e: Exception){ + textImagePngBitMap + } + if( + myBitmap.height <= maxHeight + ) return myBitmap + val resizeBitmap = BitmapTool.resizeByMaxHeight( + myBitmap, + maxHeight.toDouble(), + ) +// FileSystems.updateFile( +// File(UsePath.cmdclickDefaultAppDirPath, "log_bitmap.txt").absolutePath, +// listOf( +// "resizeBitmap: ${resizeBitmap.height}" +// ).joinToString("\n\n") +// ) + return resizeBitmap + } + + private fun setIconOrQr( + context: Context, + fannelContentsQrLogoView: AppCompatImageView?, + fileContentsQrLogoLinearLayout: RelativeLayout?, + iconNameColorConfigMap: Map?, + iconId: Int, + ){ + fannelContentsQrLogoView?.load( AppCompatResources.getDrawable(context, iconId) ) getIconColor(iconNameColorConfigMap).let { - fannelContentsQrLogoView.imageTintList = + fannelContentsQrLogoView?.imageTintList = context.getColorStateList(it) } getBkColor( @@ -295,7 +427,6 @@ object QrLogoSettingsForQrDialog { fileContentsQrLogoLinearLayout?.backgroundTintList = context.getColorStateList(it) } - return true } @@ -347,9 +478,15 @@ object QrLogoSettingsForQrDialog { if( iconName.isNullOrEmpty() ) return null - return CmdClickIcons.values().firstOrNull { - it.str == iconName - }?.id + val imageStrToIdList = CmdClickIcons.values().map { + it.str to it.id + } + ImageMacro.values().map { + it.str to it.id + } + return imageStrToIdList.firstOrNull { + val imageMacroStr = it.first + imageMacroStr == iconName + }?.second } private fun getIconColor( @@ -394,7 +531,7 @@ object QrLogoSettingsForQrDialog { } fun makeIconNameConfigMap( - editFragment: EditFragment, + editFragment: EditFragment, iconConfigMap: Map, ): Map { val nameConfigPathKey = QrIcon.NAME_CONFIG_PATH.key @@ -432,4 +569,53 @@ object QrLogoSettingsForQrDialog { DEFAULT("default"), } } + + private fun culc( + context: Context?, + qrLogoSettingMap: Map, + ): Int { + val defaultOnsideLengthSrc = 100 + val defaultOneSideLength = ScreenSizeCalculator.toDp( + context, + defaultOnsideLengthSrc + ) + val oneSideLengthKeyName = QrLogoSettingKey.ONE_SIDE_LENGTH.key + if( + qrLogoSettingMap.isEmpty() + ) return defaultOneSideLength +// FileSystems.updateFile( +// File(UsePath.cmdclickDefaultAppDirPath, "logo_oneside.txt").absolutePath, +// listOf( +// "qrLogoSettingMap: ${qrLogoSettingMap}", +// "defaultOneSideLength: ${defaultOneSideLength}", +// "onesidelength: ${qrLogoSettingMap.get(oneSideLengthKeyName).let { +// if( +// it.isNullOrEmpty() +// ) return@let defaultOneSideLength +// try { +// ScreenSizeCalculator.toDp( +// context, +// it.toFloat() +// ) +// } catch (e: Exception){ +// defaultOneSideLength +// } +// }}" +// +// ).joinToString("\n\n") +// ) + return qrLogoSettingMap.get(oneSideLengthKeyName).let { + if( + it.isNullOrEmpty() + ) return@let defaultOneSideLength + try { + ScreenSizeCalculator.toDp( + context, + it.toFloat() + ) + } catch (e: Exception){ + defaultOneSideLength + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/util/image_tools/BitmapTool.kt b/app/src/main/java/com/puutaro/commandclick/util/image_tools/BitmapTool.kt index a7607813f..5d4c5fb98 100755 --- a/app/src/main/java/com/puutaro/commandclick/util/image_tools/BitmapTool.kt +++ b/app/src/main/java/com/puutaro/commandclick/util/image_tools/BitmapTool.kt @@ -37,6 +37,20 @@ object BitmapTool { ) } + fun resizeByMaxHeight( + beforeResizeBitMap: Bitmap, + maxHeight: Double, + ): Bitmap { + val resizeScale: Double = + (maxHeight / beforeResizeBitMap.height) + return Bitmap.createScaledBitmap( + beforeResizeBitMap, + (beforeResizeBitMap.width * resizeScale).toInt(), + (beforeResizeBitMap.height * resizeScale).toInt(), + true + ) + } + fun getScreenShotFromView(v: View): Bitmap? { // create a bitmap object var screenshot: Bitmap? = null diff --git a/app/src/main/res/layout/list_index_edit_adapter_layout.xml b/app/src/main/res/layout/list_index_edit_adapter_layout.xml index 0264f550d..ebcc4f11a 100755 --- a/app/src/main/res/layout/list_index_edit_adapter_layout.xml +++ b/app/src/main/res/layout/list_index_edit_adapter_layout.xml @@ -25,10 +25,23 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" - android:background="@android:color/white" android:orientation="horizontal"> - - + + + + + + + + + + + + + + + - + +