diff --git a/.github/workflows/shell/count_download.sh b/.github/workflows/shell/count_download.sh deleted file mode 100644 index 0926008eb..000000000 --- a/.github/workflows/shell/count_download.sh +++ /dev/null @@ -1,131 +0,0 @@ -#!/bin/bash - - - -readonly WORKING_DIR_PATH=$(pwd) -readonly STATISTICS_DIR_PATH="${WORKING_DIR_PATH}/statistics" -mkdir -p "${STATISTICS_DIR_PATH}" -readonly CC_DOWNLOAD_COUNT_CSV_PATH="${STATISTICS_DIR_PATH}/download_count.csv" - -# readonly release_res="$( -# echo '{ -# "url": "https://api.github.com/repos/puutaro/CommandClick/releases/175259467", -# "assets_url": "https://api.github.com/repos/puutaro/CommandClick/releases/175259467/assets", -# "upload_url": "https://uploads.github.com/repos/puutaro/CommandClick/releases/175259467/assets{?name,label}", -# "html_url": "https://github.com/puutaro/CommandClick/releases/tag/v1.4.1", -# "id": 175259467, -# "author": { -# "login": "puutaro", -# "id": 55217593, -# "node_id": "MDQ6VXNlcjU1MjE3NTkz", -# "avatar_url": "https://avatars.githubusercontent.com/u/55217593?v=4", -# "gravatar_id": "", -# "url": "https://api.github.com/users/puutaro", -# "html_url": "https://github.com/puutaro", -# "followers_url": "https://api.github.com/users/puutaro/followers", -# "following_url": "https://api.github.com/users/puutaro/following{/other_user}", -# "gists_url": "https://api.github.com/users/puutaro/gists{/gist_id}", -# "starred_url": "https://api.github.com/users/puutaro/starred{/owner}{/repo}", -# "subscriptions_url": "https://api.github.com/users/puutaro/subscriptions", -# "organizations_url": "https://api.github.com/users/puutaro/orgs", -# "repos_url": "https://api.github.com/users/puutaro/repos", -# "events_url": "https://api.github.com/users/puutaro/events{/privacy}", -# "received_events_url": "https://api.github.com/users/puutaro/received_events", -# "type": "User", -# "site_admin": false -# }, -# "node_id": "RE_kwDOI5NAFs4Kcj9L", -# "tag_name": "v1.4.1", -# "target_commitish": "master", -# "name": "[Big update] Adopt historical UI", -# "draft": false, -# "prerelease": false, -# "created_at": "2024-09-16T14:30:09Z", -# "published_at": "2024-09-16T14:47:16Z", -# "assets": [ -# { -# "url": "https://api.github.com/repos/puutaro/CommandClick/releases/assets/192980858", -# "id": 192980858, -# "node_id": "RA_kwDOI5NAFs4LgKd6", -# "name": "CommandClick-1.4.1-release.apk", -# "label": null, -# "uploader": { -# "login": "puutaro", -# "id": 55217593, -# "node_id": "MDQ6VXNlcjU1MjE3NTkz", -# "avatar_url": "https://avatars.githubusercontent.com/u/55217593?v=4", -# "gravatar_id": "", -# "url": "https://api.github.com/users/puutaro", -# "html_url": "https://github.com/puutaro", -# "followers_url": "https://api.github.com/users/puutaro/followers", -# "following_url": "https://api.github.com/users/puutaro/following{/other_user}", -# "gists_url": "https://api.github.com/users/puutaro/gists{/gist_id}", -# "starred_url": "https://api.github.com/users/puutaro/starred{/owner}{/repo}", -# "subscriptions_url": "https://api.github.com/users/puutaro/subscriptions", -# "organizations_url": "https://api.github.com/users/puutaro/orgs", -# "repos_url": "https://api.github.com/users/puutaro/repos", -# "events_url": "https://api.github.com/users/puutaro/events{/privacy}", -# "received_events_url": "https://api.github.com/users/puutaro/received_events", -# "type": "User", -# "site_admin": false -# }, -# "content_type": "application/vnd.android.package-archive", -# "state": "uploaded", -# "size": 21654944, -# "download_count": 30, -# "created_at": "2024-09-16T17:12:18Z", -# "updated_at": "2024-09-16T17:12:25Z", -# "browser_download_url": "https://github.com/puutaro/CommandClick/releases/download/v1.4.1/CommandClick-1.4.1-release.apk" -# } -# ], -# "tarball_url": "https://api.github.com/repos/puutaro/CommandClick/tarball/v1.4.1", -# "zipball_url": "https://api.github.com/repos/puutaro/CommandClick/zipball/v1.4.1", -# "body": "[Changes]\r\n- Url history by gif\r\n- Fannel center by gif\r\n- UI by URL history captrue\r\n- Extra menu by art\r\n- Text selection system by URL catpture\r\n- Update search system \r\n- Integrate fannel install system to fannel center\r\n- Remove app manger , js manger\r\n- Remove scroll regiter menu, etx..\r\n- Integrate fannel management to fannel center\r\n- Apply original gif art to multiple functions\r\n- Adopt pin system\r\n" -# }')" -readonly release_res=$(\ - curl \ - --silent \ - --header "Accept: application/vnd.github.v3+json" \ - https://api.github.com/repos/puutaro/CommandClick/releases/latest \ -) -readonly cc_donwload_count="$(\ - echo "${release_res}" \ - | jq -r '.assets[] |.download_count' \ -)" -readonly version="$(\ - echo "${release_res}" \ - | jq -r '.tag_name' \ -)" -readonly insert_line=$(echo "${version},$(date +%Y-%m-%d),${cc_donwload_count}") -readonly cc_count_csv_con=$(\ - cat "${CC_DOWNLOAD_COUNT_CSV_PATH}"\ - | sed '1d' \ - 2>/dev/null \ -) -readonly header="version,date,download_count" -readonly body=$(cat \ - <(echo "${cc_count_csv_con}") \ - <(echo "${insert_line}") \ - | awk '{ - gsub(/^[ \t]*/, "", $0) - gsub(/[ \t]*$/, "", $0) - if(!$0) next - print $0 - }'\ - | sort -r \ - | uniq \ -) -readonly update_csv_con=$(awk \ - -v header="${header}" \ - -v body="${body}" \ -'BEGIN { - print header - print body -}') -echo "${update_csv_con}" \ - > "${CC_DOWNLOAD_COUNT_CSV_PATH}" - -echo "${CC_DOWNLOAD_COUNT_CSV_PATH}" -cat "${CC_DOWNLOAD_COUNT_CSV_PATH}" \ -| column -t -s ',' \ -| sed -r '1s/(.*)/\x1b[1;38;5;14m\1\x1b[0m/' \ No newline at end of file diff --git a/.github/workflows/shell/list/thanks_image_list.tsv b/.github/workflows/shell/list/thanks_image_list.tsv index e333de464..a0cbae784 100644 --- a/.github/workflows/shell/list/thanks_image_list.tsv +++ b/.github/workflows/shell/list/thanks_image_list.tsv @@ -16,4 +16,5 @@ c_background2_90 https://github.com/user-attachments/assets/a3665585-629b-4961-8 c_background https://github.com/user-attachments/assets/c5ce5b7f-be32-4978-8f6d-9b917eacaed9 bloom_cc_wave_bk_suisei_flip https://github.com/user-attachments/assets/b6fc3fab-0387-4c48-91fb-5de3e0b9bf7e bloom_cc_wave_bk_bottom https://github.com/user-attachments/assets/ffba7d64-9f61-4615-ba61-5142cfb12b12 -bloom_cc_wave_bk https://github.com/user-attachments/assets/f29070a5-1142-4db1-8a34-d705fd98e1a3 \ No newline at end of file +bloom_cc_wave_bk https://github.com/user-attachments/assets/f29070a5-1142-4db1-8a34-d705fd98e1a3 +internet_bk https://github.com/user-attachments/assets/ecb163ee-9c9f-421b-a36b-8127122c7903 \ No newline at end of file diff --git a/README.md b/README.md index e1b3eb30d..093cc7cd0 100755 --- a/README.md +++ b/README.md @@ -155,8 +155,8 @@ Thanks for watching by end -------- - - - - + + + + diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 56cefd630..dcfe8def6 100755 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -12,13 +12,19 @@ val versionPatch = 2 android { namespace = "com.puutaro.commandclick" - compileSdk = 33 - - packagingOptions { - resources.excludes.add("META-INF/INDEX.LIST") - resources.excludes.add("META-INF/io.netty.versions.properties") + compileSdk = 34 + + packaging { + resources { + excludes.add("META-INF/INDEX.LIST") + excludes.add("META-INF/io.netty.versions.properties") + jniLibs { + useLegacyPackaging = false + } + } } + buildFeatures { buildConfig = true } @@ -60,11 +66,14 @@ android { compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_17 + //JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_17 + //JavaVersion.VERSION_1_8 } kotlinOptions { - jvmTarget = "1.8" + jvmTarget = JavaVersion.VERSION_17.toString() + //"1.8" } // buildFeatures.compose = true dataBinding { @@ -94,30 +103,31 @@ extra["libDir"] = "${project.projectDir}/src/main/jniLibs" dependencies { + implementation("androidx.core:core-ktx:1.10.1") - implementation("androidx.appcompat:appcompat:1.6.1") + implementation("androidx.appcompat:appcompat:1.7.0") implementation("androidx.constraintlayout:constraintlayout:2.1.4") - implementation("androidx.test:core-ktx:1.5.0") - implementation("androidx.fragment:fragment-ktx:1.6.2") - implementation("androidx.activity:activity-ktx:1.7.2") + implementation("androidx.test:core-ktx:1.6.1") + implementation("androidx.fragment:fragment-ktx:1.8.4") + implementation("androidx.activity:activity-ktx:1.9.2") implementation("androidx.lifecycle:lifecycle-extensions:2.2.0") implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0") - implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2") - implementation("androidx.media:media:1.6.0") - implementation("androidx.navigation:navigation-fragment-ktx:2.6.0") + implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.6") + implementation("androidx.media:media:1.7.0") + implementation("androidx.navigation:navigation-fragment-ktx:2.8.2") implementation("androidx.recyclerview:recyclerview:1.3.2") - implementation("com.google.android.material:material:1.9.0") + implementation("com.google.android.material:material:1.12.0") testImplementation("junit:junit:4.13.2") - androidTestImplementation("androidx.test.ext:junit:1.1.5") - androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") + androidTestImplementation("androidx.test.ext:junit:1.2.1") + androidTestImplementation("androidx.test.espresso:espresso-core:3.6.1") implementation("com.termux.termux-app:termux-shared:0.117") implementation("com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava") implementation("net.yslibrary.keyboardvisibilityevent:keyboardvisibilityevent:3.0.0-RC3") implementation("com.jakewharton.threetenabp:threetenabp:1.2.1") - implementation("commons-io:commons-io:2.11.0") + implementation("commons-io:commons-io:2.13.0") implementation("com.github.omadahealth:swipy:1.2.3@aar") implementation("com.github.skydoves:colorpickerview:2.2.4") implementation("com.anggrayudi:storage:1.5.5") @@ -148,6 +158,24 @@ dependencies { implementation("ch.qos.logback:logback-classic:1.2.3") implementation("androidx.documentfile:documentfile:1.0.1") implementation("com.github.PhilJay:MPAndroidChart:v3.1.0") + implementation("com.github.gleb8k:Android-PathShapeView:1.3.2") + implementation("com.daimajia.androidanimations:library:2.4@aar") + val htextview_version = "0.1.2" +// implementation("com.github.kibotu:htextview:0.1.28") + implementation("com.github.takusemba:spotlight:2.0.5") + implementation("jp.co.cyberagent.android:gpuimage:2.1.0") + implementation("jp.wasabeef:glide-transformations:4.3.0") +// as 3.0 use implementation +// implementation ("com.hanks:htextview-base:0.1.6" ) // base library + +// implementation( "com.hanks:htextview-fade:$htextview_version") // optional +// implementation ("com.hanks:htextview-line:$htextview_version") // optional +// implementation ("com.hanks:htextview-rainbow:$htextview_version") // optional +// implementation ("com.hanks:htextview-typer:$htextview_version") // optional +// +//// implementation ("com.hanks:htextview-scale:$htextview_version") // optional +// implementation ("com.hanks:htextview-evaporate:$htextview_version") // optional +// implementation ("com.hanks:htextview-fall:$htextview_version" ) // optional testImplementation("org.jetbrains.kotlin:kotlin-test") testImplementation("org.jetbrains.kotlin:kotlin-test-junit") @@ -155,6 +183,7 @@ dependencies { debugImplementation("com.squareup.leakcanary:leakcanary-android:2.14") + // implementation("androidx.camera:camera-camera2:1.2.2") // implementation("androidx.camera:camera-lifecycle:1.2.2") // implementation("androidx.camera:camera-view:1.2.2") diff --git a/app/src/main/assets/res/gif/folda.gif b/app/src/main/assets/res/gif/folda.gif index a1e434504..8aab2c5c5 100644 Binary files a/app/src/main/assets/res/gif/folda.gif and b/app/src/main/assets/res/gif/folda.gif differ diff --git a/app/src/main/assets/res/png/button/c.png b/app/src/main/assets/res/png/button/c.png new file mode 100644 index 000000000..4b91b938a Binary files /dev/null and b/app/src/main/assets/res/png/button/c.png differ diff --git a/app/src/main/assets/res/png/confirm_dialog/o.png b/app/src/main/assets/res/png/confirm_dialog/o.png new file mode 100644 index 000000000..ce86d009f Binary files /dev/null and b/app/src/main/assets/res/png/confirm_dialog/o.png differ diff --git a/app/src/main/assets/res/png/confirm_dialog/o100.png b/app/src/main/assets/res/png/confirm_dialog/o100.png new file mode 100644 index 000000000..66c667a3c Binary files /dev/null and b/app/src/main/assets/res/png/confirm_dialog/o100.png differ diff --git a/app/src/main/assets/res/png/confirm_dialog/o150.png b/app/src/main/assets/res/png/confirm_dialog/o150.png new file mode 100644 index 000000000..34e0dacc6 Binary files /dev/null and b/app/src/main/assets/res/png/confirm_dialog/o150.png differ diff --git a/app/src/main/assets/res/png/confirm_dialog/o50.png b/app/src/main/assets/res/png/confirm_dialog/o50.png new file mode 100644 index 000000000..f8839ea27 Binary files /dev/null and b/app/src/main/assets/res/png/confirm_dialog/o50.png differ diff --git a/app/src/main/assets/res/png/confirm_dialog/x.png b/app/src/main/assets/res/png/confirm_dialog/x.png new file mode 100644 index 000000000..82ba619ac Binary files /dev/null and b/app/src/main/assets/res/png/confirm_dialog/x.png differ diff --git a/app/src/main/assets/res/png/confirm_dialog/x100.png b/app/src/main/assets/res/png/confirm_dialog/x100.png new file mode 100644 index 000000000..f3379338e Binary files /dev/null and b/app/src/main/assets/res/png/confirm_dialog/x100.png differ diff --git a/app/src/main/assets/res/png/confirm_dialog/x150.png b/app/src/main/assets/res/png/confirm_dialog/x150.png new file mode 100644 index 000000000..f6ced2bdd Binary files /dev/null and b/app/src/main/assets/res/png/confirm_dialog/x150.png differ diff --git a/app/src/main/assets/res/png/confirm_dialog/x50.png b/app/src/main/assets/res/png/confirm_dialog/x50.png new file mode 100644 index 000000000..6268168e6 Binary files /dev/null and b/app/src/main/assets/res/png/confirm_dialog/x50.png differ diff --git a/app/src/main/assets/res/png/grid_dialog/sibuki.png b/app/src/main/assets/res/png/grid_dialog/sibuki.png new file mode 100644 index 000000000..d8035e69c Binary files /dev/null and b/app/src/main/assets/res/png/grid_dialog/sibuki.png differ diff --git a/app/src/main/java/com/puutaro/commandclick/activity/MainActivity.kt b/app/src/main/java/com/puutaro/commandclick/activity/MainActivity.kt index b8bd4b047..b69268bde 100755 --- a/app/src/main/java/com/puutaro/commandclick/activity/MainActivity.kt +++ b/app/src/main/java/com/puutaro/commandclick/activity/MainActivity.kt @@ -6,6 +6,7 @@ import android.media.AudioManager import android.net.Uri import android.os.Build import android.os.Bundle +import android.util.Log import android.view.KeyEvent import android.webkit.ValueCallback import android.webkit.WebChromeClient @@ -31,7 +32,6 @@ import com.puutaro.commandclick.activity_lib.event.lib.common.ExecUpdateNoSaveUr import com.puutaro.commandclick.activity_lib.event.lib.common.ExecWifiSet import com.puutaro.commandclick.activity_lib.event.lib.common.RestartWhenPreferenceCheckErr import com.puutaro.commandclick.activity_lib.event.lib.edit.ExecFileChooser -import com.puutaro.commandclick.activity_lib.event.lib.edit.ExecOnLongPressPlayOrEditButton import com.puutaro.commandclick.activity_lib.event.lib.edit.ExecOnLongTermKeyBoardOpenAdjustForEdit import com.puutaro.commandclick.activity_lib.event.lib.edit.ExecOnToolBarVisibleChangeForEdit import com.puutaro.commandclick.activity_lib.event.lib.edit.ExecTermMinimumForEdit @@ -64,7 +64,6 @@ import com.puutaro.commandclick.fragment_lib.edit_fragment.variable.EditInitType import com.puutaro.commandclick.proccess.broadcast.BroadcastRegister import com.puutaro.commandclick.proccess.edit.lib.FilePickerTool import com.puutaro.commandclick.proccess.history.fannel_history.FannelHistoryCaptureTool -import com.puutaro.commandclick.proccess.js_macro_libs.toolbar_libs.EditLongPressType import com.puutaro.commandclick.proccess.pin.PinFannelHideShow import com.puutaro.commandclick.proccess.setting_menu_for_cmdindex.page_search.PageSearchManager import com.puutaro.commandclick.service.FannelRepoDownloadService @@ -90,8 +89,9 @@ class MainActivity: TerminalFragment.OnPageLoadPageSearchDisableListener, TerminalFragment.OnFindPageSearchResultListener, TerminalFragment.OnFileChooseListener, - TerminalFragment.OnEditTextUpdateListenerForTermFragment, - TerminalFragment.OnSpinnerUpdateListenerForTermFragment, + TerminalFragment.OnTextViewAndFannelUpdateListenerForTerm, + TerminalFragment.OnTextViewAndMapListUpdateListenerForTerm, +// TerminalFragment.OnSpinnerUpdateListenerForTermFragment, TerminalFragment.OnEditableSpinnerUpdateListenerForTermFragment, TerminalFragment.OnMultiSelectListenerForTerm, TerminalFragment.OnTermSizeMinimumListenerForTerm, @@ -102,7 +102,7 @@ class MainActivity: TerminalFragment.OnMonitorSizeChangingForTerm, TerminalFragment.OnPopStackImmediateListenerForTerm, TerminalFragment.OnCmdValSaveAndBackListenerForTerm, - TerminalFragment.OnGetFileListenerForTerm, +// TerminalFragment.OnGetFileListenerForTerm, TerminalFragment.OnGetFileListListenerForTerm, TerminalFragment.GetSdcardDirListenerForTerm, TerminalFragment.OnRestartListenerForTerm, @@ -141,7 +141,7 @@ class MainActivity: EditFragment.OnFileChooserListenerForEdit, EditFragment.OnTermSizeLongListenerForEdit, EditFragment.OnMultiSelectListenerForEdit, - EditFragment.OnLongPressPlayOrEditButtonListener, +// EditFragment.OnLongPressPlayOrEditButtonListener, EditFragment.OnLongTermKeyBoardOpenAjustListenerForEdit, EditFragment.OnUpdateNoSaveUrlPathsListenerForEdit, EditFragment.OnGetPermissionListenerForEdit, @@ -547,11 +547,11 @@ class MainActivity: activeMatchOrdinal: Int, numberOfMatches: Int ) { - ExecPageSearchResult.reflect( - this, - activeMatchOrdinal, - numberOfMatches - ) +// ExecPageSearchResult.reflect( +// this, +// activeMatchOrdinal, +// numberOfMatches +// ) } override fun onFileCoose( @@ -600,15 +600,36 @@ class MainActivity: ) } - override fun onEditTextUpdateForTermFragment( - editTextId: Int?, - variableValue: String + override fun onTextViewAndFannelForTermFragment( + indexOrParentTagName: String, + srcFragment: String, + tagName: String, + updateText: String, + isSave: Boolean, ) { - EditTextUpdaterForTerminalFragment.update( - this, - editTextId, - variableValue - ) + CoroutineScope(Dispatchers.Main).launch { + EditTextAndFannelUpdaterForTerm.update( + this@MainActivity, + indexOrParentTagName, + srcFragment, + tagName, + updateText, + isSave + ) + } + } + + override fun onTextViewAndMapListUpdateForTerm( + editListIndex: Int, + srcFragmentStr: String + ) { + CoroutineScope(Dispatchers.Main).launch { + EditTextAndMapListForTerm.update( + this@MainActivity, + editListIndex, + srcFragmentStr, + ) + } } override fun onEditableSpinnerUpdateForTermFragment(spinnerId: Int?, variableValue: String) { @@ -619,13 +640,13 @@ class MainActivity: ) } - override fun onSpinnerUpdateForTermFragment(spinnerId: Int?, variableValue: String) { - SpinnerUpdaterForTerminalFragment.update( - this, - spinnerId, - variableValue - ) - } +// override fun onSpinnerUpdateForTermFragment(spinnerId: Int?, variableValue: String) { +// SpinnerUpdaterForTerminalFragment.update( +// this, +// spinnerId, +// variableValue +// ) +// } override fun onMultiSelectForEdit( variableName: String, @@ -655,20 +676,20 @@ class MainActivity: ) } - override fun onLongPressPlayOrEditButton( - editLongPressType: EditLongPressType, - tag: String?, - searchText: String, - pageSearchToolbarButtonVariant: PageSearchToolbarButtonVariant? - ) { - ExecOnLongPressPlayOrEditButton.handle( - this, - editLongPressType, - tag, - searchText, - pageSearchToolbarButtonVariant - ) - } +// override fun onLongPressPlayOrEditButton( +// editLongPressType: EditLongPressType, +// tag: String?, +// searchText: String, +// pageSearchToolbarButtonVariant: PageSearchToolbarButtonVariant? +// ) { +// ExecOnLongPressPlayOrEditButton.handle( +// this, +// editLongPressType, +// tag, +// searchText, +// pageSearchToolbarButtonVariant +// ) +// } override fun onLongTermKeyBoardOpenAjustForEdit( weight: Float @@ -782,29 +803,29 @@ class MainActivity: ExecSettingOkButton.handle(this) } - override fun onGetFileForTerm( - parentDirPathSrc: String, - onDirectoryPickSrc: Boolean, - filterPrefixListCon: String, - filterSuffixListCon: String, - filterShellCon: String, - initialPath: String, - pickerMacro: FilePickerTool.PickerMacro?, - currentFannelName: String, - tag: String, - ) { - getFileForEdit.get( - parentDirPathSrc, - filterPrefixListCon, - filterSuffixListCon, - filterShellCon, - initialPath, - onDirectoryPickSrc, - pickerMacro, - currentFannelName, - tag, - ) - } +// override fun onGetFileForTerm( +// parentDirPathSrc: String, +// onDirectoryPickSrc: Boolean, +// filterPrefixListCon: String, +// filterSuffixListCon: String, +// filterShellCon: String, +// initialPath: String, +// pickerMacro: FilePickerTool.PickerMacro?, +// currentFannelName: String, +// tag: String, +// ) { +// getFileForEdit.get( +// parentDirPathSrc, +// filterPrefixListCon, +// filterSuffixListCon, +// filterShellCon, +// initialPath, +// onDirectoryPickSrc, +// pickerMacro, +// currentFannelName, +// tag, +// ) +// } override fun onGetFileListForTerm( onDirectoryPickSrc: Boolean, diff --git a/app/src/main/java/com/puutaro/commandclick/activity_lib/event/ExecLongClickMenuItemsforCmdIndex.kt b/app/src/main/java/com/puutaro/commandclick/activity_lib/event/ExecLongClickMenuItemsforCmdIndex.kt index b4bb82a88..f0f7dd5d5 100755 --- a/app/src/main/java/com/puutaro/commandclick/activity_lib/event/ExecLongClickMenuItemsforCmdIndex.kt +++ b/app/src/main/java/com/puutaro/commandclick/activity_lib/event/ExecLongClickMenuItemsforCmdIndex.kt @@ -1,6 +1,7 @@ package com.puutaro.commandclick.activity_lib.event import android.content.Intent +import com.blankj.utilcode.util.ToastUtils import com.puutaro.commandclick.activity.MainActivity import com.puutaro.commandclick.activity_lib.event.lib.cmdIndex.ExecCommandEdit import com.puutaro.commandclick.fragment_lib.command_index_fragment.variable.LongClickMenuItemsforCmdIndex diff --git a/app/src/main/java/com/puutaro/commandclick/activity_lib/event/ExecTermLongChangeHandlerForTerm.kt b/app/src/main/java/com/puutaro/commandclick/activity_lib/event/ExecTermLongChangeHandlerForTerm.kt index cc9050f25..ba2595f0f 100755 --- a/app/src/main/java/com/puutaro/commandclick/activity_lib/event/ExecTermLongChangeHandlerForTerm.kt +++ b/app/src/main/java/com/puutaro/commandclick/activity_lib/event/ExecTermLongChangeHandlerForTerm.kt @@ -16,10 +16,10 @@ object ExecTermLongChangeHandlerForTerm { ExecUrlLoadFragmentProccess.execUrlLoadCmdIndexFragment( activity, ) - is EditFragment -> - ExecUrlLoadFragmentProccess.execUrlLoadCmdVriableEditFragment( - activity, - ) + is EditFragment -> {} +// ExecUrlLoadFragmentProccess.execUrlLoadCmdVriableEditFragment( +// activity, +// ) else -> {} } } diff --git a/app/src/main/java/com/puutaro/commandclick/activity_lib/event/ExecToolBarButtonClickForEdit.kt b/app/src/main/java/com/puutaro/commandclick/activity_lib/event/ExecToolBarButtonClickForEdit.kt index 8fc8b4b2e..ca1d4d5c2 100755 --- a/app/src/main/java/com/puutaro/commandclick/activity_lib/event/ExecToolBarButtonClickForEdit.kt +++ b/app/src/main/java/com/puutaro/commandclick/activity_lib/event/ExecToolBarButtonClickForEdit.kt @@ -35,34 +35,34 @@ object ExecToolBarButtonClickForEdit { enableCmdEdit ) ToolbarButtonBariantForEdit.EDIT -> { - val onShortcutOff = EditFragmentArgs.Companion.OnShortcutSettingKey.OFF.key -// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( +// val onShortcutOff = EditFragmentArgs.Companion.OnShortcutSettingKey.OFF.key +//// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( +//// fannelInfoMap +//// ) +// +// val currentFannelName = FannelInfoTool.getCurrentFannelName( // fannelInfoMap // ) - - val currentFannelName = FannelInfoTool.getCurrentFannelName( - fannelInfoMap - ) - - val settingEditFragmentTag = FragmentTagManager.makeSettingValEditTag( -// currentAppDirPath, - currentFannelName, - ) - val fannelInfoMapForNext = EditFragmentArgs.createFannelInfoMap( -// currentAppDirPath, - currentFannelName, - onShortcutOff, - FannelInfoSetting.current_fannel_state.defalutStr, - ) - ExecCommandEdit.execCommandEdit( - activity, - settingEditFragmentTag, - EditFragmentArgs( - fannelInfoMapForNext, - EditFragmentArgs.Companion.EditTypeSettingsKey.SETTING_VAL_EDIT, - ), - activity.getString(R.string.edit_terminal_fragment) - ) +// +// val settingEditFragmentTag = FragmentTagManager.makeSettingValEditTag( +//// currentAppDirPath, +// currentFannelName, +// ) +// val fannelInfoMapForNext = EditFragmentArgs.createFannelInfoMap( +//// currentAppDirPath, +// currentFannelName, +// onShortcutOff, +// FannelInfoSetting.current_fannel_state.defalutStr, +// ) +// ExecCommandEdit.execCommandEdit( +// activity, +// settingEditFragmentTag, +// EditFragmentArgs( +// fannelInfoMapForNext, +// EditFragmentArgs.Companion.EditTypeSettingsKey.SETTING_VAL_EDIT, +// ), +// activity.getString(R.string.edit_terminal_fragment) +// ) } ToolbarButtonBariantForEdit.CANCEL -> { activity.supportFragmentManager.popBackStackImmediate() diff --git a/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/cmdIndex/ExecCommandEdit.kt b/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/cmdIndex/ExecCommandEdit.kt index 710ce289e..98e95a77a 100755 --- a/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/cmdIndex/ExecCommandEdit.kt +++ b/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/cmdIndex/ExecCommandEdit.kt @@ -1,5 +1,6 @@ package com.puutaro.commandclick.activity_lib.event.lib.cmdIndex +import com.blankj.utilcode.util.ToastUtils import com.puutaro.commandclick.activity.MainActivity import com.puutaro.commandclick.activity_lib.manager.WrapFragmentManager import com.puutaro.commandclick.util.state.EditFragmentArgs diff --git a/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/cmdIndex/ExecUrlLoadFragmentProccess.kt b/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/cmdIndex/ExecUrlLoadFragmentProccess.kt index 9fd71bbfd..71b6eb1cc 100755 --- a/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/cmdIndex/ExecUrlLoadFragmentProccess.kt +++ b/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/cmdIndex/ExecUrlLoadFragmentProccess.kt @@ -11,11 +11,6 @@ import com.puutaro.commandclick.activity_lib.event.lib.common.ExecTerminalLongOr import com.puutaro.commandclick.common.variable.variant.ReadLines import com.puutaro.commandclick.common.variable.settings.FannelInfoSetting import com.puutaro.commandclick.fragment.CommandIndexFragment -import com.puutaro.commandclick.fragment.EditFragment -import com.puutaro.commandclick.fragment_lib.command_index_fragment.variable.SearchSwichImage -import com.puutaro.commandclick.fragment_lib.edit_fragment.common.EditLayoutViewHideShow -import com.puutaro.commandclick.util.state.FragmentTagManager -import com.puutaro.commandclick.util.state.FannelInfoTool object ExecUrlLoadFragmentProccess { fun execUrlLoadCmdIndexFragment ( @@ -54,50 +49,50 @@ object ExecUrlLoadFragmentProccess { } - fun execUrlLoadCmdVriableEditFragment ( - activity: MainActivity, - ){ - val sharePref = FannelInfoTool.getSharePref(activity) -// val currentAppDirPath = FannelInfoTool.getStringFromFannelInfo( +// fun execUrlLoadCmdVriableEditFragment ( +// activity: MainActivity, +// ){ +// val sharePref = FannelInfoTool.getSharePref(activity) +//// val currentAppDirPath = FannelInfoTool.getStringFromFannelInfo( +//// sharePref, +//// FannelInfoSetting.current_app_dir +//// ) +// val currentFannelName = FannelInfoTool.getStringFromFannelInfo( // sharePref, -// FannelInfoSetting.current_app_dir +// FannelInfoSetting.current_fannel_name // ) - val currentFannelName = FannelInfoTool.getStringFromFannelInfo( - sharePref, - FannelInfoSetting.current_fannel_name - ) - val currentFannelState = FannelInfoTool.getStringFromFannelInfo( - sharePref, - FannelInfoSetting.current_fannel_state - ) - val cmdEditFragmentTag = FragmentTagManager.makeCmdValEditTag( -// currentAppDirPath, - currentFannelName, - currentFannelState - ) - val supportFragmentManager = activity.supportFragmentManager - val editFragment = try { - supportFragmentManager.findFragmentByTag( - cmdEditFragmentTag - ) as EditFragment - } catch(e: java.lang.Exception){ - Log.d(this.toString(), "not exist ${cmdEditFragmentTag}") - return - } - if(!editFragment.isVisible) return - EditLayoutViewHideShow.exec( - editFragment, - false - ) - val linearLayoutParam = - editFragment.binding.editFragment.layoutParams as LinearLayoutCompat.LayoutParams - if( - linearLayoutParam.weight != ReadLines.LONGTH - ) return - ExecTerminalLongOrShort.open( - cmdEditFragmentTag, - supportFragmentManager, - ) - - } +// val currentFannelState = FannelInfoTool.getStringFromFannelInfo( +// sharePref, +// FannelInfoSetting.current_fannel_state +// ) +// val cmdEditFragmentTag = FragmentTagManager.makeCmdValEditTag( +//// currentAppDirPath, +// currentFannelName, +// currentFannelState +// ) +// val supportFragmentManager = activity.supportFragmentManager +// val editFragment = try { +// supportFragmentManager.findFragmentByTag( +// cmdEditFragmentTag +// ) as EditFragment +// } catch(e: java.lang.Exception){ +// Log.d(this.toString(), "not exist ${cmdEditFragmentTag}") +// return +// } +// if(!editFragment.isVisible) return +// EditLayoutViewHideShow.exec( +// editFragment, +// false +// ) +// val linearLayoutParam = +// editFragment.binding.editFragment.layoutParams as LinearLayoutCompat.LayoutParams +// if( +// linearLayoutParam.weight != ReadLines.LONGTH +// ) return +// ExecTerminalLongOrShort.open( +// cmdEditFragmentTag, +// supportFragmentManager, +// ) +// +// } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/edit/ExecFileChooser.kt b/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/edit/ExecFileChooser.kt index b977b9f61..8bcc5ffeb 100644 --- a/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/edit/ExecFileChooser.kt +++ b/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/edit/ExecFileChooser.kt @@ -9,7 +9,7 @@ import com.puutaro.commandclick.activity.MainActivity import com.puutaro.commandclick.common.variable.variant.RequestCode import com.puutaro.commandclick.proccess.edit.lib.FilePickerTool import com.puutaro.commandclick.proccess.js_macro_libs.edit_setting_extra.EditSettingExtraArgsTool -import com.puutaro.commandclick.proccess.js_macro_libs.edit_setting_extra.FilterPathTool +import com.puutaro.commandclick.proccess.js_macro_libs.edit_setting_extra.CcFilterTool object ExecFileChooser { @@ -129,7 +129,7 @@ object ExecFileChooser { ){ val absolutePath = file.getOrNull(0) ?.getAbsolutePath(activity)?.split("\n")?.filter{ - FilterPathTool.isFilterByFile( + CcFilterTool.isFilterByFile( it, String(), filterPrefixListCon, @@ -200,7 +200,7 @@ object ExecFileChooser { ){ val absolutePath = folder.getAbsolutePath(activity) .split("\n").firstOrNull { - FilterPathTool.isFilterByDir( + CcFilterTool.isFilterByDir( it, String(), filterPrefixListCon, diff --git a/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/edit/ExecOnLongPressPlayOrEditButton.kt b/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/edit/ExecOnLongPressPlayOrEditButton.kt index 933984789..ee1258759 100755 --- a/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/edit/ExecOnLongPressPlayOrEditButton.kt +++ b/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/edit/ExecOnLongPressPlayOrEditButton.kt @@ -3,33 +3,32 @@ package com.puutaro.commandclick.activity_lib.event.lib.edit import com.puutaro.commandclick.activity.MainActivity import com.puutaro.commandclick.activity_lib.event.PageSearchToolbarHandler import com.puutaro.commandclick.common.variable.variant.PageSearchToolbarButtonVariant -import com.puutaro.commandclick.proccess.js_macro_libs.toolbar_libs.EditLongPressType object ExecOnLongPressPlayOrEditButton { - fun handle( - activity: MainActivity, - editLongPressType: EditLongPressType, - tag: String?, - searchText: String, - pageSearchToolbarButtonVariant: PageSearchToolbarButtonVariant? - ){ - when(editLongPressType){ - EditLongPressType.PAGE_SEARCH -> { - if( - pageSearchToolbarButtonVariant == null - ) return - PageSearchToolbarHandler.handle( - activity, - pageSearchToolbarButtonVariant, - tag, - searchText, - - ) - } - EditLongPressType.WEB_SEARCH -> { - - } - else -> {} - } - } +// fun handle( +// activity: MainActivity, +// editLongPressType: EditLongPressType, +// tag: String?, +// searchText: String, +// pageSearchToolbarButtonVariant: PageSearchToolbarButtonVariant? +// ){ +// when(editLongPressType){ +// EditLongPressType.PAGE_SEARCH -> { +// if( +// pageSearchToolbarButtonVariant == null +// ) return +// PageSearchToolbarHandler.handle( +// activity, +// pageSearchToolbarButtonVariant, +// tag, +// searchText, +// +// ) +// } +// EditLongPressType.WEB_SEARCH -> { +// +// } +// else -> {} +// } +// } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/edit/GetFileForEdit.kt b/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/edit/GetFileForEdit.kt index 706b88316..cb08a7d66 100644 --- a/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/edit/GetFileForEdit.kt +++ b/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/edit/GetFileForEdit.kt @@ -1,17 +1,17 @@ package com.puutaro.commandclick.activity_lib.event.lib.edit -import android.content.Context +import androidx.fragment.app.Fragment +import androidx.recyclerview.widget.RecyclerView import com.anggrayudi.storage.SimpleStorageHelper import com.anggrayudi.storage.file.FileFullPath import com.anggrayudi.storage.file.getAbsolutePath import com.puutaro.commandclick.activity.MainActivity import com.puutaro.commandclick.common.variable.variant.RequestCode -import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.ExecAddForListIndexAdapter +import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.ExecAddForEditListAdapter import com.puutaro.commandclick.fragment.EditFragment import com.puutaro.commandclick.proccess.edit.lib.FilePickerTool -import com.puutaro.commandclick.proccess.js_macro_libs.edit_setting_extra.FilterPathTool -import com.puutaro.commandclick.proccess.list_index_for_edit.ListIndexEditConfig -import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.TypeSettingsForListIndex +import com.puutaro.commandclick.proccess.js_macro_libs.edit_setting_extra.CcFilterTool +import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.ListSettingsForListIndex import com.puutaro.commandclick.util.state.FannelInfoTool import com.puutaro.commandclick.util.state.TargetFragmentInstance import java.io.File @@ -23,6 +23,10 @@ class GetFileForEdit( private var prefixSuffixSeparator = "&" fun get( + fragment: Fragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + editListRecyclerView: RecyclerView, parentDirPath: String, filterPrefixListCon: String, filterSuffixListCon: String, @@ -35,6 +39,10 @@ class GetFileForEdit( ){ when (onDirectoryPick) { true -> execGetDir( + fragment, + fannelInfoMap, + setReplaceVariableMap, + editListRecyclerView, parentDirPath, filterPrefixListCon, filterSuffixListCon, @@ -45,6 +53,10 @@ class GetFileForEdit( tag, ) else -> execGetFile( + fragment, + fannelInfoMap, + setReplaceVariableMap, + editListRecyclerView, parentDirPath, filterPrefixListCon, filterSuffixListCon, @@ -58,6 +70,10 @@ class GetFileForEdit( } private fun execGetDir( + fragment: Fragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + editListRecyclerView: RecyclerView, parentDirPath: String, filterPrefixListCon: String, filterSuffixListCon: String, @@ -82,7 +98,7 @@ class GetFileForEdit( requestCode, folder -> val absolutePath = folder.getAbsolutePath(activity) .split("\n").filter { - FilterPathTool.isFilterByDir( + CcFilterTool.isFilterByDir( it, parentDirPath, filterPrefixListCon, @@ -98,6 +114,10 @@ class GetFileForEdit( absolutePath, ) registerFileHandler( + fragment, + fannelInfoMap, + setReplaceVariableMap, + editListRecyclerView, absolutePath, true, ) @@ -105,6 +125,10 @@ class GetFileForEdit( } private fun execGetFile( + fragment: Fragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + editListRecyclerView: RecyclerView, parentDirPath: String, filterPrefixListCon: String, filterSuffixListCon: String, @@ -134,7 +158,7 @@ class GetFileForEdit( requestCode, file -> file.getOrNull(0) ?.getAbsolutePath(activity)?.split("\n")?.filter{ - FilterPathTool.isFilterByFile( + CcFilterTool.isFilterByFile( it, parentDirPath, filterPrefixListCon, @@ -150,6 +174,10 @@ class GetFileForEdit( it, ) registerFileHandler( + fragment, + fannelInfoMap, + setReplaceVariableMap, + editListRecyclerView, it, false, ) @@ -158,26 +186,35 @@ class GetFileForEdit( } } - private fun execGetForNormal( - editFragment: EditFragment, - sourceFilePath: String, - ){ - ExecAddForListIndexAdapter.execAddByCopyFileHere( - editFragment, - sourceFilePath, - ) - } +// private fun execGetForNormal( +// editFragment: EditFragment, +// sourceFilePath: String, +// ){ +// ExecAddForListIndexAdapter.execAddByCopyFileHere( +// editFragment, +// sourceFilePath, +// ) +// } private fun execGetForTsv( - editFragment: EditFragment, + fragment: Fragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + editListRecyclerView: RecyclerView, sourceFilePath: String, ){ val sourceScriptFilePathObj = File(sourceFilePath) val sourceScriptName = sourceScriptFilePathObj.name - val insertLine = "${sourceScriptName}\t${sourceFilePath}" - ExecAddForListIndexAdapter.execAddForTsv( - editFragment, - insertLine + val insertLineMap = mapOf( + ListSettingsForListIndex.MapListPathManager.Key.SRC_TITLE.key to sourceScriptName, + ListSettingsForListIndex.MapListPathManager.Key.SRC_CON.key to sourceFilePath, + ) + ExecAddForEditListAdapter.execAddForEditList( + fragment.context, + fannelInfoMap, + setReplaceVariableMap, + editListRecyclerView, + insertLineMap ) } @@ -205,30 +242,41 @@ class GetFileForEdit( } private fun registerFileHandler( + fragment: Fragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + editListRecyclerView: RecyclerView, sourceFileOrDirPath: String, onDirectoryPick: Boolean, ){ val editFragment = getEditFragment() ?: return - val type = ListIndexEditConfig.getListIndexType( - editFragment +// val type = ListIndexEditConfig.getListIndexType( +// editFragment +// ) + execGetForTsv( + fragment, + fannelInfoMap, + setReplaceVariableMap, + editListRecyclerView, + sourceFileOrDirPath, ) - when(type){ -// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL -// -> {} - TypeSettingsForListIndex.ListIndexTypeKey.NORMAL - -> { - if(onDirectoryPick) return - execGetForNormal( - editFragment, - sourceFileOrDirPath, - ) - } - TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT - -> execGetForTsv( - editFragment, - sourceFileOrDirPath, - ) - } +// when(type){ +//// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL +//// -> {} +// TypeSettingsForListIndex.ListIndexTypeKey.NORMAL +// -> { +// if(onDirectoryPick) return +// execGetForNormal( +// editFragment, +// sourceFileOrDirPath, +// ) +// } +// TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT +// -> execGetForTsv( +// editFragment, +// sourceFileOrDirPath, +// ) +// } } } diff --git a/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/edit/GetFileListForEdit.kt b/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/edit/GetFileListForEdit.kt index 36400aa1f..0e892909c 100644 --- a/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/edit/GetFileListForEdit.kt +++ b/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/edit/GetFileListForEdit.kt @@ -1,17 +1,14 @@ package com.puutaro.commandclick.activity_lib.event.lib.edit -import android.content.Context import com.anggrayudi.storage.SimpleStorageHelper import com.anggrayudi.storage.file.FileFullPath import com.anggrayudi.storage.file.getAbsolutePath import com.puutaro.commandclick.activity.MainActivity import com.puutaro.commandclick.common.variable.variant.RequestCode -import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.ExecAddForListIndexAdapter +import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.ExecAddForEditListAdapter import com.puutaro.commandclick.fragment.EditFragment import com.puutaro.commandclick.proccess.edit.lib.FilePickerTool -import com.puutaro.commandclick.proccess.js_macro_libs.edit_setting_extra.FilterPathTool -import com.puutaro.commandclick.proccess.list_index_for_edit.ListIndexEditConfig -import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.TypeSettingsForListIndex +import com.puutaro.commandclick.proccess.js_macro_libs.edit_setting_extra.CcFilterTool import com.puutaro.commandclick.util.file.FileSystems import com.puutaro.commandclick.util.state.FannelInfoTool import com.puutaro.commandclick.util.state.TargetFragmentInstance @@ -94,7 +91,7 @@ class GetFileListForEdit ( ): List { val dirList = FileSystems.showDirList(srcDirPath) return dirList.filter { - FilterPathTool.isFilterByDir( + CcFilterTool.isFilterByDir( it, srcDirPath, filterPrefixListCon, @@ -113,7 +110,7 @@ class GetFileListForEdit ( ): List { val fileList = FileSystems.sortedFiles(srcDirPath) return fileList.filter { - FilterPathTool.isFilterByFile( + CcFilterTool.isFilterByFile( it, srcDirPath, filterPrefixListCon, @@ -132,7 +129,7 @@ class GetFileListForEdit ( val insertFileObj = File(it) "${insertFileObj.name}\t${insertFileObj.absolutePath}" } - ExecAddForListIndexAdapter.execAddListForTsv( + ExecAddForEditListAdapter.execAddListForTsv( editFragment, updateInsertLineList ) @@ -169,9 +166,9 @@ class GetFileListForEdit ( ){ val editFragment = getEditFragment() ?: return - val type = ListIndexEditConfig.getListIndexType( - editFragment - ) +// val type = ListIndexEditConfig.getListIndexType( +// editFragment +// ) // FileSystems.writeFile( // File(UsePath.cmdclickDefaultAppDirPath, "getfile_registerFileHandler.txt").absolutePath, // listOf( @@ -181,28 +178,32 @@ class GetFileListForEdit ( // "type: ${type}", // ).joinToString("\n") // ) - when(type){ -// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL -// -> {} - TypeSettingsForListIndex.ListIndexTypeKey.NORMAL - -> { - if(onDirectoryPick) { - ExecAddForListIndexAdapter.execAddByCopyDirListHere( - editFragment, - srcFileOrDirList - ) - return - } - ExecAddForListIndexAdapter.execAddByCopyFileListHere( - editFragment, - srcFileOrDirList - ) - } - TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT - -> execGetFileOrDirListForTsv( - editFragment, - srcFileOrDirList, - ) - } + execGetFileOrDirListForTsv( + editFragment, + srcFileOrDirList, + ) +// when(type){ +//// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL +//// -> {} +// TypeSettingsForListIndex.ListIndexTypeKey.NORMAL +// -> { +// if(onDirectoryPick) { +// ExecAddForListIndexAdapter.execAddByCopyDirListHere( +// editFragment, +// srcFileOrDirList +// ) +// return +// } +// ExecAddForListIndexAdapter.execAddByCopyFileListHere( +// editFragment, +// srcFileOrDirList +// ) +// } +// TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT +// -> execGetFileOrDirListForTsv( +// editFragment, +// srcFileOrDirList, +// ) +// } } } diff --git a/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/edit/MultiSelectDialogForEdit.kt b/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/edit/MultiSelectDialogForEdit.kt index 32897ec55..045ebc986 100755 --- a/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/edit/MultiSelectDialogForEdit.kt +++ b/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/edit/MultiSelectDialogForEdit.kt @@ -70,13 +70,13 @@ object MultiSelectDialogForEdit { } else editFragmentSource if(editFragment == null) return val editBinding = editFragment.binding - val editLinearLayout = editBinding.editLinearLayout - val editTextInEditFragment = editLinearLayout.findViewById(editTextId) +// val editLinearLayout = editBinding.editLinearLayout +// val editTextInEditFragment = editLinearLayout.findViewById(editTextId) val selectString = selectedIds.map { updatedMultiModelArray[it].name }.joinToString(",") - editTextInEditFragment.setText(selectString) +// editTextInEditFragment.setText(selectString) } override fun onCancel() {} diff --git a/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/terminal/EditTextAndFannelUpdaterForTerm.kt b/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/terminal/EditTextAndFannelUpdaterForTerm.kt new file mode 100755 index 000000000..57eeef4d9 --- /dev/null +++ b/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/terminal/EditTextAndFannelUpdaterForTerm.kt @@ -0,0 +1,245 @@ +package com.puutaro.commandclick.activity_lib.event.lib.terminal + +import android.widget.FrameLayout +import androidx.appcompat.widget.AppCompatTextView +import androidx.appcompat.widget.LinearLayoutCompat +import androidx.core.view.children +import com.puutaro.commandclick.R +import com.puutaro.commandclick.activity.MainActivity +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter +import com.puutaro.commandclick.custom_view.OutlineTextView +import com.puutaro.commandclick.fragment.EditFragment +import com.puutaro.commandclick.fragment_lib.edit_fragment.common.EditComponent +import com.puutaro.commandclick.fragment_lib.terminal_fragment.proccess.EditListRecyclerViewGetter +import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.ListSettingsForListIndex +import com.puutaro.commandclick.util.map.CmdClickMap +import com.puutaro.commandclick.util.state.TargetFragmentInstance +import com.puutaro.commandclick.util.str.PairListTool + +object EditTextAndFannelUpdaterForTerm { + fun update( + activity: MainActivity, + indexOrParentTagName: String, + srcFragmentStr: String, + tagName: String, + updateText: String, + isSave: Boolean, + ) { + if( + indexOrParentTagName.isEmpty() + || tagName.isEmpty() + ) return + val editListIndex = try { + val editListSrc = indexOrParentTagName.toInt() + when(editListSrc < 0){ + true -> null + else -> editListSrc + } + } catch (e: Exception){ + null + } + val terminalFragment = TargetFragmentInstance.getCurrentTerminalFragment( + activity + ) ?: return + val editListRecyclerView = EditListRecyclerViewGetter.get( + terminalFragment, + srcFragmentStr + ) ?: return + val editComponentListAdapter = + editListRecyclerView.adapter as EditComponentListAdapter + if(editListIndex is Int) { + val holder = editListRecyclerView.findViewHolderForAdapterPosition( + editListIndex + ) as EditComponentListAdapter.ListIndexListViewHolder + val materialCardView = holder.materialCardView + val frameLayout = materialCardView.findViewWithTag( + tagName + ) + val textView = frameLayout.children.firstOrNull { + view -> + view is OutlineTextView + } as? OutlineTextView + val lineMap = editComponentListAdapter.lineMapList.get(editListIndex) + holder.srcTitle = lineMap.get( + ListSettingsForListIndex.MapListPathManager.Key.SRC_TITLE.key + ) ?: String() + holder.srcCon = lineMap.get( + ListSettingsForListIndex.MapListPathManager.Key.SRC_CON.key + ) ?: String() + holder.srcImage = lineMap.get( + ListSettingsForListIndex.MapListPathManager.Key.SRC_IMAGE.key + ) ?: String() + + UpdateAndSaveMainFannel.updateAndSave( + editComponentListAdapter, + holder.keyPairListConMap, + tagName, + holder.srcTitle, + holder.srcCon, + holder.srcImage, + editListIndex, + updateText, + textView, + isSave, + ) + return + } + +// val editToolbarTag = activity.getString( +// R.string.edit_toolbar_tag +// ) + val srcFragmentEnum = EditListRecyclerViewGetter.RecyclerViewFragment.values().firstOrNull { + it.frag == srcFragmentStr + } ?: return + val linearLayout = when(srcFragmentEnum){ + EditListRecyclerViewGetter.RecyclerViewFragment.EDIT + -> { + val cmdEditFragmentTag = TargetFragmentInstance.getCmdEditFragmentTag( + activity + ) + val editFragment = TargetFragmentInstance.getCurrentBottomFragment( + activity, + cmdEditFragmentTag + ).let { + fragment -> + if( + fragment !is EditFragment + ) return@let null + fragment + } + editFragment?.binding?.editFooterLinearlayout?.findViewWithTag( + indexOrParentTagName + ) + } + EditListRecyclerViewGetter.RecyclerViewFragment.WEB + -> { + terminalFragment.editListDialog?.findViewById( + R.id.edit_list_dialog_footer_linearlayout + ) + } + } + val noSignIndex = -1 + val frameLayout = linearLayout?.findViewWithTag( + tagName + ) + val textView = frameLayout?.children?.firstOrNull { + view -> + view is OutlineTextView + } as? OutlineTextView + UpdateAndSaveMainFannel.updateAndSave( + editComponentListAdapter, + editComponentListAdapter.footerKeyPairListConMap, + tagName, + tagName, + tagName, + tagName, + noSignIndex, + updateText, + textView, + isSave, + ) + } + + object UpdateAndSaveMainFannel { + fun updateAndSave( + editComponentListAdapter: EditComponentListAdapter, + keyPairListConMap: Map, + tagName: String, + srcTitle: String, + srcCon: String, + srcImage: String, + editListIndex: Int, + updateText: String, + textView: OutlineTextView?, + isSave: Boolean, + ) { + val linearFrameKeyPairsListConSrc = keyPairListConMap.get( + tagName + ) + val linearFrameKeyPairsListCon = EditComponent.Template.ReplaceHolder.replaceHolder( + linearFrameKeyPairsListConSrc, + srcTitle, + srcCon, + srcImage, + editListIndex, + ) + val linearFrameKeyPairsList = EditComponentListAdapter.makeLinearFrameKeyPairsList( + linearFrameKeyPairsListCon, + ) + val textMap = PairListTool.getValue( + linearFrameKeyPairsList, + EditComponent.Template.EditComponentKey.TEXT.key + ).let { + CmdClickMap.createMap( + it, + EditComponent.Template.keySeparator, + ).toMap() + } + val text = EditComponent.Template.TextManager.makeText( + editComponentListAdapter.fannelInfoMap, + editComponentListAdapter.setReplaceVariableMap, + editComponentListAdapter.busyboxExecutor, + textMap, + updateText + ) + textView?.text = text + execUpdateAndSave( + textView, + editComponentListAdapter, + tagName, + updateText, + isSave, + ) + } + + private fun execUpdateAndSave( + textView: AppCompatTextView?, + editComponentListAdapter: EditComponentListAdapter, + tagName: String, + updateText: String, + isSave: Boolean, + ) { + val isNotUpdate = + editComponentListAdapter.totalSettingValMap.get(tagName).isNullOrEmpty() +// FileSystems.writeFile( +// File(UsePath.cmdclickDefaultAppDirPath, "lUpdatetextView.txt").absolutePath, +// listOf( +// "totalSettingValMap: ${editComponentListAdapter.totalSettingValMap}", +// "tagName: ${tagName}", +// "isNotUpdate: ${isNotUpdate}", +// ).joinToString("\n") +// ) + if ( + isNotUpdate + ) return + editComponentListAdapter.updateMainFannelList( + tagName, + updateText + ) + editComponentListAdapter.totalSettingValMap.get(tagName).let { + textView?.setAutofillHints(updateText) + } +// FileSystems.writeFile( +// File(UsePath.cmdclickDefaultAppDirPath, "lUpdatetextView_saved00.txt").absolutePath, +// listOf( +// "totalSettingValMap: ${editComponentListAdapter.totalSettingValMap}", +// "tagName: ${tagName}", +// "isUpdate: ${isNotUpdate}", +// "fannelContentsList: ${editComponentListAdapter.fannelContentsList}", +// "isSave: ${isSave}", +// ).joinToString("\n") +// ) + if (!isSave) return + editComponentListAdapter.saveFannelCon() +// FileSystems.writeFile( +// File(UsePath.cmdclickDefaultAppDirPath, "lUpdatetextView_saved.txt").absolutePath, +// listOf( +// "totalSettingValMap: ${editComponentListAdapter.totalSettingValMap}", +// "tagName: ${tagName}", +// "isUpdate: ${isNotUpdate}", +// "fannelContentsList: ${editComponentListAdapter.fannelContentsList}" +// ).joinToString("\n") +// ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/terminal/EditTextAndMapListForTerm.kt b/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/terminal/EditTextAndMapListForTerm.kt new file mode 100644 index 000000000..3c8b7c9b0 --- /dev/null +++ b/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/terminal/EditTextAndMapListForTerm.kt @@ -0,0 +1,81 @@ +package com.puutaro.commandclick.activity_lib.event.lib.terminal + +import android.content.Context +import androidx.recyclerview.widget.RecyclerView +import com.blankj.utilcode.util.ToastUtils +import com.puutaro.commandclick.activity.MainActivity +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter +import com.puutaro.commandclick.fragment_lib.terminal_fragment.proccess.EditListRecyclerViewGetter +import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.ListSettingsForListIndex +import com.puutaro.commandclick.util.file.MapListFileRenamer +import com.puutaro.commandclick.util.file.ReadText +import com.puutaro.commandclick.util.map.CmdClickMap +import com.puutaro.commandclick.util.map.FilePrefixGetter +import com.puutaro.commandclick.util.state.TargetFragmentInstance + +object EditTextAndMapListForTerm { + + fun update( + activity: MainActivity, + editListIndex: Int, + srcFragmentStr: String, + ) { + if( + editListIndex < 0 + ) return + val terminalFragment = TargetFragmentInstance.getCurrentTerminalFragment( + activity + ) ?: return + val editListRecyclerView = EditListRecyclerViewGetter.get( + terminalFragment, + srcFragmentStr + ) ?: return + ExecRenameFile.rename( + activity, + editListRecyclerView, + editListIndex, + ) + return + } + + + private object ExecRenameFile { + fun rename( + context: Context?, + editListRecyclerView: RecyclerView, + listIndexPosition: Int, + ) { + val editComponentListAdapter = + editListRecyclerView.adapter as EditComponentListAdapter + val mapListSeparator = ListSettingsForListIndex.MapListPathManager.mapListSeparator + val selectedLineMap = + editComponentListAdapter.lineMapList.getOrNull( + listIndexPosition + ) ?: return + val mapListPath = FilePrefixGetter.get( + editComponentListAdapter.fannelInfoMap, + editComponentListAdapter.setReplaceVariableMap, + editComponentListAdapter.editListMap, + ListSettingsForListIndex.ListSettingKey.MAP_LIST_PATH.key, + ) ?: String() + val isExist = ReadText( + mapListPath + ).textToList().map { + CmdClickMap.createMap( + it, + mapListSeparator + ).toMap() + }.contains(selectedLineMap) + if(!isExist){ + ToastUtils.showShort("No exist") + return + } + MapListFileRenamer.rename( + context, + editListRecyclerView, + mapListPath, + selectedLineMap + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/terminal/EditTextUpdaterForTerminalFragment.kt b/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/terminal/EditTextUpdaterForTerminalFragment.kt deleted file mode 100755 index ed2ed79b3..000000000 --- a/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/terminal/EditTextUpdaterForTerminalFragment.kt +++ /dev/null @@ -1,53 +0,0 @@ -package com.puutaro.commandclick.activity_lib.event.lib.terminal - -import android.content.Context -import android.util.Log -import com.puutaro.commandclick.activity.MainActivity -import com.puutaro.commandclick.common.variable.settings.FannelInfoSetting -import com.puutaro.commandclick.util.edit_tool.CcEditComponent -import com.puutaro.commandclick.util.state.FannelInfoTool -import com.puutaro.commandclick.util.state.TargetFragmentInstance -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch - -object EditTextUpdaterForTerminalFragment { - fun update( - activity: MainActivity, - editTextId: Int?, - variableValue: String - ) { - if(editTextId == null) return - val sharePref = FannelInfoTool.getSharePref(activity) -// val currentAppDirPath = FannelInfoTool.getStringFromFannelInfo( -// sharePref, -// FannelInfoSetting.current_app_dir -// ) - val currentFannelName = FannelInfoTool.getStringFromFannelInfo( - sharePref, - FannelInfoSetting.current_fannel_name - ) - val fannelState = FannelInfoTool.getStringFromFannelInfo( - sharePref, - FannelInfoSetting.current_fannel_state - ) - val editExecuteFragment = TargetFragmentInstance.getCurrentEditFragmentFromActivity( - activity, -// currentAppDirPath, - currentFannelName, - fannelState - ) ?: return - try { - CoroutineScope(Dispatchers.Main).launch { - val editTextInEditFragment = - CcEditComponent.findEditTextView( - editTextId, - CcEditComponent.makeEditLinearLayoutList(editExecuteFragment) - ) ?: return@launch - editTextInEditFragment.setText(variableValue) - } - } catch(e: Exception){ - Log.e("edit", e.toString()) - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/terminal/EditableSpinnerUpdaterForTerminalFragment.kt b/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/terminal/EditableSpinnerUpdaterForTerminalFragment.kt index da3910b1a..a038b2cf8 100755 --- a/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/terminal/EditableSpinnerUpdaterForTerminalFragment.kt +++ b/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/terminal/EditableSpinnerUpdaterForTerminalFragment.kt @@ -41,7 +41,8 @@ object EditableSpinnerUpdaterForTerminalFragment { fannelState ) val binding = editExecuteFragment?.binding ?: return - val editLinearLayout = binding.editLinearLayout + val editLinearLayout = binding.editFragment +// binding.editLinearLayout try { val spinnerInEditFragment = editLinearLayout.findViewById(spinnerId) val adapter = spinnerInEditFragment.adapter as ArrayAdapter diff --git a/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/terminal/ExecPageSearchResult.kt b/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/terminal/ExecPageSearchResult.kt index 778d109d7..b84630772 100755 --- a/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/terminal/ExecPageSearchResult.kt +++ b/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/terminal/ExecPageSearchResult.kt @@ -9,74 +9,74 @@ import com.puutaro.commandclick.fragment.EditFragment import com.puutaro.commandclick.util.state.FragmentTagManager import com.puutaro.commandclick.util.state.FannelInfoTool -object ExecPageSearchResult { - fun reflect( - activity: MainActivity, - activeMatchOrdinal: Int, - numberOfMatches: Int - ) { - val cmdIndexFragment = try { - activity.supportFragmentManager.findFragmentByTag( - activity.getString(R.string.command_index_fragment) - ) as CommandIndexFragment - } catch (e: Exception) { - null - } - val sharePref = FannelInfoTool.getSharePref(activity) -// val currentAppDirPath = FannelInfoTool.getStringFromFannelInfo( +//object ExecPageSearchResult { +// fun reflect( +// activity: MainActivity, +// activeMatchOrdinal: Int, +// numberOfMatches: Int +// ) { +// val cmdIndexFragment = try { +// activity.supportFragmentManager.findFragmentByTag( +// activity.getString(R.string.command_index_fragment) +// ) as CommandIndexFragment +// } catch (e: Exception) { +// null +// } +// val sharePref = FannelInfoTool.getSharePref(activity) +//// val currentAppDirPath = FannelInfoTool.getStringFromFannelInfo( +//// sharePref, +//// FannelInfoSetting.current_app_dir +//// ) +// val currentFannelName = FannelInfoTool.getStringFromFannelInfo( // sharePref, -// FannelInfoSetting.current_app_dir +// FannelInfoSetting.current_fannel_name // ) - val currentFannelName = FannelInfoTool.getStringFromFannelInfo( - sharePref, - FannelInfoSetting.current_fannel_name - ) - val currentFannelState = FannelInfoTool.getStringFromFannelInfo( - sharePref, - FannelInfoSetting.current_fannel_state - ) - val cmdEditFragmentTag = FragmentTagManager.makeCmdValEditTag( -// currentAppDirPath, - currentFannelName, - currentFannelState - ) - val cmdEditFragment = try { - activity.supportFragmentManager.findFragmentByTag( - cmdEditFragmentTag - ) as EditFragment - } catch (e: Exception) { - null - } - val isVisibleCommandIndexFragment = cmdIndexFragment?.isVisible == true - val isVisibleCmdEditFragment = cmdEditFragment?.isVisible == true - if( - isVisibleCommandIndexFragment - && isVisibleCmdEditFragment - ) return - if( - isVisibleCommandIndexFragment - && cmdIndexFragment != null - ){ - execReflectForCmdIndex( - activity, - activeMatchOrdinal, - numberOfMatches, - cmdIndexFragment, - ) - return - } - if( - cmdEditFragment == null - ) return - execReflectForCmdEdit( - activity, - activeMatchOrdinal, - numberOfMatches, - cmdEditFragment, - ) - - } -} +// val currentFannelState = FannelInfoTool.getStringFromFannelInfo( +// sharePref, +// FannelInfoSetting.current_fannel_state +// ) +// val cmdEditFragmentTag = FragmentTagManager.makeCmdValEditTag( +//// currentAppDirPath, +// currentFannelName, +// currentFannelState +// ) +// val cmdEditFragment = try { +// activity.supportFragmentManager.findFragmentByTag( +// cmdEditFragmentTag +// ) as EditFragment +// } catch (e: Exception) { +// null +// } +// val isVisibleCommandIndexFragment = cmdIndexFragment?.isVisible == true +// val isVisibleCmdEditFragment = cmdEditFragment?.isVisible == true +// if( +// isVisibleCommandIndexFragment +// && isVisibleCmdEditFragment +// ) return +// if( +// isVisibleCommandIndexFragment +// && cmdIndexFragment != null +// ){ +// execReflectForCmdIndex( +// activity, +// activeMatchOrdinal, +// numberOfMatches, +// cmdIndexFragment, +// ) +// return +// } +// if( +// cmdEditFragment == null +// ) return +//// execReflectForCmdEdit( +//// activity, +//// activeMatchOrdinal, +//// numberOfMatches, +//// cmdEditFragment, +//// ) +// +// } +//} private fun execReflectForCmdIndex( activity: MainActivity, @@ -100,24 +100,24 @@ private fun execReflectForCmdIndex( } } -private fun execReflectForCmdEdit( - activity: MainActivity, - activeMatchOrdinal: Int, - numberOfMatches: Int, - cmdEditFragment: EditFragment, -){ - val binding = cmdEditFragment.binding - val pageSearch = binding.pageSearch - val cmdEditSearchTotal = pageSearch.cmdindexSearchTotal - val displayActivePerTotal = "${activeMatchOrdinal}/${numberOfMatches}" - cmdEditSearchTotal.setText(displayActivePerTotal) - if (numberOfMatches == 0) { - cmdEditSearchTotal.setTextColor( - activity.getColor(com.termux.shared.R.color.dark_red) - ) - } else { - cmdEditSearchTotal.setTextColor( - activity.getColor(R.color.fill_gray) - ) - } -} \ No newline at end of file +//private fun execReflectForCmdEdit( +// activity: MainActivity, +// activeMatchOrdinal: Int, +// numberOfMatches: Int, +// cmdEditFragment: EditFragment, +//){ +// val binding = cmdEditFragment.binding +// val pageSearch = binding.pageSearch +// val cmdEditSearchTotal = pageSearch.cmdindexSearchTotal +// val displayActivePerTotal = "${activeMatchOrdinal}/${numberOfMatches}" +// cmdEditSearchTotal.setText(displayActivePerTotal) +// if (numberOfMatches == 0) { +// cmdEditSearchTotal.setTextColor( +// activity.getColor(com.termux.shared.R.color.dark_red) +// ) +// } else { +// cmdEditSearchTotal.setTextColor( +// activity.getColor(R.color.fill_gray) +// ) +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/terminal/ExecSetToolbarButtonImage.kt b/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/terminal/ExecSetToolbarButtonImage.kt index 10d1824d5..e70eafc09 100644 --- a/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/terminal/ExecSetToolbarButtonImage.kt +++ b/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/terminal/ExecSetToolbarButtonImage.kt @@ -6,10 +6,8 @@ import android.graphics.Color import android.graphics.drawable.AnimationDrawable import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Drawable -import android.widget.FrameLayout import android.widget.ImageView import androidx.appcompat.widget.AppCompatImageView -import androidx.core.view.children import com.bumptech.glide.Glide import com.bumptech.glide.RequestBuilder import com.bumptech.glide.load.engine.DiskCacheStrategy @@ -20,7 +18,6 @@ import com.puutaro.commandclick.common.variable.res.CmdClickIcons import com.puutaro.commandclick.databinding.CommandIndexFragmentBinding import com.puutaro.commandclick.fragment.CommandIndexFragment import com.puutaro.commandclick.fragment.EditFragment -import com.puutaro.commandclick.fragment_lib.edit_fragment.common.ToolbarButtonBariantForEdit import com.puutaro.commandclick.fragment_lib.terminal_fragment.ButtonImageCreator import com.puutaro.commandclick.proccess.history.url_history.UrlHistoryPath import com.puutaro.commandclick.util.file.FileSystems @@ -50,10 +47,10 @@ object ExecSetToolbarButtonImage { ) setForTerminalFragment(activity) } - is EditFragment -> - setForEditFragment( - bottomFragment, - ) + is EditFragment -> {} +// setForEditFragment( +// bottomFragment, +// ) } } @@ -67,7 +64,7 @@ object ExecSetToolbarButtonImage { }?.let { icon -> setImageButton( - binding.cmdindexHistoryButtonImage, + binding.cmdindexFannelCenterButtonImage, icon ) } @@ -243,7 +240,7 @@ object ExecSetToolbarButtonImage { if( colorRepeatTimes == 0 ) return gOutBitmap - val colorRect = BitmapTool.ImageRemaker.makeRect( + val colorRect = BitmapTool.ImageTransformer.makeRect( rectColor, gBitmap.width, gBitmap.height @@ -347,37 +344,37 @@ object ExecSetToolbarButtonImage { } } - fun setForEditFragment( - editFragment: EditFragment, - ){ - CoroutineScope(Dispatchers.IO).launch { - ToolbarButtonBariantForEdit.values().forEach { - val frameLayout = withContext(Dispatchers.Main) { - editFragment.binding.editToolbarLinearLayout.findViewWithTag( - it.str - ) - } ?: return@forEach - val imageView = withContext(Dispatchers.Main) { - frameLayout.children.forEach imageSet@{ - view -> - if ( - view !is AppCompatImageView - ) return@imageSet - return@withContext view - } - return@withContext null - } ?: return@forEach - val imageMacro = TagManager.getIconMacroFromTag(imageView.tag) - val icon = cmdClickIconList.firstOrNull { - it.str == imageMacro - } ?: return@forEach - setImageButton( - imageView, - icon - ) - } - } - } +// fun setForEditFragment( +// editFragment: EditFragment, +// ){ +// CoroutineScope(Dispatchers.IO).launch { +// ToolbarButtonBariantForEdit.entries.forEach { +// val frameLayout = withContext(Dispatchers.Main) { +// editFragment.binding.editToolBarLinearLayout.findViewWithTag( +// it.str +// ) +// } ?: return@forEach +// val imageView = withContext(Dispatchers.Main) { +// frameLayout.children.forEach imageSet@{ +// view -> +// if ( +// view !is AppCompatImageView +// ) return@imageSet +// return@withContext view +// } +// return@withContext null +// } ?: return@forEach +// val imageMacro = TagManager.getIconMacroFromTag(imageView.tag) +// val icon = cmdClickIconList.firstOrNull { +// it.str == imageMacro +// } ?: return@forEach +// setImageButton( +// imageView, +// icon +// ) +// } +// } +// } suspend fun setImageButton( imageView: AppCompatImageView?, @@ -421,17 +418,24 @@ object ExecSetToolbarButtonImage { FileSystems.checkSum(imagePath) } withContext(Dispatchers.Main) { - val beforeChecksum = TagManager.getChecksumFromTag(imageButton.tag) + val beforeChecksum = TagManager.getChecksumFromTag( + imageButton.autofillHints?.firstOrNull() + ) if( beforeChecksum == checksum ) return@withContext withContext(Dispatchers.Main) { imageButton.imageTintList = null } - imageButton.tag = TagManager.make( + val iconSignal = TagManager.make( iconMacro, checksum ) + imageButton.setAutofillHints(iconSignal) +// imageButton.tag = TagManager.make( +// iconMacro, +// checksum +// ) // imageButton.background = // AppCompatResources.getDrawable(context, R.color.terminal_color) val requestBuilder: RequestBuilder = diff --git a/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/terminal/SpinnerUpdaterForTerminalFragment.kt b/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/terminal/SpinnerUpdaterForTerminalFragment.kt index ee0828b72..e1ea70a41 100755 --- a/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/terminal/SpinnerUpdaterForTerminalFragment.kt +++ b/app/src/main/java/com/puutaro/commandclick/activity_lib/event/lib/terminal/SpinnerUpdaterForTerminalFragment.kt @@ -7,7 +7,7 @@ import android.widget.Spinner import com.puutaro.commandclick.activity.MainActivity import com.puutaro.commandclick.common.variable.settings.FannelInfoSetting import com.puutaro.commandclick.fragment.EditFragment -import com.puutaro.commandclick.util.edit_tool.CcEditComponent +import com.puutaro.commandclick.fragment_lib.edit_fragment.common.EditComponent import com.puutaro.commandclick.util.state.FragmentTagManager import com.puutaro.commandclick.util.state.FannelInfoTool import com.puutaro.commandclick.util.state.TargetFragmentInstance @@ -16,70 +16,70 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch object SpinnerUpdaterForTerminalFragment { - fun update( - activity: MainActivity, - spinnerId: Int?, - variableValue: String - ) { - if(spinnerId == null) return - val sharePref = FannelInfoTool.getSharePref(activity) -// val currentAppDirPath = FannelInfoTool.getStringFromFannelInfo( +// fun update( +// activity: MainActivity, +// spinnerId: Int?, +// variableValue: String +// ) { +// if(spinnerId == null) return +// val sharePref = FannelInfoTool.getSharePref(activity) +//// val currentAppDirPath = FannelInfoTool.getStringFromFannelInfo( +//// sharePref, +//// FannelInfoSetting.current_app_dir +//// ) +// val currentFannelName = FannelInfoTool.getStringFromFannelInfo( // sharePref, -// FannelInfoSetting.current_app_dir +// FannelInfoSetting.current_fannel_name // ) - val currentFannelName = FannelInfoTool.getStringFromFannelInfo( - sharePref, - FannelInfoSetting.current_fannel_name - ) - val currentFannelState = FannelInfoTool.getStringFromFannelInfo( - sharePref, - FannelInfoSetting.current_fannel_state - ) - val cmdEditFragmentTag = FragmentTagManager.makeCmdValEditTag( -// currentAppDirPath, - currentFannelName, - currentFannelState - ) - val cmdEditFragment = TargetFragmentInstance.getFromActivity( - activity, - cmdEditFragmentTag - ) ?: return - try { - val spinnerInEditFragment = CcEditComponent.findSpinnerView( - spinnerId, - CcEditComponent.makeEditLinearLayoutList(cmdEditFragment) - ) ?: return - val adapter = spinnerInEditFragment.adapter as ArrayAdapter - - val adapterSize = adapter.count - val adapterList = - (0 until adapterSize).map { - adapter.getItem(it).toString() - } - - val selectUpdatedSpinnerList = listOf( - variableValue, - ) + adapterList.filter { it != variableValue } - CoroutineScope(Dispatchers.Main).launch { - execSpinnerUpdate( - spinnerInEditFragment, - selectUpdatedSpinnerList, - adapter - ) - } - } catch(e: Exception){ - Log.e("edit", e.toString()) - } - } - - private fun execSpinnerUpdate( - spinnerInEditFragment: Spinner, - selectUpdatedSpinnerList: List, - adapter: ArrayAdapter - ){ - adapter.clear() - adapter.addAll(selectUpdatedSpinnerList) - adapter.notifyDataSetChanged() - spinnerInEditFragment.setSelection(0) - } +// val currentFannelState = FannelInfoTool.getStringFromFannelInfo( +// sharePref, +// FannelInfoSetting.current_fannel_state +// ) +// val cmdEditFragmentTag = FragmentTagManager.makeCmdValEditTag( +//// currentAppDirPath, +// currentFannelName, +// currentFannelState +// ) +// val cmdEditFragment = TargetFragmentInstance.getFromActivity( +// activity, +// cmdEditFragmentTag +// ) ?: return +// try { +// val spinnerInEditFragment = EditComponent.findSpinnerView( +// spinnerId, +// EditComponent.makeEditLinearLayoutList(cmdEditFragment) +// ) ?: return +// val adapter = spinnerInEditFragment.adapter as ArrayAdapter +// +// val adapterSize = adapter.count +// val adapterList = +// (0 until adapterSize).map { +// adapter.getItem(it).toString() +// } +// +// val selectUpdatedSpinnerList = listOf( +// variableValue, +// ) + adapterList.filter { it != variableValue } +// CoroutineScope(Dispatchers.Main).launch { +// execSpinnerUpdate( +// spinnerInEditFragment, +// selectUpdatedSpinnerList, +// adapter +// ) +// } +// } catch(e: Exception){ +// Log.e("edit", e.toString()) +// } +// } +// +// private fun execSpinnerUpdate( +// spinnerInEditFragment: Spinner, +// selectUpdatedSpinnerList: List, +// adapter: ArrayAdapter +// ){ +// adapter.clear() +// adapter.addAll(selectUpdatedSpinnerList) +// adapter.notifyDataSetChanged() +// spinnerInEditFragment.setSelection(0) +// } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/activity_lib/permission/StorageAccessSetter.kt b/app/src/main/java/com/puutaro/commandclick/activity_lib/permission/StorageAccessSetter.kt index 6d62d49e3..15adfb2f1 100755 --- a/app/src/main/java/com/puutaro/commandclick/activity_lib/permission/StorageAccessSetter.kt +++ b/app/src/main/java/com/puutaro/commandclick/activity_lib/permission/StorageAccessSetter.kt @@ -189,7 +189,7 @@ object StorageAccessSetter { ): ActivityResultLauncher { return activity.registerForActivityResult( ActivityResultContracts.StartActivityForResult(), - ActivityResultCallback { + ActivityResultCallback { if ( Environment.isExternalStorageManager() ) { diff --git a/app/src/main/java/com/puutaro/commandclick/common/variable/broadcast/scheme/BroadCastIntentSchemeTerm.kt b/app/src/main/java/com/puutaro/commandclick/common/variable/broadcast/scheme/BroadCastIntentSchemeTerm.kt index 7729606ba..939328d6d 100755 --- a/app/src/main/java/com/puutaro/commandclick/common/variable/broadcast/scheme/BroadCastIntentSchemeTerm.kt +++ b/app/src/main/java/com/puutaro/commandclick/common/variable/broadcast/scheme/BroadCastIntentSchemeTerm.kt @@ -59,5 +59,9 @@ enum class BroadCastIntentSchemeTerm( FANNEL_PIN_BAR_UPDATE( "com.puutaro.commandclick.fannel_pin_bar_update.update", String() + ), + EDIT_INDEX_LIST_UPDATE( + "com.puutaro.commandclick.edit_index_list.update", + String() ) } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/common/variable/edit/EditParameters.kt b/app/src/main/java/com/puutaro/commandclick/common/variable/edit/EditParameters.kt index 905ef158c..615fc9fee 100755 --- a/app/src/main/java/com/puutaro/commandclick/common/variable/edit/EditParameters.kt +++ b/app/src/main/java/com/puutaro/commandclick/common/variable/edit/EditParameters.kt @@ -6,19 +6,19 @@ import androidx.fragment.app.Fragment data class EditParameters( // val currentFragment: Fragment, val currentShellContentsList: List, - val recordNumToMapNameValueInCommandHolder: Map?>?, - val recordNumToMapNameValueInSettingHolder: Map?>?, +// val recordNumToMapNameValueInCommandHolder: Map?>?, +// val recordNumToMapNameValueInSettingHolder: Map?>?, val fannelInfoMap: Map, val setReplaceVariableMap: Map?, val onFixNormalSpinner: Boolean, - val hideSettingVariableList: List +// val hideSettingVariableList: List ) { // val context = currentFragment.context - var currentId: Int = 0 - var currentVariableName: String? = null - var currentVariableValue: String? = null - var setVariableMap: Map? = null - var variableTypeList: List = emptyList() +// var currentId: Int = 0 +// var currentVariableName: String? = null +// var currentVariableValue: String? = null +// var setVariableMap: Map? = null +// var variableTypeList: List = emptyList() var onDirectoryPick: Boolean = false var isReturnOnlyFileName: Boolean = false } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/common/variable/extra/WaitQuizPair.kt b/app/src/main/java/com/puutaro/commandclick/common/variable/extra/WaitQuizPair.kt index 17ad85222..361b0adbe 100755 --- a/app/src/main/java/com/puutaro/commandclick/common/variable/extra/WaitQuizPair.kt +++ b/app/src/main/java/com/puutaro/commandclick/common/variable/extra/WaitQuizPair.kt @@ -21,7 +21,7 @@ object WaitQuizPair { } private val UBUNTU_EXEC_MODE = CommandClickScriptVariable.UBUNTU_EXEC_MODE private val SHELL_EXEC_ENV = CommandClickScriptVariable.SHELL_EXEC_ENV - private val HIDE_SETTING_VARIABLES = CommandClickScriptVariable.HIDE_SETTING_VARIABLES +// private val HIDE_SETTING_VARIABLES = CommandClickScriptVariable.HIDE_SETTING_VARIABLES private val SET_VARIABLE_TYPE = CommandClickScriptVariable.SET_VARIABLE_TYPE private val SET_REPLACE_VARIABLE = CommandClickScriptVariable.SET_REPLACE_VARIABLE private val EDIT_EXECUTE = CommandClickScriptVariable.EDIT_EXECUTE @@ -88,14 +88,14 @@ object WaitQuizPair { "How to specify ${CommandClickScriptVariable.LIST_INDEX_CONFIG}?", "-> Use ${CommandClickScriptVariable.LIST_INDEX_CONFIG} in setting vars", ), - Pair( - "What's ${CommandClickScriptVariable.QR_DIALOG_CONFIG}?", - "-> Logo config in ${CommandClickScriptVariable.LIST_INDEX_CONFIG}", - ), - Pair( - "How to specify ${CommandClickScriptVariable.QR_DIALOG_CONFIG}?", - "-> Use ${CommandClickScriptVariable.QR_DIALOG_CONFIG} in setting vars", - ), +// Pair( +// "What's ${CommandClickScriptVariable.QR_DIALOG_CONFIG}?", +// "-> Logo config in ${CommandClickScriptVariable.LIST_INDEX_CONFIG}", +// ), +// Pair( +// "How to specify ${CommandClickScriptVariable.QR_DIALOG_CONFIG}?", +// "-> Use ${CommandClickScriptVariable.QR_DIALOG_CONFIG} in setting vars", +// ), Pair( "What's ${CommandClickScriptVariable.PLAY_BUTTON_CONFIG}?", "-> Play button config in fannel", @@ -550,14 +550,14 @@ object WaitQuizPair { "How to convert edit box to gui app?", "-> Use \"${EDIT_EXECUTE}\"" ), - Pair( - "Where's \"${HIDE_SETTING_VARIABLES}\"?", - "-> \"setting variables section\" in fannel script" - ), - Pair( - "How to hid seldom use \"setting variables\" ?", - "-> Use \"${HIDE_SETTING_VARIABLES}\"" - ), +// Pair( +// "Where's \"${HIDE_SETTING_VARIABLES}\"?", +// "-> \"setting variables section\" in fannel script" +// ), +// Pair( +// "How to hid seldom use \"setting variables\" ?", +// "-> Use \"${HIDE_SETTING_VARIABLES}\"" +// ), Pair( "Where's \"${SET_VARIABLE_TYPE}\"?", "-> \"setting variables section\" in fannel script" diff --git a/app/src/main/java/com/puutaro/commandclick/common/variable/res/CmdClickIcons.kt b/app/src/main/java/com/puutaro/commandclick/common/variable/res/CmdClickIcons.kt index 0a79c822a..bdd7445f3 100755 --- a/app/src/main/java/com/puutaro/commandclick/common/variable/res/CmdClickIcons.kt +++ b/app/src/main/java/com/puutaro/commandclick/common/variable/res/CmdClickIcons.kt @@ -11,6 +11,7 @@ enum class CmdClickIcons( ABOUT("about", R.drawable.icons8_about, ButtonAssetsImage.aboutPingPath), BACK("back", R.drawable.back, ButtonAssetsImage.backPingPath), CANCEL("cancel", R.drawable.icons8_cancel, ButtonAssetsImage.cancelPingPath), + CC("cc", R.drawable.cc, ButtonAssetsImage.cPingPath), COPY("copy", androidx.appcompat.R.drawable.abc_ic_menu_copy_mtrl_am_alpha, ButtonAssetsImage.copyPingPath), DOWN("down", R.drawable.ic_down_allow, ButtonAssetsImage.downPingPath), DOWNLOAD("download", android.R.drawable.stat_sys_download, ButtonAssetsImage.downloadDonePingPath), diff --git a/app/src/main/java/com/puutaro/commandclick/common/variable/res/FannelIcons.kt b/app/src/main/java/com/puutaro/commandclick/common/variable/res/FannelIcons.kt index d287d67f3..e3a098bac 100755 --- a/app/src/main/java/com/puutaro/commandclick/common/variable/res/FannelIcons.kt +++ b/app/src/main/java/com/puutaro/commandclick/common/variable/res/FannelIcons.kt @@ -18,10 +18,10 @@ enum class FannelIcons( "airphane", R.drawable.fannel_at_mark ), - AWARD( - "award", - R.drawable.fannel_award - ), +// AWARD( +// "award", +// R.drawable.fannel_award +// ), BALLOON( "balloon", R.drawable.fannel_balloon @@ -48,7 +48,7 @@ enum class FannelIcons( ), CORSAIR( "corsair", - R.drawable.fannel_corsair + R.drawable.fannel_cosair ), CROCODILE( "crocodile", @@ -58,6 +58,10 @@ enum class FannelIcons( "crown", R.drawable.fannel_crown ), + BRAIN( + "brain", + R.drawable.fannel_brain + ), DOG_FACE( "dog_face", R.drawable.fannel_dog_face @@ -124,7 +128,7 @@ enum class FannelIcons( ), HIME( "hime", - R.drawable.fannel_hime + R.drawable.fannel_hime1 ), HIME2( "hime2", @@ -140,7 +144,7 @@ enum class FannelIcons( ), JINJA( "jinja", - R.drawable.fannel_jinja + R.drawable.fannel_jinja1 ), JINJA2( "jinja2", @@ -218,9 +222,17 @@ enum class FannelIcons( "other_moon", R.drawable.fannel_other_moon ), + ROBOT( + "robot", + R.drawable.fannel_robot + ), + PHANTOM( + "phantom", + R.drawable.fannel_phantom + ), PHENIX( "phenix", - R.drawable.fannel_phenix + R.drawable.fannel_phenix1 ), PHENIX2( "phenix2", @@ -266,6 +278,14 @@ enum class FannelIcons( "siro", R.drawable.fannel_siro ), + SKULL( + "skull", + R.drawable.fannel_skull + ), + SKULL_HORIZON( + "skull", + R.drawable.fannel_skull_horizon + ), SNAKE( "snake", R.drawable.fannel_snake @@ -302,6 +322,10 @@ enum class FannelIcons( "train", R.drawable.fannel_train ), + TREX( + "trex", + R.drawable.fannel_trex + ), TROPHY( "trophy", R.drawable.fannel_trophy @@ -310,6 +334,4 @@ enum class FannelIcons( "wind", R.drawable.fannel_wind ), - - } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/common/variable/variables/CommandClickScriptVariable.kt b/app/src/main/java/com/puutaro/commandclick/common/variable/variables/CommandClickScriptVariable.kt index e26402b8a..f4541b67f 100755 --- a/app/src/main/java/com/puutaro/commandclick/common/variable/variables/CommandClickScriptVariable.kt +++ b/app/src/main/java/com/puutaro/commandclick/common/variable/variables/CommandClickScriptVariable.kt @@ -1,28 +1,15 @@ package com.puutaro.commandclick.common.variable.variables import com.puutaro.commandclick.common.variable.fannel.SystemFannel -//import com.puutaro.commandclick.common.variable.variant.LanguageTypeSelects -import com.puutaro.commandclick.common.variable.variant.SettingCmdArgs import com.puutaro.commandclick.common.variable.variant.SettingVariableSelects import com.puutaro.commandclick.common.variable.path.UsePath -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.ButtonViewProducer -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.ListContentsSelectSpinnerViewProducer -import com.puutaro.commandclick.proccess.edit.lib.ProducerMacro import com.puutaro.commandclick.util.CcPathTool import com.puutaro.commandclick.util.file.FileSystems import java.io.File object CommandClickScriptVariable { -// enum class HolderTypeName { -// LABELING_SEC_START, -// LABELING_SEC_END, -// SETTING_SEC_START, -// SETTING_SEC_END, -// CMD_SEC_START, -// CMD_SEC_END, -// SCRIPT_START -// } + val EMPTY_STRING = "COMMAND_CLICK_EMPTY_STRING" const val LABELING_SEC_START = "/// LABELING_SECTION_START" const val LABELING_SEC_END = "/// LABELING_SECTION_END" @@ -31,27 +18,7 @@ object CommandClickScriptVariable { const val CMD_SEC_START = "/// CMD_VARIABLE_SECTION_START" const val CMD_SEC_END = "/// CMD_VARIABLE_SECTION_END" const val SCRIPT_START = "/// Please write bellow with javascript" -// val LANGUAGE_TYPE_TO_SECTION_HOLDER_MAP = mapOf( -// LanguageTypeSelects.SHELL_SCRIPT to mapOf( -// HolderTypeName.LABELING_SEC_START to "### $labelingSectionStartSentence", -// HolderTypeName.LABELING_SEC_END to "### $labelingSectionEndSentence", -// HolderTypeName.SETTING_SEC_START to "### $settingSectionStartSentence", -// HolderTypeName.SETTING_SEC_END to "### $settingSectionEndSentence", -// HolderTypeName.CMD_SEC_START to "### $commandSectionStartSentence", -// HolderTypeName.CMD_SEC_END to "### $commandSectionEndSentence", -// HolderTypeName.SCRIPT_START to "### Please write bellow with shell script", -// -// ), -// LanguageTypeSelects.JAVA_SCRIPT to mapOf( -// HolderTypeName.LABELING_SEC_START to "/// $labelingSectionStartSentence", -// HolderTypeName.LABELING_SEC_END to "/// $labelingSectionEndSentence", -// HolderTypeName.SETTING_SEC_START to "/// $settingSectionStartSentence", -// HolderTypeName.SETTING_SEC_END to "/// $settingSectionEndSentence", -// HolderTypeName.CMD_SEC_START to "/// $commandSectionStartSentence", -// HolderTypeName.CMD_SEC_END to "/// $commandSectionEndSentence", -// HolderTypeName.SCRIPT_START to "/// Please write bellow with javascript", -// ) -// ) + val SHELL_EXEC_ENV = "shellExecEnv" val UBUNTU_EXEC_MODE = "ubuntuExecMode" val UBUNTU_OUTPUT_FILE = "ubuntuOutputFile" @@ -72,8 +39,8 @@ object CommandClickScriptVariable { val ON_TERM_BACKEND_WHEN_START = "onTermBackendWhenStart" val ON_TERM_VISIBLE_WHEN_KEYBOARD = "onTermVisibleWhenKeyboard" val ON_TERM_SHORT_WHEN_LOAD = "onTermShortWhenLoad" - val CMDCLICK_HISTORY_SWITCH = "historySwitch" - val CMDCLICK_URL_HISTOTY_OR_BUTTON_EXEC = "urlHistoryOrButtonExec" +// val CMDCLICK_HISTORY_SWITCH = "historySwitch" +// val CMDCLICK_URL_HISTOTY_OR_BUTTON_EXEC = "urlHistoryOrButtonExec" val ON_URL_HISTORY_REGISTER = "onUrlHistoryRegister" val IGNORE_HISTORY_PATHS = "ignoreHistoryPaths" val ON_ADBLOCK = "onAdBlock" @@ -85,17 +52,17 @@ object CommandClickScriptVariable { val TERMINAL_FONT_COLOR = "terminalFontColor" // val HOME_SCRIPT_URLS_PATH = "homeScriptUrlsPath" val CMDCLICK_SHIBAN_DEFAULT_VALUE = "#!/bin/bash" - val CMDCLICK_RUN_SHELL_DEFAULT_VALUE = "bash" +// val CMDCLICK_RUN_SHELL_DEFAULT_VALUE = "bash" // val CMDCLICK_HOME_FANNELS_PATH = "homeFannelsPath" - val PASS_CMDVARIABLE_EDIT = "passCmdVariableEdit" +// val PASS_CMDVARIABLE_EDIT = "passCmdVariableEdit" val SETTING_BUTTON_CONFIG = "settingButtonConfig" val EDIT_BUTTON_CONFIG = "editButtonConfig" val PLAY_BUTTON_CONFIG = "playButtonConfig" val EXTRA_BUTTON_CONFIG = "extraButtonConfig" val LIST_INDEX_CONFIG = "listIndexConfig" - val QR_DIALOG_CONFIG = "qrDialogConfig" - val HIDE_SETTING_VARIABLES = "hideSettingVariables" - val NO_SCROLL_SAVE_URLS = "noScrollSaveUrls" +// val QR_DIALOG_CONFIG = "qrDialogConfig" +// val HIDE_SETTING_VARIABLES = "hideSettingVariables" +// val NO_SCROLL_SAVE_URLS = "noScrollSaveUrls" val DISABLE_SETTING_VALS_EDIT = "disableSettingValsEdit" val SRC_IMAGE_ANCHOR_LONG_PRESS_MENU_FILE_PATH = "srcImageAnchorLongPressMenuFilePath" val SRC_ANCHOR_LONG_PRESS_MENU_FILE_PATH = "srcAnchorLongPressMenuFilePath" @@ -125,14 +92,14 @@ object CommandClickScriptVariable { TERMINAL_OUTPUT_MODE, SET_VARIABLE_TYPE, SET_REPLACE_VARIABLE, - CMDCLICK_HISTORY_SWITCH, +// CMDCLICK_HISTORY_SWITCH, CMDCLICK_ON_AUTO_EXEC, AUTO_EXEC_PATH, NO_ARG_JS_PATH, ON_UPDATE_LAST_MODIFY, TERMINAL_COLOR, TERMINAL_FONT_COLOR, - CMDCLICK_URL_HISTOTY_OR_BUTTON_EXEC, +// CMDCLICK_URL_HISTOTY_OR_BUTTON_EXEC, ON_ADBLOCK, ON_TERM_BACKEND_WHEN_START, ON_TERM_VISIBLE_WHEN_KEYBOARD, @@ -157,8 +124,8 @@ object CommandClickScriptVariable { EXTRA_BUTTON_CONFIG, SETTING_BUTTON_CONFIG, LIST_INDEX_CONFIG, - QR_DIALOG_CONFIG, - NO_SCROLL_SAVE_URLS, +// QR_DIALOG_CONFIG, +// NO_SCROLL_SAVE_URLS, SRC_IMAGE_ANCHOR_LONG_PRESS_MENU_FILE_PATH, SRC_ANCHOR_LONG_PRESS_MENU_FILE_PATH, IMAGE_LONG_PRESS_MENU_FILE_PATH, @@ -166,7 +133,7 @@ object CommandClickScriptVariable { FANNEL_STATE_CONFIG, ) private val terminalOn = SettingVariableSelects.TerminalDoSelects.ON.name - private val terminalTermux = SettingVariableSelects.TerminalDoSelects.TERMUX.name +// private val terminalTermux = SettingVariableSelects.TerminalDoSelects.TERMUX.name private val terminalOff = SettingVariableSelects.TerminalDoSelects.OFF.name private val editExecuteNo = SettingVariableSelects.EditExecuteSelects.NO.name // private val editExecuteOnce = SettingVariableSelects.EditExecuteSelects.ONCE.name @@ -180,12 +147,12 @@ object CommandClickScriptVariable { private val terminalOutPutModeReflashAndFirstRow = SettingVariableSelects.TerminalOutPutModeSelects.REFLASH_AND_FIRST_ROW.name private val terminalOutPutModeDebug = SettingVariableSelects.TerminalOutPutModeSelects.DEBUG.name private val terminalOutPutModeNo = SettingVariableSelects.TerminalOutPutModeSelects.NO.name - private val historySwitchOff = SettingVariableSelects.HistorySwitchSelects.OFF.name - private val historySwitchOn = SettingVariableSelects.HistorySwitchSelects.ON.name - private val historySwitchInherit = SettingVariableSelects.HistorySwitchSelects.INHERIT.name - private val urlHistoryOrButtonExecUrlHistory = SettingVariableSelects.UrlHistoryOrButtonExecSelects.URL_HISTORY.name - private val urlHistoryOrButtonExecUrlButtonExec = SettingVariableSelects.UrlHistoryOrButtonExecSelects.BUTTON_EXEC.name - private val urlHistoryOrButtonExecUrlInherit = SettingVariableSelects.UrlHistoryOrButtonExecSelects.INHERIT.name +// private val historySwitchOff = SettingVariableSelects.HistorySwitchSelects.OFF.name +// private val historySwitchOn = SettingVariableSelects.HistorySwitchSelects.ON.name +// private val historySwitchInherit = SettingVariableSelects.HistorySwitchSelects.INHERIT.name +// private val urlHistoryOrButtonExecUrlHistory = SettingVariableSelects.UrlHistoryOrButtonExecSelects.URL_HISTORY.name +// private val urlHistoryOrButtonExecUrlButtonExec = SettingVariableSelects.UrlHistoryOrButtonExecSelects.BUTTON_EXEC.name +// private val urlHistoryOrButtonExecUrlInherit = SettingVariableSelects.UrlHistoryOrButtonExecSelects.INHERIT.name private val onUpdateLastModifyOn = SettingVariableSelects.OnUpdateLastModifySelects.ON.name private val onUpdateLastModifyOff = SettingVariableSelects.OnUpdateLastModifySelects.OFF.name private val onUrlLaunchMacroRecent = SettingVariableSelects.OnUrlLaunchMacroSelects.RECENT.name @@ -225,17 +192,17 @@ object CommandClickScriptVariable { val EDIT_EXECUTE_DEFAULT_VALUE = editExecuteNo val TERMINAL_OUTPUT_MODE_DEFAULT_VALUE = terminalOutPutModeNormal - val HISTORY_SWITCH_DEFAULT_VALUE = historySwitchOff +// val HISTORY_SWITCH_DEFAULT_VALUE = historySwitchOff val ON_UPDATE_LAST_MODIFY_DEFAULT_VALUE = onUpdateLastModifyOn val TERMINAL_COLOR_DEFAULT_VALUE = "#043d02" val TERMINAL_FONT_COLOR_DEFAULT_VALUE = "#f2f2f2" val ON_URL_LAUNCH_MACRO_DEFAULT_VALUE = onUrlLaunchMacroOff val ON_URL_HISTORY_REGISTER_DEFAULT_VALUE = onUrlHistoryRegisterOn - val PASS_CMDVARIABLE_EDIT_ON_VALUE = "ON" +// val PASS_CMDVARIABLE_EDIT_ON_VALUE = "ON" val ON_TERM_BACKEND_WHEN_START_DEFAULT_VALUE = onTermBackendWhenStartSelectsOff val ON_TERM_SHORT_WHEN_LOAD_DEFAULT_VALUE = onTermShortWhenLoadSelectsOff val CMDCLICK_TERMINAL_FONT_ZOOM_DEFAULT_VALUE = 100 - val CMDCLICK_URL_HISTOTY_OR_BUTTON_EXEC_DEFAULT_VALUE = SettingVariableSelects.UrlHistoryOrButtonExecSelects.URL_HISTORY.name +// val CMDCLICK_URL_HISTOTY_OR_BUTTON_EXEC_DEFAULT_VALUE = SettingVariableSelects.UrlHistoryOrButtonExecSelects.URL_HISTORY.name val ON_ADBLOCK_DEFAULT_VALUE = SettingVariableSelects.OnAdblockSelects.OFF.name val ON_LAUNCH_URL_HISTORY_BY_BACKSTACK_DEFAULT_VALUE = SettingVariableSelects.OnLaunchUrlHistoryByBackstack.OFF.name val CMDCLICK_ON_AUTO_EXEC_DEFAULT_VALUE = SettingVariableSelects.AutoExecSelects.ON.name @@ -248,22 +215,22 @@ object CommandClickScriptVariable { // private val homeScriptUrlsFilePath = UsePath.homeScriptUrlsFilePath // private val homeFannelsFilePath = // UsePath.homeFannelsFilePath - private val macroStrForDragSortGetListPathFromVar = - ProducerMacro.macroStrForDragSortGetListPathFromVar - private val buttonCmd = ButtonViewProducer.ButtonEditKey.cmd.name - private val buttonLabel = ButtonViewProducer.ButtonEditKey.label.name - private val buttonSetfType = - ButtonViewProducer.SET_F_OPTION_MAP_KEY.type - private val buttonSetfListAddSuffix = - ButtonViewProducer.SET_F_OPTION_MAP_KEY.ListAdd.suffix.name - private val buttonSetfListAddSourceDirPath = - ButtonViewProducer.SET_F_OPTION_MAP_KEY.ListAdd.dirPath.name +// private val macroStrForDragSortGetListPathFromVar = +// ProducerMacro.macroStrForDragSortGetListPathFromVar +// private val buttonCmd = ButtonViewProducer.ButtonEditKey.cmd.name +// private val buttonLabel = ButtonViewProducer.ButtonEditKey.label.name +// private val buttonSetfType = +// ButtonViewProducer.SET_F_OPTION_MAP_KEY.type +// private val buttonSetfListAddSuffix = +// ButtonViewProducer.SET_F_OPTION_MAP_KEY.ListAdd.suffix.name +// private val buttonSetfListAddSourceDirPath = +// ButtonViewProducer.SET_F_OPTION_MAP_KEY.ListAdd.dirPath.name // private val buttonSetfListAddHowFull = // ButtonViewProducer.SET_F_OPTION_MAP_KEY.ListAdd.howFull.name - private val listPathForListConSlSpi = - ListContentsSelectSpinnerViewProducer.ListContentsEditKey.listPath.name - private val limitNumForListConSlSpi = - ListContentsSelectSpinnerViewProducer.ListContentsEditKey.limitNum.name +// private val listPathForListConSlSpi = +// ListContentsSelectSpinnerViewProducer.ListContentsEditKey.listPath.name +// private val limitNumForListConSlSpi = +// ListContentsSelectSpinnerViewProducer.ListContentsEditKey.limitNum.name // private val setVaraibleValueForHomeScriptUrlsPath = // "$listPathForListConSlSpi=" + // "$macroStrForDragSortGetListPathFromVar:${homeScriptUrlsFilePath}" + @@ -286,90 +253,90 @@ object CommandClickScriptVariable { // "$buttonSetfListAddSourceDirPath=${UsePath.cmdclickAppHistoryDirAdminPath}" + // "?$buttonLabel=ADD" // ).joinToString(" ") - private val srcImageAnchorLongPressMenuFilePath = - UsePath.srcImageAnchorLongPressMenuFilePath - private val srcAnchorLongPressMenuFilePath = - UsePath.srcAnchorLongPressMenuFilePath - private val imageLongPressMenuFilePath = - UsePath.imageLongPressMenuFilePath - private val noScrollSaveUrlsFilePath = - UsePath.noScrollSaveUrlsFilePath - private val setVariableValueForSrcImageAnchorLongPressMenuFilePath = - "$listPathForListConSlSpi=" + - "$macroStrForDragSortGetListPathFromVar:$srcImageAnchorLongPressMenuFilePath" + - "?$limitNumForListConSlSpi=20" + - "|$buttonCmd=" + - listOf( - "setf $buttonSetfType=${SettingCmdArgs.ListAdd.name}", - "$buttonSetfListAddSuffix=${UsePath.JS_FILE_SUFFIX}", - "$buttonSetfListAddSourceDirPath=\${01}" + - "?$buttonLabel=ADD" - ).joinToString(" ") - private val setVariableValueForSrcAnchorLongPressMenuFilePath = - "$listPathForListConSlSpi=" + - "$macroStrForDragSortGetListPathFromVar:$srcAnchorLongPressMenuFilePath" + - "?$limitNumForListConSlSpi=20" + - "|$buttonCmd=" + - listOf( - "setf $buttonSetfType=${SettingCmdArgs.ListAdd.name}", - "$buttonSetfListAddSuffix=${UsePath.JS_FILE_SUFFIX}", - "$buttonSetfListAddSourceDirPath=\${01}" + - "?$buttonLabel=ADD" - ).joinToString(" ") - private val setVariableValueForImageLongPressMenuFilePath = - "$listPathForListConSlSpi=" + - "$macroStrForDragSortGetListPathFromVar:$imageLongPressMenuFilePath" + - "?$limitNumForListConSlSpi=20" + - "|$buttonCmd=" + - listOf( - "setf $buttonSetfType=${SettingCmdArgs.ListAdd.name}", - "$buttonSetfListAddSuffix=${UsePath.JS_FILE_SUFFIX}", - "$buttonSetfListAddSourceDirPath=\${01}" + - "?$buttonLabel=ADD" - ).joinToString(" ") +// private val srcImageAnchorLongPressMenuFilePath = +// UsePath.srcImageAnchorLongPressMenuFilePath +// private val srcAnchorLongPressMenuFilePath = +// UsePath.srcAnchorLongPressMenuFilePath +// private val imageLongPressMenuFilePath = +// UsePath.imageLongPressMenuFilePath +// private val noScrollSaveUrlsFilePath = +// UsePath.noScrollSaveUrlsFilePath +// private val setVariableValueForSrcImageAnchorLongPressMenuFilePath = +// "$listPathForListConSlSpi=" + +// "$macroStrForDragSortGetListPathFromVar:$srcImageAnchorLongPressMenuFilePath" + +// "?$limitNumForListConSlSpi=20" + +// "|$buttonCmd=" + +// listOf( +// "setf $buttonSetfType=${SettingCmdArgs.ListAdd.name}", +// "$buttonSetfListAddSuffix=${UsePath.JS_FILE_SUFFIX}", +// "$buttonSetfListAddSourceDirPath=\${01}" + +// "?$buttonLabel=ADD" +// ).joinToString(" ") +// private val setVariableValueForSrcAnchorLongPressMenuFilePath = +// "$listPathForListConSlSpi=" + +// "$macroStrForDragSortGetListPathFromVar:$srcAnchorLongPressMenuFilePath" + +// "?$limitNumForListConSlSpi=20" + +// "|$buttonCmd=" + +// listOf( +// "setf $buttonSetfType=${SettingCmdArgs.ListAdd.name}", +// "$buttonSetfListAddSuffix=${UsePath.JS_FILE_SUFFIX}", +// "$buttonSetfListAddSourceDirPath=\${01}" + +// "?$buttonLabel=ADD" +// ).joinToString(" ") +// private val setVariableValueForImageLongPressMenuFilePath = +// "$listPathForListConSlSpi=" + +// "$macroStrForDragSortGetListPathFromVar:$imageLongPressMenuFilePath" + +// "?$limitNumForListConSlSpi=20" + +// "|$buttonCmd=" + +// listOf( +// "setf $buttonSetfType=${SettingCmdArgs.ListAdd.name}", +// "$buttonSetfListAddSuffix=${UsePath.JS_FILE_SUFFIX}", +// "$buttonSetfListAddSourceDirPath=\${01}" + +// "?$buttonLabel=ADD" +// ).joinToString(" ") // val buttonIconSeparator = JsPathForEditButton.buttonIconSeparator // val buttonIconNameIdSeparator = JsPathForEditButton.buttonIconNameIdSeparator // val buttonIconNameIdPairListStr = CmdClickIcons.values().reversed().map { // "${it.str}${buttonIconNameIdSeparator}${it.str}" // }.joinToString(buttonIconSeparator) - private val setVariableValueForNoScrollSaveUrlsFilePath = - "$listPathForListConSlSpi=$noScrollSaveUrlsFilePath" - val setVariableForSettingHolder: List = listOf( - "$SHELL_EXEC_ENV:CB=$shellExecEnvUbuntu?$shellExecEnvTermux", - "$UBUNTU_EXEC_MODE:CB=$ubuntuExecModeSelectsBackground?$ubuntuExecModeSelectsForeground", - "$UBUNTU_OUTPUT_FILE:CB=${UsePath.cmdClickMonitorFileName_1}?${UsePath.cmdClickMonitorFileName_2}?${UsePath.cmdClickMonitorFileName_3}?${UsePath.cmdClickMonitorFileName_4}", - "$TERMINAL_DO:CB=$terminalOn?$terminalTermux?$terminalOff", - "$EDIT_EXECUTE:CB=$editExecuteNo?$editExecuteAlways", -// "$TERMINAL_SIZE_TYPE:CB=$terminalSizeTypeOff?$terminalSizeTypeShort?$terminalSizeTypeLong", - "$TERMINAL_OUTPUT_MODE:CB=$terminalOutPutModeNormal?$terminalOutPutModeReflash?$terminalOutPutModeReflashAndFirstRow?$terminalOutPutModeDebug?$terminalOutPutModeNo", - "$ON_UPDATE_LAST_MODIFY:CB=$onUpdateLastModifyOn?$onUpdateLastModifyOff", - "$CMDCLICK_ON_AUTO_EXEC:CB=$autoExecSelectsOn?$autoExecSelectsOff", - "$CMDCLICK_HISTORY_SWITCH:CB=$historySwitchOff?$historySwitchOn?$historySwitchInherit", - "$CMDCLICK_URL_HISTOTY_OR_BUTTON_EXEC:CB=$urlHistoryOrButtonExecUrlHistory?$urlHistoryOrButtonExecUrlButtonExec?$urlHistoryOrButtonExecUrlInherit", - "$ON_URL_LAUNCH_MACRO:TXT:ECB=$onUrlLaunchMacroOff?$onUrlLaunchMacroRecent?$onUrlLaunchMacroFrequency", - "$ON_ADBLOCK:CB=$onAdBlockInherit?$onAdBlockOff?$onAdBlockOn", - "${ON_LAUNCH_URL_HISTORY_BY_BACKSTACK}:CB=${onLaunchUrlHistoryByBackstackOff}?${onLaunchUrlHistoryByBackstackOn}", - "$ON_TERM_BACKEND_WHEN_START:CB=$onTermBackendWhenStartSelectsInherit?$onTermBackendWhenStartSelectsOff?$onTermBackendWhenStartSelectsOn", - "$ON_TERM_VISIBLE_WHEN_KEYBOARD:CB=$onTermVisibleWhenKeyboardSelectsInherit?$onTermVisibleWhenKeyboardSelectsOn?$onTermVisibleWhenKeyboardSelectsOff", - "$ON_TERM_SHORT_WHEN_LOAD:CB=$onTermShortWhenLoadSelectsInherit?$onTermShortWhenLoadSelectsOn?$onTermShortWhenLoadSelectsOff", - "$DISABLE_SHOW_TOOLBAR_WHEN_HIGHLIGHT:CB=$disableShowToolbarWhenHighlightOn?$disableShowToolbarWhenHighlightOff", - "$ON_URL_HISTORY_REGISTER:CB=$onUrlHistoryRegisterOn?$onUrlHistoryRegisterOff", - "$DEFAULT_MONITOR_FILE:CB=${UsePath.cmdClickMonitorFileName_1}?${UsePath.cmdClickMonitorFileName_2}?${UsePath.cmdClickMonitorFileName_3}?${UsePath.cmdClickMonitorFileName_4}", - "${ON_ROOTFS_SDCARD_SAVE}:CB=${onRootfsSdcardSaveOn}?${onRootfsSdcardSaveOff}", - "${UBUNTU_AUTO_SETUP}:CB=${ubuntuAutoSetupOff}?${ubuntuAutoSetupSetup}?${ubuntuAutoSetupRestore}", - "$CMDCLICK_TERMINAL_FONT_ZOOM:TXT:NUM=0..1000?1", - "$TERMINAL_COLOR:TXT:CLR=", - "$TERMINAL_FONT_COLOR:TXT:CLR=", - "$EXEC_JS_OR_HTML_PATH:TXT:FL=", -// "$HOME_SCRIPT_URLS_PATH:DSL:BTN=$setVaraibleValueForHomeScriptUrlsPath", -// "$CMDCLICK_HOME_FANNELS_PATH:DSL:BTN=$setVariableValueForHomeFannelsPath", - "$SRC_IMAGE_ANCHOR_LONG_PRESS_MENU_FILE_PATH:DSL:BTN=$setVariableValueForSrcImageAnchorLongPressMenuFilePath", - "$SRC_ANCHOR_LONG_PRESS_MENU_FILE_PATH:DSL:BTN=$setVariableValueForSrcAnchorLongPressMenuFilePath", - "$IMAGE_LONG_PRESS_MENU_FILE_PATH:DSL:BTN=$setVariableValueForImageLongPressMenuFilePath", - "$NO_SCROLL_SAVE_URLS:DSL=$setVariableValueForNoScrollSaveUrlsFilePath", - "$UBUNTU_SLEEP_DELAY_MIN_IN_SCREEN_OFF:TXT:NUM=0..60?10" - ) +// private val setVariableValueForNoScrollSaveUrlsFilePath = +// "$listPathForListConSlSpi=$noScrollSaveUrlsFilePath" +// val setVariableForSettingHolder: List = listOf( +// "$SHELL_EXEC_ENV:CB=$shellExecEnvUbuntu?$shellExecEnvTermux", +// "$UBUNTU_EXEC_MODE:CB=$ubuntuExecModeSelectsBackground?$ubuntuExecModeSelectsForeground", +// "$UBUNTU_OUTPUT_FILE:CB=${UsePath.cmdClickMonitorFileName_1}?${UsePath.cmdClickMonitorFileName_2}?${UsePath.cmdClickMonitorFileName_3}?${UsePath.cmdClickMonitorFileName_4}", +// "$TERMINAL_DO:CB=$terminalOn?$terminalTermux?$terminalOff", +// "$EDIT_EXECUTE:CB=$editExecuteNo?$editExecuteAlways", +//// "$TERMINAL_SIZE_TYPE:CB=$terminalSizeTypeOff?$terminalSizeTypeShort?$terminalSizeTypeLong", +// "$TERMINAL_OUTPUT_MODE:CB=$terminalOutPutModeNormal?$terminalOutPutModeReflash?$terminalOutPutModeReflashAndFirstRow?$terminalOutPutModeDebug?$terminalOutPutModeNo", +// "$ON_UPDATE_LAST_MODIFY:CB=$onUpdateLastModifyOn?$onUpdateLastModifyOff", +// "$CMDCLICK_ON_AUTO_EXEC:CB=$autoExecSelectsOn?$autoExecSelectsOff", +// "$CMDCLICK_HISTORY_SWITCH:CB=$historySwitchOff?$historySwitchOn?$historySwitchInherit", +// "$CMDCLICK_URL_HISTOTY_OR_BUTTON_EXEC:CB=$urlHistoryOrButtonExecUrlHistory?$urlHistoryOrButtonExecUrlButtonExec?$urlHistoryOrButtonExecUrlInherit", +// "$ON_URL_LAUNCH_MACRO:TXT:ECB=$onUrlLaunchMacroOff?$onUrlLaunchMacroRecent?$onUrlLaunchMacroFrequency", +// "$ON_ADBLOCK:CB=$onAdBlockInherit?$onAdBlockOff?$onAdBlockOn", +// "${ON_LAUNCH_URL_HISTORY_BY_BACKSTACK}:CB=${onLaunchUrlHistoryByBackstackOff}?${onLaunchUrlHistoryByBackstackOn}", +// "$ON_TERM_BACKEND_WHEN_START:CB=$onTermBackendWhenStartSelectsInherit?$onTermBackendWhenStartSelectsOff?$onTermBackendWhenStartSelectsOn", +// "$ON_TERM_VISIBLE_WHEN_KEYBOARD:CB=$onTermVisibleWhenKeyboardSelectsInherit?$onTermVisibleWhenKeyboardSelectsOn?$onTermVisibleWhenKeyboardSelectsOff", +// "$ON_TERM_SHORT_WHEN_LOAD:CB=$onTermShortWhenLoadSelectsInherit?$onTermShortWhenLoadSelectsOn?$onTermShortWhenLoadSelectsOff", +// "$DISABLE_SHOW_TOOLBAR_WHEN_HIGHLIGHT:CB=$disableShowToolbarWhenHighlightOn?$disableShowToolbarWhenHighlightOff", +// "$ON_URL_HISTORY_REGISTER:CB=$onUrlHistoryRegisterOn?$onUrlHistoryRegisterOff", +// "$DEFAULT_MONITOR_FILE:CB=${UsePath.cmdClickMonitorFileName_1}?${UsePath.cmdClickMonitorFileName_2}?${UsePath.cmdClickMonitorFileName_3}?${UsePath.cmdClickMonitorFileName_4}", +// "${ON_ROOTFS_SDCARD_SAVE}:CB=${onRootfsSdcardSaveOn}?${onRootfsSdcardSaveOff}", +// "${UBUNTU_AUTO_SETUP}:CB=${ubuntuAutoSetupOff}?${ubuntuAutoSetupSetup}?${ubuntuAutoSetupRestore}", +// "$CMDCLICK_TERMINAL_FONT_ZOOM:TXT:NUM=0..1000?1", +// "$TERMINAL_COLOR:TXT:CLR=", +// "$TERMINAL_FONT_COLOR:TXT:CLR=", +// "$EXEC_JS_OR_HTML_PATH:TXT:FL=", +//// "$HOME_SCRIPT_URLS_PATH:DSL:BTN=$setVaraibleValueForHomeScriptUrlsPath", +//// "$CMDCLICK_HOME_FANNELS_PATH:DSL:BTN=$setVariableValueForHomeFannelsPath", +// "$SRC_IMAGE_ANCHOR_LONG_PRESS_MENU_FILE_PATH:DSL:BTN=$setVariableValueForSrcImageAnchorLongPressMenuFilePath", +// "$SRC_ANCHOR_LONG_PRESS_MENU_FILE_PATH:DSL:BTN=$setVariableValueForSrcAnchorLongPressMenuFilePath", +// "$IMAGE_LONG_PRESS_MENU_FILE_PATH:DSL:BTN=$setVariableValueForImageLongPressMenuFilePath", +// "$NO_SCROLL_SAVE_URLS:DSL=$setVariableValueForNoScrollSaveUrlsFilePath", +// "$UBUNTU_SLEEP_DELAY_MIN_IN_SCREEN_OFF:TXT:NUM=0..60?10" +// ) fun makeShellScriptName( // shellOrJs: LanguageTypeSelects = LanguageTypeSelects.JAVA_SCRIPT @@ -390,6 +357,28 @@ object CommandClickScriptVariable { private val mdDash = "-------" private val mdDescription = "description" +// |# * [$CMDCLICK_HISTORY_SWITCH](#${replaceLowerAdnBlankDash(CMDCLICK_HISTORY_SWITCH)}) +// |# * [$CMDCLICK_URL_HISTOTY_OR_BUTTON_EXEC](#${ +// replaceLowerAdnBlankDash(CMDCLICK_URL_HISTOTY_OR_BUTTON_EXEC)}) +// |# ### $CMDCLICK_HISTORY_SWITCH +// |# Switch app history with url history +// | +// |# | switch | $mdDescription | +// |# | $mdDash | $mdDash | +// |# | `$historySwitchOn` | switch | +// |# | `$historySwitchOff` | no switch | +// |# | `$historySwitchInherit` | inherit config setting (default) | +// | +// |# ### $CMDCLICK_URL_HISTOTY_OR_BUTTON_EXEC +// |# Switch url history or button script exec +// | +// |# | switch | description | +// |# | $mdDash | $mdDash | +// |# | `$urlHistoryOrButtonExecUrlInherit` | inherit config setting | +// |# | `$urlHistoryOrButtonExecUrlHistory` | switch url history | +// |# | `$urlHistoryOrButtonExecUrlButtonExec` | switch url button script exec | +// | + fun makeDescription(): String { return """# Table of Contents |# $mdDash @@ -401,7 +390,6 @@ object CommandClickScriptVariable { |# * [$CMDCLICK_ON_AUTO_EXEC](#${replaceLowerAdnBlankDash(CMDCLICK_ON_AUTO_EXEC)}) |# * [$ON_UPDATE_LAST_MODIFY](#${replaceLowerAdnBlankDash(ON_UPDATE_LAST_MODIFY)}) |# * [$IGNORE_HISTORY_PATHS](#${replaceLowerAdnBlankDash(IGNORE_HISTORY_PATHS)}) - |# * [$CMDCLICK_HISTORY_SWITCH](#${replaceLowerAdnBlankDash(CMDCLICK_HISTORY_SWITCH)}) |# * [$EDIT_BOX_TITLE_CONFIG](#${replaceLowerAdnBlankDash(EDIT_BOX_TITLE_CONFIG)}) |# * [$SRC_IMAGE_ANCHOR_LONG_PRESS_MENU_FILE_PATH](#${ replaceLowerAdnBlankDash( @@ -410,8 +398,6 @@ object CommandClickScriptVariable { replaceLowerAdnBlankDash(SRC_ANCHOR_LONG_PRESS_MENU_FILE_PATH)}) |# * [$IMAGE_LONG_PRESS_MENU_FILE_PATH](#${ replaceLowerAdnBlankDash(IMAGE_LONG_PRESS_MENU_FILE_PATH)}) - |# * [$CMDCLICK_URL_HISTOTY_OR_BUTTON_EXEC](#${ - replaceLowerAdnBlankDash(CMDCLICK_URL_HISTOTY_OR_BUTTON_EXEC)}) |# * [$ON_ADBLOCK](#${replaceLowerAdnBlankDash(ON_ADBLOCK)}) |# * [$ON_TERM_BACKEND_WHEN_START](#${ replaceLowerAdnBlankDash(ON_TERM_BACKEND_WHEN_START)}) @@ -490,15 +476,6 @@ object CommandClickScriptVariable { |# ### $IGNORE_HISTORY_PATHS |# Ignore history path like grep -v | - |# ### $CMDCLICK_HISTORY_SWITCH - |# Switch app history with url history - | - |# | switch | $mdDescription | - |# | $mdDash | $mdDash | - |# | `$historySwitchOn` | switch | - |# | `$historySwitchOff` | no switch | - |# | `$historySwitchInherit` | inherit config setting (default) | - | |# ### $EDIT_BOX_TITLE_CONFIG |# Edit box title | @@ -531,15 +508,6 @@ object CommandClickScriptVariable { |# | DSL button | Drag and sort home url script List | |# | ADD button | Add fannel to home url script list | | - |# ### $CMDCLICK_URL_HISTOTY_OR_BUTTON_EXEC - |# Switch url history or button script exec - | - |# | switch | description | - |# | $mdDash | $mdDash | - |# | `$urlHistoryOrButtonExecUrlInherit` | inherit config setting | - |# | `$urlHistoryOrButtonExecUrlHistory` | switch url history | - |# | `$urlHistoryOrButtonExecUrlButtonExec` | switch url button script exec | - | |# ### $ON_ADBLOCK |# Adblock switch | @@ -648,6 +616,10 @@ object CommandClickScriptVariable { .replace(" ", "-") } +// // |$NO_SCROLL_SAVE_URLS="" +// |$CMDCLICK_HISTORY_SWITCH="$historySwitchInherit" +// |$CMDCLICK_URL_HISTOTY_OR_BUTTON_EXEC="$urlHistoryOrButtonExecUrlInherit" + fun makeScriptContents( onUpdateLastModifyValue: String, // shellOrJs: LanguageTypeSelects = LanguageTypeSelects.JAVA_SCRIPT, @@ -670,8 +642,6 @@ object CommandClickScriptVariable { |$EDIT_EXECUTE="$EDIT_EXECUTE_DEFAULT_VALUE" |$TERMINAL_OUTPUT_MODE="$TERMINAL_OUTPUT_MODE_DEFAULT_VALUE" |$ON_UPDATE_LAST_MODIFY="${onUpdateLastModifyValue}" - |$CMDCLICK_HISTORY_SWITCH="$historySwitchInherit" - |$CMDCLICK_URL_HISTOTY_OR_BUTTON_EXEC="$urlHistoryOrButtonExecUrlInherit" |$ON_ADBLOCK="$onAdBlockInherit" |$ON_TERM_BACKEND_WHEN_START="$ON_TERM_BACKEND_WHEN_START_DEFAULT_VALUE" |$ON_TERM_VISIBLE_WHEN_KEYBOARD="$ON_TERM_VISIBLE_WHEN_KEYBOARD_DEFAULT_VALUE" @@ -679,7 +649,6 @@ object CommandClickScriptVariable { |$SRC_IMAGE_ANCHOR_LONG_PRESS_MENU_FILE_PATH="" |$SRC_ANCHOR_LONG_PRESS_MENU_FILE_PATH="" |$IMAGE_LONG_PRESS_MENU_FILE_PATH="" - |$NO_SCROLL_SAVE_URLS="" |$ON_URL_HISTORY_REGISTER="$ON_URL_HISTORY_REGISTER_DEFAULT_VALUE" |$DEFAULT_MONITOR_FILE="$DEFAULT_MONITOR_FILE_DEFAULT_VALUE" |$IGNORE_HISTORY_PATHS="" diff --git a/app/src/main/java/com/puutaro/commandclick/common/variable/variables/SettingFileVariables.kt b/app/src/main/java/com/puutaro/commandclick/common/variable/variables/SettingFileVariables.kt index 86245b5ca..f5878b126 100755 --- a/app/src/main/java/com/puutaro/commandclick/common/variable/variables/SettingFileVariables.kt +++ b/app/src/main/java/com/puutaro/commandclick/common/variable/variables/SettingFileVariables.kt @@ -2,6 +2,6 @@ package com.puutaro.commandclick.common.variable.variables object SettingFileVariables { - const val importPreWord = "settingimport" + const val importPreWord = "settingImport" } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/common/variable/variant/SettingVariableSelects.kt b/app/src/main/java/com/puutaro/commandclick/common/variable/variant/SettingVariableSelects.kt index d841f2bd4..61a1f5cb0 100755 --- a/app/src/main/java/com/puutaro/commandclick/common/variable/variant/SettingVariableSelects.kt +++ b/app/src/main/java/com/puutaro/commandclick/common/variable/variant/SettingVariableSelects.kt @@ -4,7 +4,7 @@ object SettingVariableSelects { enum class TerminalDoSelects { ON, OFF, - TERMUX +// TERMUX } enum class EditExecuteSelects { @@ -26,17 +26,17 @@ object SettingVariableSelects { NO, } - enum class HistorySwitchSelects { - OFF, - ON, - INHERIT - } +// enum class HistorySwitchSelects { +// OFF, +// ON, +// INHERIT +// } - enum class UrlHistoryOrButtonExecSelects { - URL_HISTORY, - BUTTON_EXEC, - INHERIT - } +// enum class UrlHistoryOrButtonExecSelects { +// URL_HISTORY, +// BUTTON_EXEC, +// INHERIT +// } enum class OnUpdateLastModifySelects { ON, diff --git a/app/src/main/java/com/puutaro/commandclick/component/adapter/DragSortRecyclerAdapter.kt b/app/src/main/java/com/puutaro/commandclick/component/adapter/DragSortRecyclerAdapter.kt index f65b776c7..33bf3b1bc 100755 --- a/app/src/main/java/com/puutaro/commandclick/component/adapter/DragSortRecyclerAdapter.kt +++ b/app/src/main/java/com/puutaro/commandclick/component/adapter/DragSortRecyclerAdapter.kt @@ -1,14 +1,26 @@ package com.puutaro.commandclick.component.adapter +import android.content.Context +import android.graphics.drawable.Drawable import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.TextView +import androidx.appcompat.widget.AppCompatTextView import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.bumptech.glide.RequestBuilder +import com.puutaro.commandclick.R +import com.puutaro.commandclick.common.variable.path.UsePath +import com.puutaro.commandclick.custom_view.OutlineTextView +import com.puutaro.commandclick.util.file.FileSystems +import com.puutaro.commandclick.util.image_tools.BitmapTool +import java.io.File class DragSortRecyclerAdapter( - val dratSortList: MutableList + private val context: Context, + val dragSortList: MutableList, +// private val screenWidth: Float, ) : RecyclerView.Adapter() { // Provide a reference to the views for each data item @@ -16,15 +28,23 @@ class DragSortRecyclerAdapter( // you provide access to all the views for a data item in a view holder class ViewHolder(v: View) : RecyclerView.ViewHolder(v) { // each data item is just a string in this case - var textView: TextView - +// var textView: TextView + val itemTitleView = v.findViewById( + R.id.drag_sort_adapter_item_title + ) init { - textView = v.findViewById( - com.puutaro.commandclick.R.id.text_view_in_recycler_view - ) +// textView = v.findViewById( +// R.id.text_view_in_recycler_view +// ) + } } + val requestBuilder: RequestBuilder = + Glide.with(context) + .asDrawable() + .sizeMultiplier(0.1f) + @@ -62,12 +82,68 @@ class DragSortRecyclerAdapter( // - get element from your dataset at this position // - replace the contents of the view with that element // holder.imageView.setImageResource(iImages[position]) - holder.textView.text = dratSortList[position] + val titleText = dragSortList[position] +// text.chunked(10).map { +// partText -> +// BitmapTool.DrawText.drawTextToBitmap( +// context, +// partText +// ) +// }.let { +// partTextBitmap -> +// BitmapTool.concatByHorizon() +// } +// holder.textView.text = text +// val imageWidth = screenWidth - screenWidthPadding +// val imageHeight = (imageWidth * 10) / 25 +// FileSystems.updateFile( +// File(UsePath.cmdclickDefaultAppDirPath, "ldraw.txt").absolutePath, +// listOf( +// "text: ${titleText}", +// "imageWidth: ${imageWidth}", +// "imageHeight: ${imageHeight}", +// ).joinToString("\n") +// ) +// val bitmap = BitmapTool.DrawText.drawTextToBitmap( +// titleText, +// imageWidth, +// imageHeight +// ) +// if(position == 0){ +// bitmap?.let { +// FileSystems.writeFromByteArray( +// File(UsePath.cmdclickDefaultAppDirPath, "ltext.png").absolutePath, +// BitmapTool.convertBitmapToByteArray(it) +// ) +// } +// } + val itemTitleView = holder.itemTitleView + itemTitleView.apply { + text = titleText + setFillColor(R.color.ao) + setStrokeColor(R.color.white) + outlineWidthSrc = 3 + } +// itemTitleView.imageTintList = null +//// AppCompatResources.getColorStateList( +//// context, +//// R.color.terminal_color +//// ) +// Glide.with(context) +// .load(bitmap) +// .skipMemoryCache(true) +// .diskCacheStrategy(DiskCacheStrategy.NONE) +// .thumbnail(requestBuilder) +// .into(itemTitleView) +// YoYo.with(Techniques.FadeInRight) +// .duration(700) +// .repeat(5) +// .playOn(itemTitleView) // holder?.emailView.text = iEmails[position] } // Return the size of your dataset (invoked by the layout manager) override fun getItemCount(): Int { - return dratSortList.size + return dragSortList.size } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/component/adapter/EditComponentListAdapter.kt b/app/src/main/java/com/puutaro/commandclick/component/adapter/EditComponentListAdapter.kt new file mode 100644 index 000000000..96136da79 --- /dev/null +++ b/app/src/main/java/com/puutaro/commandclick/component/adapter/EditComponentListAdapter.kt @@ -0,0 +1,1021 @@ +package com.puutaro.commandclick.component.adapter + +import android.util.TypedValue +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.appcompat.widget.AppCompatTextView +import androidx.appcompat.widget.LinearLayoutCompat +import androidx.core.view.isVisible +import androidx.core.view.setMargins +import androidx.fragment.app.Fragment +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.google.android.material.card.MaterialCardView +import com.puutaro.commandclick.common.variable.broadcast.scheme.BroadCastIntentSchemeForEdit +import com.puutaro.commandclick.common.variable.broadcast.scheme.BroadCastIntentSchemeTerm +import com.puutaro.commandclick.common.variable.path.UsePath +import com.puutaro.commandclick.common.variable.variables.CommandClickScriptVariable +import com.puutaro.commandclick.common.variable.variant.SettingVariableSelects +import com.puutaro.commandclick.fragment.EditFragment +import com.puutaro.commandclick.fragment.TerminalFragment +import com.puutaro.commandclick.fragment_lib.edit_fragment.common.EditComponent +import com.puutaro.commandclick.proccess.broadcast.BroadcastSender +import com.puutaro.commandclick.proccess.js_macro_libs.common_libs.JsActionKeyManager +import com.puutaro.commandclick.proccess.list_index_for_edit.EditFrameMaker +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.ubuntu.BusyboxExecutor +import com.puutaro.commandclick.util.CommandClickVariables +import com.puutaro.commandclick.util.RecordNumToMapNameValueInHolder +import com.puutaro.commandclick.util.SettingVariableReader +import com.puutaro.commandclick.util.file.FileSystems +import com.puutaro.commandclick.util.file.MapListFileTool +import com.puutaro.commandclick.util.file.ReadText +import com.puutaro.commandclick.util.image_tools.ScreenSizeCalculator +import com.puutaro.commandclick.util.map.CmdClickMap +import com.puutaro.commandclick.util.map.FilePrefixGetter +import com.puutaro.commandclick.util.state.FannelInfoTool +import com.puutaro.commandclick.util.str.PairListTool +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import java.io.File + + +class EditComponentListAdapter( + private val fragment: Fragment?, + val fannelInfoMap: Map, + val setReplaceVariableMap: Map?, + val listIndexConfigMap: Map?, + val busyboxExecutor: BusyboxExecutor?, + val editListMap: Map, + var lineMapList: MutableList>, + var fannelContentsList: List?, +): RecyclerView.Adapter() +{ + private val context = fragment?.context + private val maxTakeSize = 150 + private val listLimitSize = 300 + private val editExecuteAlways = SettingVariableSelects.EditExecuteSelects.ALWAYS.name + val initSettingValMap = RecordNumToMapNameValueInHolder.parse( + fannelContentsList, + CommandClickScriptVariable.SETTING_SEC_START, + CommandClickScriptVariable.SETTING_SEC_END, + ) + val initCmdValMap = RecordNumToMapNameValueInHolder.parse( + fannelContentsList, + CommandClickScriptVariable.CMD_SEC_START, + CommandClickScriptVariable.CMD_SEC_END, + ) + val totalSettingValMap = + (initSettingValMap ?: emptyMap()) + (initCmdValMap ?: emptyMap()) + val footerKeyPairListConMap: MutableMap = mutableMapOf() +// private val busyboxExecutor = editFragmentRef.get()?.busyboxExecutor + +// private val listIndexConfigMap = +// editFragmentRef.get()?.listIndexConfigMap +// ?: emptyMap() +// private val clickConfigMap = ClickSettingsForListIndex.makeClickConfigMap( +// listIndexConfigMap +// ) + private val layoutConfigMap = LayoutSettingsForListIndex.getLayoutConfigMap( + listIndexConfigMap + ) + private val layoutMargin = layoutConfigMap.get( + LayoutSettingsForListIndex.LayoutSettingKey.MARGIN.key + ).let { + try{ + it?.toInt()?.let { + ScreenSizeCalculator.toDp( + context, + it, + ) + } + } catch (e: Exception){ + null + } + } + private val layoutElevation = layoutConfigMap.get( + LayoutSettingsForListIndex.LayoutSettingKey.ELEVATION.key + ).let { + try{ + it?.toFloat()?.let { + ScreenSizeCalculator.toDpForFloat( + context, + it, + ) + } + } catch (e: Exception){ + null + } + } + + fun getCurrentSettingVals( + settingValName: String, + ): String? { + val curSettingValsMap = RecordNumToMapNameValueInHolder.parse( + fannelContentsList, + CommandClickScriptVariable.SETTING_SEC_START, + CommandClickScriptVariable.SETTING_SEC_END, + ) ?: emptyMap() + val curCmdValsMap = RecordNumToMapNameValueInHolder.parse( + fannelContentsList, + CommandClickScriptVariable.CMD_SEC_START, + CommandClickScriptVariable.CMD_SEC_END, + ) ?: emptyMap() + val totalSettingValsMap = curSettingValsMap + curCmdValsMap + return totalSettingValsMap.get(settingValName) + } + private val viewLayoutPath = ListSettingsForListIndex.ViewLayoutPathManager.getViewLayoutPath( + fannelInfoMap, + setReplaceVariableMap, + editListMap, + ListSettingsForListIndex.ListSettingKey.VIEW_LAYOUT_PATH.key, + ) + private val frameMapListToLinearMapList = ListSettingsForListIndex.ViewLayoutPathManager.parse( + fannelInfoMap, + setReplaceVariableMap, + viewLayoutPath + ) + private val frameMap = frameMapListToLinearMapList?.first ?: emptyMap() + private val frameTagToLinearKeysListMap = frameMapListToLinearMapList?.second ?: emptyMap() + var deleteConfigMap: Map = mapOf() + private var recentAppDirPath = String() + private var filterPrefix = String() + private var filterSuffix = String() + + init { + if(lineMapList.size == 0) { + setListProperty() + } + } + + class ListIndexListViewHolder( + val view: View + ): RecyclerView.ViewHolder(view) { + val materialCardView = + view.findViewById( + com.puutaro.commandclick.R.id.edit_component_adapter_mterial_card_view + ) + var keyPairListConMap: MutableMap = mutableMapOf() + var srcTitle = String() + var srcCon = String() + var srcImage = String() + } + + override fun getItemId(position: Int): Long { + setHasStableIds(true) + return super.getItemId(position) + } + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): ListIndexListViewHolder { + val layoutInflater = LayoutInflater.from(parent.context) + val itemView = layoutInflater.inflate( + com.puutaro.commandclick.R.layout.list_index_edit_adapter_layout, + parent, + false + ) + return ListIndexListViewHolder( + itemView + ) + } + + override fun getItemCount(): Int = lineMapList.size + + companion object { + + private val typeSeparator = EditComponent.Template.typeSeparator + private val tagKey = EditComponent.Template.EditComponentKey.TAG.key + private val isConsecKey = EditComponent.Template.EditComponentKey.IS_CONSEC.key + fun makeLinearFrameKeyPairsList( + linearFrameKeyPairsListCon: String? + ): List> { + return CmdClickMap.createMap( + linearFrameKeyPairsListCon, + typeSeparator + ) + } + } + + override fun onBindViewHolder( + holder: ListIndexListViewHolder, + listIndexPosition: Int + ) { + if( + context == null + ) return + if( + listIndexPosition > listLimitSize + ) return + initListProperty(listIndexPosition) + val lineMap = lineMapList[listIndexPosition] + holder.srcTitle = lineMap.get( + ListSettingsForListIndex.MapListPathManager.Key.SRC_TITLE.key + ) ?: String() + holder.srcCon = lineMap.get( + ListSettingsForListIndex.MapListPathManager.Key.SRC_CON.key + ) ?: String() + holder.srcImage = lineMap.get( + ListSettingsForListIndex.MapListPathManager.Key.SRC_IMAGE.key + ) ?: String() + val frameTag = lineMap.get( + ListSettingsForListIndex.MapListPathManager.Key.VIEW_LAYOUT_TAG.key + ).let { + if( + !it.isNullOrEmpty() + ) return@let it + editListMap.get( + ListSettingsForListIndex.ListSettingKey.DEFAULT_FRAME_TAG.key + ) + } + if( + frameTag.isNullOrEmpty() + ) return + CoroutineScope(Dispatchers.IO).launch { + val frameKeyPairsConSrc = withContext(Dispatchers.IO) { + frameMap.get(frameTag) + + } + val frameKeyPairsCon = withContext(Dispatchers.IO) { + EditComponent.Template.ReplaceHolder.replaceHolder( + frameKeyPairsConSrc, + holder.srcTitle, + holder.srcCon, + holder.srcImage, + holder.bindingAdapterPosition, + ) + } + val frameKeyPairsList = withContext(Dispatchers.IO) { + makeLinearFrameKeyPairsList( + frameKeyPairsCon, + ) + } +// FileSystems.writeFile( +// File(UsePath.cmdclickDefaultAppDirPath, "lviewLayout_inadapter.txt").absolutePath, +// listOf( +// "indexListMap: ${indexListMap}", +// "frameMap: ${frameMap}", +// "frameKeyMap: ${frameKeyPairsList}", +// "linearMapList: ${frameTagToLinearKeysListMap}", +// ).joinToString("\n\n") +// ) + val materialCardView = withContext(Dispatchers.Main) { + holder.materialCardView.apply { + removeAllViews() + layoutElevation?.let { + elevation = it + } + } + } +// GridLayoutManager + withContext(Dispatchers.Main) { + val cardLinearParams = + materialCardView.layoutParams as GridLayoutManager.LayoutParams + layoutMargin?.let { + cardLinearParams.setMargins(it) + } + } + withContext(Dispatchers.Main) { + val frameFrameLayout = EditFrameMaker.make( + context, + fannelInfoMap, + setReplaceVariableMap, + busyboxExecutor, + frameKeyPairsList, + ViewGroup.LayoutParams.MATCH_PARENT, + null, + frameTag, + false, + totalSettingValMap, + + ) + val frameKeyList = JsActionKeyManager.JsActionsKey.values().map{ + it.key + } + withContext(Dispatchers.IO) setClickOrTouch@ { + if( + frameFrameLayout == null + ) return@setClickOrTouch + val isConsec = + PairListTool.getValue( + frameKeyPairsList, + isConsecKey, + ) == EditComponent.Template.switchOn + frameKeyList.any { + !PairListTool.getValue( + frameKeyPairsList, + it, + ).isNullOrEmpty() + }.let { + isJsAc -> + if( + !isJsAc + && frameFrameLayout.tag != null + ) { + frameFrameLayout.setBackgroundResource(0) + frameFrameLayout.isClickable = false + return@let + } + holder.keyPairListConMap.put( + frameTag, + frameKeyPairsConSrc + ) + val outValue = TypedValue() + context.theme.resolveAttribute( + android.R.attr.selectableItemBackground, + outValue, + true + ) + frameFrameLayout.setBackgroundResource(outValue.resourceId) + frameFrameLayout.isClickable = true + when(isConsec) { + true -> with (frameFrameLayout) { + setOnTouchListener(android.view.View.OnTouchListener { v, event -> + when (event.action) { + android.view.MotionEvent.ACTION_DOWN -> { + editAdapterTouchDownListener?.onEditAdapterTouchDown( + frameFrameLayout, + holder, + listIndexPosition + ) + } + android.view.MotionEvent.ACTION_UP, + android.view.MotionEvent.ACTION_CANCEL, + -> { + editAdapterTouchUpListener?.onEditAdapterTouchUp( + frameFrameLayout, + holder, + listIndexPosition + ) + v.performClick() + } + } + true + }) + } + else -> frameFrameLayout.setOnClickListener { + editAdapterClickListener?.onEditAdapterClick( + frameFrameLayout, + holder, + listIndexPosition, + ) + } + } + } + } + materialCardView.addView(frameFrameLayout) + } + withContext(Dispatchers.Main) { + val baseLinearParam = LinearLayoutCompat.LayoutParams( + LinearLayoutCompat.LayoutParams.MATCH_PARENT, + LinearLayoutCompat.LayoutParams.WRAP_CONTENT + ).apply { + setMargins(ScreenSizeCalculator.toDp(context,10)) + } + val baseLinearLayout = LinearLayoutCompat(context).apply { + layoutParams = baseLinearParam + orientation = LinearLayoutCompat.VERTICAL + } + frameTagToLinearKeysListMap.get(frameTag)?.forEach { + linearKeys -> + val linearParam = LinearLayoutCompat.LayoutParams( + LinearLayoutCompat.LayoutParams.MATCH_PARENT, + LinearLayoutCompat.LayoutParams.WRAP_CONTENT + ) + val weightSumFloat = 1f + val linearLayout = LinearLayoutCompat(context).apply { + layoutParams = linearParam + weightSum = weightSumFloat + orientation = LinearLayoutCompat.HORIZONTAL + } + val layoutWeight = weightSumFloat / linearKeys.size + linearKeys.forEach setFrame@ { linearFrameKeyPairsListConSrc -> + val linearFrameKeyPairsListCon = withContext(Dispatchers.IO) { + EditComponent.Template.ReplaceHolder.replaceHolder( + linearFrameKeyPairsListConSrc, + holder.srcTitle, + holder.srcCon, + holder.srcImage, + holder.bindingAdapterPosition, + ) + } + val linearFrameKeyPairsList = withContext(Dispatchers.IO) { + makeLinearFrameKeyPairsList( + linearFrameKeyPairsListCon, + ) + } + val linearFrameTag = withContext(Dispatchers.IO) { + PairListTool.getValue( + linearFrameKeyPairsList, + tagKey, + ) ?: String() + } + val linearFrameLayout = EditFrameMaker.make( + context, + fannelInfoMap, + setReplaceVariableMap, + busyboxExecutor, + linearFrameKeyPairsList, + 0, + layoutWeight, + linearFrameTag, + false, + totalSettingValMap + ) ?: return@setFrame + val linearKeyList = JsActionKeyManager.JsActionsKey.values().map{ + it.key + } + withContext(Dispatchers.IO) { + val isConsec = + PairListTool.getValue( + linearFrameKeyPairsList, + isConsecKey, + ) == EditComponent.Template.switchOn + linearKeyList.any { + !PairListTool.getValue( + linearFrameKeyPairsList, + it, + ).isNullOrEmpty() + }.let { + isJsAc -> +// FileSystems.updateFile( +// File(UsePath.cmdclickDefaultAppDirPath, "lSetClick.txt").absolutePath, +// listOf( +// "linearFrameKeyPairsList: ${linearFrameKeyPairsList}", +// "isJsAc: ${isJsAc}", +// "linearFrameLayout.tag: ${linearFrameLayout.tag}", +// +// ).joinToString("\n") +// ) + if( + !isJsAc + && linearFrameLayout.tag != null + ) { + linearFrameLayout.setBackgroundResource(0) + linearFrameLayout.isClickable = false + return@let + } + holder.keyPairListConMap.put( + linearFrameTag, + linearFrameKeyPairsListCon + ) + val outValue = TypedValue() + context.theme.resolveAttribute( + android.R.attr.selectableItemBackground, + outValue, + true + ) + linearFrameLayout.setBackgroundResource(outValue.resourceId) + linearFrameLayout.isClickable = true + when(isConsec) { + true -> + with (linearFrameLayout) { + setOnTouchListener(android.view.View.OnTouchListener { v, event -> + when (event.action) { + android.view.MotionEvent.ACTION_DOWN -> { + editAdapterTouchDownListener?.onEditAdapterTouchDown( + linearFrameLayout, + holder, + listIndexPosition + ) + } + android.view.MotionEvent.ACTION_UP, + android.view.MotionEvent.ACTION_CANCEL, + -> { + editAdapterTouchUpListener?.onEditAdapterTouchUp( + linearFrameLayout, + holder, + listIndexPosition + ) + v.performClick() + } + } + true + }) + } + else -> linearFrameLayout.setOnClickListener { + editAdapterClickListener?.onEditAdapterClick( + linearFrameLayout, + holder, + listIndexPosition, + ) + } + } + + } + } + linearLayout.addView(linearFrameLayout) + } + baseLinearLayout.addView(linearLayout) + } + materialCardView.addView(baseLinearLayout) + + } + withContext(Dispatchers.Main) { + val itemView = holder.itemView + itemView.setOnClickListener { + editAdapterClickListener?.onEditAdapterClick( + itemView, + holder, + listIndexPosition, + ) + } + } + } + } + + var editAdapterClickListener: OnEditAdapterClickListener? = null +// var qrLongClickListener: OnQrLogoLongClickListener? = null + interface OnEditAdapterClickListener { + fun onEditAdapterClick( + itemView: View, + holder: ListIndexListViewHolder, + listIndexPosition: Int, + ) + } + + var editAdapterTouchDownListener: OnEditAdapterTouchDownListener? = null + interface OnEditAdapterTouchDownListener { + fun onEditAdapterTouchDown( + itemView: View, + holder: ListIndexListViewHolder, + listIndexPosition: Int, + ) + } + + var editAdapterTouchUpListener: OnEditAdapterTouchUpListener? = null + interface OnEditAdapterTouchUpListener { + fun onEditAdapterTouchUp( + itemView: View, + holder: ListIndexListViewHolder, + listIndexPosition: Int, + ) + } + + fun handleClickEvent( + editListRecyclerView: RecyclerView, + tag: String, + settingValue: String?, + indexListPosition: Int, + frameOrLinearCon: String, + ){ + updateAndSaveMainFannel( + tag, + settingValue, + frameOrLinearCon, + ) + MapListUpdater.updateLineMapList( + fragment, + fannelInfoMap, + setReplaceVariableMap, + editListRecyclerView, + editListMap, + layoutConfigMap, +// lineMapList, + indexListPosition, + ) + } + + private object MapListUpdater { + fun updateLineMapList( + fragment: Fragment?, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + editListRecyclerView: RecyclerView, + indexListMap: Map, + layoutConfigMap: Map, +// lineMapList: List>, + indexListPosition: Int, + ) { + if ( + indexListPosition == 0 + || fragment == null + ) return + val enableClickUpdate = + LayoutSettingsForListIndex.howClickUpdate( + fannelInfoMap, + setReplaceVariableMap, + layoutConfigMap + ) +// FileSystems.writeFile( +// File(UsePath.cmdclickDefaultAppDirPath, "lclickUpdateEnable.txt").absolutePath, +// listOf( +// "layoutConfigMap: ${layoutConfigMap}", +// "indexListMap: ${indexListMap}", +// "enableClickUpdate: ${enableClickUpdate}", +// ).joinToString("\n") +// ) + if ( + !enableClickUpdate + ) return + execUpdateLineMapList( + fragment, + fannelInfoMap, + setReplaceVariableMap, + editListRecyclerView, + indexListMap, +// lineMapList, + indexListPosition + ) + } + + private fun execUpdateLineMapList( + fragment: Fragment?, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + editRecyclerView: RecyclerView, + indexListMap: Map, +// lineMapList: List>, + bindingAdapterPosition: Int, + ) { + val sortType = ListSettingsForListIndex.getSortType( + fannelInfoMap, + setReplaceVariableMap, + indexListMap + ) + when (sortType) { + ListSettingsForListIndex.SortByKey.SORT, + ListSettingsForListIndex.SortByKey.REVERSE + -> return + + ListSettingsForListIndex.SortByKey.LAST_UPDATE, + -> { + } + } + val editComponentListAdapter = editRecyclerView.adapter as EditComponentListAdapter + val lineMap = + editComponentListAdapter.lineMapList.getOrNull( + bindingAdapterPosition + ) ?: return + val mapListPath = FilePrefixGetter.get( + fannelInfoMap, + setReplaceVariableMap, + indexListMap, + ListSettingsForListIndex.ListSettingKey.MAP_LIST_PATH.key, + ) + MapListFileTool.insertMapFileInFirst( + mapListPath, + lineMap + ) +// FileSystems.writeFile( +// File(UsePath.cmdclickDefaultAppDirPath, "lSort.txt").absolutePath, +// listOf( +// "before: ${lineMapList}\n\n", +// "lineMapList: ${editComponentListAdapter.lineMapList}" +// ).joinToString("\n") +// ) + when(fragment){ + is EditFragment -> BroadcastSender.normalSend( + fragment.context, + BroadCastIntentSchemeForEdit.UPDATE_INDEX_LIST.action + ) + is TerminalFragment -> BroadcastSender.normalSend( + fragment.context, + BroadCastIntentSchemeTerm.EDIT_INDEX_LIST_UPDATE.action + ) + } + + } + } + + private fun updateAndSaveMainFannel( + tag: String, + settingValue: String?, + frameOrLinearCon: String, + ){ + updateMainFannelList( + tag, + settingValue, + ) + MainFannelUpdater.saveFannelCon( + fannelContentsList, + fannelInfoMap, + frameOrLinearCon, + ) + } + + + fun updateMainFannelList( + tag: String, + settingValue: String?, + ){ + val updateSettingValsCon = settingValue?.let { + listOf( + "${tag}=${settingValue}" + ).joinToString("\n") + } ?: String() + initSettingValMap?.contains(tag)?.let{ + if(!it) return@let +// initSettingValMap.put(tag, settingValue) + MainFannelUpdater.makeUpdateMainFannelList( + fannelContentsList, + updateSettingValsCon, + CommandClickScriptVariable.SETTING_SEC_START, + CommandClickScriptVariable.SETTING_SEC_END, + ).let updateFannel@ { + updateFannelList -> + if( + updateFannelList.isNullOrEmpty() + || fannelContentsList == updateFannelList + ) return@updateFannel + fannelContentsList = updateFannelList + } + } + initCmdValMap?.contains(tag)?.let{ + if(!it) return@let +// initCmdValMap.put(tag, settingValue) + MainFannelUpdater.makeUpdateMainFannelList( + fannelContentsList, + updateSettingValsCon, + CommandClickScriptVariable.CMD_SEC_START, + CommandClickScriptVariable.CMD_SEC_END, + ).let updateFannel@ { + updateFannelList -> + if( + updateFannelList.isNullOrEmpty() + || fannelContentsList == updateFannelList + ) return@updateFannel +// FileSystems.writeFile( +// File(UsePath.cmdclickDefaultAppDirPath, "lclickUpdate.txt").absolutePath, +// listOf( +// "tag: ${tag}", +// "settingValue: ${settingValue}\n", +// "frameOrLinearCon: ${frameOrLinearCon}\n", +// "updateFannelList: ${updateFannelList}\n", +// "fannelContentsList: ${fannelContentsList}", +// ).joinToString("\n") +// ) + fannelContentsList = updateFannelList + } + } + } + + fun saveFannelCon() { + MainFannelUpdater.execSaveFannelCon( + fannelInfoMap, + fannelContentsList + ) + } + + + object MainFannelUpdater { + + fun saveFannelCon( + saveFannelConList: List?, + fannelInfoMap: Map, + frameOrLinearCon: String, + ) { + if ( + saveFannelConList.isNullOrEmpty() + ) return + val isSave = PairListTool.getValue( + makeLinearFrameKeyPairsList( + frameOrLinearCon, + ), +// CmdClickMap.createMap( +// frameOrLinearCon, +// EditComponent.Template.typeSeparator +// ), + EditComponent.Template.EditComponentKey.ON_SAVE.key, + ) == EditComponent.Template.switchOn + if (!isSave) return + execSaveFannelCon( + fannelInfoMap, + saveFannelConList, + ) + } + + fun execSaveFannelCon( + fannelInfoMap: Map, + saveFannelConList: List?, + ){ + if( + saveFannelConList.isNullOrEmpty() + ) return + val fannelFile = FannelInfoTool.getCurrentFannelName(fannelInfoMap).let { + File(UsePath.cmdclickDefaultAppDirPath, it) + } + if( + ReadText(fannelFile.absolutePath).textToList() == saveFannelConList + ) return + FileSystems.writeFile( + fannelFile.absolutePath, + saveFannelConList.joinToString("\n") + ) + } + fun makeUpdateMainFannelList( + fannelContentsListSrc: List?, + updateSettingValsCon: String?, + startHolder: String, + endHolder: String, + ): List? { + if ( + updateSettingValsCon.isNullOrEmpty() + || fannelContentsListSrc.isNullOrEmpty() + ) return null + return CommandClickVariables.replaceVariableInHolder( + fannelContentsListSrc, + updateSettingValsCon, + startHolder, + endHolder, + ) + } + } + + private fun makeFileConList( + fileName: String, + ): List { + if ( + listIndexConfigMap.isNullOrEmpty() + ) return emptyList() + 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, + editExecuteValueForInstallFannel: String, + ): Int { + if( + context == null + ) return com.puutaro.commandclick.R.color.fannel_icon_color + if( + editExecuteValueForInstallFannel == editExecuteAlways + ) return com.puutaro.commandclick.R.color.terminal_color +// val languageType = +// CommandClickVariables.judgeJsOrShellFromSuffix(fileName) + +// val languageTypeToSectionHolderMap = +// CommandClickScriptVariable.LANGUAGE_TYPE_TO_SECTION_HOLDER_MAP.get(languageType) +// val settingSectionStart = languageTypeToSectionHolderMap?.get( +// CommandClickScriptVariable.HolderTypeName.SETTING_SEC_START +// ) as String +// val settingSectionEnd = languageTypeToSectionHolderMap.get( +// CommandClickScriptVariable.HolderTypeName.SETTING_SEC_END +// ) as String + val settingVariableList = CommandClickVariables.extractValListFromHolder( + fileConList, + CommandClickScriptVariable.SETTING_SEC_START, + CommandClickScriptVariable.SETTING_SEC_END, +// settingSectionStart, +// settingSectionEnd + ) + val editExecuteValue = SettingVariableReader.getStrValue( + settingVariableList, + CommandClickScriptVariable.EDIT_EXECUTE, + CommandClickScriptVariable.EDIT_EXECUTE_DEFAULT_VALUE + ) + if( + editExecuteValue + == SettingVariableSelects.EditExecuteSelects.ALWAYS.name + ) return com.puutaro.commandclick.R.color.terminal_color + return com.puutaro.commandclick.R.color.fannel_icon_color + } + +// private suspend fun qrLogoSetHandler( +// holder: ListIndexListViewHolder, +// recentAppDirPath: String, +// ){ +// val itemName = holder.fileName.split("\t").lastOrNull() ?: String() +// val okSetIcon = QrLogoSettingsForQrDialog.QrIconSettingKeysForQrDialog.set( +// context, +//// filterDir, +//// listIndexTypeKey, +// itemName, +// holder.fileContentsQrLogoView, +// holder.fileContentsQrLogoLinearLayout, +// qrLogoConfigMap, +// iconConfigMap, +// itemNameToNameColorConfigMap, +// textImagePngBitMap +// ) +// if(okSetIcon) return +// val qrMode = QrModeSettingKeysForQrDialog.getQrMode(qrDialogConfigMap) +// when(qrMode){ +// QrModeSettingKeysForQrDialog.QrMode.TSV_EDIT -> {} +// QrModeSettingKeysForQrDialog.QrMode.NORMAL, +// QrModeSettingKeysForQrDialog.QrMode.FANNEL_REPO -> { +// val qrLogoHandlerArgsMaker = withContext(Dispatchers.IO) { +// QrDialogConfig.QrLogoHandlerArgsMaker( +//// editFragmentRef.get(), +// recentAppDirPath, +// qrLogoConfigMap, +//// filterDir, +// holder.fileName, +// holder.fileContentsQrLogoView, +// ) +// } +// withContext(Dispatchers.Main) { +// QrLogoSettingsForQrDialog.setQrLogoHandler( +// context, +// qrLogoHandlerArgsMaker +// ) +// } +// } +// } +// } + + private fun initListProperty( + listIndexPosition: Int, + ){ + if( + listIndexPosition != 0 + ) return +// FileSystems.writeFile( +// File(UsePath.cmdclickDefaultAppDirPath, "layout.txt").absolutePath, +// listOf( +// "frameMapListToLinearMapList: ${frameMapListToLinearMapList}", +// "frameMap: ${frameMap}", +// "linearMapList: ${frameTagToLinearKeysListMap}", +// ).joinToString("\n\n") +// ) + setListProperty() + } + + private fun setListProperty(){ + recentAppDirPath = UsePath.cmdclickDefaultAppDirPath +// performMap = PerformSettingForListIndex.makePerformMap( +// listIndexConfigMap +// ) +// indexListMap = ListIndexEditConfig.getConfigKeyMap( +// listIndexConfigMap, +// ListIndexEditConfig.ListIndexConfigKey.LIST.key +// ) +// FileSystems.writeFile( +// File(UsePath.cmdclickDefaultAppDirPath, "getfile_index_list.txt").absolutePath, +// listOf( +// "listIndexConfigMap: ${listIndexConfigMap}", +// "indexListMap: ${indexListMap}", +// ).joinToString("\n\n\n") +// ) + deleteConfigMap = ListIndexEditConfig.getConfigKeyMap( + listIndexConfigMap, + ListIndexEditConfig.ListIndexConfigKey.DELETE.key + ) +// listIndexTypeKey = editFragmentRef.get()?.let { +// ListIndexEditConfig.getListIndexType( +// it +// ) +// } ?: TypeSettingsForListIndex.ListIndexTypeKey.NORMAL +// filterDir = editFragmentRef.get()?.let { +// ListSettingsForListIndex.ListIndexListMaker.getFilterDir( +// it, +// indexListMap, +//// listIndexTypeKey +// ) +// } ?: String() + filterPrefix = + FilePrefixGetter.get( + fannelInfoMap, + setReplaceVariableMap, + editListMap, + ListSettingsForListIndex.ListSettingKey.PREFIX.key + ) ?: String() + filterSuffix = + FilePrefixGetter.get( + fannelInfoMap, + setReplaceVariableMap, + editListMap, + ListSettingsForListIndex.ListSettingKey.SUFFIX.key + ) ?: String() + } + fun getLayoutConfigMap(): Map { + return layoutConfigMap + } +} diff --git a/app/src/main/java/com/puutaro/commandclick/component/adapter/GridListAdapter.kt b/app/src/main/java/com/puutaro/commandclick/component/adapter/GridListAdapter.kt new file mode 100644 index 000000000..b80ec24a1 --- /dev/null +++ b/app/src/main/java/com/puutaro/commandclick/component/adapter/GridListAdapter.kt @@ -0,0 +1,291 @@ +package com.puutaro.commandclick.component.adapter + +import android.animation.AnimatorSet +import android.animation.ValueAnimator +import android.graphics.drawable.Drawable +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.ViewTreeObserver +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.bumptech.glide.RequestBuilder +import com.bumptech.glide.load.engine.DiskCacheStrategy +import com.daimajia.androidanimations.library.Techniques +import com.daimajia.androidanimations.library.YoYo +import com.google.android.material.imageview.ShapeableImageView +import com.puutaro.commandclick.R +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext + +class GridListAdapter( + val imagePathList: List, +): RecyclerView.Adapter() { + + class GridListViewHolder(val view: View): RecyclerView.ViewHolder(view) { + val itemImageView = view.findViewById(R.id.grid_list_v2_adapter_image) + } + + override fun getItemCount(): Int = imagePathList.size + + override fun getItemId(position: Int): Long { + //return super.getItemId(position) + return position.toLong() + } + + override fun getItemViewType(position: Int): Int { + //return super.getItemViewType(position) + return position + } + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): GridListViewHolder { + val layoutInflater = LayoutInflater.from(parent.context) + val itemView = layoutInflater.inflate( + R.layout.grid_list_v2_adapter_layout, + parent, + false + ) + val promptListViewHolder = + GridListViewHolder(itemView) + itemView.setOnClickListener { + itemClickListener?.onItemClick(promptListViewHolder) + } + return promptListViewHolder + } + + private val cornerRateMap = makeCornerRateMap() + + override fun onBindViewHolder( + holder: GridListViewHolder, + position: Int + ) { + CoroutineScope(Dispatchers.IO).launch { + val imagePath = withContext(Dispatchers.IO){ + imagePathList.get(position) + } ?: return@launch + withContext(Dispatchers.Main){ + val itemImageView = holder.itemImageView + val itemImageContext = itemImageView.context + itemImageView.apply { + viewTreeObserver?.addOnPreDrawListener(object : + ViewTreeObserver.OnPreDrawListener { + override fun onPreDraw(): Boolean { + viewTreeObserver?.removeOnPreDrawListener(this) + CoroutineScope(Dispatchers.Main).launch { + // Remove listener because we don't want this called before _every_ frame +// val cornerFirstStopAnimator = withContext(Dispatchers.IO) { +// makeCornerAnimation( +// itemImageView, +// cornerRateMap, +// 100L, +// 0f, +// ) +// } +// val cornerChangeAnimator = withContext(Dispatchers.IO) { +// makeCornerAnimation( +// +// itemImageView, +// cornerRateMap, +// 1L, +// null, +// ) +// } + // アニメーションセットを作成し、順に再生 + withContext(Dispatchers.Main) { + setShape( + itemImageView, + cornerRateMap, + ) +// val animatorSet = AnimatorSet().apply { +// playSequentially( +// cornerFirstStopAnimator, +// cornerChangeAnimator +// ) +// } +// animatorSet.start() + } + } + return true // true because we don't want to skip this frame + } + }) + } +// withContext(Dispatchers.IO){ +// delay(200) +// } + + val requestBuilder: RequestBuilder = + Glide.with(itemImageContext) + .asDrawable() + .sizeMultiplier(0.1f) + Glide + .with(itemImageContext) + .load(imagePath) + .skipMemoryCache( true ) + .diskCacheStrategy(DiskCacheStrategy.NONE) + .thumbnail( requestBuilder ) + .into(itemImageView) +// YoYo.with(Techniques.RotateInUpRight) +// .duration(150) +// .repeat(0) +// .playOn(itemImageView) + } + withContext(Dispatchers.Main){ + holder.itemView.setOnClickListener { + itemClickListener?.onItemClick( + holder + ) + } + } + } + } + + var itemClickListener: OnItemClickListener? = null + interface OnItemClickListener { + fun onItemClick(holder: GridListViewHolder) + } + + private fun makeCornerAnimation( + itemImageView: ShapeableImageView, + curCornerRateMap: Map, + duration: Long, + fixAnimateValue: Float? = null + ): ValueAnimator { + val curWidth = itemImageView.width + val cornerChangeAnimator = ValueAnimator.ofFloat(0f, duration.toFloat()).apply setCornerChange@{ + this.duration = duration + this.addUpdateListener { valueAnimator -> +// val radius = valueAnimator.animatedValue as Float + val shapeAppearanceModel = + itemImageView.shapeAppearanceModel.toBuilder() + .setTopLeftCornerSize( + culcRadius( + curWidth, + makeValueFunc( + duration, + fixAnimateValue ?: valueAnimator.animatedValue as Float, + curCornerRateMap[CornerKey.TOP_LEFT] as Float, + ) +// ((2 * duration - cornerChangeAnimator.animatedValue as Float) * 0.5f) / duration + ) + ) + .setTopRightCornerSize( + culcRadius( + curWidth, + makeValueFunc( + duration, + fixAnimateValue ?: valueAnimator.animatedValue as Float, + curCornerRateMap[CornerKey.TOP_RIGHT] as Float, + ) +// ((2 * duration - cornerChangeAnimator.animatedValue as Float) * 0.05f) / duration + ) + ) + .setBottomRightCornerSize( + culcRadius( + curWidth, + makeValueFunc( + duration, + fixAnimateValue ?: valueAnimator.animatedValue as Float, + curCornerRateMap[CornerKey.BOTTOM_RIGHT] as Float, + ) +// ((2 * duration - cornerChangeAnimator.animatedValue as Float) * 0.5f) / duration + ) + ) + .setBottomLeftCornerSize( + culcRadius( + curWidth, + makeValueFunc( + duration, + fixAnimateValue ?: valueAnimator.animatedValue as Float, + curCornerRateMap[CornerKey.BOTTOM_LEFT] as Float, + ) +// ((2 * duration - cornerChangeAnimator.animatedValue as Float) * 0.05f) / duration + ) + ) + .build() + itemImageView.shapeAppearanceModel = shapeAppearanceModel + } + } + return cornerChangeAnimator + } + + private fun setShape( + itemImageView: ShapeableImageView, + curCornerRateMap: Map, + ){ + val curWidth = itemImageView.width + val shapeAppearanceModel = + itemImageView.shapeAppearanceModel.toBuilder() + .setTopLeftCornerSize( + culcRadius( + curWidth, + curCornerRateMap[CornerKey.TOP_LEFT] as Float + ) + ) + .setTopRightCornerSize( + culcRadius( + curWidth, + curCornerRateMap[CornerKey.TOP_RIGHT] as Float + ) + ) + .setBottomRightCornerSize( + culcRadius( + curWidth, + curCornerRateMap[CornerKey.BOTTOM_RIGHT] as Float, + ) + ) + .setBottomLeftCornerSize( + culcRadius( + curWidth, + curCornerRateMap[CornerKey.BOTTOM_LEFT] as Float, + ) + ) + .build() + itemImageView.shapeAppearanceModel = shapeAppearanceModel + } + + private enum class CornerKey{ + TOP_LEFT, + TOP_RIGHT, + BOTTOM_RIGHT, + BOTTOM_LEFT, + } + + private fun makeValueFunc( + duration: Long, + curDuration: Float, + goalRRate: Float, + ): Float { + val value = let { + val start = 3000F + val end = duration.toFloat() + start - ( (start - end) * curDuration / duration ) + } + return (value * goalRRate) / duration + } + + private fun makeCornerRateMap(): Map { + val surplus = (0..1).random() + val cornerRateList = (1..4).map { + if (it % 2 == surplus) 0.4f else 0.02f + } + return mapOf( + CornerKey.TOP_LEFT to cornerRateList[0], + CornerKey.TOP_RIGHT to cornerRateList[1], + CornerKey.BOTTOM_RIGHT to cornerRateList[2], + CornerKey.BOTTOM_LEFT to cornerRateList[3], + ) + } + + private fun culcRadius( + width: Int, + rate: Float, + ): Float { + return width * rate + } +} \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/component/adapter/HistoryListAdapter.kt b/app/src/main/java/com/puutaro/commandclick/component/adapter/HistoryListAdapter.kt index 7b570c24c..0b2877439 100644 --- a/app/src/main/java/com/puutaro/commandclick/component/adapter/HistoryListAdapter.kt +++ b/app/src/main/java/com/puutaro/commandclick/component/adapter/HistoryListAdapter.kt @@ -45,33 +45,33 @@ class HistoryListAdapter( companion object { val listHistoryPath = File(UsePath.fannelSystemDirPath, "listHistory.tsv").absolutePath - fun saveItemToList( - context: Context?, - menuName: String - ) { - val sharePref = FannelInfoTool.getSharePref(context) - CoroutineScope(Dispatchers.IO).launch { - val currentFannelName = withContext(Dispatchers.IO) { - FannelInfoTool.getStringFromFannelInfo( - sharePref, - FannelInfoSetting.current_fannel_name - ) - } - val listHistoryPath = withContext(Dispatchers.IO) { - ScriptPreWordReplacer.replace( - listHistoryPath, - currentFannelName, - ) - } - withContext(Dispatchers.IO) { - val insertLine = "${menuName}\t${LocalDateTime.now()}" - TsvTool.insertByLastUpdate( - listHistoryPath, - insertLine - ) - } - } - } +// fun saveItemToList( +// context: Context?, +// menuName: String +// ) { +// val sharePref = FannelInfoTool.getSharePref(context) +// CoroutineScope(Dispatchers.IO).launch { +// val currentFannelName = withContext(Dispatchers.IO) { +// FannelInfoTool.getStringFromFannelInfo( +// sharePref, +// FannelInfoSetting.current_fannel_name +// ) +// } +// val listHistoryPath = withContext(Dispatchers.IO) { +// ScriptPreWordReplacer.replace( +// listHistoryPath, +// currentFannelName, +// ) +// } +// withContext(Dispatchers.IO) { +// val insertLine = "${menuName}\t${LocalDateTime.now()}" +// TsvTool.insertByLastUpdate( +// listHistoryPath, +// insertLine +// ) +// } +// } +// } } override fun getView( diff --git a/app/src/main/java/com/puutaro/commandclick/component/adapter/ListIndexAdapter.kt b/app/src/main/java/com/puutaro/commandclick/component/adapter/ListIndexAdapter.kt deleted file mode 100644 index 0ce055b26..000000000 --- a/app/src/main/java/com/puutaro/commandclick/component/adapter/ListIndexAdapter.kt +++ /dev/null @@ -1,526 +0,0 @@ -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 -import androidx.core.view.isVisible -import androidx.recyclerview.widget.RecyclerView -import com.google.android.material.card.MaterialCardView -import com.puutaro.commandclick.common.variable.path.UsePath -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.custom_view.MagicTextView -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 -import com.puutaro.commandclick.proccess.qr.QrDialogConfig -import com.puutaro.commandclick.proccess.qr.qr_dialog_config.config_settings.QrLogoSettingsForQrDialog -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.ReadText -import com.puutaro.commandclick.util.map.CmdClickMap -import com.puutaro.commandclick.util.map.FilePrefixGetter -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext -import java.io.File -import java.lang.ref.WeakReference - - -class ListIndexAdapter( - private val editFragmentRef: WeakReference, - var listIndexList: MutableList, -): RecyclerView.Adapter() -{ - private val fannelInfoMap = editFragmentRef.get()?.fannelInfoMap - private val context = editFragmentRef.get()?.context -// private val activity = editFragment.activity - private val maxTakeSize = 150 - private val listLimitSize = 300 - private val editExecuteAlways = SettingVariableSelects.EditExecuteSelects.ALWAYS.name - private val busyboxExecutor = editFragmentRef.get()?.busyboxExecutor - - private val listIndexConfigMap = editFragmentRef.get()?.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 = - editFragmentRef.get()?.qrDialogConfig ?: mapOf() - private val textImagePngBitMap = ImageAdapterTool.makeFileMarkBitMap( - editFragmentRef.get()?.context, - AssetsFileManager.textImagePingPath - ) - private val qrLogoConfigMap = QrLogoSettingsForQrDialog.makeLogoConfigMap( - qrDialogConfigMap - ) - private val iconConfigMap = - QrLogoSettingsForQrDialog.QrIconSettingKeysForQrDialog.makeIconConfigMap( - qrLogoConfigMap - ) - private val itemNameToNameColorConfigMap = - QrLogoSettingsForQrDialog.QrIconSettingKeysForQrDialog.makeIconNameConfigMap( - editFragmentRef.get()?.setReplaceVariableMap, - fannelInfoMap, - iconConfigMap, - ) - private var recentAppDirPath = String() - private var filterDir = String() - private var filterPrefix = String() - private var filterSuffix = String() - - init { - if(listIndexList.size == 0) { - setListProperty() - } - } - - companion object { - var indexListMap: Map = mapOf() - var deleteConfigMap: Map = mapOf() - var listIndexTypeKey = TypeSettingsForListIndex.ListIndexTypeKey.NORMAL - } - class ListIndexListViewHolder( -// 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( - 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 - ) - val fileDescTextView = - view.findViewById( - com.puutaro.commandclick.R.id.list_index_edit_adapter_file_desc - ) - var fileName = String() - } - - override fun getItemId(position: Int): Long { - setHasStableIds(true) - return super.getItemId(position) - } - - override fun onCreateViewHolder( - parent: ViewGroup, - viewType: Int - ): ListIndexListViewHolder { - val layoutInflater = LayoutInflater.from(parent.context) - val itemView = layoutInflater.inflate( - com.puutaro.commandclick.R.layout.list_index_edit_adapter_layout, - parent, - false - ) - return ListIndexListViewHolder( -// activity, - itemView - ) - } - - override fun getItemCount(): Int = listIndexList.size - - override fun onBindViewHolder( - holder: ListIndexListViewHolder, - listIndexPosition: Int - ) { - if( - listIndexPosition > listLimitSize - ) return - initListProperty(listIndexPosition) - CoroutineScope(Dispatchers.IO).launch { - withContext(Dispatchers.Main) { - ListIndexEditConfig.setCheckToMaterialCardView( - holder.materialCardView, - checkItemConfigMap, - listIndexList, - listIndexPosition, - ) - } - - val fileNameOrInstallFannelLine = - listIndexList.getOrNull(listIndexPosition) - ?: return@launch - holder.fileName = FannelListVariable.getFannelName( - fileNameOrInstallFannelLine - ) - val fileNameText = withContext(Dispatchers.Main) { - ListIndexEditConfig.makeFileNameText( - listIndexTypeKey, - holder.fileNameTextView, - holder.fileName, - listIndexConfigMap, - busyboxExecutor, - ) - } - 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 = String() -// when( -// listIndexTypeKey -// ){ -// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL -// -> FannelListVariable.getEditExecute( -// fileNameOrInstallFannelLine -// ) -// else -> String() -// } - setFileContentsBackColor( - fileConList, -// fileNameOrInstallFannelLine, - editExecuteValueForInstallFannel, - ) - } - - withContext(Dispatchers.Main) { - context?.let { - holder.fileContentsQrLogoLinearLayout.backgroundTintList = - it.getColorStateList(fileConBackGroundColorInt) - } - } - withContext(Dispatchers.Main) { - QrLogoSettingsForQrDialog.OneSideLength.setLayout( - editFragmentRef.get(), - holder.baseLinearLayout, - holder.materialCardView, - holder.fileContentsQrLogoLinearLayout, - qrLogoConfigMap, - layoutType - ) - } - withContext(Dispatchers.Main) { - val disableQrLogo = - QrLogoSettingsForQrDialog.Disable.how(qrLogoConfigMap) - if( - disableQrLogo - ) return@withContext - qrLogoSetHandler( - holder, - recentAppDirPath, - ) - } - withContext(Dispatchers.Main) { - val itemView = holder.itemView - itemView.setOnLongClickListener { - itemLongClickListener?.onItemLongClick( - itemView, - holder, - listIndexPosition - ) - true - } - itemView.setOnClickListener { - fileNameClickListener?.onFileNameClick( - itemView, - holder, - listIndexPosition, - ) - } - val fileContentsQrLogoView = holder.fileContentsQrLogoView - fileContentsQrLogoView.setOnClickListener { - fileQrLogoClickListener?.onFileQrLogoClick( - itemView, - holder, - listIndexPosition - ) - } - fileContentsQrLogoView.setOnLongClickListener { - qrLongClickListener?.onQrLongClick( - fileContentsQrLogoView, - holder, - listIndexPosition - ) - true - } - } - } - } - - var fileNameClickListener: OnFileNameItemClickListener? = null - var qrLongClickListener: OnQrLogoLongClickListener? = null - interface OnFileNameItemClickListener { - fun onFileNameClick( - itemView: View, - holder: ListIndexListViewHolder, - listIndexPosition: Int, - ) - } - - interface OnQrLogoLongClickListener { - fun onQrLongClick( - imageView: AppCompatImageView, - holder: ListIndexListViewHolder, - listIndexPosition: Int - ) - } - - var fileQrLogoClickListener: OnFileQrLogoItemClickListener? = null - interface OnFileQrLogoItemClickListener { - fun onFileQrLogoClick( - itemView: View, - holder: ListIndexListViewHolder, - listIndexPosition: Int, - ) - } - - var itemLongClickListener: OnItemLongClickListener? = null - interface OnItemLongClickListener { - fun onItemLongClick( - itemView: View, - holder: ListIndexListViewHolder, - listIndexPosition: Int - ) - } - - 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, - editExecuteValueForInstallFannel: String, - ): Int { - if( - context == null - ) return com.puutaro.commandclick.R.color.fannel_icon_color - if( - editExecuteValueForInstallFannel == editExecuteAlways - ) return com.puutaro.commandclick.R.color.terminal_color -// val languageType = -// CommandClickVariables.judgeJsOrShellFromSuffix(fileName) - -// val languageTypeToSectionHolderMap = -// CommandClickScriptVariable.LANGUAGE_TYPE_TO_SECTION_HOLDER_MAP.get(languageType) -// val settingSectionStart = languageTypeToSectionHolderMap?.get( -// CommandClickScriptVariable.HolderTypeName.SETTING_SEC_START -// ) as String -// val settingSectionEnd = languageTypeToSectionHolderMap.get( -// CommandClickScriptVariable.HolderTypeName.SETTING_SEC_END -// ) as String - val settingVariableList = CommandClickVariables.extractValListFromHolder( - fileConList, - CommandClickScriptVariable.SETTING_SEC_START, - CommandClickScriptVariable.SETTING_SEC_END, -// settingSectionStart, -// settingSectionEnd - ) - val editExecuteValue = SettingVariableReader.getStrValue( - settingVariableList, - CommandClickScriptVariable.EDIT_EXECUTE, - CommandClickScriptVariable.EDIT_EXECUTE_DEFAULT_VALUE - ) - if( - editExecuteValue - == SettingVariableSelects.EditExecuteSelects.ALWAYS.name - ) return com.puutaro.commandclick.R.color.terminal_color - return com.puutaro.commandclick.R.color.fannel_icon_color - } - - private suspend fun qrLogoSetHandler( - holder: ListIndexListViewHolder, - recentAppDirPath: String, - ){ - val itemName = holder.fileName.split("\t").lastOrNull() ?: String() - val okSetIcon = QrLogoSettingsForQrDialog.QrIconSettingKeysForQrDialog.set( - context, - filterDir, - listIndexTypeKey, - itemName, - holder.fileContentsQrLogoView, - holder.fileContentsQrLogoLinearLayout, - qrLogoConfigMap, - iconConfigMap, - itemNameToNameColorConfigMap, - textImagePngBitMap - ) - if(okSetIcon) return - val qrMode = QrModeSettingKeysForQrDialog.getQrMode(qrDialogConfigMap) - when(qrMode){ - QrModeSettingKeysForQrDialog.QrMode.TSV_EDIT -> {} - QrModeSettingKeysForQrDialog.QrMode.NORMAL, - QrModeSettingKeysForQrDialog.QrMode.FANNEL_REPO -> { - val qrLogoHandlerArgsMaker = withContext(Dispatchers.IO) { - QrDialogConfig.QrLogoHandlerArgsMaker( -// editFragmentRef.get(), - recentAppDirPath, - qrLogoConfigMap, - filterDir, - holder.fileName, - holder.fileContentsQrLogoView, - ) - } - withContext(Dispatchers.Main) { - QrLogoSettingsForQrDialog.setQrLogoHandler( - context, - qrLogoHandlerArgsMaker - ) - } - } - } - } - - private fun initListProperty( - listIndexPosition: Int, - ){ - if( - listIndexPosition != 0 - ) return - setListProperty() - } - - private fun setListProperty(){ - recentAppDirPath = UsePath.cmdclickDefaultAppDirPath - performMap = PerformSettingForListIndex.makePerformMap( - listIndexConfigMap - ) - indexListMap = ListIndexEditConfig.getConfigKeyMap( - listIndexConfigMap, - ListIndexEditConfig.ListIndexConfigKey.LIST.key - ) -// FileSystems.writeFile( -// File(UsePath.cmdclickDefaultAppDirPath, "getfile_index_list.txt").absolutePath, -// listOf( -// "listIndexConfigMap: ${listIndexConfigMap}", -// "indexListMap: ${indexListMap}", -// ).joinToString("\n\n\n") -// ) - deleteConfigMap = ListIndexEditConfig.getConfigKeyMap( - listIndexConfigMap, - ListIndexEditConfig.ListIndexConfigKey.DELETE.key - ) - listIndexTypeKey = editFragmentRef.get()?.let { - ListIndexEditConfig.getListIndexType( - it - ) - } ?: TypeSettingsForListIndex.ListIndexTypeKey.NORMAL - filterDir = editFragmentRef.get()?.let { - ListSettingsForListIndex.ListIndexListMaker.getFilterDir( - it, - indexListMap, - listIndexTypeKey - ) - } ?: String() - filterPrefix = editFragmentRef.get()?.let { - FilePrefixGetter.get( - it, - indexListMap, - ListSettingsForListIndex.ListSettingKey.PREFIX.key - ) - } ?: String() - filterSuffix = editFragmentRef.get()?.let { - FilePrefixGetter.get( - it, - indexListMap, - ListSettingsForListIndex.ListSettingKey.SUFFIX.key - ) - } ?: String() - } - fun getLayoutConfigMap(): Map { - return layoutConfigMap - } -} diff --git a/app/src/main/java/com/puutaro/commandclick/component/adapter/PromptListAdapter.kt b/app/src/main/java/com/puutaro/commandclick/component/adapter/PromptListAdapter.kt new file mode 100644 index 000000000..6b67c3969 --- /dev/null +++ b/app/src/main/java/com/puutaro/commandclick/component/adapter/PromptListAdapter.kt @@ -0,0 +1,264 @@ +package com.puutaro.commandclick.component.adapter + +import android.content.Context +import android.graphics.BitmapFactory +import android.graphics.drawable.Drawable +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.ViewTreeObserver +import androidx.appcompat.content.res.AppCompatResources +import androidx.appcompat.widget.AppCompatImageView +import androidx.appcompat.widget.LinearLayoutCompat +import androidx.core.view.isVisible +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.bumptech.glide.RequestBuilder +import com.bumptech.glide.load.engine.DiskCacheStrategy +import com.google.android.material.imageview.ShapeableImageView +import com.puutaro.commandclick.R +import com.puutaro.commandclick.activity_lib.event.lib.terminal.ExecSetToolbarButtonImage +import com.puutaro.commandclick.common.variable.res.CmdClickIcons +import com.puutaro.commandclick.custom_view.OutlineTextView +import com.puutaro.commandclick.fragment_lib.terminal_fragment.ButtonImageCreator +import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog.PromptWithListDialog +import com.puutaro.commandclick.proccess.history.url_history.UrlHistoryPath +import com.puutaro.commandclick.util.file.AssetsFileManager +import com.puutaro.commandclick.util.file.ButtonAssetsImage +import com.puutaro.commandclick.util.file.FileSystems +import com.puutaro.commandclick.util.image_tools.BitmapTool +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.withContext +import java.io.File + + +class PromptListAdapter( + val context: Context?, + var prompMapList: MutableList>, + private val isWhiteBackgrond: Boolean, + private val focusItemTitleList: List?, +): RecyclerView.Adapter() { + + class PromptListViewHolder(val view: View): RecyclerView.ViewHolder(view) { + val promptListAdapterLinear = view.findViewById(R.id.prompt_list_linear) + val promptListAdapterTitleBk = view.findViewById(R.id.prompt_list_adapter_thumbnail_bk) + val promptListAdapterThumnail = view.findViewById(R.id.prompt_list_adapter_thumbnail) + val promptListAdapterTitle = view.findViewById(R.id.prompt_list_adapter_title) + var itemMap: Map = emptyMap() + } + + override fun getItemCount(): Int = prompMapList.size + + override fun getItemId(position: Int): Long { + //return super.getItemId(position) + return position.toLong() + } + + override fun getItemViewType(position: Int): Int { + //return super.getItemViewType(position) + return position + } +// +// private val defaultUrlCapBitmap = AssetsFileManager.assetsByteArray( +// context, +// AssetsFileManager.firstUrlCapPngPath +// )?.let { +// BitmapFactory.decodeByteArray(it, 0, it.size) +// } + +// private val centerWhiteColor = when(isWhiteBackgrond) { +// true -> null +// else -> "#ffffff" +// } + private val rotateList = listOf(45, 135, 225, 315) + + private val thumbnailByteArray = ExecSetToolbarButtonImage.getImageFile( + CmdClickIcons.CC.assetsPath + ).let { + BitmapTool.convertFileToByteArray(it.absolutePath) + } +// ButtonImageCreator.ExecButtonImageCreator.create( +// context, +// ButtonAssetsImage.cPingPath, +// makeCapturePartPngDirPathList(), +// defaultUrlCapBitmap, +// centerWhiteColor, +// BitmapTool.GradientBitmap.GradOrient.DIAGONAL, +// ) + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): PromptListViewHolder { + val layoutInflater = LayoutInflater.from(parent.context) + val itemView = layoutInflater.inflate( + R.layout.prompt_list_adapter_layout, + parent, + false + ) + val promptListViewHolder = + PromptListViewHolder(itemView) + itemView.setOnClickListener { + itemClickListener?.onItemClick(promptListViewHolder) + } + return promptListViewHolder + } + + private val titleKey = PromptWithListDialog.Companion.PromptMapList.PromptListKey.TITLE.key + private val iconKey = PromptWithListDialog.Companion.PromptMapList.PromptListKey.ICON.key + + override fun onBindViewHolder( + holder: PromptListViewHolder, + position: Int + ) { + if( + context == null + ) return + CoroutineScope(Dispatchers.IO).launch { + val lineMap = prompMapList[position] + val title = withContext(Dispatchers.IO) { + lineMap.get(titleKey) + } + withContext(Dispatchers.Main){ + val isFocus = + withContext(Dispatchers.IO) { + !focusItemTitleList.isNullOrEmpty() + && focusItemTitleList.contains(title) + } + if(!isFocus) return@withContext + holder.promptListAdapterLinear.background = AppCompatResources.getDrawable( + context, + R.drawable.focus_dark_green + ) + } + withContext(Dispatchers.Main){ + holder.promptListAdapterTitle.apply { + setFillColor(R.color.ao) + outlineWidthSrc = 3 + text = title +// viewTreeObserver?.addOnPreDrawListener(object : ViewTreeObserver.OnPreDrawListener { +// override fun onPreDraw(): Boolean { +// // Remove listener because we don't want this called before _every_ frame +// viewTreeObserver?.removeOnPreDrawListener(this) +// minWidth = width + (width * 0.1f).toInt() +// return true // true because we don't want to skip this frame +// } +// }) + } + } + holder.itemMap = lineMap + withContext(Dispatchers.Main){ + val iconStr = lineMap.get(iconKey) + val icon = CmdClickIcons.entries.firstOrNull { + it.str == iconStr + } + val isSetWhiteGradBk = when (true) { + (!iconStr.isNullOrEmpty() && File(iconStr).isFile) + -> true && !isWhiteBackgrond + else -> false + } + val promptListAdapterTitleBk = holder.promptListAdapterTitleBk + if(isSetWhiteGradBk){ + promptListAdapterTitleBk.isVisible = true + val titleBkContext = promptListAdapterTitleBk.context + val bkTitleDrawable = AppCompatResources.getDrawable( + titleBkContext, + R.drawable.white_grad + ) + val requestBuilder: RequestBuilder = + Glide.with(titleBkContext) + .asDrawable() + .sizeMultiplier(0.1f) + Glide + .with(titleBkContext) + .load(bkTitleDrawable) + .skipMemoryCache( true ) + .diskCacheStrategy(DiskCacheStrategy.NONE) + .thumbnail( requestBuilder ) + .into(promptListAdapterTitleBk) + + val nextRotate = rotateList.random().toFloat() + val curRotation = holder.promptListAdapterTitleBk.rotation + val nextRotaionAngle = when(curRotation % 45f == 0f){ + true -> nextRotate + else -> 45f + nextRotate + } + holder.promptListAdapterTitleBk.rotation = nextRotaionAngle + } + val byteArray = withContext(Dispatchers.IO) { + when (true) { + (icon != null) + -> { + ExecSetToolbarButtonImage.getImageFile( + icon.assetsPath + ).let { + BitmapTool.convertFileToByteArray(it.absolutePath) + } +// ButtonImageCreator.ExecButtonImageCreator.create( +// context, +// icon.assetsPath, +// makeCapturePartPngDirPathList(), +// defaultUrlCapBitmap, +// centerWhiteColor, +// BitmapTool.GradientBitmap.GradOrient.DIAGONAL, +// ) + } + (!iconStr.isNullOrEmpty() && File(iconStr).isFile) + -> BitmapTool.convertFileToByteArray(iconStr) + else -> thumbnailByteArray + } + } ?: return@withContext + val promptListAdapterThumbnail = holder.promptListAdapterThumnail + val curRotation = promptListAdapterThumbnail.rotation + val nextRotate = rotateList.random().toFloat() + when(curRotation % 45f == 0f){ + true -> promptListAdapterThumbnail.rotation = nextRotate + else -> promptListAdapterThumbnail.rotation = 45f + nextRotate + } + val logoViewContext = promptListAdapterThumbnail.context + val requestBuilder: RequestBuilder = + Glide.with(logoViewContext) + .asDrawable() + .sizeMultiplier(0.1f) + Glide + .with(logoViewContext) + .load(byteArray) + .skipMemoryCache( true ) + .diskCacheStrategy(DiskCacheStrategy.NONE) + .thumbnail( requestBuilder ) + .into(promptListAdapterThumbnail) + } + withContext(Dispatchers.Main){ + holder.itemView.setOnClickListener { + itemClickListener?.onItemClick( + holder + ) + } + } + } + } + + var itemClickListener: OnItemClickListener? = null + interface OnItemClickListener { + fun onItemClick(holder: PromptListViewHolder) + } + + private fun makeCapturePartPngDirPathList(): List { + val lastModifyExtend = UrlHistoryPath.lastModifyExtend + val partPngDirName = UrlHistoryPath.partPngDirName + val captureDirPath = UrlHistoryPath.makeCaptureHistoryDirPath() + return FileSystems.sortedFiles( + captureDirPath + ).map { + val dirName = it.removeSuffix(lastModifyExtend) + listOf( + captureDirPath, + dirName, + partPngDirName + ).joinToString("/") + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/component/adapter/lib/list_index_adapter/ClickScriptSaver.kt b/app/src/main/java/com/puutaro/commandclick/component/adapter/lib/list_index_adapter/ClickScriptSaver.kt index 51a9ab92e..1d20cf4db 100644 --- a/app/src/main/java/com/puutaro/commandclick/component/adapter/lib/list_index_adapter/ClickScriptSaver.kt +++ b/app/src/main/java/com/puutaro/commandclick/component/adapter/lib/list_index_adapter/ClickScriptSaver.kt @@ -1,21 +1,19 @@ package com.puutaro.commandclick.component.adapter.lib.list_index_adapter import com.puutaro.commandclick.fragment.EditFragment -import com.puutaro.commandclick.fragment_lib.edit_fragment.processor.ScriptFileSaver import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.ClickSettingsForListIndex import com.puutaro.commandclick.proccess.list_index_for_edit.libs.ListIndexArgsMaker object ClickScriptSaver { - fun save( - editFragment: EditFragment, - listIndexArgsMaker: ListIndexArgsMaker, - ){ - val clickConfigMap = listIndexArgsMaker.clickConfigPairList - val enableClickSave = - ClickSettingsForListIndex.howEnableClickSave( - clickConfigMap - ) - if(!enableClickSave) return - ScriptFileSaver.save(editFragment) - } +// fun save( +// listIndexArgsMaker: ListIndexArgsMaker, +// ){ +// val clickConfigMap = listIndexArgsMaker.clickConfigPairList +// val enableClickSave = +// ClickSettingsForListIndex.howEnableClickSave( +// clickConfigMap +// ) +// if(!enableClickSave) return +//// ScriptFileSaver.save(editFragment) +// } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/component/adapter/lib/list_index_adapter/ExecAddForEditListAdapter.kt b/app/src/main/java/com/puutaro/commandclick/component/adapter/lib/list_index_adapter/ExecAddForEditListAdapter.kt new file mode 100755 index 000000000..a1a5b4ff9 --- /dev/null +++ b/app/src/main/java/com/puutaro/commandclick/component/adapter/lib/list_index_adapter/ExecAddForEditListAdapter.kt @@ -0,0 +1,400 @@ +package com.puutaro.commandclick.component.adapter.lib.list_index_adapter + +import android.content.Context +import androidx.recyclerview.widget.RecyclerView +import com.blankj.utilcode.util.ToastUtils +import com.puutaro.commandclick.common.variable.broadcast.scheme.BroadCastIntentSchemeForEdit +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter +import com.puutaro.commandclick.fragment.EditFragment +import com.puutaro.commandclick.proccess.broadcast.BroadcastSender +import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.ListSettingsForListIndex +import com.puutaro.commandclick.util.file.MapListFileTool +import com.puutaro.commandclick.util.file.ReadText +import com.puutaro.commandclick.util.map.CmdClickMap +import com.puutaro.commandclick.util.map.FilePrefixGetter +import com.puutaro.commandclick.util.tsv.TsvTool +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext + +object ExecAddForEditListAdapter { + + private fun getInsertIndex( + sortType: ListSettingsForListIndex.SortByKey, + listIndexForEditAdapter: EditComponentListAdapter, + addLineMap: Map, + ): Int { +// val addLineMap = CmdClickMap.createMap( +// addLine, +// ListSettingsForListIndex.MapListPathManager.mapListSeparator +// ).toMap() + val virtualListIndexList = + listIndexForEditAdapter.lineMapList + + listOf(addLineMap) +// val isReverseLayout = ListSettingsForListIndex.howReverseLayout( +// listIndexForEditAdapter.fannelInfoMap, +// listIndexForEditAdapter.setReplaceVariablesMap, +// listIndexForEditAdapter.indexListMap +// ) + return ListSettingsForListIndex.ListIndexListMaker.sortList( + sortType, + virtualListIndexList, +// isReverseLayout + ).indexOf(addLineMap) + } + + private fun listUpdateByInsertItem( +// editFragment: EditFragment, + editListRecyclerView: RecyclerView, +// editComponentListAdapter: EditComponentListAdapter, + addLineMap: Map, + insertIndex: Int, + ){ +// val binding = editFragment.binding +// val editListRecyclerView = binding.editListRecyclerView + val editComponentListAdapter = + editListRecyclerView.adapter as EditComponentListAdapter +// val addLineMap = CmdClickMap.createMap( +// addLineMap, +// ListSettingsForListIndex.MapListPathManager.mapListSeparator +// ).toMap() + editComponentListAdapter.lineMapList.add(insertIndex, addLineMap) + CoroutineScope(Dispatchers.IO).launch { + withContext(Dispatchers.Main) { + editComponentListAdapter.notifyItemInserted(insertIndex) + } + withContext(Dispatchers.IO) { + val listInsertWaitTime = 200L + delay(listInsertWaitTime) + } + withContext(Dispatchers.Main){ + editListRecyclerView.layoutManager?.scrollToPosition( + insertIndex + ) + } + } + } + +// fun execAddByCopyFileHere( +// editFragment: EditFragment, +// sourceFilePath: String, +// ){ +// val indexListMap = ListIndexAdapter.indexListMap +//// val parentDirPath = +//// ListSettingsForListIndex.ListIndexListMaker.getFilterDir( +//// editFragment, +//// indexListMap, +//// ListIndexAdapter.listIndexTypeKey +//// ) +// val sourceFilePathObj = File(sourceFilePath) +// val srcParentDirPath = sourceFilePathObj.parent +// ?: return +// val srcFileName = sourceFilePathObj.name +// if( +// NoFileChecker.isNoFile( +// srcParentDirPath, +// srcFileName, +// ) +// ) return +// val destiFilePath = "${parentDirPath}/${srcFileName}" +// val insertFilePath = FileSystems.execCopyFileWithDir( +// File(sourceFilePath), +// File(destiFilePath), +// ) +// sortInAddFile( +// editFragment, +// insertFilePath, +// ) +// } + +// fun execAddByCopyFileListHere( +// editFragment: EditFragment, +// sourceFilePathList: List, +// ){ +// val indexListMap = ListIndexAdapter.indexListMap +//// val parentDirPath = +//// ListSettingsForListIndex.ListIndexListMaker.getFilterDir( +//// editFragment, +//// indexListMap, +//// ListIndexAdapter.listIndexTypeKey +//// ) +// sourceFilePathList.forEach { +// sourceFilePath -> +// val sourceFilePathObj = File(sourceFilePath) +// if( +// !sourceFilePathObj.isFile +// ) return@forEach +// val srcFileName = sourceFilePathObj.name +// val destiFilePath = "${parentDirPath}/${srcFileName}" +// FileSystems.execCopyFileWithDir( +// File(sourceFilePath), +// File(destiFilePath), +// ) +// } +// BroadcastSender.normalSend( +// editFragment.context, +// BroadCastIntentSchemeForEdit.UPDATE_INDEX_LIST.action +// ) +// } + +// fun execAddByCopyDirListHere( +// editFragment: EditFragment, +// sourceFilePathList: List, +// ){ +// val indexListMap = ListIndexAdapter.indexListMap +// val parentDirPath = +// ListSettingsForListIndex.ListIndexListMaker.getFilterDir( +// editFragment, +// indexListMap, +// ListIndexAdapter.listIndexTypeKey +// ) +// sourceFilePathList.forEach { +// sourceFilePath -> +// val sourceFilePathObj = File(sourceFilePath) +// if( +// !sourceFilePathObj.isDirectory +// ) return@forEach +// val srcDirName = sourceFilePathObj.name +// val destiDirPath = "${parentDirPath}/${srcDirName}" +// FileSystems.copyDirectory( +// sourceFilePath, +// destiDirPath, +// ) +// } +// BroadcastSender.normalSend( +// editFragment.context, +// BroadCastIntentSchemeForEdit.UPDATE_INDEX_LIST.action +// ) +// } + + fun execAddListForTsv( + editFragment: EditFragment, + insertLineListSrc: List + ){ + val editComponentAdapter = + editFragment.binding.editListRecyclerView.adapter as EditComponentListAdapter + val tsvPath = + FilePrefixGetter.get( + editFragment.fannelInfoMap, + editFragment.setReplaceVariableMap, + editComponentAdapter.editListMap, + ListSettingsForListIndex.ListSettingKey.MAP_LIST_PATH.key, + ) ?: String() + if( + tsvPath.trim().isEmpty() + ) { + ToastUtils.showShort("Retry unexpected err") + return + } + val currentTsvConList = ReadText( + tsvPath + ).textToList() + val insertLineList = insertLineListSrc.filter { + !currentTsvConList.contains(it) + } + val updateTsvConList = insertLineList + currentTsvConList +// FileSystems.writeFile( +// File(UsePath.cmdclickDefaultAppDirPath, "getfileList.txt").absolutePath, +// listOf( +// "indexListMap ${ListIndexForEditAdapter.indexListMap}", +// "insertLineListSrc: ${insertLineListSrc}", +// "tsvPath: ${tsvPath}", +// "insertLineList: ${insertLineList}", +// "updateTsvConList: ${updateTsvConList}", +// ).joinToString("\n\n\n") +// ) + TsvTool.updateTsv( + tsvPath, + updateTsvConList + ) + } + + + fun execAddForEditList( + context: Context?, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + editListRecyclerView: RecyclerView, +// editComponentListAdapter: EditComponentListAdapter, + insertLineMap: Map, + ){ +// val context = editFragment.context + val editComponentListAdapter = + editListRecyclerView.adapter as EditComponentListAdapter + val mapListPath = + FilePrefixGetter.get( + fannelInfoMap, + setReplaceVariableMap, + editComponentListAdapter.editListMap, + ListSettingsForListIndex.ListSettingKey.MAP_LIST_PATH.key, + ) ?: String() +// FileSystems.writeFile( +// File(UsePath.cmdclickDefaultAppDirPath, "getFile.txt").absolutePath, +// listOf( +// "indexListMap ${ListIndexForEditAdapter.indexListMap}", +// "tsvPath: ${tsvPath}", +// "currentTsvConList: ${currentTsvConList}", +// ).joinToString("\n\n\n") +// ) + if( + mapListPath.trim().isEmpty() + ) { + ToastUtils.showShort("Retry unexpected err") + return + } + if( + mapListPath.trim().isEmpty() + ) { + ToastUtils.showShort("Already exist") + return + } +// val title = insertLineMap.get( +// ListSettingsForListIndex.MapListPathManager.Key.SRC_TITLE.key +// ) ?: String() +// val con = insertLineMap.get( +// ListSettingsForListIndex.MapListPathManager.Key.SRC_CON.key +// ) ?: String() + editComponentListAdapter.lineMapList.contains(insertLineMap).let { + isDuplidate -> + if( + isDuplidate + ) return + } +// ListIndexDuplicate.isTsvDetect( +// mapListPath, +// title, +// con +// ).let { +// isDetect -> +// if( +// isDetect +// ) return +// } +// val editComponentAdapter = +// editFragment.binding.editListRecyclerView.adapter as EditComponentListAdapter + val sortType = ListSettingsForListIndex.getSortType( + editComponentListAdapter.fannelInfoMap, + editComponentListAdapter.setReplaceVariableMap, + editComponentListAdapter.editListMap + ) + val insertIndex = getInsertIndex( + sortType, + editComponentListAdapter, + insertLineMap, + ) + MapListFileTool.insertByLastUpdate( + mapListPath, + insertLineMap, + ) +// TsvTool.insertByLastUpdate( +// mapListPath, +// insertLine +// ) + when(sortType){ + ListSettingsForListIndex.SortByKey.LAST_UPDATE -> + CoroutineScope(Dispatchers.Main).launch { + withContext(Dispatchers.IO){ + delay(200) + } + withContext(Dispatchers.IO) { + BroadcastSender.normalSend( + context, + BroadCastIntentSchemeForEdit.UPDATE_INDEX_LIST.action + ) + } + } + ListSettingsForListIndex.SortByKey.SORT, + ListSettingsForListIndex.SortByKey.REVERSE -> + listUpdateByInsertItem( + editListRecyclerView, + insertLineMap, + insertIndex + ) + } + } + +// fun sortInAddFile( +// editFragment: EditFragment, +// insertFilePath: String, +// ){ +// val sortType = ListSettingsForListIndex.getSortType( +// editFragment, +// ListIndexAdapter.indexListMap +// ) +// when(sortType){ +// ListSettingsForListIndex.SortByKey.LAST_UPDATE -> +// ListViewToolForListIndexAdapter.listIndexListUpdateFileList( +// editFragment, +// ListSettingsForListIndex.ListIndexListMaker.makeFileListHandler( +// editFragment, +// ListIndexAdapter.indexListMap, +// ListIndexAdapter.listIndexTypeKey +// ) +// ) +// ListSettingsForListIndex.SortByKey.SORT, +// ListSettingsForListIndex.SortByKey.REVERSE -> { +// addFileNameLineForSort( +// editFragment, +// insertFilePath, +// ) +// } +// } +// } + +// private fun addFileNameLineForSort( +// editFragment: EditFragment, +// insertFilePath: String, +// ){ +// val indexListMap = ListIndexAdapter.indexListMap +// val parentDirPath = +// ListSettingsForListIndex.ListIndexListMaker.getFilterDir( +// editFragment, +// indexListMap, +// ListIndexAdapter.listIndexTypeKey +// ) +// val filterPrefix = FilePrefixGetter.get( +// editFragment, +// indexListMap, +// ListSettingsForListIndex.ListSettingKey.PREFIX.key +// ) ?: String() +// val filterSuffix = FilePrefixGetter.get( +// editFragment, +// indexListMap, +// ListSettingsForListIndex.ListSettingKey.SUFFIX.key +// ) ?: String() +// val filterShellCon = ListSettingsForListIndex.ListIndexListMaker.getFilterShellCon( +// editFragment, +// indexListMap, +// ) +// val insertFileName = File(insertFilePath) +// val fileNameElement = ListSettingsForListIndex.ListIndexListMaker.makeFileListElement( +// listOf(insertFileName.name), +// editFragment.busyboxExecutor, +// parentDirPath, +// filterPrefix, +// filterSuffix, +// filterShellCon, +// ).firstOrNull() +// if( +// fileNameElement.isNullOrEmpty() +// ) return +// val listIndexForEditAdapter = +// editFragment.binding.editListRecyclerView.adapter as ListIndexAdapter +// val sortType = ListSettingsForListIndex.getSortType( +// editFragment, +// ListIndexAdapter.indexListMap +// ) +// val insertIndex = getInsertIndex( +// sortType, +// listIndexForEditAdapter, +// fileNameElement, +// ) +// listUpdateByInsertItem( +// editFragment, +// fileNameElement, +// insertIndex +// ) +// } +} \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/component/adapter/lib/list_index_adapter/ExecAddForListIndexAdapter.kt b/app/src/main/java/com/puutaro/commandclick/component/adapter/lib/list_index_adapter/ExecAddForListIndexAdapter.kt deleted file mode 100755 index 09c24eaa1..000000000 --- a/app/src/main/java/com/puutaro/commandclick/component/adapter/lib/list_index_adapter/ExecAddForListIndexAdapter.kt +++ /dev/null @@ -1,358 +0,0 @@ -package com.puutaro.commandclick.component.adapter.lib.list_index_adapter - -import com.blankj.utilcode.util.ToastUtils -import com.puutaro.commandclick.common.variable.broadcast.scheme.BroadCastIntentSchemeForEdit -import com.puutaro.commandclick.component.adapter.ListIndexAdapter -import com.puutaro.commandclick.fragment.EditFragment -import com.puutaro.commandclick.proccess.broadcast.BroadcastSender -import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.ListSettingsForListIndex -import com.puutaro.commandclick.util.file.FileSystems -import com.puutaro.commandclick.util.file.NoFileChecker -import com.puutaro.commandclick.util.file.ReadText -import com.puutaro.commandclick.util.map.FilePrefixGetter -import com.puutaro.commandclick.util.tsv.TsvTool -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.delay -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext -import java.io.File - -object ExecAddForListIndexAdapter { - - private fun getInsertIndex( - sortType: ListSettingsForListIndex.SortByKey, - listIndexForEditAdapter: ListIndexAdapter, - addLine: String, - ): Int { - val virtualListIndexList = listIndexForEditAdapter.listIndexList + listOf(addLine) - return ListSettingsForListIndex.ListIndexListMaker.sortList( - sortType, - virtualListIndexList, - ).indexOf(addLine) - } - - private fun listUpdateByInsertItem( - editFragment: EditFragment, - addLine: String, - insertIndex: Int, - ){ - val binding = editFragment.binding - val editListRecyclerView = binding.editListRecyclerView - val listIndexAdapter = - binding.editListRecyclerView.adapter as ListIndexAdapter - listIndexAdapter.listIndexList.add(insertIndex, addLine) - CoroutineScope(Dispatchers.IO).launch { - withContext(Dispatchers.Main) { - listIndexAdapter.notifyItemInserted(insertIndex) - } - withContext(Dispatchers.IO) { - val listInsertWaitTime = 200L - delay(listInsertWaitTime) - } - withContext(Dispatchers.Main){ - editListRecyclerView.layoutManager?.scrollToPosition( - insertIndex - ) - } - } - } - - fun execAddByCopyFileHere( - editFragment: EditFragment, - sourceFilePath: String, - ){ - val indexListMap = ListIndexAdapter.indexListMap - val parentDirPath = - ListSettingsForListIndex.ListIndexListMaker.getFilterDir( - editFragment, - indexListMap, - ListIndexAdapter.listIndexTypeKey - ) - val sourceFilePathObj = File(sourceFilePath) - val srcParentDirPath = sourceFilePathObj.parent - ?: return - val srcFileName = sourceFilePathObj.name - if( - NoFileChecker.isNoFile( - srcParentDirPath, - srcFileName, - ) - ) return - val destiFilePath = "${parentDirPath}/${srcFileName}" - val insertFilePath = FileSystems.execCopyFileWithDir( - File(sourceFilePath), - File(destiFilePath), - ) - sortInAddFile( - editFragment, - insertFilePath, - ) - } - - fun execAddByCopyFileListHere( - editFragment: EditFragment, - sourceFilePathList: List, - ){ - val indexListMap = ListIndexAdapter.indexListMap - val parentDirPath = - ListSettingsForListIndex.ListIndexListMaker.getFilterDir( - editFragment, - indexListMap, - ListIndexAdapter.listIndexTypeKey - ) - sourceFilePathList.forEach { - sourceFilePath -> - val sourceFilePathObj = File(sourceFilePath) - if( - !sourceFilePathObj.isFile - ) return@forEach - val srcFileName = sourceFilePathObj.name - val destiFilePath = "${parentDirPath}/${srcFileName}" - FileSystems.execCopyFileWithDir( - File(sourceFilePath), - File(destiFilePath), - ) - } - BroadcastSender.normalSend( - editFragment.context, - BroadCastIntentSchemeForEdit.UPDATE_INDEX_LIST.action - ) - } - - fun execAddByCopyDirListHere( - editFragment: EditFragment, - sourceFilePathList: List, - ){ - val indexListMap = ListIndexAdapter.indexListMap - val parentDirPath = - ListSettingsForListIndex.ListIndexListMaker.getFilterDir( - editFragment, - indexListMap, - ListIndexAdapter.listIndexTypeKey - ) - sourceFilePathList.forEach { - sourceFilePath -> - val sourceFilePathObj = File(sourceFilePath) - if( - !sourceFilePathObj.isDirectory - ) return@forEach - val srcDirName = sourceFilePathObj.name - val destiDirPath = "${parentDirPath}/${srcDirName}" - FileSystems.copyDirectory( - sourceFilePath, - destiDirPath, - ) - } - BroadcastSender.normalSend( - editFragment.context, - BroadCastIntentSchemeForEdit.UPDATE_INDEX_LIST.action - ) - } - - fun execAddListForTsv( - editFragment: EditFragment, - insertLineListSrc: List - ){ - val tsvPath = - FilePrefixGetter.get( - editFragment, - ListIndexAdapter.indexListMap, - ListSettingsForListIndex.ListSettingKey.LIST_DIR.key, - ) ?: String() - if( - tsvPath.trim().isEmpty() - ) { - ToastUtils.showShort("Retry unexpected err") - return - } - val currentTsvConList = ReadText( - tsvPath - ).textToList() - val insertLineList = insertLineListSrc.filter { - !currentTsvConList.contains(it) - } - val updateTsvConList = insertLineList + currentTsvConList -// FileSystems.writeFile( -// File(UsePath.cmdclickDefaultAppDirPath, "getfileList.txt").absolutePath, -// listOf( -// "indexListMap ${ListIndexForEditAdapter.indexListMap}", -// "insertLineListSrc: ${insertLineListSrc}", -// "tsvPath: ${tsvPath}", -// "insertLineList: ${insertLineList}", -// "updateTsvConList: ${updateTsvConList}", -// ).joinToString("\n\n\n") -// ) - TsvTool.updateTsv( - tsvPath, - updateTsvConList - ) - } - - - fun execAddForTsv( - editFragment: EditFragment, - insertLine: String, - ){ - val context = editFragment.context - val listIndexForEditAdapter = - editFragment.binding.editListRecyclerView.adapter as ListIndexAdapter - val tsvPath = - FilePrefixGetter.get( - editFragment, - ListIndexAdapter.indexListMap, - ListSettingsForListIndex.ListSettingKey.LIST_DIR.key, - ) ?: String() -// FileSystems.writeFile( -// File(UsePath.cmdclickDefaultAppDirPath, "getFile.txt").absolutePath, -// listOf( -// "indexListMap ${ListIndexForEditAdapter.indexListMap}", -// "tsvPath: ${tsvPath}", -// "currentTsvConList: ${currentTsvConList}", -// ).joinToString("\n\n\n") -// ) - if( - tsvPath.trim().isEmpty() - ) { - ToastUtils.showShort("Retry unexpected err") - return - } - if( - tsvPath.trim().isEmpty() - ) { - ToastUtils.showShort("Already exist") - return - } - val titleAndCon = insertLine.split("\t") - val title = titleAndCon.firstOrNull()?.trim() ?: String() - val con = titleAndCon.getOrNull(1)?.trim() ?: String() - ListIndexDuplicate.isTsvDetect( - tsvPath, - title, - con - ).let { - isDetect -> - if( - isDetect - ) return - } - val sortType = ListSettingsForListIndex.getSortType( - editFragment, - ListIndexAdapter.indexListMap - ) - val insertIndex = getInsertIndex( - sortType, - listIndexForEditAdapter, - insertLine, - ) - - TsvTool.insertByLastUpdate( - tsvPath, - insertLine - ) - when(sortType){ - ListSettingsForListIndex.SortByKey.LAST_UPDATE -> - CoroutineScope(Dispatchers.Main).launch { - withContext(Dispatchers.IO){ - delay(200) - } - withContext(Dispatchers.IO) { - BroadcastSender.normalSend( - context, - BroadCastIntentSchemeForEdit.UPDATE_INDEX_LIST.action - ) - } - } - ListSettingsForListIndex.SortByKey.SORT, - ListSettingsForListIndex.SortByKey.REVERSE -> - listUpdateByInsertItem( - editFragment, - insertLine, - insertIndex - ) - } - } - - fun sortInAddFile( - editFragment: EditFragment, - insertFilePath: String, - ){ - val sortType = ListSettingsForListIndex.getSortType( - editFragment, - ListIndexAdapter.indexListMap - ) - when(sortType){ - ListSettingsForListIndex.SortByKey.LAST_UPDATE -> - ListViewToolForListIndexAdapter.listIndexListUpdateFileList( - editFragment, - ListSettingsForListIndex.ListIndexListMaker.makeFileListHandler( - editFragment, - ListIndexAdapter.indexListMap, - ListIndexAdapter.listIndexTypeKey - ) - ) - ListSettingsForListIndex.SortByKey.SORT, - ListSettingsForListIndex.SortByKey.REVERSE -> { - addFileNameLineForSort( - editFragment, - insertFilePath, - ) - } - } - } - - private fun addFileNameLineForSort( - editFragment: EditFragment, - insertFilePath: String, - ){ - val indexListMap = ListIndexAdapter.indexListMap - val parentDirPath = - ListSettingsForListIndex.ListIndexListMaker.getFilterDir( - editFragment, - indexListMap, - ListIndexAdapter.listIndexTypeKey - ) - val filterPrefix = FilePrefixGetter.get( - editFragment, - indexListMap, - ListSettingsForListIndex.ListSettingKey.PREFIX.key - ) ?: String() - val filterSuffix = FilePrefixGetter.get( - editFragment, - indexListMap, - ListSettingsForListIndex.ListSettingKey.SUFFIX.key - ) ?: String() - val filterShellCon = ListSettingsForListIndex.ListIndexListMaker.getFilterShellCon( - editFragment, - indexListMap, - ) - val insertFileName = File(insertFilePath) - val fileNameElement = ListSettingsForListIndex.ListIndexListMaker.makeFileListElement( - listOf(insertFileName.name), - editFragment.busyboxExecutor, - parentDirPath, - filterPrefix, - filterSuffix, - filterShellCon, - ).firstOrNull() - if( - fileNameElement.isNullOrEmpty() - ) return - val listIndexForEditAdapter = - editFragment.binding.editListRecyclerView.adapter as ListIndexAdapter - val sortType = ListSettingsForListIndex.getSortType( - editFragment, - ListIndexAdapter.indexListMap - ) - val insertIndex = getInsertIndex( - sortType, - listIndexForEditAdapter, - fileNameElement, - ) - listUpdateByInsertItem( - editFragment, - fileNameElement, - insertIndex - ) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/component/adapter/lib/list_index_adapter/ExecClickUpdate.kt b/app/src/main/java/com/puutaro/commandclick/component/adapter/lib/list_index_adapter/ExecClickUpdate.kt index cfad34036..ad2c1a4e1 100755 --- a/app/src/main/java/com/puutaro/commandclick/component/adapter/lib/list_index_adapter/ExecClickUpdate.kt +++ b/app/src/main/java/com/puutaro/commandclick/component/adapter/lib/list_index_adapter/ExecClickUpdate.kt @@ -1,55 +1,66 @@ package com.puutaro.commandclick.component.adapter.lib.list_index_adapter +import androidx.fragment.app.Fragment import com.puutaro.commandclick.common.variable.broadcast.scheme.BroadCastIntentSchemeForEdit -import com.puutaro.commandclick.component.adapter.ListIndexAdapter -import com.puutaro.commandclick.fragment.EditFragment +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter import com.puutaro.commandclick.proccess.broadcast.BroadcastSender -import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.ClickSettingsForListIndex 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.list_index_for_edit.libs.ListIndexArgsMaker -import com.puutaro.commandclick.util.file.FileSystems +import com.puutaro.commandclick.util.file.MapListFileTool import com.puutaro.commandclick.util.map.FilePrefixGetter -import com.puutaro.commandclick.util.tsv.TsvTool -import java.io.File object ExecClickUpdate { - fun update( - editFragment: EditFragment, - listIndexArgsMaker: ListIndexArgsMaker, - listIndexListViewHolder: ListIndexAdapter.ListIndexListViewHolder, - ){ - val clickConfigMap = listIndexArgsMaker.clickConfigPairList - val enableClickUpdate = - ClickSettingsForListIndex.howEnableClickUpdate( - clickConfigMap - ) - if(!enableClickUpdate) return - when(ListIndexAdapter.listIndexTypeKey) { -// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL -// -> {} - TypeSettingsForListIndex.ListIndexTypeKey.NORMAL - -> updateForNormal( - editFragment, - listIndexListViewHolder.fileName, - ) - TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT - -> updateForTsv( - editFragment, - listIndexListViewHolder - ) - } - - } +// fun update( +// fragment: Fragment, +// fannelInfoMap: Map, +// setReplaceVariableMap: Map?, +// editComponentListAdapter: EditComponentListAdapter, +// listIndexArgsMaker: ListIndexArgsMaker, +// bindingAdapterPosition: Int, +// ){ +// val clickConfigMap = listIndexArgsMaker.clickConfigPairList +// val enableClickUpdate = +// ClickSettingsForListIndex.howEnableClickUpdate( +// clickConfigMap +// ) +// if(!enableClickUpdate) return +// updateForTsv( +// fragment, +// fannelInfoMap, +// setReplaceVariableMap, +// editComponentListAdapter, +// bindingAdapterPosition +// ) +//// when(ListIndexAdapter.listIndexTypeKey) { +////// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL +////// -> {} +//// TypeSettingsForListIndex.ListIndexTypeKey.NORMAL +//// -> updateForNormal( +//// editFragment, +//// listIndexListViewHolder.fileName, +//// ) +//// TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT +//// -> updateForTsv( +//// editFragment, +//// listIndexListViewHolder +//// ) +//// } +// +// } private fun updateForTsv( - editFragment: EditFragment, - listIndexListViewHolder: ListIndexAdapter.ListIndexListViewHolder, + fragment: Fragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + editComponentListAdapter: EditComponentListAdapter, + bindingAdapterPosition: Int, ){ +// val editComponentAdapter = +// editFragment.binding.editListRecyclerView.adapter as EditComponentListAdapter val sortType = ListSettingsForListIndex.getSortType( - editFragment, - ListIndexAdapter.indexListMap + fannelInfoMap, + setReplaceVariableMap, + editComponentListAdapter.editListMap ) when(sortType){ ListSettingsForListIndex.SortByKey.SORT, @@ -58,46 +69,47 @@ object ExecClickUpdate { ListSettingsForListIndex.SortByKey.LAST_UPDATE, -> {} } - val binding = editFragment.binding - val editListRecyclerView = binding.editListRecyclerView - val listIndexForEditAdapter = editListRecyclerView.adapter as ListIndexAdapter - val tsvLine = - listIndexForEditAdapter.listIndexList.getOrNull( - listIndexListViewHolder.bindingAdapterPosition +// val binding = editFragment.binding +// val editListRecyclerView = binding.editListRecyclerView +// val editComponentListAdapter = editListRecyclerView.adapter as EditComponentListAdapter + val lineMap = + editComponentListAdapter.lineMapList.getOrNull( + bindingAdapterPosition ) ?: return - val tsvPath = FilePrefixGetter.get( - editFragment, - ListIndexAdapter.indexListMap, - ListSettingsForListIndex.ListSettingKey.LIST_DIR.key, + val mapListPath = FilePrefixGetter.get( + fannelInfoMap, + setReplaceVariableMap, + editComponentListAdapter.editListMap, + ListSettingsForListIndex.ListSettingKey.MAP_LIST_PATH.key, ) - TsvTool.insertTsvInFirst( - tsvPath, - tsvLine + MapListFileTool.insertMapFileInFirst( + mapListPath, + lineMap ) BroadcastSender.normalSend( - editFragment.context, + fragment.context, BroadCastIntentSchemeForEdit.UPDATE_INDEX_LIST.action ) } - private fun updateForNormal( - editFragment: EditFragment, - selectedItem: String, - ){ - val filterDir = ListSettingsForListIndex.ListIndexListMaker.getFilterDir( - editFragment, - ListIndexAdapter.indexListMap, - ListIndexAdapter.listIndexTypeKey - ) - FileSystems.updateLastModified( - File( - filterDir, - selectedItem - ).absolutePath - ) - BroadcastSender.normalSend( - editFragment.context, - BroadCastIntentSchemeForEdit.UPDATE_INDEX_LIST.action - ) - } +// private fun updateForNormal( +// editFragment: EditFragment, +// selectedItem: String, +// ){ +// val filterDir = ListSettingsForListIndex.ListIndexListMaker.getFilterDir( +// editFragment, +// ListIndexAdapter.indexListMap, +// ListIndexAdapter.listIndexTypeKey +// ) +// FileSystems.updateLastModified( +// File( +// filterDir, +// selectedItem +// ).absolutePath +// ) +// BroadcastSender.normalSend( +// editFragment.context, +// BroadCastIntentSchemeForEdit.UPDATE_INDEX_LIST.action +// ) +// } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/component/adapter/lib/list_index_adapter/ExecReWriteForListIndexAdapter.kt b/app/src/main/java/com/puutaro/commandclick/component/adapter/lib/list_index_adapter/ExecReWriteForListIndexAdapter.kt index 8d1c55ffe..c66a3464f 100755 --- a/app/src/main/java/com/puutaro/commandclick/component/adapter/lib/list_index_adapter/ExecReWriteForListIndexAdapter.kt +++ b/app/src/main/java/com/puutaro/commandclick/component/adapter/lib/list_index_adapter/ExecReWriteForListIndexAdapter.kt @@ -1,7 +1,8 @@ package com.puutaro.commandclick.component.adapter.lib.list_index_adapter -import com.puutaro.commandclick.component.adapter.ListIndexAdapter -import com.puutaro.commandclick.fragment.EditFragment +import androidx.fragment.app.Fragment +import androidx.recyclerview.widget.RecyclerView +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -9,28 +10,29 @@ import kotlinx.coroutines.withContext object ExecReWriteForListIndexAdapter { fun replaceListElementForTsv( - editFragment: EditFragment, - srcAndRepLinePairList: List>, +// fragment: Fragment, + editListRecyclerView: RecyclerView, + srcAndRepLineMapPairList: List, Map>>, ){ - val binding = editFragment.binding - val listIndexAdapter = - binding.editListRecyclerView.adapter as ListIndexAdapter - val srcAndRepLinePairListSize = srcAndRepLinePairList.size +// val binding = fragment.binding + val editComponentListAdapter = + editListRecyclerView.adapter as EditComponentListAdapter + val srcAndRepLinePairListSize = srcAndRepLineMapPairList.size CoroutineScope(Dispatchers.IO).launch { - srcAndRepLinePairList.forEach { + srcAndRepLineMapPairList.forEach { val replaceItemIndex = withContext(Dispatchers.IO) { val srcTsvLine = it.first - listIndexAdapter.listIndexList.indexOf(srcTsvLine) + editComponentListAdapter.lineMapList.indexOf(srcTsvLine) } if (replaceItemIndex < 0) return@forEach withContext(Dispatchers.IO) { - listIndexAdapter.listIndexList[replaceItemIndex] = it.second + editComponentListAdapter.lineMapList[replaceItemIndex] = it.second } withContext(Dispatchers.Main) { - listIndexAdapter.notifyItemChanged(replaceItemIndex) + editComponentListAdapter.notifyItemChanged(replaceItemIndex) } if (srcAndRepLinePairListSize != 1) return@forEach - val editListRecyclerView = binding.editListRecyclerView +// val editListRecyclerView = binding.editListRecyclerView withContext(Dispatchers.Main) { editListRecyclerView.layoutManager?.scrollToPosition(replaceItemIndex) } diff --git a/app/src/main/java/com/puutaro/commandclick/component/adapter/lib/list_index_adapter/ExecRemoveForListIndexAdapter.kt b/app/src/main/java/com/puutaro/commandclick/component/adapter/lib/list_index_adapter/ExecRemoveForListIndexAdapter.kt index 09bb91298..b6824d239 100755 --- a/app/src/main/java/com/puutaro/commandclick/component/adapter/lib/list_index_adapter/ExecRemoveForListIndexAdapter.kt +++ b/app/src/main/java/com/puutaro/commandclick/component/adapter/lib/list_index_adapter/ExecRemoveForListIndexAdapter.kt @@ -1,64 +1,66 @@ package com.puutaro.commandclick.component.adapter.lib.list_index_adapter -import com.puutaro.commandclick.component.adapter.ListIndexAdapter -import com.puutaro.commandclick.fragment.EditFragment +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter import com.puutaro.commandclick.proccess.js_macro_libs.list_index_libs.ExecItemDelete import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.DeleteSettingsForListIndex 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.util.file.MapListFileTool import com.puutaro.commandclick.util.map.FilePrefixGetter -import com.puutaro.commandclick.util.tsv.TsvTool import java.io.File object ExecRemoveForListIndexAdapter { fun updateTsv( - editFragment: EditFragment, - removeItemLineList: List, + editComponentListAdapter: EditComponentListAdapter, + removeItemLineList: List>, ){ - val tsvPath = FilePrefixGetter.get( - editFragment, - ListIndexAdapter.indexListMap, - ListSettingsForListIndex.ListSettingKey.LIST_DIR.key, + val mapListPath = FilePrefixGetter.get( + editComponentListAdapter.fannelInfoMap, + editComponentListAdapter.setReplaceVariableMap, + editComponentListAdapter.editListMap, + ListSettingsForListIndex.ListSettingKey.MAP_LIST_PATH.key, ) if( - tsvPath.isNullOrEmpty() + mapListPath.isNullOrEmpty() ) return - TsvTool.updateTsvByRemove( - tsvPath, + MapListFileTool.updateMapListFileByRemove( + mapListPath, removeItemLineList, ) } fun removeCon( - editFragment: EditFragment, - listIndexType: TypeSettingsForListIndex.ListIndexTypeKey, - removeItemLine: String, + editComponentListAdapter: EditComponentListAdapter, +// listIndexType: TypeSettingsForListIndex.ListIndexTypeKey, + removeItemLineMap: Map, ){ - when(listIndexType) { -// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL, - TypeSettingsForListIndex.ListIndexTypeKey.NORMAL - -> return - TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT - -> {} - } +// when(listIndexType) { +//// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL, +// TypeSettingsForListIndex.ListIndexTypeKey.NORMAL +// -> return +// TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT +// -> {} +// } val onDeleteConFile = DeleteSettingsForListIndex.howOnDeleteConFileValue( - ListIndexAdapter.deleteConfigMap + editComponentListAdapter.deleteConfigMap ) if( !onDeleteConFile ) return - val removeTitleConList = removeItemLine.split("\t") - if( - removeTitleConList.size != 2 - ) return - val filePath = removeTitleConList.last() +// val removeTitleConList = removeItemLineMap.split("\t") +// if( +// removeTitleConList.size != 2 +// ) return + val filePath = removeItemLineMap.get( + ListSettingsForListIndex.MapListPathManager.Key.SRC_CON.key + ) ?: String() +// removeTitleConList.last() val filePathObj = File(filePath) val fileName = filePathObj.name val parentDirPath = filePathObj.parent ?: return ExecItemDelete.DeleteAfterConfirm.execDeleteAfterConfirm( - editFragment, + editComponentListAdapter, parentDirPath, fileName, ) diff --git a/app/src/main/java/com/puutaro/commandclick/component/adapter/lib/list_index_adapter/ExecSwitcherForListIndexAdapter.kt b/app/src/main/java/com/puutaro/commandclick/component/adapter/lib/list_index_adapter/ExecSwitcherForListIndexAdapter.kt index 6525f63a4..03b23a9ba 100755 --- a/app/src/main/java/com/puutaro/commandclick/component/adapter/lib/list_index_adapter/ExecSwitcherForListIndexAdapter.kt +++ b/app/src/main/java/com/puutaro/commandclick/component/adapter/lib/list_index_adapter/ExecSwitcherForListIndexAdapter.kt @@ -1,34 +1,39 @@ package com.puutaro.commandclick.component.adapter.lib.list_index_adapter -import com.puutaro.commandclick.component.adapter.ListIndexAdapter -import com.puutaro.commandclick.fragment.EditFragment +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.ListSettingsForListIndex +import com.puutaro.commandclick.util.file.MapListFileTool import com.puutaro.commandclick.util.file.ReadText import com.puutaro.commandclick.util.map.FilePrefixGetter -import com.puutaro.commandclick.util.tsv.TsvTool object ExecSwitcherForListIndexAdapter { fun updateTsv( - editFragment: EditFragment, - listIndexList: List, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + editComponentListAdapter: EditComponentListAdapter, + lineMapList: List>, ){ +// val editComponentListAdapter = +// editFragment.binding.editListRecyclerView.adapter as EditComponentListAdapter val tsvPath = FilePrefixGetter.get( - editFragment, - ListIndexAdapter.indexListMap, - ListSettingsForListIndex.ListSettingKey.LIST_DIR.key, + fannelInfoMap, + setReplaceVariableMap, + editComponentListAdapter.editListMap, + ListSettingsForListIndex.ListSettingKey.MAP_LIST_PATH.key, ) if( tsvPath.isNullOrEmpty() ) return val sortType = ListSettingsForListIndex.getSortType( - editFragment, - ListIndexAdapter.indexListMap + fannelInfoMap, + setReplaceVariableMap, + editComponentListAdapter.editListMap ) val sortListIndexListForTsvSave = ListSettingsForListIndex.ListIndexListMaker.sortListForTsvSave( sortType, - listIndexList + lineMapList ) val curTsvConList = ReadText( tsvPath @@ -38,9 +43,10 @@ object ExecSwitcherForListIndexAdapter { if( curTsvConList.size != sortListIndexListForTsvSave.size ) return - TsvTool.updateTsv( + MapListFileTool.update( tsvPath, sortListIndexListForTsvSave, + ListSettingsForListIndex.MapListPathManager.mapListSeparator ) } } \ No newline at end of file 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 2d7644671..0bae2fdf3 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,78 +1,76 @@ 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.ListIndexAdapter -import com.puutaro.commandclick.fragment.EditFragment -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.Job -import kotlinx.coroutines.delay -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter object ListViewToolForListIndexAdapter { - private var listIndexScrollToBottomJob: Job? = null +// private var listIndexScrollToBottomJob: Job? = null fun listIndexListUpdateFileList( - editFragment: EditFragment, - updateList: List, + editComponentListAdapter: EditComponentListAdapter, + updateLineMapList: List>, ){ - val editListRecyclerView = editFragment.binding.editListRecyclerView +// val editListRecyclerView = editFragment.binding.editListRecyclerView +// if( +// !editListRecyclerView.isVisible +// ) return +// val listIndexForEditAdapter = +// editListRecyclerView.adapter as? EditComponentListAdapter +// ?: return if( - !editListRecyclerView.isVisible + editComponentListAdapter.lineMapList == + updateLineMapList ) return - val listIndexForEditAdapter = - editListRecyclerView.adapter as? ListIndexAdapter - ?: return - if( - listIndexForEditAdapter.listIndexList == - updateList - ) return - listIndexForEditAdapter.listIndexList.clear() - listIndexForEditAdapter.listIndexList.addAll(updateList) - listIndexForEditAdapter.notifyDataSetChanged() - scrollToBottom( - editListRecyclerView, - listIndexForEditAdapter, - ) + editComponentListAdapter.lineMapList.clear() + editComponentListAdapter.lineMapList.addAll(updateLineMapList) + editComponentListAdapter.notifyDataSetChanged() +// val isReverseLayout = ListSettingsForListIndex.howReverseLayout( +// listIndexForEditAdapter.fannelInfoMap, +// listIndexForEditAdapter.setReplaceVariablesMap, +// listIndexForEditAdapter.indexListMap +// ) +// if(!isReverseLayout) return +// scrollToBottom( +// editListRecyclerView, +// listIndexForEditAdapter, +// ) } - fun scrollToBottom( - editListRecyclerView: RecyclerView, - listIndexForEditAdapter: ListIndexAdapter, - ){ - listIndexScrollToBottomJob?.cancel() - listIndexScrollToBottomJob = CoroutineScope(Dispatchers.Main).launch { - val layoutManager = - editListRecyclerView.layoutManager as? LinearLayoutManager - val scrollToPosi = listIndexForEditAdapter.itemCount - 1 - withContext(Dispatchers.Main){ - for(i in 1..30){ - val prePosi = layoutManager?.findLastCompletelyVisibleItemPosition() - if( - prePosi == scrollToPosi - ) break - execScroll( - layoutManager, - scrollToPosi, - ) - delay(150) - } - } - withContext(Dispatchers.Main){ - for(i in 1..3){ - delay(150) - execScroll( - layoutManager, - scrollToPosi, - ) - } - } - } - } +// fun scrollToBottom( +// editListRecyclerView: RecyclerView, +// editComponentListAdapter: EditComponentListAdapter, +// ){ +// return +// listIndexScrollToBottomJob?.cancel() +// listIndexScrollToBottomJob = CoroutineScope(Dispatchers.Main).launch { +// val layoutManager = +// editListRecyclerView.layoutManager as? LinearLayoutManager +// val scrollToPosi = editComponentListAdapter.itemCount - 1 +// withContext(Dispatchers.Main){ +// for(i in 1..30){ +// val prePosi = layoutManager?.findLastCompletelyVisibleItemPosition() +// if( +// prePosi == scrollToPosi +// ) break +// execScroll( +// layoutManager, +// scrollToPosi, +// ) +// delay(150) +// } +// } +// withContext(Dispatchers.Main){ +// for(i in 1..3){ +// delay(150) +// execScroll( +// layoutManager, +// scrollToPosi, +// ) +// } +// } +// } +// } private fun execScroll( layoutManager: LinearLayoutManager?, diff --git a/app/src/main/java/com/puutaro/commandclick/custom_manager/GridNoScrollManager.kt b/app/src/main/java/com/puutaro/commandclick/custom_manager/GridNoScrollManager.kt new file mode 100644 index 000000000..720d28b09 --- /dev/null +++ b/app/src/main/java/com/puutaro/commandclick/custom_manager/GridNoScrollManager.kt @@ -0,0 +1,27 @@ +package com.puutaro.commandclick.custom_manager + +import android.content.Context +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.LinearLayoutManager + +class GridNoScrollManager( + context: Context?, + col: Int, + reverseLayout: Boolean = false +) : GridLayoutManager( + context, + col, + LinearLayoutManager.VERTICAL, + reverseLayout +) { + private var isScrollEnabled = true + + fun setScrollEnabled(flag: Boolean) { + this.isScrollEnabled = flag + } + + override fun canScrollVertically(): Boolean { + //Similarly you can customize "canScrollHorizontally()" for managing horizontal scroll + return isScrollEnabled && super.canScrollVertically() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/custom_view/MagicTextView.kt b/app/src/main/java/com/puutaro/commandclick/custom_view/MagicTextView.kt index eff4a81ff..286b69956 100644 --- a/app/src/main/java/com/puutaro/commandclick/custom_view/MagicTextView.kt +++ b/app/src/main/java/com/puutaro/commandclick/custom_view/MagicTextView.kt @@ -18,327 +18,327 @@ import android.util.Pair import java.util.WeakHashMap -class MagicTextView : androidx.appcompat.widget.AppCompatTextView { - private var outerShadows: ArrayList? = null - private var innerShadows: ArrayList? = null - private var canvasStore: WeakHashMap>? = null - private var tempCanvas: Canvas? = null - private var tempBitmap: Bitmap? = null - private var foregroundDrawable: Drawable? = null - private var strokeWidth = 0f - private var strokeColor: Int? = null - private var strokeJoin: Paint.Join? = null - private var strokeMiter = 0f - private lateinit var lockedCompoundPadding: IntArray - private var frozen = false - private val porterDuffXferModeSrcTop = PorterDuffXfermode(PorterDuff.Mode.SRC_ATOP) - private val porterDuffXfermodeDstTop = PorterDuffXfermode(PorterDuff.Mode.DST_OUT) - - constructor(context: Context) : super(context) { - init(null) - } - - constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) { - init(attrs) - } - - constructor(context: Context, attrs: AttributeSet?, defStyle: Int) : super( - context, - attrs, - defStyle - ) { - init(attrs) - } - - fun init(attrs: AttributeSet?) { - outerShadows = ArrayList() - innerShadows = ArrayList() - if (canvasStore == null) { - canvasStore = WeakHashMap() - } - attrs?.let { - val a = context.obtainStyledAttributes(it, R.styleable.MagicTextView) - val typefaceName = a.getString(R.styleable.MagicTextView_typeface) - typefaceName?.let { - val tf = Typeface.createFromAsset( - context.assets, - String.format("fonts/%s.ttf", it) - ) - setTypeface(tf) - } - if ( - a.hasValue(R.styleable.MagicTextView_foreground) - ) { - val foreground = a.getDrawable(R.styleable.MagicTextView_foreground) - foreground?.let { - setForegroundDrawable(it) - } ?: let { - this.setTextColor(a.getColor(R.styleable.MagicTextView_foreground, -0x1000000)) - } - } - if ( - a.hasValue(R.styleable.MagicTextView_mBackground) - ) { - val background = a.getDrawable(R.styleable.MagicTextView_mBackground) - background?.let { - setBackground(background) - } ?: let { - setBackgroundColor(a.getColor(R.styleable.MagicTextView_mBackground, -0x1000000)) - } - } - if ( - a.hasValue(R.styleable.MagicTextView_innerShadowColor) - ) { - addInnerShadow( - a.getDimensionPixelSize(R.styleable.MagicTextView_innerShadowRadius, 0) - .toFloat(), - a.getDimensionPixelOffset(R.styleable.MagicTextView_innerShadowDx, 0).toFloat(), - a.getDimensionPixelOffset(R.styleable.MagicTextView_innerShadowDy, 0).toFloat(), - a.getColor(R.styleable.MagicTextView_innerShadowColor, -0x1000000) - ) - } - if ( - a.hasValue(R.styleable.MagicTextView_outerShadowColor) - ) { - addOuterShadow( - a.getDimensionPixelSize(R.styleable.MagicTextView_outerShadowRadius, 0) - .toFloat(), - a.getDimensionPixelOffset(R.styleable.MagicTextView_outerShadowDx, 0).toFloat(), - a.getDimensionPixelOffset(R.styleable.MagicTextView_outerShadowDy, 0).toFloat(), - a.getColor(R.styleable.MagicTextView_outerShadowColor, -0x1000000) - ) - } - if ( - a.hasValue(R.styleable.MagicTextView_strokeColor) - ) { - val strokeWidth = - a.getDimensionPixelSize(R.styleable.MagicTextView_strokeWidth, 1).toFloat() - val strokeColor = a.getColor(R.styleable.MagicTextView_strokeColor, -0x1000000) - val strokeMiter = - a.getDimensionPixelSize(R.styleable.MagicTextView_strokeMiter, 10).toFloat() - var strokeJoin: Paint.Join? = null - when (a.getInt(R.styleable.MagicTextView_strokeJoinStyle, 0)) { - 0 -> strokeJoin = Paint.Join.MITER - 1 -> strokeJoin = Paint.Join.BEVEL - 2 -> strokeJoin = Paint.Join.ROUND - } - this.setStroke(strokeWidth, strokeColor, strokeJoin, strokeMiter) - } - a.recycle() - } - val innerShadowList = innerShadows - val isInnerShadowList = - innerShadowList != null - && innerShadowList.size > 0 - if ( - isInnerShadowList - || foregroundDrawable != null - ) { - setLayerType(LAYER_TYPE_SOFTWARE, null) - } - } - - private fun setStroke(width: Float, color: Int, join: Paint.Join?, miter: Float) { - strokeWidth = width - strokeColor = color - strokeJoin = join - strokeMiter = miter - } - -// fun setStroke(width: Float, color: Int) { -// setStroke(width, color, Paint.Join.MITER, 10f) +//class MagicTextView : androidx.appcompat.widget.AppCompatTextView { +// private var outerShadows: ArrayList? = null +// private var innerShadows: ArrayList? = null +// private var canvasStore: WeakHashMap>? = null +// private var tempCanvas: Canvas? = null +// private var tempBitmap: Bitmap? = null +// private var foregroundDrawable: Drawable? = null +// private var strokeWidth = 0f +// private var strokeColor: Int? = null +// private var strokeJoin: Paint.Join? = null +// private var strokeMiter = 0f +// private lateinit var lockedCompoundPadding: IntArray +// private var frozen = false +// private val porterDuffXferModeSrcTop = PorterDuffXfermode(PorterDuff.Mode.SRC_ATOP) +// private val porterDuffXfermodeDstTop = PorterDuffXfermode(PorterDuff.Mode.DST_OUT) +// +// constructor(context: Context) : super(context) { +// init(null) // } - - fun addOuterShadow(r: Float, dx: Float, dy: Float, color: Int) { - val rVal = when (r == 0f) { - true -> 0.0001f - else -> r - } - outerShadows?.add(Shadow(rVal, dx, dy, color)) - } - - private fun addInnerShadow(r: Float, dx: Float, dy: Float, color: Int) { - val rVal = when (r == 0f) { - true -> 0.0001f - else -> r - } - innerShadows?.add(Shadow(rVal, dx, dy, color)) - } - -// fun clearInnerShadows() { -// innerShadows!!.clear() +// +// constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) { +// init(attrs) // } // -// fun clearOuterShadows() { -// outerShadows!!.clear() +// constructor(context: Context, attrs: AttributeSet?, defStyle: Int) : super( +// context, +// attrs, +// defStyle +// ) { +// init(attrs) // } - - private fun setForegroundDrawable(d: Drawable?) { - foregroundDrawable = d - } - - override fun getForeground(): Drawable? { - return if ( - foregroundDrawable == null - ) foregroundDrawable - else ColorDrawable(this.currentTextColor) - } - - public override fun onDraw(canvas: Canvas) { - super.onDraw(canvas) - freeze() - val restoreBackground = this.background - val restoreDrawables = this.compoundDrawables - val restoreColor = this.currentTextColor - setCompoundDrawables(null, null, null, null) - outerShadows?.forEach { - shadow -> - setShadowLayer(shadow.r, shadow.dx, shadow.dy, shadow.color) - super.onDraw(canvas) - } - setShadowLayer(0f, 0f, 0f, 0) - this.setTextColor(restoreColor) - if ( - foregroundDrawable != null - && foregroundDrawable is BitmapDrawable - ) { - generateTempCanvas() - super.onDraw(tempCanvas) - val paint = (foregroundDrawable as BitmapDrawable).paint - paint.xfermode = porterDuffXferModeSrcTop - foregroundDrawable?.bounds = canvas.clipBounds - tempCanvas?.let { - foregroundDrawable?.draw(it) - } - tempBitmap?.let { - canvas.drawBitmap(it, 0f, 0f, null) - } - tempCanvas?.let { - tempCanvas?.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR) - } - - } - strokeColor?.let { - val paint = this.paint - paint.style = Paint.Style.STROKE - paint.strokeJoin = strokeJoin - paint.strokeMiter = strokeMiter - this.setTextColor(it) - paint.strokeWidth = strokeWidth - super.onDraw(canvas) - paint.style = Paint.Style.FILL - this.setTextColor(restoreColor) - } - val innerShadowList = innerShadows - if ( - innerShadowList != null - && innerShadowList.size > 0 - ) { - generateTempCanvas() - val paint = this.paint - for (shadow in innerShadowList) { - this.setTextColor(shadow.color) - super.onDraw(tempCanvas) - this.setTextColor(-0x1000000) - paint.xfermode = porterDuffXfermodeDstTop - paint.maskFilter = BlurMaskFilter(shadow.r, BlurMaskFilter.Blur.NORMAL) - tempCanvas?.save() - tempCanvas?.translate(shadow.dx, shadow.dy) - super.onDraw(tempCanvas) - tempCanvas?.restore() - tempBitmap?.let { - canvas.drawBitmap(it, 0f, 0f, null) - } - tempCanvas?.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR) - paint.xfermode = null - paint.maskFilter = null - this.setTextColor(restoreColor) - setShadowLayer(0f, 0f, 0f, 0) - } - } - this.setCompoundDrawablesWithIntrinsicBounds( - restoreDrawables[0], - restoreDrawables[1], - restoreDrawables[2], - restoreDrawables[3] - ) - background = restoreBackground -// setBackgroundDrawable(restoreBackground) - this.setTextColor(restoreColor) - unfreeze() - } - - private fun generateTempCanvas() { - val key = String.format("%dx%d", width, height) - val stored = canvasStore?.get(key) - when (stored != null) { - true -> { - tempCanvas = stored.first - tempBitmap = stored.second - } - else -> { - tempCanvas = Canvas() - tempBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888) - tempCanvas?.setBitmap(tempBitmap) - canvasStore?.put(key, Pair(tempCanvas, tempBitmap)) - } - } - } - - // Keep these things locked while onDraw in processing - private fun freeze() { - lockedCompoundPadding = intArrayOf( - compoundPaddingLeft, - compoundPaddingRight, - compoundPaddingTop, - compoundPaddingBottom - ) - frozen = true - } - - private fun unfreeze() { - frozen = false - } - - override fun requestLayout() { - if (!frozen) super.requestLayout() - } - - override fun postInvalidate() { - if (!frozen) super.postInvalidate() - } - - override fun postInvalidate(left: Int, top: Int, right: Int, bottom: Int) { - if (!frozen) super.postInvalidate(left, top, right, bottom) - } - - override fun invalidate() { - if (!frozen) super.invalidate() - } - -// override fun invalidate(rect: Rect) { -// if (!frozen) super.invalidate(rect) +// +// fun init(attrs: AttributeSet?) { +// outerShadows = ArrayList() +// innerShadows = ArrayList() +// if (canvasStore == null) { +// canvasStore = WeakHashMap() +// } +// attrs?.let { +// val a = context.obtainStyledAttributes(it, R.styleable.MagicTextView) +// val typefaceName = a.getString(R.styleable.MagicTextView_typeface) +// typefaceName?.let { +// val tf = Typeface.createFromAsset( +// context.assets, +// String.format("fonts/%s.ttf", it) +// ) +// setTypeface(tf) +// } +// if ( +// a.hasValue(R.styleable.MagicTextView_foreground) +// ) { +// val foreground = a.getDrawable(R.styleable.MagicTextView_foreground) +// foreground?.let { +// setForegroundDrawable(it) +// } ?: let { +// this.setTextColor(a.getColor(R.styleable.MagicTextView_foreground, -0x1000000)) +// } +// } +// if ( +// a.hasValue(R.styleable.MagicTextView_mBackground) +// ) { +// val background = a.getDrawable(R.styleable.MagicTextView_mBackground) +// background?.let { +// setBackground(background) +// } ?: let { +// setBackgroundColor(a.getColor(R.styleable.MagicTextView_mBackground, -0x1000000)) +// } +// } +// if ( +// a.hasValue(R.styleable.MagicTextView_innerShadowColor) +// ) { +// addInnerShadow( +// a.getDimensionPixelSize(R.styleable.MagicTextView_innerShadowRadius, 0) +// .toFloat(), +// a.getDimensionPixelOffset(R.styleable.MagicTextView_innerShadowDx, 0).toFloat(), +// a.getDimensionPixelOffset(R.styleable.MagicTextView_innerShadowDy, 0).toFloat(), +// a.getColor(R.styleable.MagicTextView_innerShadowColor, -0x1000000) +// ) +// } +// if ( +// a.hasValue(R.styleable.MagicTextView_outerShadowColor) +// ) { +// addOuterShadow( +// a.getDimensionPixelSize(R.styleable.MagicTextView_outerShadowRadius, 0) +// .toFloat(), +// a.getDimensionPixelOffset(R.styleable.MagicTextView_outerShadowDx, 0).toFloat(), +// a.getDimensionPixelOffset(R.styleable.MagicTextView_outerShadowDy, 0).toFloat(), +// a.getColor(R.styleable.MagicTextView_outerShadowColor, -0x1000000) +// ) +// } +// if ( +// a.hasValue(R.styleable.MagicTextView_strokeColor) +// ) { +// val strokeWidth = +// a.getDimensionPixelSize(R.styleable.MagicTextView_strokeWidth, 1).toFloat() +// val strokeColor = a.getColor(R.styleable.MagicTextView_strokeColor, -0x1000000) +// val strokeMiter = +// a.getDimensionPixelSize(R.styleable.MagicTextView_strokeMiter, 10).toFloat() +// var strokeJoin: Paint.Join? = null +// when (a.getInt(R.styleable.MagicTextView_strokeJoinStyle, 0)) { +// 0 -> strokeJoin = Paint.Join.MITER +// 1 -> strokeJoin = Paint.Join.BEVEL +// 2 -> strokeJoin = Paint.Join.ROUND +// } +// this.setStroke(strokeWidth, strokeColor, strokeJoin, strokeMiter) +// } +// a.recycle() +// } +// val innerShadowList = innerShadows +// val isInnerShadowList = +// innerShadowList != null +// && innerShadowList.size > 0 +// if ( +// isInnerShadowList +// || foregroundDrawable != null +// ) { +// setLayerType(LAYER_TYPE_SOFTWARE, null) +// } // } // -// override fun invalidate(l: Int, t: Int, r: Int, b: Int) { -// if (!frozen) super.invalidate(l, t, r, b) +// private fun setStroke(width: Float, color: Int, join: Paint.Join?, miter: Float) { +// strokeWidth = width +// strokeColor = color +// strokeJoin = join +// strokeMiter = miter // } - - override fun getCompoundPaddingLeft(): Int { - return if (!frozen) super.getCompoundPaddingLeft() else lockedCompoundPadding[0] - } - - override fun getCompoundPaddingRight(): Int { - return if (!frozen) super.getCompoundPaddingRight() else lockedCompoundPadding[1] - } - - override fun getCompoundPaddingTop(): Int { - return if (!frozen) super.getCompoundPaddingTop() else lockedCompoundPadding[2] - } - - override fun getCompoundPaddingBottom(): Int { - return if (!frozen) super.getCompoundPaddingBottom() else lockedCompoundPadding[3] - } - - class Shadow(var r: Float, var dx: Float, var dy: Float, var color: Int) -} \ No newline at end of file +// +//// fun setStroke(width: Float, color: Int) { +//// setStroke(width, color, Paint.Join.MITER, 10f) +//// } +// +// fun addOuterShadow(r: Float, dx: Float, dy: Float, color: Int) { +// val rVal = when (r == 0f) { +// true -> 0.0001f +// else -> r +// } +// outerShadows?.add(Shadow(rVal, dx, dy, color)) +// } +// +// private fun addInnerShadow(r: Float, dx: Float, dy: Float, color: Int) { +// val rVal = when (r == 0f) { +// true -> 0.0001f +// else -> r +// } +// innerShadows?.add(Shadow(rVal, dx, dy, color)) +// } +// +//// fun clearInnerShadows() { +//// innerShadows!!.clear() +//// } +//// +//// fun clearOuterShadows() { +//// outerShadows!!.clear() +//// } +// +// private fun setForegroundDrawable(d: Drawable?) { +// foregroundDrawable = d +// } +// +// override fun getForeground(): Drawable? { +// return if ( +// foregroundDrawable == null +// ) foregroundDrawable +// else ColorDrawable(this.currentTextColor) +// } +// +// public override fun onDraw(canvas: Canvas) { +// super.onDraw(canvas) +// freeze() +// val restoreBackground = this.background +// val restoreDrawables = this.compoundDrawables +// val restoreColor = this.currentTextColor +// setCompoundDrawables(null, null, null, null) +// outerShadows?.forEach { +// shadow -> +// setShadowLayer(shadow.r, shadow.dx, shadow.dy, shadow.color) +// super.onDraw(canvas) +// } +// setShadowLayer(0f, 0f, 0f, 0) +// this.setTextColor(restoreColor) +// if ( +// foregroundDrawable != null +// && foregroundDrawable is BitmapDrawable +// ) { +// generateTempCanvas() +// super.onDraw(tempCanvas) +// val paint = (foregroundDrawable as BitmapDrawable).paint +// paint.xfermode = porterDuffXferModeSrcTop +// foregroundDrawable?.bounds = canvas.clipBounds +// tempCanvas?.let { +// foregroundDrawable?.draw(it) +// } +// tempBitmap?.let { +// canvas.drawBitmap(it, 0f, 0f, null) +// } +// tempCanvas?.let { +// tempCanvas?.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR) +// } +// +// } +// strokeColor?.let { +// val paint = this.paint +// paint.style = Paint.Style.STROKE +// paint.strokeJoin = strokeJoin +// paint.strokeMiter = strokeMiter +// this.setTextColor(it) +// paint.strokeWidth = strokeWidth +// super.onDraw(canvas) +// paint.style = Paint.Style.FILL +// this.setTextColor(restoreColor) +// } +// val innerShadowList = innerShadows +// if ( +// innerShadowList != null +// && innerShadowList.size > 0 +// ) { +// generateTempCanvas() +// val paint = this.paint +// for (shadow in innerShadowList) { +// this.setTextColor(shadow.color) +// super.onDraw(tempCanvas) +// this.setTextColor(-0x1000000) +// paint.xfermode = porterDuffXfermodeDstTop +// paint.maskFilter = BlurMaskFilter(shadow.r, BlurMaskFilter.Blur.NORMAL) +// tempCanvas?.save() +// tempCanvas?.translate(shadow.dx, shadow.dy) +// super.onDraw(tempCanvas) +// tempCanvas?.restore() +// tempBitmap?.let { +// canvas.drawBitmap(it, 0f, 0f, null) +// } +// tempCanvas?.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR) +// paint.xfermode = null +// paint.maskFilter = null +// this.setTextColor(restoreColor) +// setShadowLayer(0f, 0f, 0f, 0) +// } +// } +// this.setCompoundDrawablesWithIntrinsicBounds( +// restoreDrawables[0], +// restoreDrawables[1], +// restoreDrawables[2], +// restoreDrawables[3] +// ) +// background = restoreBackground +//// setBackgroundDrawable(restoreBackground) +// this.setTextColor(restoreColor) +// unfreeze() +// } +// +// private fun generateTempCanvas() { +// val key = String.format("%dx%d", width, height) +// val stored = canvasStore?.get(key) +// when (stored != null) { +// true -> { +// tempCanvas = stored.first +// tempBitmap = stored.second +// } +// else -> { +// tempCanvas = Canvas() +// tempBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888) +// tempCanvas?.setBitmap(tempBitmap) +// canvasStore?.put(key, Pair(tempCanvas, tempBitmap)) +// } +// } +// } +// +// // Keep these things locked while onDraw in processing +// private fun freeze() { +// lockedCompoundPadding = intArrayOf( +// compoundPaddingLeft, +// compoundPaddingRight, +// compoundPaddingTop, +// compoundPaddingBottom +// ) +// frozen = true +// } +// +// private fun unfreeze() { +// frozen = false +// } +// +// override fun requestLayout() { +// if (!frozen) super.requestLayout() +// } +// +// override fun postInvalidate() { +// if (!frozen) super.postInvalidate() +// } +// +// override fun postInvalidate(left: Int, top: Int, right: Int, bottom: Int) { +// if (!frozen) super.postInvalidate(left, top, right, bottom) +// } +// +// override fun invalidate() { +// if (!frozen) super.invalidate() +// } +// +//// override fun invalidate(rect: Rect) { +//// if (!frozen) super.invalidate(rect) +//// } +//// +//// override fun invalidate(l: Int, t: Int, r: Int, b: Int) { +//// if (!frozen) super.invalidate(l, t, r, b) +//// } +// +// override fun getCompoundPaddingLeft(): Int { +// return if (!frozen) super.getCompoundPaddingLeft() else lockedCompoundPadding[0] +// } +// +// override fun getCompoundPaddingRight(): Int { +// return if (!frozen) super.getCompoundPaddingRight() else lockedCompoundPadding[1] +// } +// +// override fun getCompoundPaddingTop(): Int { +// return if (!frozen) super.getCompoundPaddingTop() else lockedCompoundPadding[2] +// } +// +// override fun getCompoundPaddingBottom(): Int { +// return if (!frozen) super.getCompoundPaddingBottom() else lockedCompoundPadding[3] +// } +// +// class Shadow(var r: Float, var dx: Float, var dy: Float, var color: Int) +//} \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/custom_view/OutlineTextView.kt b/app/src/main/java/com/puutaro/commandclick/custom_view/OutlineTextView.kt index e041cfa05..613848a4c 100644 --- a/app/src/main/java/com/puutaro/commandclick/custom_view/OutlineTextView.kt +++ b/app/src/main/java/com/puutaro/commandclick/custom_view/OutlineTextView.kt @@ -3,7 +3,9 @@ package com.puutaro.commandclick.custom_view import android.content.Context import android.graphics.Canvas import android.graphics.Color +import android.graphics.LinearGradient import android.graphics.Paint +import android.graphics.Shader import android.util.AttributeSet import androidx.appcompat.widget.AppCompatTextView import com.puutaro.commandclick.R @@ -33,36 +35,38 @@ class OutlineTextView : AppCompatTextView { fun setFillColor(id: Int){ fillColor = context.getColor(id) } - override fun onDraw(canvas: Canvas?) { -// val strokeColor = when( -// isRevOutLine -// ){ -// true -> Color.BLACK -// else -> Color.WHITE -// } + override fun onDraw(canvas: Canvas) { setTextColor(strokeColor) paint.apply { - style = Paint.Style.FILL_AND_STROKE + style = Paint.Style.STROKE strokeWidth = outlineWidthSrc * densityForOutline } super.onDraw(canvas) -// val fillColor = when( -// isRevOutLine -// ){ -// true -> Color.WHITE -// else -> Color.BLACK -// } setTextColor(fillColor) paint.apply { style = Paint.Style.FILL strokeWidth = 0f } super.onDraw(canvas) - } -// fun revOutline(isRev: Boolean){ -// isRevOutLine = isRev + +// paint.isAntiAlias = true +// +// // グラデーションの設定 (例: 赤から青へのグラデーション) +// val gradient = LinearGradient(0f, 0f, width.toFloat(), 0f, Color.RED, Color.BLUE, Shader.TileMode.CLAMP) +// paint.shader = gradient // -// } +// // 最初の文字の幅を取得 +// val firstCharSrc = text.toString().firstOrNull()?.toString() ?: return +// val firstCharWidth = paint.measureText(firstCharSrc) +// +// // 最初の文字をグラデーションで描画 +// paint.shader = gradient +// canvas?.drawText(firstCharSrc, 0f, baseline.toFloat(), paint) + +// // 残りの文字を通常のテキストで描画 +// paint.shader = null +// canvas.drawText(text.toString().substring(1), firstCharWidth, baseline, paint) + } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/fragment/CommandIndexFragment.kt b/app/src/main/java/com/puutaro/commandclick/fragment/CommandIndexFragment.kt index 7029a3b40..39489bf5e 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment/CommandIndexFragment.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment/CommandIndexFragment.kt @@ -1,8 +1,5 @@ package com.puutaro.commandclick.fragment -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent import android.graphics.Color import android.media.AudioManager import android.os.Bundle @@ -15,7 +12,6 @@ import androidx.fragment.app.activityViewModels import androidx.recyclerview.widget.RecyclerView import com.puutaro.commandclick.R import com.puutaro.commandclick.activity_lib.event.lib.terminal.ExecSetToolbarButtonImage -import com.puutaro.commandclick.common.variable.broadcast.scheme.BroadCastIntentSchemeForCmdIndex import com.puutaro.commandclick.common.variable.path.UsePath import com.puutaro.commandclick.common.variable.variables.CommandClickScriptVariable import com.puutaro.commandclick.common.variable.variant.PageSearchToolbarButtonVariant @@ -23,7 +19,6 @@ import com.puutaro.commandclick.common.variable.variant.SettingVariableSelects import com.puutaro.commandclick.databinding.CommandIndexFragmentBinding import com.puutaro.commandclick.fragment_lib.command_index_fragment.* import com.puutaro.commandclick.fragment_lib.command_index_fragment.variable.* -import com.puutaro.commandclick.proccess.broadcast.BroadcastRegister import com.puutaro.commandclick.proccess.pin.PinFannelHideShow import com.puutaro.commandclick.proccess.setting_menu_for_cmdindex.ExtraMenuForCmdIndex import com.puutaro.commandclick.proccess.setting_menu_for_cmdindex.page_search.PageSearchManager @@ -43,28 +38,15 @@ class CommandIndexFragment: Fragment() { private var _binding: CommandIndexFragmentBinding? = null val binding get() = _binding!! var WebSearchSwitch = WebSearchSwich.ON.bool - var historySwitch = SettingVariableSelects.HistorySwitchSelects.OFF.name +// var historySwitch = SettingVariableSelects.HistorySwitchSelects.OFF.name var onTermVisibleWhenKeyboard = CommandClickScriptVariable.ON_TERM_VISIBLE_WHEN_KEYBOARD_DEFAULT_VALUE - var urlHistoryOrButtonExec = CommandClickScriptVariable.CMDCLICK_URL_HISTOTY_OR_BUTTON_EXEC_DEFAULT_VALUE +// var urlHistoryOrButtonExec = CommandClickScriptVariable.CMDCLICK_URL_HISTOTY_OR_BUTTON_EXEC_DEFAULT_VALUE var fannelInfoMap: Map = mapOf() var terminalColor = CommandClickScriptVariable.TERMINAL_COLOR_DEFAULT_VALUE var jsExecuteJob: Job? = null var suggestJob: Job? = null var showTerminalJobWhenReuse: Job? = null - var savedEditTextContents = String() -// var extraMapBitmapList: List = emptyList() -// var homeFannelHistoryNameList: List? = null -// var bottomScriptUrlList = emptyList() - - private var broadcastReceiverForCmdIndex: BroadcastReceiver = object : BroadcastReceiver() { - override fun onReceive(context: Context, intent: Intent) { -// BroadcastReceiveHandlerForCmdIndex.handle( -// this@CommandIndexFragment, -// intent, -// ) - } - } override fun onCreateView( inflater: LayoutInflater, @@ -86,8 +68,6 @@ class CommandIndexFragment: Fragment() { super.onViewCreated(view, savedInstanceState) val terminalViewModel: TerminalViewModel by activityViewModels() terminalViewModel.onDialog = false - val cmdIndexViewModel: CommandIndexViewModel by activityViewModels() - cmdIndexViewModel.onFocusSearchText = false val startUpPref = FannelInfoTool.getSharePref(context) binding.pageSearch.cmdclickPageSearchToolBar.isVisible = false val defaultSystemPath = @@ -146,14 +126,9 @@ class CommandIndexFragment: Fragment() { override fun onDestroyView() { super.onDestroyView() - val cmdIndexViewModel: CommandIndexViewModel by activityViewModels() -// exitDialog( -//// binding.cmdList -// ) ExtraMenuGifCreator.exit() UrlImageDownloader.exit() PreInstallFannel.exit() - cmdIndexViewModel.onFocusSearchText = false jsExecuteJob?.cancel() IndexInitHandler.exit() _binding = null @@ -166,10 +141,6 @@ class CommandIndexFragment: Fragment() { showTerminalJobWhenReuse?.cancel() // ExtraMenuGifCreator.exit() // PreInstallFannel.exit() - BroadcastRegister.unregisterBroadcastReceiver( - this, - broadcastReceiverForCmdIndex, - ) super.onPause() } @@ -178,13 +149,6 @@ class CommandIndexFragment: Fragment() { TerminalShower.show(this) // EditTextWhenReuse.focus(this) activity?.volumeControlStream = AudioManager.STREAM_MUSIC - BroadcastRegister.registerBroadcastReceiverMultiActions( - this, - broadcastReceiverForCmdIndex, - listOf( - BroadCastIntentSchemeForCmdIndex.UPDATE_INDEX_FANNEL_LIST.action, - ) - ) // PreInstallFannel.install(this) // ExtraMenuGifCreator.create(this) } diff --git a/app/src/main/java/com/puutaro/commandclick/fragment/EditFragment.kt b/app/src/main/java/com/puutaro/commandclick/fragment/EditFragment.kt index f150d48f1..27f67fdf8 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment/EditFragment.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment/EditFragment.kt @@ -10,21 +10,15 @@ import android.view.View import android.view.ViewGroup import android.view.WindowManager import android.widget.EditText -import androidx.appcompat.widget.LinearLayoutCompat -import androidx.core.view.isVisible import androidx.databinding.DataBindingUtil import androidx.fragment.app.Fragment -import androidx.fragment.app.activityViewModels import androidx.recyclerview.widget.RecyclerView import com.abdeveloper.library.MultiSelectModel import com.puutaro.commandclick.R import com.puutaro.commandclick.common.variable.broadcast.scheme.BroadCastIntentSchemeForEdit import com.puutaro.commandclick.common.variable.path.UsePath -import com.puutaro.commandclick.common.variable.variant.SettingVariableSelects import com.puutaro.commandclick.common.variable.variables.CommandClickScriptVariable -import com.puutaro.commandclick.common.variable.variant.PageSearchToolbarButtonVariant -import com.puutaro.commandclick.common.variable.variant.ReadLines -import com.puutaro.commandclick.component.adapter.ListIndexAdapter +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.ListViewToolForListIndexAdapter import com.puutaro.commandclick.fragment_lib.edit_fragment.common.UpdateLastModifyForEdit import com.puutaro.commandclick.databinding.EditFragmentBinding @@ -32,15 +26,10 @@ import com.puutaro.commandclick.fragment_lib.command_index_fragment.variable.Too import com.puutaro.commandclick.fragment_lib.edit_fragment.* import com.puutaro.commandclick.fragment_lib.edit_fragment.broadcast.receiver.BroadcastReceiveHandlerForEdit import com.puutaro.commandclick.fragment_lib.edit_fragment.common.TerminalShowByTerminalDoWhenReuse -import com.puutaro.commandclick.fragment_lib.edit_fragment.processor.KeyboardWhenTermLongForEdit -import com.puutaro.commandclick.fragment_lib.edit_fragment.processor.ListIndexSizingToKeyboard -import com.puutaro.commandclick.fragment_lib.edit_fragment.processor.PageSearchToolbarManagerForEdit -import com.puutaro.commandclick.fragment_lib.edit_fragment.processor.WebSearchToolbarManagerForEdit import com.puutaro.commandclick.fragment_lib.edit_fragment.variable.EditInitType import com.puutaro.commandclick.fragment_lib.edit_fragment.common.ToolbarButtonBariantForEdit import com.puutaro.commandclick.fragment_lib.edit_fragment.common.ToolbarButtonToolForEdit import com.puutaro.commandclick.fragment_lib.edit_fragment.processor.CurrentFannelConListMaker -import com.puutaro.commandclick.proccess.js_macro_libs.toolbar_libs.EditLongPressType import com.puutaro.commandclick.proccess.broadcast.BroadcastRegister import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.ListSettingsForListIndex import com.puutaro.commandclick.proccess.js_macro_libs.list_index_libs.DirectoryAndCopyGetter @@ -54,7 +43,6 @@ import com.puutaro.commandclick.util.state.FannelStateManager import com.puutaro.commandclick.util.state.FannelStateRooterManager import com.puutaro.commandclick.util.state.SettingFannelConHandlerForEdit import com.puutaro.commandclick.util.state.FannelInfoTool -import com.puutaro.commandclick.view_model.activity.CommandIndexViewModel import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job @@ -70,16 +58,16 @@ class EditFragment: Fragment() { private var _binding: EditFragmentBinding? = null val binding get() = _binding!! var busyboxExecutor: BusyboxExecutor? = null - var historySwitch = SettingVariableSelects.HistorySwitchSelects.OFF.name +// var historySwitch = SettingVariableSelects.HistorySwitchSelects.OFF.name var onTermVisibleWhenKeyboard = CommandClickScriptVariable.ON_TERM_VISIBLE_WHEN_KEYBOARD_DEFAULT_VALUE - var urlHistoryOrButtonExec = - CommandClickScriptVariable.CMDCLICK_URL_HISTOTY_OR_BUTTON_EXEC_DEFAULT_VALUE +// var urlHistoryOrButtonExec = +// CommandClickScriptVariable.CMDCLICK_URL_HISTOTY_OR_BUTTON_EXEC_DEFAULT_VALUE var fontZoomPercent = CommandClickScriptVariable.CMDCLICK_TERMINAL_FONT_ZOOM_DEFAULT_VALUE var terminalOn = CommandClickScriptVariable.TERMINAL_DO_DEFAULT_VALUE var terminalColor = CommandClickScriptVariable.TERMINAL_COLOR_DEFAULT_VALUE var jsExecuteJob: Job? = null - var popBackStackToIndexImmediateJob: Job? = null +// var popBackStackToIndexImmediateJob: Job? = null var suggestJob: Job? = null var fannelInfoMap: Map = mapOf() var srcFannelInfoMap: Map? = null @@ -87,30 +75,31 @@ class EditFragment: Fragment() { EditFragmentArgs.Companion.EditTypeSettingsKey.CMD_VAL_EDIT var setReplaceVariableMap: Map? = null var settingFannelPath: String = String() - var setVariableTypeList: List? = null - var hideSettingVariableList: List = emptyList() - var enableCmdEdit = false +// var setVariableTypeList: List? = null +// var hideSettingVariableList: List = emptyList() +// var enableCmdEdit = false var editExecuteValue = CommandClickScriptVariable.EDIT_EXECUTE_DEFAULT_VALUE var enableEditExecute = false + var mainFannelConList = emptyList() var currentFannelConList = emptyList() var settingFannelConList: List? = null - var existIndexList: Boolean = false - var passCmdVariableEdit = String() +// var existIndexList: Boolean = false +// var passCmdVariableEdit = String() var toolbarButtonConfigMap: Map?>? = null var listIndexConfigMap: Map? = null - var qrDialogConfig: Map? = null +// var qrDialogConfig: Map? = null var directoryAndCopyGetter: DirectoryAndCopyGetter? = null val toolBarButtonVisibleMap = ToolbarButtonToolForEdit.createInitButtonDisableMap() val toolBarButtonIconMap: MutableMap> = ToolbarButtonToolForEdit.createInitButtonIconMap() var editBoxTitleConfig: Map = emptyMap() - var filterDir = String() +// var filterDir = String() var buttonWeight = 0.25f - var onNoUrlSaveMenu = false +// var onNoUrlSaveMenu = false var onUpdateLastModify = false var disableKeyboardFragmentChange = false val listConSelectBoxMapList: MutableList?> = mutableListOf() - var recordNumToMapNameValueInCommandHolder: Map?>? = null - var recordNumToMapNameValueInSettingHolder: Map?>? = null +// var recordNumToMapNameValueInCommandHolder: Map?>? = null +// var recordNumToMapNameValueInSettingHolder: Map?>? = null var firstUpdate = false val alterIfShellResultMap: MutableMap = mutableMapOf() @@ -142,9 +131,9 @@ class EditFragment: Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.pageSearch.cmdclickPageSearchToolBar.isVisible = false - binding.webSearch.webSearchToolbar.isVisible = false - binding.editListLinearLayout.isVisible = false +// binding.pageSearch.cmdclickPageSearchToolBar.isVisible = false +// binding.webSearch.webSearchToolbar.isVisible = false +// binding.editToolBarLinearLayout.isVisible = false directoryAndCopyGetter = DirectoryAndCopyGetter(this) val sharePref = FannelInfoTool.getSharePref(context) fannelInfoMap = @@ -165,9 +154,9 @@ class EditFragment: Fragment() { ) editTypeSettingKey = EditFragmentArgs.getEditType(arguments) - enableCmdEdit = - editTypeSettingKey == - EditFragmentArgs.Companion.EditTypeSettingsKey.CMD_VAL_EDIT +// enableCmdEdit = +// editTypeSettingKey == +// EditFragmentArgs.Companion.EditTypeSettingsKey.CMD_VAL_EDIT Keyboard.hiddenKeyboardForFragment( this ) @@ -189,7 +178,7 @@ class EditFragment: Fragment() { val cmdclickDefaultAppDirPath = UsePath.cmdclickDefaultAppDirPath val currentFannelPath = File(cmdclickDefaultAppDirPath, currentFannelName).absolutePath - val mainFannelConList = + mainFannelConList = ReadText(currentFannelPath).textToList() setReplaceVariableMap = JavaScriptLoadUrl.createMakeReplaceVariableMapHandler( @@ -236,15 +225,15 @@ class EditFragment: Fragment() { ).absolutePath, ) // val pageSearchToolbarManagerForEdit = -// PageSearchToolbarManagerForEdit(this) - PageSearchToolbarManagerForEdit.cancleButtonClickListener(this) - PageSearchToolbarManagerForEdit.onKeyListner(this) - PageSearchToolbarManagerForEdit.pageSearchTextChangeListner(this) - PageSearchToolbarManagerForEdit.searchTopClickLisnter(this) - PageSearchToolbarManagerForEdit.searchDownClickLisnter(this) - WebSearchToolbarManagerForEdit.setKeyListener(this) - WebSearchToolbarManagerForEdit.setCancelListener(this) - WebSearchToolbarManagerForEdit.setGoogleSuggest(this) +//// PageSearchToolbarManagerForEdit(this) +// PageSearchToolbarManagerForEdit.cancleButtonClickListener(this) +// PageSearchToolbarManagerForEdit.onKeyListner(this) +// PageSearchToolbarManagerForEdit.pageSearchTextChangeListner(this) +// PageSearchToolbarManagerForEdit.searchTopClickLisnter(this) +// PageSearchToolbarManagerForEdit.searchDownClickLisnter(this) +// WebSearchToolbarManagerForEdit.setKeyListener(this) +// WebSearchToolbarManagerForEdit.setCancelListener(this) +// WebSearchToolbarManagerForEdit.setGoogleSuggest(this) } val window = activity?.window @@ -270,8 +259,6 @@ class EditFragment: Fragment() { // ).joinToString("\n\n") // ) EditModeHandler.execByHowFullEdit(this) - val cmdIndexViewModel: CommandIndexViewModel by activityViewModels() - cmdIndexViewModel.onFocusSearchText = false context?.let { busyboxExecutor = BusyboxExecutor( it, @@ -288,47 +275,47 @@ class EditFragment: Fragment() { if( !this.isVisible ) return@KeyboardVisibilityEventListener - if( - disableKeyboardFragmentChange - ) return@KeyboardVisibilityEventListener -// if(terminalViewModel.onDialog) return@setEventListener - binding.editTitleLinearlayout.isVisible = !isOpen - val linearLayoutParam = - binding.editFragment.layoutParams as LinearLayoutCompat.LayoutParams - val editFragmentWeight = linearLayoutParam.weight - if( - editFragmentWeight != ReadLines.LONGTH - ) { - KeyboardWhenTermLongForEdit.handle( - this, - isOpen - ) - return@KeyboardVisibilityEventListener - } - ListIndexSizingToKeyboard.handle( - this, - isOpen - ) - binding.editToolBarLinearLayout.isVisible = - when(isOpen) { - true -> { - val isNotSearchTextWhenIndexList = - (existIndexList && !binding.editListSearchEditText.isVisible) - !existIndexList - || isNotSearchTextWhenIndexList - } - else -> true - } - val isOpenKeyboard = - when(isOpen) { - true -> onTermVisibleWhenKeyboard != - SettingVariableSelects.OnTermVisibleWhenKeyboardSelects.ON.name - else -> isOpen - } - listener?.onKeyBoardVisibleChangeForEditFragment( - isOpenKeyboard, - this.isVisible - ) +// if( +// disableKeyboardFragmentChange +// ) return@KeyboardVisibilityEventListener +//// if(terminalViewModel.onDialog) return@setEventListener +// binding.editToolBarLinearLayout.isVisible = !isOpen +// val linearLayoutParam = +// binding.editFragment.layoutParams as LinearLayoutCompat.LayoutParams +// val editFragmentWeight = linearLayoutParam.weight +// if( +// editFragmentWeight != ReadLines.LONGTH +// ) { +// KeyboardWhenTermLongForEdit.handle( +// this, +// isOpen +// ) +// return@KeyboardVisibilityEventListener +// } +// ListIndexSizingToKeyboard.handle( +// this, +// isOpen +// ) +// binding.editToolBarLinearLayout.isVisible = +// when(isOpen) { +// true -> { +// val isNotSearchTextWhenIndexList = +// (existIndexList && !binding.editListSearchEditText.isVisible) +// !existIndexList +// || isNotSearchTextWhenIndexList +// } +// else -> true +// } +// val isOpenKeyboard = +// when(isOpen) { +// true -> onTermVisibleWhenKeyboard != +// SettingVariableSelects.OnTermVisibleWhenKeyboardSelects.ON.name +// else -> isOpen +// } +// listener?.onKeyBoardVisibleChangeForEditFragment( +// isOpenKeyboard, +// this.isVisible +// ) } ) } @@ -362,21 +349,24 @@ class EditFragment: Fragment() { override fun onStart() { super.onStart() - if( - !existIndexList - ) return +// if( +// !existIndexList +// ) return if(!firstUpdate){ firstUpdate = true return } CoroutineScope(Dispatchers.Main).launch { delay(100) + val editComponentListAdapter = binding.editListRecyclerView.adapter as EditComponentListAdapter ListViewToolForListIndexAdapter.listIndexListUpdateFileList( - this@EditFragment, - ListSettingsForListIndex.ListIndexListMaker.makeFileListHandler( - this@EditFragment, - ListIndexAdapter.indexListMap, - ListIndexAdapter.listIndexTypeKey + editComponentListAdapter, + ListSettingsForListIndex.ListIndexListMaker.makeLineMapListHandler( + this@EditFragment.fannelInfoMap, + this@EditFragment.setReplaceVariableMap, + editComponentListAdapter.editListMap, + this@EditFragment.busyboxExecutor, +// ListIndexAdapter.listIndexTypeKey ) ) } @@ -393,11 +383,11 @@ class EditFragment: Fragment() { private fun destroyViews(){ exitDialog(binding.editListRecyclerView) - binding.editLinearLayout.removeAllViews() - binding.editListInnerTopLinearLayout.removeAllViews() - binding.editListInnerBottomLinearLayout.removeAllViews() - binding.editListLinearLayout.removeAllViews() binding.editToolBarLinearLayout.removeAllViews() +// binding.editListInnerTopLinearLayout.removeAllViews() +// binding.editListInnerBottomLinearLayout.removeAllViews() +// binding.editListLinearLayout.removeAllViews() +// binding.editToolBarLinearLayout.removeAllViews() } interface OnToolBarButtonClickListenerForEditFragment { @@ -464,14 +454,14 @@ class EditFragment: Fragment() { ) } - interface OnLongPressPlayOrEditButtonListener { - fun onLongPressPlayOrEditButton( - editLongPressType: EditLongPressType, - tag: String?, - searchText: String, - pageSearchToolbarButtonVariant: PageSearchToolbarButtonVariant? = null, - ) - } +// interface OnLongPressPlayOrEditButtonListener { +// fun onLongPressPlayOrEditButton( +// editLongPressType: EditLongPressType, +// tag: String?, +// searchText: String, +// pageSearchToolbarButtonVariant: PageSearchToolbarButtonVariant? = null, +// ) +// } interface OnLongTermKeyBoardOpenAjustListenerForEdit { fun onLongTermKeyBoardOpenAjustForEdit( diff --git a/app/src/main/java/com/puutaro/commandclick/fragment/TerminalFragment.kt b/app/src/main/java/com/puutaro/commandclick/fragment/TerminalFragment.kt index b7597b1bd..da737d961 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment/TerminalFragment.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment/TerminalFragment.kt @@ -1,6 +1,7 @@ package com.puutaro.commandclick.fragment import android.app.AlertDialog +import android.app.Dialog import android.content.* import android.media.AudioManager import android.net.Uri @@ -18,6 +19,7 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import com.abdeveloper.library.MultiSelectModel import com.puutaro.commandclick.R +import com.puutaro.commandclick.activity.MainActivity import com.puutaro.commandclick.activity_lib.event.lib.common.ExecBackstackHandle import com.puutaro.commandclick.common.variable.variables.CommandClickScriptVariable import com.puutaro.commandclick.common.variable.variant.ReadLines @@ -29,6 +31,7 @@ import com.puutaro.commandclick.fragment_lib.terminal_fragment.* import com.puutaro.commandclick.fragment_lib.terminal_fragment.broadcast.receiver.JsDebugger import com.puutaro.commandclick.fragment_lib.terminal_fragment.broadcast.register.BroadcastRegisterForTerm import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog.GgleSchDialog +import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog.PromptWithListDialog import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog.WebViewJsDialog import com.puutaro.commandclick.fragment_lib.terminal_fragment.proccess.InitCurrentMonitorFile import com.puutaro.commandclick.fragment_lib.terminal_fragment.proccess.TerminalOnHandlerForEdit @@ -103,6 +106,7 @@ class TerminalFragment: var rowsMap: MutableMap>> = mutableMapOf() var headerMap: MutableMap> = mutableMapOf() var alertDialogInstance: AlertDialog? = null + var editListDialog: Dialog? = null // var webViewDialogInstance: Dialog? = null var goBackFlag = false var pocketWebViewManager: WebViewJsDialog? = null @@ -238,8 +242,6 @@ class TerminalFragment: MonitorFileManager.trim(terminalViewModel) BroadcastRegisterForTerm.register(this) FannelHistoryGifCreator.watch(this) - ButtonImageCreator.create(this) - } override fun onStart() { @@ -248,6 +250,7 @@ class TerminalFragment: TerminalOnHandlerForEdit.handle(this) JsDebugger.stockLogSender(this) GifCreateMonitor.watch(this) + ButtonImageCreator.create(this) } @@ -274,6 +277,7 @@ class TerminalFragment: displayUpdateCoroutineJob?.cancel() UrlCaptureWatcher.exit() GifCreateMonitor.exit() + ButtonImageCreator.exit() // FannelHistoryGifCreator.exit() // GifCreateMonitor.exit() // ButtonImageCreator.exit() @@ -373,20 +377,30 @@ class TerminalFragment: ) } - interface OnEditTextUpdateListenerForTermFragment { - fun onEditTextUpdateForTermFragment( - editTextId: Int?, - variableValue: String + interface OnTextViewAndFannelUpdateListenerForTerm { + fun onTextViewAndFannelForTermFragment( + indexOrParentTagName: String, + srcFragment: String, + tagName: String, + updateText: String, + isSave: Boolean, ) } - interface OnSpinnerUpdateListenerForTermFragment { - fun onSpinnerUpdateForTermFragment( - spinnerId: Int?, - variableValue: String + interface OnTextViewAndMapListUpdateListenerForTerm { + fun onTextViewAndMapListUpdateForTerm( + editListIndex: Int, + srcFragmentStr: String, ) } +// interface OnSpinnerUpdateListenerForTermFragment { +// fun onSpinnerUpdateForTermFragment( +// spinnerId: Int?, +// variableValue: String +// ) +// } + interface OnEditableSpinnerUpdateListenerForTermFragment { fun onEditableSpinnerUpdateForTermFragment( spinnerId: Int?, @@ -401,6 +415,7 @@ class TerminalFragment: this, broadcastReceiverForTerm ) + PromptWithListDialog.exit() UrlCaptureWatcher.exit() PinFannelBarManager.clear(binding.fannelPinRecyclerView) FannelHistoryGifCreator.exit() @@ -486,7 +501,7 @@ class TerminalFragment: interface OnGetFileListenerForTerm { fun onGetFileForTerm( - parentDirPathSrc: String, +// parentDirPathSrc: String, onDirectoryPickSrc: Boolean = false, filterPrefixListCon: String, filterSuffixListCon: String, diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/command_index_fragment/ExtraMenuGifCreator.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/command_index_fragment/ExtraMenuGifCreator.kt index aaf61fb87..ca2df0a9f 100644 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/command_index_fragment/ExtraMenuGifCreator.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/command_index_fragment/ExtraMenuGifCreator.kt @@ -150,7 +150,7 @@ object ExtraMenuGifCreator { val bkBitmap = createBk( imageWidth ) - val fg = BitmapTool.ImageRemaker.mask( + val fg = BitmapTool.ImageTransformer.mask( bkBitmap, maskBitmap, ) @@ -161,7 +161,7 @@ object ExtraMenuGifCreator { private fun createBk( imageWidth: Int ): Bitmap { - return BitmapTool.ImageRemaker.makeRect( + return BitmapTool.ImageTransformer.makeRect( "#0a6161", imageWidth, imageHeight @@ -201,14 +201,14 @@ object ExtraMenuGifCreator { val rndInt = (1..4).random() return when(rndInt){ 1 -> { - BitmapTool.ImageRemaker.flipHorizontally(bitmap) + BitmapTool.ImageTransformer.flipHorizontally(bitmap) } 2 -> { - BitmapTool.ImageRemaker.flipVertically(bitmap) + BitmapTool.ImageTransformer.flipVertically(bitmap) } 3 -> { - BitmapTool.ImageRemaker.flipVertically(bitmap).let { - BitmapTool.ImageRemaker.flipHorizontally(it) + BitmapTool.ImageTransformer.flipVertically(bitmap).let { + BitmapTool.ImageTransformer.flipHorizontally(it) } } else -> bitmap diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/command_index_fragment/IndexInitHandler.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/command_index_fragment/IndexInitHandler.kt index af1b95377..6441b8802 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/command_index_fragment/IndexInitHandler.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/command_index_fragment/IndexInitHandler.kt @@ -33,7 +33,6 @@ object IndexInitHandler { ) { val context = cmdIndexFragment.context ?: return - val activity = cmdIndexFragment.activity val startUpPref = FannelInfoTool.getSharePref(context) TerminalShower.show( diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/command_index_fragment/ToolBarHistoryButtonControl.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/command_index_fragment/ToolBarHistoryButtonControl.kt index 59ea24625..bcb412907 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/command_index_fragment/ToolBarHistoryButtonControl.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/command_index_fragment/ToolBarHistoryButtonControl.kt @@ -11,9 +11,9 @@ object ToolBarHistoryButtonControl { cmdIndexFragment: CommandIndexFragment ) { val binding = cmdIndexFragment.binding - val historyButtonView = binding.cmdindexHistoryButton + val cmdindexFannelCenterButton = binding.cmdindexFannelCenterButton val cmdindexUrlHistoryButton = binding.cmdindexUrlHistoryButton - historyButtonView.setOnClickListener { + cmdindexFannelCenterButton.setOnClickListener { historyButtonInnerView -> FannelHistoryButtonEvent.invoke(cmdIndexFragment) } diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/command_index_fragment/init/ConfigFromPreferenceFileSetter.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/command_index_fragment/init/ConfigFromPreferenceFileSetter.kt index 5ef5cb790..e6019bf38 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/command_index_fragment/init/ConfigFromPreferenceFileSetter.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/command_index_fragment/init/ConfigFromPreferenceFileSetter.kt @@ -13,23 +13,9 @@ import java.io.File object ConfigFromPreferenceFileSetter { fun set( cmdIndexFragment: CommandIndexFragment, -// currentAppDirPath: String, ){ -// val cmdclickDefaultAppDirPath = UsePath.cmdclickDefaultAppDirPath val cmdclickPreferenceJsName = SystemFannel.preference -// val languageType = LanguageTypeSelects.JAVA_SCRIPT -// val languageTypeToSectionHolderMap = -// CommandClickScriptVariable.LANGUAGE_TYPE_TO_SECTION_HOLDER_MAP.get( -// languageType -// ) -// val settingSectionStart = languageTypeToSectionHolderMap?.get( -// CommandClickScriptVariable.HolderTypeName.SETTING_SEC_START -// ) as String -// -// val settingSectionEnd = languageTypeToSectionHolderMap.get( -// CommandClickScriptVariable.HolderTypeName.SETTING_SEC_END -// ) as String val preferenceConList = when( File(UsePath.cmdclickDefaultAppDirPath, cmdclickPreferenceJsName).isFile @@ -41,7 +27,6 @@ object ConfigFromPreferenceFileSetter { ) else -> CommandClickVariables.makeMainFannelConList( -// currentAppDirPath, cmdclickPreferenceJsName ) @@ -51,8 +36,6 @@ object ConfigFromPreferenceFileSetter { preferenceConList, CommandClickScriptVariable.SETTING_SEC_START, CommandClickScriptVariable.SETTING_SEC_END, -// settingSectionStart, -// settingSectionEnd ) cmdIndexFragment.onTermVisibleWhenKeyboard = SettingVariableReader.getCbValue( @@ -67,56 +50,10 @@ object ConfigFromPreferenceFileSetter { ), ) - cmdIndexFragment.historySwitch = SettingVariableReader.getCbValue( - settingVariableList, - CommandClickScriptVariable.CMDCLICK_HISTORY_SWITCH, - CommandClickScriptVariable.HISTORY_SWITCH_DEFAULT_VALUE, - SettingVariableSelects.HistorySwitchSelects.INHERIT.name, - CommandClickScriptVariable.HISTORY_SWITCH_DEFAULT_VALUE, - listOf( - SettingVariableSelects.HistorySwitchSelects.OFF.name, - SettingVariableSelects.HistorySwitchSelects.ON.name - ), - ) - - cmdIndexFragment.urlHistoryOrButtonExec = SettingVariableReader.getCbValue( - settingVariableList, - CommandClickScriptVariable.CMDCLICK_URL_HISTOTY_OR_BUTTON_EXEC, - CommandClickScriptVariable.CMDCLICK_URL_HISTOTY_OR_BUTTON_EXEC_DEFAULT_VALUE, - SettingVariableSelects.UrlHistoryOrButtonExecSelects.INHERIT.name, - CommandClickScriptVariable.CMDCLICK_URL_HISTOTY_OR_BUTTON_EXEC_DEFAULT_VALUE, - listOf( - SettingVariableSelects.UrlHistoryOrButtonExecSelects.URL_HISTORY.name, - SettingVariableSelects.UrlHistoryOrButtonExecSelects.BUTTON_EXEC.name, - ), - ) - cmdIndexFragment.terminalColor = SettingVariableReader.getStrValue( settingVariableList, CommandClickScriptVariable.TERMINAL_COLOR, CommandClickScriptVariable.TERMINAL_DO_DEFAULT_VALUE ) -// val bottomScriptUrlList = SettingVariableReader.setListFromPath( -// ScriptPreWordReplacer.replace( -// UsePath.homeScriptUrlsFilePath, -//// currentAppDirPath, -// cmdclickPreferenceJsName, -// ) -// ) -// if( -// bottomScriptUrlList.isNotEmpty() -// ) cmdIndexFragment.bottomScriptUrlList = bottomScriptUrlList - -// val homeFannelHistoryNameList = SettingVariableReader.setListFromPath( -// ScriptPreWordReplacer.replace( -// UsePath.homeFannelsFilePath, -//// currentAppDirPath, -// cmdclickPreferenceJsName, -// ) -// ) -// if( -// homeFannelHistoryNameList.isNotEmpty() -// ) cmdIndexFragment.homeFannelHistoryNameList = homeFannelHistoryNameList - } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/command_index_fragment/list_view_lib/click/FannelNameClickListenerSetter.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/command_index_fragment/list_view_lib/click/FannelNameClickListenerSetter.kt index 7267929df..89f0b9649 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/command_index_fragment/list_view_lib/click/FannelNameClickListenerSetter.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/command_index_fragment/list_view_lib/click/FannelNameClickListenerSetter.kt @@ -2,24 +2,9 @@ package com.puutaro.commandclick.fragment_lib.command_index_fragment.list_view_l import android.view.View import androidx.recyclerview.widget.RecyclerView -import com.puutaro.commandclick.common.variable.variables.CommandClickScriptVariable -import com.puutaro.commandclick.common.variable.variant.SettingVariableSelects import com.puutaro.commandclick.common.variable.path.UsePath -import com.puutaro.commandclick.component.adapter.FannelIndexListAdapter -import com.puutaro.commandclick.fragment.CommandIndexFragment import com.puutaro.commandclick.fragment_lib.command_index_fragment.common.CommandListManager -import com.puutaro.commandclick.fragment_lib.command_index_fragment.list_view_lib.click.lib.OnEditExecuteEvent -import com.puutaro.commandclick.fragment_lib.command_index_fragment.list_view_lib.common.DecideEditTag -import com.puutaro.commandclick.fragment_lib.edit_fragment.processor.ValidateShell -import com.puutaro.commandclick.proccess.CmdIndexToolbarSwitcher -import com.puutaro.commandclick.proccess.broadcast.BroadCastIntent -import com.puutaro.commandclick.proccess.edit.lib.SetReplaceVariabler -import com.puutaro.commandclick.proccess.intent.ExecJsOrSellHandler -import com.puutaro.commandclick.proccess.lib.VariationErrDialog -import com.puutaro.commandclick.util.* import com.puutaro.commandclick.util.file.FileSystems -import com.puutaro.commandclick.util.file.ReadText -import com.puutaro.commandclick.util.state.FannelStateManager import java.io.File diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/command_index_fragment/list_view_lib/click/lib/OnEditExecuteEvent.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/command_index_fragment/list_view_lib/click/lib/OnEditExecuteEvent.kt index a4c5cf6dd..8655f596e 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/command_index_fragment/list_view_lib/click/lib/OnEditExecuteEvent.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/command_index_fragment/list_view_lib/click/lib/OnEditExecuteEvent.kt @@ -1,6 +1,7 @@ package com.puutaro.commandclick.fragment_lib.command_index_fragment.list_view_lib.click.lib import androidx.fragment.app.Fragment +import com.blankj.utilcode.util.ToastUtils import com.puutaro.commandclick.R import com.puutaro.commandclick.fragment.CommandIndexFragment import com.puutaro.commandclick.fragment.EditFragment @@ -34,14 +35,14 @@ object OnEditExecuteEvent { shortcutOnMark, fannelState, ) - val cmdValEditPrefix = FragmentTagPrefix.Prefix.CMD_VAL_EDIT_PREFIX.str - val cmdValEdit = - when( - editFragmentTag.startsWith(cmdValEditPrefix) - ) { - false -> EditFragmentArgs.Companion.EditTypeSettingsKey.SETTING_VAL_EDIT - else -> EditFragmentArgs.Companion.EditTypeSettingsKey.CMD_VAL_EDIT - } +// val cmdValEditPrefix = FragmentTagPrefix.Prefix.CMD_VAL_EDIT_PREFIX.str + val cmdValEdit = EditFragmentArgs.Companion.EditTypeSettingsKey.CMD_VAL_EDIT +// when( +// editFragmentTag.startsWith(cmdValEditPrefix) +// ) { +// false -> EditFragmentArgs.Companion.EditTypeSettingsKey.SETTING_VAL_EDIT +// else -> EditFragmentArgs.Companion.EditTypeSettingsKey.CMD_VAL_EDIT +// } when(fragment){ is CommandIndexFragment -> { val listener = context diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/command_index_fragment/list_view_lib/long_click/lib/ScriptFileEdit.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/command_index_fragment/list_view_lib/long_click/lib/ScriptFileEdit.kt index 0cef4a122..c3922cd6f 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/command_index_fragment/list_view_lib/long_click/lib/ScriptFileEdit.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/command_index_fragment/list_view_lib/long_click/lib/ScriptFileEdit.kt @@ -7,7 +7,6 @@ import com.puutaro.commandclick.common.variable.settings.FannelInfoSetting import com.puutaro.commandclick.fragment.CommandIndexFragment import com.puutaro.commandclick.fragment_lib.command_index_fragment.list_view_lib.common.DecideEditTag import com.puutaro.commandclick.fragment_lib.command_index_fragment.variable.LongClickMenuItemsforCmdIndex -import com.puutaro.commandclick.fragment_lib.edit_fragment.processor.ValidateShell import com.puutaro.commandclick.proccess.lib.VariationErrDialog import com.puutaro.commandclick.util.file.ReadText import com.puutaro.commandclick.util.state.EditFragmentArgs @@ -36,20 +35,20 @@ object ScriptFileEdit { fannelName ).absolutePath, ).textToList() - val validateErrMessage = ValidateShell.correct( - fragment, - shellContentsList, - fannelName - ) - if(validateErrMessage.isNotEmpty()){ - val shellScriptPath = "${cmdclickDefaultAppDirPath}/${fannelName}" - VariationErrDialog.show( - fragment, - shellScriptPath, - validateErrMessage - ) - return - } +// val validateErrMessage = ValidateShell.correct( +// fragment, +// shellContentsList, +// fannelName +// ) +// if(validateErrMessage.isNotEmpty()){ +// val shellScriptPath = "${cmdclickDefaultAppDirPath}/${fannelName}" +// VariationErrDialog.show( +// fragment, +// shellScriptPath, +// validateErrMessage +// ) +// return +// } val editFragmentTag = DecideEditTag( shellContentsList, // currentAppDirPath, diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/command_index_fragment/setting_button/AddConfirmDialogForSettingButton.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/command_index_fragment/setting_button/AddConfirmDialogForSettingButton.kt index 0ed6ea025..e125c498b 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/command_index_fragment/setting_button/AddConfirmDialogForSettingButton.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/command_index_fragment/setting_button/AddConfirmDialogForSettingButton.kt @@ -142,17 +142,17 @@ object AddConfirmDialogForSettingButton { shellContentsList, // shellScriptName ) - val shellScriptContentsQuoteComp = makeShellScriptContentsQuoteComp( - shellScriptContentsLabelCommentOut, -// languageTypeToSectionHolderMap - ) - FileSystems.writeFile( - File( - cmdclickDefaultAppDirPath, - shellScriptName, - ).absolutePath, - shellScriptContentsQuoteComp - ) +// val shellScriptContentsQuoteComp = makeShellScriptContentsQuoteComp( +// shellScriptContentsLabelCommentOut, +//// languageTypeToSectionHolderMap +// ) +// FileSystems.writeFile( +// File( +// cmdclickDefaultAppDirPath, +// shellScriptName, +// ).absolutePath, +// shellScriptContentsQuoteComp +// ) // CommandListManager.execListUpdateForCmdIndex( //// currentAppDirPath, // binding.cmdList, @@ -161,40 +161,40 @@ object AddConfirmDialogForSettingButton { } -private fun makeShellScriptContentsQuoteComp( - shellContentsList: List, -// languageTypeToSectionHolderMap: Map? -): String { - val recordNumToMapNameValueInCommandHolder = - RecordNumToMapNameValueInHolder.parse( - shellContentsList, - CommandClickScriptVariable.CMD_SEC_START, - CommandClickScriptVariable.CMD_SEC_END, -// languageTypeToSectionHolderMap?.get( -// CommandClickScriptVariable.HolderTypeName.CMD_SEC_START -// ) as String, -// languageTypeToSectionHolderMap[ -// CommandClickScriptVariable.HolderTypeName.CMD_SEC_END -// ] as String, - ) - val recordNumToMapNameValueInSettingHolder = - RecordNumToMapNameValueInHolder.parse( - shellContentsList, - CommandClickScriptVariable.SETTING_SEC_START, - CommandClickScriptVariable.SETTING_SEC_END, -// languageTypeToSectionHolderMap.get(CommandClickScriptVariable.HolderTypeName.SETTING_SEC_START) as String, -// languageTypeToSectionHolderMap[CommandClickScriptVariable.HolderTypeName.SETTING_SEC_END] as String, - true, - ) - val shellScriptListQuoteCompForCmdVariables = quoteCompShellScriptListVariables( - shellContentsList, - recordNumToMapNameValueInCommandHolder - ) - return quoteCompShellScriptListVariables( - shellScriptListQuoteCompForCmdVariables, - recordNumToMapNameValueInSettingHolder, - ).joinToString("\n") -} +//private fun makeShellScriptContentsQuoteComp( +// shellContentsList: List, +//// languageTypeToSectionHolderMap: Map? +//): String { +// val recordNumToMapNameValueInCommandHolder = +// RecordNumToMapNameValueInHolder.parse( +// shellContentsList, +// CommandClickScriptVariable.CMD_SEC_START, +// CommandClickScriptVariable.CMD_SEC_END, +//// languageTypeToSectionHolderMap?.get( +//// CommandClickScriptVariable.HolderTypeName.CMD_SEC_START +//// ) as String, +//// languageTypeToSectionHolderMap[ +//// CommandClickScriptVariable.HolderTypeName.CMD_SEC_END +//// ] as String, +// ) +// val recordNumToMapNameValueInSettingHolder = +// RecordNumToMapNameValueInHolder.parse( +// shellContentsList, +// CommandClickScriptVariable.SETTING_SEC_START, +// CommandClickScriptVariable.SETTING_SEC_END, +//// languageTypeToSectionHolderMap.get(CommandClickScriptVariable.HolderTypeName.SETTING_SEC_START) as String, +//// languageTypeToSectionHolderMap[CommandClickScriptVariable.HolderTypeName.SETTING_SEC_END] as String, +// true, +// ) +// val shellScriptListQuoteCompForCmdVariables = quoteCompShellScriptListVariables( +// shellContentsList, +// recordNumToMapNameValueInCommandHolder +// ) +// return quoteCompShellScriptListVariables( +// shellScriptListQuoteCompForCmdVariables, +// recordNumToMapNameValueInSettingHolder, +// ).joinToString("\n") +//} diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/ConfigFromScriptFileSetter.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/ConfigFromScriptFileSetter.kt index 538f7e9ea..1a565f7dc 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/ConfigFromScriptFileSetter.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/ConfigFromScriptFileSetter.kt @@ -3,6 +3,7 @@ package com.puutaro.commandclick.fragment_lib.edit_fragment import android.content.Context import com.puutaro.commandclick.R import com.puutaro.commandclick.common.variable.edit.EditTextSupportViewName +import com.puutaro.commandclick.common.variable.path.UsePath import com.puutaro.commandclick.common.variable.res.CmdClickIcons import com.puutaro.commandclick.common.variable.variant.SettingVariableSelects import com.puutaro.commandclick.common.variable.variables.CommandClickScriptVariable @@ -21,12 +22,14 @@ import com.puutaro.commandclick.proccess.tool_bar_button.config_settings.ButtonI import com.puutaro.commandclick.proccess.tool_bar_button.config_settings.ButtonVisibleSettingForToolbarButton import com.puutaro.commandclick.proccess.ubuntu.BusyboxExecutor import com.puutaro.commandclick.util.* +import com.puutaro.commandclick.util.file.FileSystems import com.puutaro.commandclick.util.map.CmdClickMap import com.puutaro.commandclick.util.state.EditFragmentArgs import com.puutaro.commandclick.util.state.FannelStateRooterManager import com.puutaro.commandclick.util.state.FragmentTagPrefix import com.puutaro.commandclick.util.state.FannelInfoTool import com.puutaro.commandclick.util.str.QuoteTool +import java.io.File object ConfigFromScriptFileSetter { @@ -50,30 +53,30 @@ object ConfigFromScriptFileSetter { ) editFragment.settingFannelConList = settingVariableList - editFragment.setVariableTypeList = - SetVariableTypesSetterForEdit.set( - editFragment, - fannelInfoMap, - settingVariableList, - ) - editFragment.hideSettingVariableList = - ListSettingVariableListMaker.makeFromSettingVariableList( - CommandClickScriptVariable.HIDE_SETTING_VARIABLES, - fannelInfoMap, - editFragment.setReplaceVariableMap, - settingVariableList - ) - editFragment.recordNumToMapNameValueInSettingHolder = - RecordNumToMapNameValueInHolderMaker.makeForSetting(editFragment) - editFragment.recordNumToMapNameValueInCommandHolder = - RecordNumToMapNameValueInHolderMaker.makeForCmdHolder( - editFragment, - mainFannelConList - ) - editFragment.existIndexList = - judgeExistListIndex( - editFragment, - ) +// editFragment.setVariableTypeList = +// SetVariableTypesSetterForEdit.set( +// editFragment, +// fannelInfoMap, +// settingVariableList, +// ) +// editFragment.hideSettingVariableList = +// ListSettingVariableListMaker.makeFromSettingVariableList( +// CommandClickScriptVariable.HIDE_SETTING_VARIABLES, +// fannelInfoMap, +// editFragment.setReplaceVariableMap, +// settingVariableList +// ) +// editFragment.recordNumToMapNameValueInSettingHolder = +// RecordNumToMapNameValueInHolderMaker.makeForSetting(editFragment) +// editFragment.recordNumToMapNameValueInCommandHolder = +// RecordNumToMapNameValueInHolderMaker.makeForCmdHolder( +// editFragment, +// mainFannelConList +// ) +// editFragment.existIndexList = +// judgeExistListIndex( +// editFragment, +// ) editFragment.editBoxTitleConfig = ListSettingVariableListMaker.makeConfigMapFromSettingValList( CommandClickScriptVariable.EDIT_BOX_TITLE_CONFIG, @@ -89,13 +92,21 @@ object ConfigFromScriptFileSetter { setReplaceVariableMap ) } - TitleImageAndViewSetter.set( - editFragment - ) +// val binding = editFragment.binding +// val editTextView = binding.editTextView +// TitleImageAndViewSetter.set( +// editFragment, +// editTextView, +// fannelInfoMap, +// setReplaceVariableMap, +// editFragment.busyboxExecutor, +// binding.editTitleImage, +// editFragment.editBoxTitleConfig +// ) - val isSettingEdit = !editFragment.enableCmdEdit - || editFragment.passCmdVariableEdit == - CommandClickScriptVariable.PASS_CMDVARIABLE_EDIT_ON_VALUE +// val isSettingEdit = !editFragment.enableCmdEdit +// || editFragment.passCmdVariableEdit == +// CommandClickScriptVariable.PASS_CMDVARIABLE_EDIT_ON_VALUE setToolbarButtonConfigMapFromSettingValList( @@ -103,7 +114,7 @@ object ConfigFromScriptFileSetter { editFragment.busyboxExecutor, settingVariableList, onShortcut, - isSettingEdit, +// isSettingEdit, ) editFragment.editExecuteValue = SettingVariableReader.getStrValue( @@ -132,20 +143,20 @@ object ConfigFromScriptFileSetter { // "listIndexConfigMap: ${editFragment.listIndexConfigMap}", // ).joinToString("\n\n\n") // ) - editFragment.qrDialogConfig = ListSettingVariableListMaker.makeConfigMapFromSettingValList( - CommandClickScriptVariable.QR_DIALOG_CONFIG, - settingVariableList, - fannelInfoMap, - setReplaceVariableMap, - String(), - ).let { - AlterToolForSetValType.updateConfigMapByAlter( - editFragment.context, - it, - editFragment.busyboxExecutor, - setReplaceVariableMap - ) - } +// editFragment.qrDialogConfig = ListSettingVariableListMaker.makeConfigMapFromSettingValList( +// CommandClickScriptVariable.QR_DIALOG_CONFIG, +// settingVariableList, +// fannelInfoMap, +// setReplaceVariableMap, +// String(), +// ).let { +// AlterToolForSetValType.updateConfigMapByAlter( +// editFragment.context, +// it, +// editFragment.busyboxExecutor, +// setReplaceVariableMap +// ) +// } // FileSystems.writeFile( // File(UsePath.cmdclickDefaultAppDirPath, "jsAcAlter.txt").absolutePath, // listOf( @@ -158,8 +169,9 @@ object ConfigFromScriptFileSetter { (editFragment.editExecuteValue == SettingVariableSelects.EditExecuteSelects.ALWAYS.name ) && onShortcut - val isOnlyCmdEdit = editFragment.enableCmdEdit - && !editFragment.enableEditExecute + val isOnlyCmdEdit = !editFragment.enableEditExecute +// editFragment.enableCmdEdit +// && !editFragment.enableEditExecute if ( !onShortcut @@ -167,8 +179,8 @@ object ConfigFromScriptFileSetter { setButtonVisible( editFragment, editFragment.enableEditExecute, - editFragment.enableCmdEdit, - isSettingEdit, +// editFragment.enableCmdEdit, +// isSettingEdit, isOnlyCmdEdit, ) return @@ -186,29 +198,29 @@ object ConfigFromScriptFileSetter { ), ) - editFragment.historySwitch = SettingVariableReader.getCbValue( - settingVariableList, - CommandClickScriptVariable.CMDCLICK_HISTORY_SWITCH, - CommandClickScriptVariable.HISTORY_SWITCH_DEFAULT_VALUE, - SettingVariableSelects.HistorySwitchSelects.INHERIT.name, - CommandClickScriptVariable.HISTORY_SWITCH_DEFAULT_VALUE, - listOf( - SettingVariableSelects.HistorySwitchSelects.OFF.name, - SettingVariableSelects.HistorySwitchSelects.ON.name - ), - ) - - editFragment.urlHistoryOrButtonExec = SettingVariableReader.getCbValue( - settingVariableList, - CommandClickScriptVariable.CMDCLICK_URL_HISTOTY_OR_BUTTON_EXEC, - CommandClickScriptVariable.CMDCLICK_URL_HISTOTY_OR_BUTTON_EXEC_DEFAULT_VALUE, - SettingVariableSelects.UrlHistoryOrButtonExecSelects.INHERIT.name, - CommandClickScriptVariable.CMDCLICK_URL_HISTOTY_OR_BUTTON_EXEC_DEFAULT_VALUE, - listOf( - SettingVariableSelects.UrlHistoryOrButtonExecSelects.URL_HISTORY.name, - SettingVariableSelects.UrlHistoryOrButtonExecSelects.BUTTON_EXEC.name, - ), - ) +// editFragment.historySwitch = SettingVariableReader.getCbValue( +// settingVariableList, +// CommandClickScriptVariable.CMDCLICK_HISTORY_SWITCH, +// CommandClickScriptVariable.HISTORY_SWITCH_DEFAULT_VALUE, +// SettingVariableSelects.HistorySwitchSelects.INHERIT.name, +// CommandClickScriptVariable.HISTORY_SWITCH_DEFAULT_VALUE, +// listOf( +// SettingVariableSelects.HistorySwitchSelects.OFF.name, +// SettingVariableSelects.HistorySwitchSelects.ON.name +// ), +// ) +// +// editFragment.urlHistoryOrButtonExec = SettingVariableReader.getCbValue( +// settingVariableList, +// CommandClickScriptVariable.CMDCLICK_URL_HISTOTY_OR_BUTTON_EXEC, +// CommandClickScriptVariable.CMDCLICK_URL_HISTOTY_OR_BUTTON_EXEC_DEFAULT_VALUE, +// SettingVariableSelects.UrlHistoryOrButtonExecSelects.INHERIT.name, +// CommandClickScriptVariable.CMDCLICK_URL_HISTOTY_OR_BUTTON_EXEC_DEFAULT_VALUE, +// listOf( +// SettingVariableSelects.UrlHistoryOrButtonExecSelects.URL_HISTORY.name, +// SettingVariableSelects.UrlHistoryOrButtonExecSelects.BUTTON_EXEC.name, +// ), +// ) editFragment.terminalColor = SettingVariableReader.getStrValue( @@ -224,32 +236,33 @@ object ConfigFromScriptFileSetter { "1" ) - editFragment.passCmdVariableEdit = SettingVariableReader.getStrValue( - settingVariableList, - CommandClickScriptVariable.PASS_CMDVARIABLE_EDIT, - String(), - ) +// editFragment.passCmdVariableEdit = SettingVariableReader.getStrValue( +// settingVariableList, +// CommandClickScriptVariable.PASS_CMDVARIABLE_EDIT, +// String(), +// ) editFragment.enableEditExecute = (editFragment.editExecuteValue == SettingVariableSelects.EditExecuteSelects.ALWAYS.name ) && onShortcut - val isSettingEditForOnShortcut = !editFragment.enableCmdEdit - || editFragment.passCmdVariableEdit == - CommandClickScriptVariable.PASS_CMDVARIABLE_EDIT_ON_VALUE - val isOnlyCmdEditForShortcut = editFragment.enableCmdEdit - && !editFragment.enableEditExecute +// val isSettingEditForOnShortcut = !editFragment.enableCmdEdit +// || editFragment.passCmdVariableEdit == +// CommandClickScriptVariable.PASS_CMDVARIABLE_EDIT_ON_VALUE + val isOnlyCmdEditForShortcut = !editFragment.enableEditExecute +// editFragment.enableCmdEdit +// && !editFragment.enableEditExecute setButtonVisible( editFragment, editFragment.enableEditExecute, - editFragment.enableCmdEdit, - isSettingEditForOnShortcut, +// editFragment.enableCmdEdit, +// isSettingEditForOnShortcut, isOnlyCmdEditForShortcut, ) setEditToolBarButtonIcon( editFragment, - isSettingEditForOnShortcut, +// isSettingEditForOnShortcut, isOnlyCmdEditForShortcut, ) // FileSystems.writeFile( @@ -309,11 +322,11 @@ object ConfigFromScriptFileSetter { ) - editFragment.onNoUrlSaveMenu = SettingVariableReader.getStrValue( - settingVariableList, - CommandClickScriptVariable.NO_SCROLL_SAVE_URLS, - String() - ).isNotEmpty() +// editFragment.onNoUrlSaveMenu = SettingVariableReader.getStrValue( +// settingVariableList, +// CommandClickScriptVariable.NO_SCROLL_SAVE_URLS, +// String() +// ).isNotEmpty() editFragment.onUpdateLastModify = !( SettingVariableReader.getStrValue( @@ -324,38 +337,38 @@ object ConfigFromScriptFileSetter { ) } - private fun judgeExistListIndex( - editFragment: EditFragment, - ): Boolean { - val isSetting = !IsCmdEdit.judge(editFragment) - - if( - isSetting - ) return false -// FileSystems.writeFile( -// File(UsePath.cmdclickDefaultAppDirPath, "setVal.txt").absolutePath, -// listOf( -// "recordNumToMapNameValueInSettingHolder: ${editFragment.recordNumToMapNameValueInSettingHolder}", -// "setVariableTypeList: ${editFragment.setVariableTypeList?.joinToString("\n")}" -// ).joinToString("\n\n") +// private fun judgeExistListIndex( +// editFragment: EditFragment, +// ): Boolean { +// val isSetting = !IsCmdEdit.judge(editFragment) +// +// if( +// isSetting +// ) return false +//// FileSystems.writeFile( +//// File(UsePath.cmdclickDefaultAppDirPath, "setVal.txt").absolutePath, +//// listOf( +//// "recordNumToMapNameValueInSettingHolder: ${editFragment.recordNumToMapNameValueInSettingHolder}", +//// "setVariableTypeList: ${editFragment.setVariableTypeList?.joinToString("\n")}" +//// ).joinToString("\n\n") +//// ) +// +//// val setVariableTypeList = +//// editFragment.setVariableTypeList +//// ?: return false +//// val setVariableTypeListCon = +//// "\n" + setVariableTypeList.joinToString("\n") +// val listIndexNewlineRegex = Regex( +// "\n[a-zA-Z0-9]{1,}:${EditTextSupportViewName.LIST_INDEX.str}=" // ) - - val setVariableTypeList = - editFragment.setVariableTypeList - ?: return false - val setVariableTypeListCon = - "\n" + setVariableTypeList.joinToString("\n") - val listIndexNewlineRegex = Regex( - "\n[a-zA-Z0-9]{1,}:${EditTextSupportViewName.LIST_INDEX.str}=" - ) - return listIndexNewlineRegex.containsMatchIn(setVariableTypeListCon) - } +// return listIndexNewlineRegex.containsMatchIn(setVariableTypeListCon) +// } private fun setButtonVisible( editFragment: EditFragment, enableEditExecute: Boolean, - enableCmdEdit: Boolean, - isSettingEdit: Boolean, +// enableCmdEdit: Boolean, +// isSettingEdit: Boolean, isOnlyCmdEdit: Boolean, ){ // editFragment.enableEditExecute = @@ -370,11 +383,12 @@ object ConfigFromScriptFileSetter { // CommandClickScriptVariable.PASS_CMDVARIABLE_EDIT_ON_VALUE // val isOnlyCmdEdit = enableCmdEdit // && !enableEditExecute - val isCmdEditExecute = enableCmdEdit - && enableEditExecute +// val isCmdEditExecute = enableEditExecute +// enableCmdEdit +// && enableEditExecute editFragment.toolBarButtonVisibleMap.put( ToolbarButtonBariantForEdit.HISTORY, - isCmdEditExecute + enableEditExecute ) val buttonVisibleOn = ButtonVisibleSettingForToolbarButton.ButtonVisibleValue.ON.name @@ -382,7 +396,7 @@ object ConfigFromScriptFileSetter { editFragment.toolBarButtonVisibleMap.put( settingButtonVariant, when(true) { - isSettingEdit -> false +// isSettingEdit -> false isOnlyCmdEdit -> false else -> { val settingButtonConfigMap = @@ -404,7 +418,7 @@ object ConfigFromScriptFileSetter { editFragment.toolBarButtonVisibleMap.put( editButtonVariant, when (true) { - isSettingEdit -> false +// isSettingEdit -> false isOnlyCmdEdit -> false else -> { val editButtonConfigMap = @@ -426,7 +440,7 @@ object ConfigFromScriptFileSetter { editFragment.toolBarButtonVisibleMap.put( okButtonVariant, when(true) { - isSettingEdit -> true +// isSettingEdit -> true isOnlyCmdEdit -> true else -> { val okButtonConfigMap = @@ -448,7 +462,7 @@ object ConfigFromScriptFileSetter { editFragment.toolBarButtonVisibleMap.put( extraButtonVariant, when(true) { - isSettingEdit -> false +// isSettingEdit -> false isOnlyCmdEdit -> false else -> { val settingButtonConfigMap = @@ -473,7 +487,7 @@ object ConfigFromScriptFileSetter { busyboxExecutor: BusyboxExecutor?, settingVariableList: List?, onShortcut: Boolean, - isSettingEdit: Boolean, +// isSettingEdit: Boolean, ){ val setReplaceVariableMap = editFragment.setReplaceVariableMap editFragment.toolbarButtonConfigMap = @@ -524,7 +538,7 @@ object ConfigFromScriptFileSetter { editFragment, settingVariableList, onShortcut, - isSettingEdit, +// isSettingEdit, ).let { AlterToolForSetValType.updateConfigMapByAlter( editFragment.context, @@ -534,11 +548,25 @@ object ConfigFromScriptFileSetter { ) } ) +// FileSystems.updateFile( +// File(UsePath.cmdclickDefaultAppDirPath, "toolbarInInitMap.txt").absolutePath, +// listOf( +// "settingVariableList ${settingVariableList}", +// "${CommandClickScriptVariable.SETTING_BUTTON_CONFIG}: ${execMakeToolbarButtonConfigMap( +// editFragment, +// settingVariableList, +// CommandClickScriptVariable.SETTING_BUTTON_CONFIG, +// String(), +// onShortcut, +// )}", +// "toolbarButtonConfigMap: ${editFragment.toolbarButtonConfigMap}", +// ).joinToString("\n") +// ) } private fun setEditToolBarButtonIcon( editFragment: EditFragment, - isSettingEdit: Boolean, +// isSettingEdit: Boolean, isOnlyCmdEdit: Boolean, ){ // editFragment.enableEditExecute = @@ -560,7 +588,7 @@ object ConfigFromScriptFileSetter { editFragment.toolBarButtonIconMap.put( ToolbarButtonBariantForEdit.SETTING, when(true) { - isSettingEdit, +// isSettingEdit, isOnlyCmdEdit -> defaultSettingButtonIconIdToCaption else -> { @@ -601,8 +629,8 @@ object ConfigFromScriptFileSetter { editFragment.toolBarButtonIconMap.put( ToolbarButtonBariantForEdit.OK, when(true) { - isSettingEdit -> - defaultOkButtonIconIdToCaption +// isSettingEdit -> +// defaultOkButtonIconIdToCaption isOnlyCmdEdit -> defaultOkButtonIconIdToCaption else -> { @@ -629,8 +657,8 @@ object ConfigFromScriptFileSetter { editFragment.toolBarButtonIconMap.put( ToolbarButtonBariantForEdit.EDIT, when(true) { - isSettingEdit -> - defaultEditButtonIconIdToCaption +// isSettingEdit -> +// defaultEditButtonIconIdToCaption isOnlyCmdEdit -> defaultEditButtonIconIdToCaption else -> { @@ -676,7 +704,7 @@ object ConfigFromScriptFileSetter { editFragment: EditFragment, settingVariableList: List?, onShortcut: Boolean, - isSettingEdit: Boolean, +// isSettingEdit: Boolean, ): Map { if(!onShortcut){ return mapOf() @@ -684,24 +712,31 @@ object ConfigFromScriptFileSetter { // val isSettingEdit = !editFragment.enableCmdEdit // || editFragment.passCmdVariableEdit == // CommandClickScriptVariable.PASS_CMDVARIABLE_EDIT_ON_VALUE - return when(isSettingEdit) { - true -> mapOf( - SettingButtonConfigMapKey.CLICK.key to - listOf( - JsActionKeyManager.JsActionsKey.JS_FUNC.key, - MacroForToolbarButton.Macro.OK.name - ).joinToString("=") - ) - else -> { - ListSettingVariableListMaker.makeConfigMapFromSettingValList( - CommandClickScriptVariable.PLAY_BUTTON_CONFIG, - settingVariableList, - editFragment.fannelInfoMap, - editFragment.setReplaceVariableMap, - String(), - ) - } - } + return ListSettingVariableListMaker.makeConfigMapFromSettingValList( + CommandClickScriptVariable.PLAY_BUTTON_CONFIG, + settingVariableList, + editFragment.fannelInfoMap, + editFragment.setReplaceVariableMap, + String(), + ) +// return when(isSettingEdit) { +// true -> mapOf( +// SettingButtonConfigMapKey.CLICK.key to +// listOf( +// JsActionKeyManager.JsActionsKey.JS_FUNC.key, +// MacroForToolbarButton.Macro.OK.name +// ).joinToString("=") +// ) +// else -> { +// ListSettingVariableListMaker.makeConfigMapFromSettingValList( +// CommandClickScriptVariable.PLAY_BUTTON_CONFIG, +// settingVariableList, +// editFragment.fannelInfoMap, +// editFragment.setReplaceVariableMap, +// String(), +// ) +// } +// } } // private fun makeListFromSettingPath( diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/EditModeHandler.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/EditModeHandler.kt index 1cd8fa75d..281eef8cb 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/EditModeHandler.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/EditModeHandler.kt @@ -1,9 +1,7 @@ package com.puutaro.commandclick.fragment_lib.edit_fragment -import com.blankj.utilcode.util.ToastUtils import com.puutaro.commandclick.common.variable.variables.CommandClickScriptVariable import com.puutaro.commandclick.fragment.EditFragment -import com.puutaro.commandclick.fragment_lib.edit_fragment.common.IsCmdEdit import com.puutaro.commandclick.fragment_lib.edit_fragment.processor.EditTextProducerForEdit import com.puutaro.commandclick.fragment_lib.edit_fragment.processor.ToolbarButtonProducerForEdit import com.puutaro.commandclick.fragment_lib.edit_fragment.common.ToolbarButtonBariantForEdit @@ -15,114 +13,115 @@ object EditModeHandler{ const val settingSectionEnd = CommandClickScriptVariable.SETTING_SEC_END fun execByHowFullEdit(editFragment: EditFragment){ - when( - IsCmdEdit.judge(editFragment) - ) { - false -> editSettingVariable(editFragment) - else -> editCommandVariable(editFragment) - } + editCommandVariable(editFragment) +// when( +// IsCmdEdit.judge(editFragment) +// ) { +// false -> editSettingVariable(editFragment) +// else -> editCommandVariable(editFragment) +// } } private fun editCommandVariable( editFragment: EditFragment ) { - val recordNumToMapNameValueInCommandHolder = - editFragment.recordNumToMapNameValueInCommandHolder - if( - recordNumToMapNameValueInCommandHolder.isNullOrEmpty() - ) { - backToCmdIndex(editFragment) - return - } +// val recordNumToMapNameValueInCommandHolder = +// editFragment.recordNumToMapNameValueInCommandHolder +// if( +// recordNumToMapNameValueInCommandHolder.isNullOrEmpty() +// ) { +// backToCmdIndex(editFragment) +// return +// } CoroutineScope(Dispatchers.Main).launch { EditTextProducerForEdit.adds( editFragment, ) } - buttonCreate( - editFragment, - ToolbarButtonBariantForEdit.HISTORY, - ) - - buttonCreate( - editFragment, - ToolbarButtonBariantForEdit.OK, - ) +// buttonCreate( +// editFragment, +// ToolbarButtonBariantForEdit.HISTORY, +// ) - buttonCreate( - editFragment, - ToolbarButtonBariantForEdit.EDIT, - ) - buttonCreate( - editFragment, - ToolbarButtonBariantForEdit.SETTING, - ) - buttonCreate( - editFragment, - ToolbarButtonBariantForEdit.EXTRA, - ) +// buttonCreate( +// editFragment, +// ToolbarButtonBariantForEdit.OK, +// ) +// +// buttonCreate( +// editFragment, +// ToolbarButtonBariantForEdit.EDIT, +// ) +// buttonCreate( +// editFragment, +// ToolbarButtonBariantForEdit.SETTING, +// ) +// buttonCreate( +// editFragment, +// ToolbarButtonBariantForEdit.EXTRA, +// ) } - private fun editSettingVariable( - editFragment: EditFragment - ) { - val recordNumToMapNameValueInCommandHolder = - editFragment.recordNumToMapNameValueInCommandHolder - val recordNumToMapNameValueInSettingHolder = - editFragment.recordNumToMapNameValueInSettingHolder - if( - recordNumToMapNameValueInCommandHolder.isNullOrEmpty() - && recordNumToMapNameValueInSettingHolder.isNullOrEmpty() - ) { - backToCmdIndex(editFragment) - return - } - buttonCreate( - editFragment, - ToolbarButtonBariantForEdit.OK, - ) - CoroutineScope(Dispatchers.Main).launch { - EditTextProducerForEdit.adds( - editFragment, - true - ) - } -// if(editFragment.isToolbarBtnCustomInSettingSelects) { -// buttonCreate( -// ToolbarButtonBariantForEdit.EDIT, -// ) -// buttonCreate( -// ToolbarButtonBariantForEdit.SETTING, -// ) -// buttonCreate( -// ToolbarButtonBariantForEdit.EXTRA, +// private fun buttonCreate( +// editFragment: EditFragment, +// toolbarButtonVariantForEdit: ToolbarButtonBariantForEdit, +// ){ +// ToolbarButtonProducerForEdit.make( +// editFragment, +// toolbarButtonVariantForEdit, +// ) +// } + +// private fun editSettingVariable( +// editFragment: EditFragment +// ) { +// val recordNumToMapNameValueInCommandHolder = +// editFragment.recordNumToMapNameValueInCommandHolder +// val recordNumToMapNameValueInSettingHolder = +// editFragment.recordNumToMapNameValueInSettingHolder +// if( +// recordNumToMapNameValueInCommandHolder.isNullOrEmpty() +// && recordNumToMapNameValueInSettingHolder.isNullOrEmpty() +// ) { +// backToCmdIndex(editFragment) +// return +// } +// buttonCreate( +// editFragment, +// ToolbarButtonBariantForEdit.OK, +// ) +// CoroutineScope(Dispatchers.Main).launch { +// EditTextProducerForEdit.adds( +// editFragment, +//// true // ) // } - } +//// if(editFragment.isToolbarBtnCustomInSettingSelects) { +//// buttonCreate( +//// ToolbarButtonBariantForEdit.EDIT, +//// ) +//// buttonCreate( +//// ToolbarButtonBariantForEdit.SETTING, +//// ) +//// buttonCreate( +//// ToolbarButtonBariantForEdit.EXTRA, +//// ) +//// } +// } - private fun buttonCreate( - editFragment: EditFragment, - toolbarButtonVariantForEdit: ToolbarButtonBariantForEdit, - ){ - ToolbarButtonProducerForEdit.make( - editFragment, - toolbarButtonVariantForEdit, - ) - } - - private fun backToCmdIndex(editFragment: EditFragment){ - val context = editFragment.context - editFragment.popBackStackToIndexImmediateJob?.cancel() - editFragment.popBackStackToIndexImmediateJob = CoroutineScope(Dispatchers.IO).launch { - withContext(Dispatchers.IO){ - delay(200) - } - withContext(Dispatchers.Main){ - ToastUtils.showLong("No editable variable therefore, go back") - val listener = context - as? EditFragment.OnInitEditFragmentListener - listener?.onInitEditFragment() - } - } - } +// private fun backToCmdIndex(editFragment: EditFragment){ +// val context = editFragment.context +// editFragment.popBackStackToIndexImmediateJob?.cancel() +// editFragment.popBackStackToIndexImmediateJob = CoroutineScope(Dispatchers.IO).launch { +// withContext(Dispatchers.IO){ +// delay(200) +// } +// withContext(Dispatchers.Main){ +// ToastUtils.showLong("No editable variable therefore, go back") +// val listener = context +// as? EditFragment.OnInitEditFragmentListener +// listener?.onInitEditFragment() +// } +// } +// } } diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/SetVariableTypesSetter.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/SetVariableTypesSetter.kt index 7ffc7afb4..39dbe2829 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/SetVariableTypesSetter.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/SetVariableTypesSetter.kt @@ -7,46 +7,46 @@ import com.puutaro.commandclick.proccess.edit.lib.ListSettingVariableListMaker import com.puutaro.commandclick.proccess.edit.lib.SetReplaceVariabler import com.puutaro.commandclick.util.state.FannelInfoTool -object SetVariableTypesSetterForEdit { +//object SetVariableTypesSetterForEdit { - fun set( - editFragment: EditFragment, - fannelInfoMap: Map, - settingVariableList: List?, - ): List { -// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( +// fun set( +// editFragment: EditFragment, +// fannelInfoMap: Map, +// settingVariableList: List?, +// ): List { +//// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( +//// fannelInfoMap +//// ) +// val currentFannelName = FannelInfoTool.getCurrentFannelName( // fannelInfoMap // ) - val currentFannelName = FannelInfoTool.getCurrentFannelName( - fannelInfoMap - ) - - val setVariableTypeListSrc = ListSettingVariableListMaker.makeFromSettingVariableList( - CommandClickScriptVariable.SET_VARIABLE_TYPE, - fannelInfoMap, - editFragment.setReplaceVariableMap, - settingVariableList, - ) - val setVariableForSettingHolder = - CommandClickScriptVariable.setVariableForSettingHolder - val isCmdEdit = IsCmdEdit.judge(editFragment) - return when(isCmdEdit) { - false -> setVariableForSettingHolder - else -> setVariableTypeListSrc.let { - if ( - it.isEmpty() - ) return@let setVariableForSettingHolder - setVariableForSettingHolder + it - } - }.joinToString("\n").let { - SetReplaceVariabler.execReplaceByReplaceVariables( - it, - editFragment.setReplaceVariableMap, -// currentAppDirPath, - currentFannelName - ) - }.split("\n").filter { - it.trim().isNotEmpty() - } - } -} \ No newline at end of file +// +// val setVariableTypeListSrc = ListSettingVariableListMaker.makeFromSettingVariableList( +// CommandClickScriptVariable.SET_VARIABLE_TYPE, +// fannelInfoMap, +// editFragment.setReplaceVariableMap, +// settingVariableList, +// ) +//// val setVariableForSettingHolder = +//// CommandClickScriptVariable.setVariableForSettingHolder +// val isCmdEdit = IsCmdEdit.judge(editFragment) +// return when(isCmdEdit) { +// false -> setVariableForSettingHolder +// else -> setVariableTypeListSrc.let { +// if ( +// it.isEmpty() +// ) return@let setVariableForSettingHolder +// setVariableForSettingHolder + it +// } +// }.joinToString("\n").let { +// SetReplaceVariabler.execReplaceByReplaceVariables( +// it, +// editFragment.setReplaceVariableMap, +//// currentAppDirPath, +// currentFannelName +// ) +// }.split("\n").filter { +// it.trim().isNotEmpty() +// } +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/broadcast/receiver/BroadcastReceiveHandlerForEdit.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/broadcast/receiver/BroadcastReceiveHandlerForEdit.kt index 3125d3ef9..3b0d74274 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/broadcast/receiver/BroadcastReceiveHandlerForEdit.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/broadcast/receiver/BroadcastReceiveHandlerForEdit.kt @@ -3,7 +3,7 @@ package com.puutaro.commandclick.fragment_lib.edit_fragment.broadcast.receiver import android.content.Intent import androidx.core.view.isVisible import com.puutaro.commandclick.common.variable.broadcast.scheme.BroadCastIntentSchemeForEdit -import com.puutaro.commandclick.component.adapter.ListIndexAdapter +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.ListViewToolForListIndexAdapter import com.puutaro.commandclick.fragment.EditFragment import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.ListSettingsForListIndex @@ -17,6 +17,7 @@ object BroadcastReceiveHandlerForEdit { !editFragment.isVisible ) return val action = intent.action + val editComponentListAdapter = editFragment.binding.editListRecyclerView.adapter as EditComponentListAdapter when(action){ BroadCastIntentSchemeForEdit.UPDATE_INDEX_LIST.action -> { val editListSearchEditText = editFragment.binding.editListSearchEditText @@ -24,11 +25,12 @@ object BroadcastReceiveHandlerForEdit { editListSearchEditText.setText(String()) } ListViewToolForListIndexAdapter.listIndexListUpdateFileList( - editFragment, - ListSettingsForListIndex.ListIndexListMaker.makeFileListHandler( - editFragment, - ListIndexAdapter.indexListMap, - ListIndexAdapter.listIndexTypeKey + editComponentListAdapter, + ListSettingsForListIndex.ListIndexListMaker.makeLineMapListHandler( + editFragment.fannelInfoMap, + editFragment.setReplaceVariableMap, + editComponentListAdapter.editListMap, + editFragment.busyboxExecutor, ) ) } diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/common/EditComponent.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/common/EditComponent.kt new file mode 100644 index 000000000..79be371e6 --- /dev/null +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/common/EditComponent.kt @@ -0,0 +1,401 @@ +package com.puutaro.commandclick.fragment_lib.edit_fragment.common + +import android.widget.EditText +import android.widget.ImageView +import android.widget.Spinner +import androidx.appcompat.widget.LinearLayoutCompat +import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.text.libs.FilterAndMapModule +import com.puutaro.commandclick.proccess.edit.lib.SetReplaceVariabler +import com.puutaro.commandclick.proccess.ubuntu.BusyboxExecutor +import com.puutaro.commandclick.util.LogSystems +import com.puutaro.commandclick.util.file.ReadText +import com.puutaro.commandclick.util.map.CmdClickMap +import com.puutaro.commandclick.util.state.FannelInfoTool +import com.puutaro.commandclick.util.str.QuoteTool + +object EditComponent { + object Template { + + const val sectionSeparator = ',' + const val typeSeparator = '|' + const val keySeparator = '?' + const val valueSeparator = '&' + + const val switchOn = "ON" + + object ReplaceHolder { + fun replaceHolder( + con: String?, + srcTitle: String, + srcCon: String, + srcImage: String, + srcPosition: Int, + ): String? { + if(con == null) return null + return con.replace( + SrcReplaceHolders.SRC_TITLE.key, + srcTitle + ).replace( + SrcReplaceHolders.SRC_CON.key, + srcCon + ).replace( + SrcReplaceHolders.SRC_IMAGE.key, + srcImage + ).replace( + SrcReplaceHolders.LIST_INDEX_POSITION.key, + srcPosition.toString() + ) + + } + + enum class SrcReplaceHolders(val key: String){ + SHELL_SRC("\${SHELL_SRC}"), + SRC_TITLE("\${SRC_TITLE}"), + SRC_CON("\${SRC_CON}"), + SRC_IMAGE("\${SRC_IMAGE}"), + LIST_INDEX_POSITION("\${LIST_INDEX_POSITION}"), + SRC_STR("\${SRC_STR}"), + SETTING_VALUE("\${SETTING_VALUE}"), + } + } + + enum class LayoutKey(val key: String){ + FRAME("frame"), +// FOOTER("footer"), + LINEAR("linear"), + } + + fun makeKeyMap( + mapCon: String? + ): Map? { + if( + mapCon.isNullOrEmpty() + ) return null + return CmdClickMap.createMap( + mapCon, + keySeparator, + ).toMap().filter { + it.key.isNotEmpty() + } + } + + enum class EditComponentKey(val key: String){ + TAG("tag"), + TEXT("text"), + TEXT_PROPERTY("textProperty"), + IMAGE("image"), + IMAGE_PROPERTY("imageProperty"), + SET_IMAGE_TO_TAGS("setImageToTags"), + SET_TEXT_TO_TAGS("setTextToTags"), + SET_SETTING_VALS_TO_TAGS("setSettingValsToTags"), + SET_CMD_VALS_TO_TAGS("setCmdValsToTags"), + SET_IMAGE_TO_BTN_TAGS("setImageToBtnTags"), + SET_TEXT_TO_BTN_TAGS("setTextToBtnTags"), + SET_SUGGEST_TO_BTN_TAGS("setSuggestToBtnTags"), + ON_SAVE("onSave"), + IS_CONSEC("isConsec"), + DISABLE_KEYBOARD_HIDDEN("disableKeyboardHidden"), + HEIGHT("height"), + } + + + object ImageManager { + enum class ImageKey(val key: String) { + PATHS("paths"), + DELAY("delay"), + } + + private const val iconMacroSeprator = ":" + + fun makeIconAndTypePair(macroStr: String): Pair{ + val macroStrList = macroStr.split(iconMacroSeprator) + return Pair( + macroStrList.firstOrNull() ?: String(), + macroStrList.getOrNull(1) ?: String(), + ) + } + + enum class IconType(val type: String){ + IMAGE("image"), + ICON("icon"), + } + } + + object ImagePropertyManager { + + enum class PropertyKey(val key: String) { + TAG("tag"), + ALPHA("alpha"), + SCALE("scale"), + COLOR("color") + } + enum class ImageScale( + val str: String, + val scale: ImageView.ScaleType + ){ + FIT_CENTER("fitCenter", ImageView.ScaleType.FIT_CENTER), + FIT_XY("fitXy", ImageView.ScaleType.FIT_XY), + CENTER_CROP("centerCrop", ImageView.ScaleType.CENTER_CROP), + } + } + + object TextPropertyManager { + enum class Property(val key: String){ + TAG("tag"), + MAX_LINES("maxLines"), + SIZE("size"), + COLOR("color"), + STROKE_COLOR("strokeColor"), + STROKE_WIDTH("strokeWidth"), + ALPHA("alpha"), +// DISABLE_TEXT_SELECT("disableTextSelect"), + } + } + + + object TextManager { + enum class TextKey(val key: String) { + REMOVE_REGEX("removeRegex"), + REPLACE_STR("replaceStr"), + FILTER_SHELL_PATH("filterShellPath"), + DISPLAY_TEXT("displayText"), + SRC_STR("srcStr"), + SETTING_VALUE("settingValue"), + LENGTH("length"), + } + + + fun createTextMap( + textMapCon: String?, + settingValue: String?, + ): Map { + val textMapSrc = CmdClickMap.createMap( + textMapCon, + keySeparator + ).toMap() + return when(settingValue.isNullOrEmpty()){ + true -> textMapSrc + else -> textMapSrc + mapOf( + TextKey.SETTING_VALUE.key to settingValue + ) + } + } + + fun makeText( + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + busyboxExecutor: BusyboxExecutor?, + textMap: Map?, + settingValueSrc: String?, + ): String? { +// FileSystems.updateFile( +// File(UsePath.cmdclickDefaultAppDirPath, "label.txt").absolutePath, +// listOf( +// "labelMap: ${labelMap}", +// "---settingValue: ${settingValue}\n", +// ).joinToString("\n") +// +// ) + if( + textMap.isNullOrEmpty() + ) return String() + val settingValue = settingValueSrc?.let { + QuoteTool.trimBothEdgeQuote(it) + }?: String() + val displayTextSrc = makeDisplayTextByRemoveRegex( + textMap, + settingValue, + )?: return null + val filterShellCon = textMap.get( + TextKey.FILTER_SHELL_PATH.key + )?.let { + ReadText(it).readText().replace( + ReplaceHolder.SrcReplaceHolders.SHELL_SRC.key, + displayTextSrc, + ) + } + val length = textMap.get( + TextKey.LENGTH.key + )?.let { + try{ + it.toInt() + }catch (e: Exception){ + null + } + } + if( + filterShellCon.isNullOrEmpty() + ) return displayTextSrc.let { + if( + length == null + ) return it + it.take(length) + } + val fannelName = FannelInfoTool.getCurrentFannelName( + fannelInfoMap + ) + return getOutputByShellCon( + setReplaceVariableMap, + busyboxExecutor, + filterShellCon, + fannelName + )?.let { + if( + length == null + ) return it + it.take(length) + } +// val filterPrefixListCon = labelMap.get( +// LabelKey.PREFIX.key +// )?.split(valueSeparator) +// +// val filterSuffixListCon = labelMap.get( +// LabelKey.SUFFIX.key +// )?.split(valueSeparator) +// +// val filterShellCon = labelMap.get( +// LabelKey.FILTER_SHELL_PATH.key +// )?.split(valueSeparator) +// +// val fileListSource = makeFileListElement( +// currentFileList, +// busyboxExecutor, +// filterDir, +// filterPrefixListCon, +// filterSuffixListCon, +// filterShellCon, +// ) + } + + private fun makeDisplayTextByRemoveRegex( + textMap: Map, + settingValue: String, + ): String? { + val displayTextSrc = textMap.get( + TextKey.DISPLAY_TEXT.key + )?.replace( + ReplaceHolder.SrcReplaceHolders.SETTING_VALUE.key, + settingValue + ) ?: return null +// if(displayLabelSrc.contains("\${SRC_STR}")) { +// FileSystems.updateFile( +// File( +// UsePath.cmdclickDefaultAppDirPath, +// "ldispalyText.txt" +// ).absolutePath, +// listOf( +// "displayLabelSrc: ${displayLabelSrc}", +// "srcStrBeforeRemove: ${ +// labelMap.get( +// LabelKey.SRC_STR.key +// )?.replace( +// ReplaceHolder.SrcReplaceHolders.SETTING_VALUE.key, +// settingValue +// ) +// }", +// +// ).joinToString("\n") +// ) +// } + val srcStrBeforeRemove = textMap.get( + TextKey.SRC_STR.key + )?.replace( + ReplaceHolder.SrcReplaceHolders.SETTING_VALUE.key, + settingValue + ) ?: return displayTextSrc + val removeRegexToReplaceKeyList = + FilterAndMapModule.makeRemoveRegexToReplaceKeyPairList( + textMap, + FilterAndMapModule.ExtraMapBaseKey.REMOVE_REGEX.key + ) + val srcStr = FilterAndMapModule.applyRemoveRegex( + srcStrBeforeRemove, + removeRegexToReplaceKeyList, + textMap, + ) +// FileSystems.updateFile( +// File(UsePath.cmdclickDefaultAppDirPath, "ldispalyText2.txt").absolutePath, +// listOf( +// "displayLabelSrc: ${displayLabelSrc}", +// "srcStrBeforeRemove: ${srcStrBeforeRemove}", +// "srcStr: ${srcStr}" +// ).joinToString("\n") +// ) + return displayTextSrc.replace( + ReplaceHolder.SrcReplaceHolders.SRC_STR.key, + srcStr + ) + } + + private fun getOutputByShellCon( + setReplaceVariableMap: Map?, + busyboxExecutor: BusyboxExecutor?, + shellConSrc: String, + currentFannelName: String, + ): String? { + val shellCon = SetReplaceVariabler.execReplaceByReplaceVariables( + shellConSrc, + setReplaceVariableMap, + currentFannelName + ) + if( + shellCon.isEmpty() + ) return null + return busyboxExecutor?.getCmdOutput( + shellCon, + null + ) + } + } + } + + +// fun makeEditLinearLayoutList( +// editFragment: EditFragment +// ): List { +// val binding = editFragment.binding +// return when(editFragment.existIndexList){ +// true -> listOf( +// binding.editListInnerTopLinearLayout, +// binding.editListInnerBottomLinearLayout, +// ) +// else -> listOf( +// binding.editLinearLayout, +// ) +// } + + fun findEditTextView( + currentId: Int, + editLinearLayoutList: List, + ): EditText? { + editLinearLayoutList.forEach { + val extractedEditText = it.findViewById(currentId) + if( + extractedEditText != null + ) return extractedEditText + } + LogSystems.stdWarn( + "no exist editText id: ${currentId}" + ) + return null + } + + fun findSpinnerView( + currentId: Int, + editLinearLayoutList: List, + ): Spinner? { + editLinearLayoutList.forEach { + val extractedSpinner = it.findViewById(currentId) + if( + extractedSpinner != null + ) return extractedSpinner + } + LogSystems.stdWarn( + "no exist editText id: ${currentId}" + ) + return null + } + + + +} \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/common/EditLayoutViewHideShow.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/common/EditLayoutViewHideShow.kt index 16ed749ff..b14907bda 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/common/EditLayoutViewHideShow.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/common/EditLayoutViewHideShow.kt @@ -3,25 +3,25 @@ package com.puutaro.commandclick.fragment_lib.edit_fragment.common import androidx.core.view.isVisible import com.puutaro.commandclick.fragment.EditFragment -object EditLayoutViewHideShow { - fun exec( - editFragment: EditFragment, - onShow: Boolean - ){ - val binding = editFragment.binding - when(editFragment.existIndexList){ - true -> { -// binding.editListInnerTopLinearLayout.isVisible = onShow -// binding.editListInnerBottomLinearLayout.isVisible = !onShow - binding.editListLinearLayout.isVisible = - onShow - } - else -> { - binding.editTextScroll.isVisible = - onShow - binding.editTextView.isVisible = - onShow - } - } - } -} \ No newline at end of file +//object EditLayoutViewHideShow { +// fun exec( +// editFragment: EditFragment, +// onShow: Boolean +// ){ +// val binding = editFragment.binding +// when(editFragment.existIndexList){ +// true -> { +//// binding.editListInnerTopLinearLayout.isVisible = onShow +//// binding.editListInnerBottomLinearLayout.isVisible = !onShow +// binding.editListLinearLayout.isVisible = +// onShow +// } +// else -> { +// binding.editTextScroll.isVisible = +// onShow +// binding.editTextView.isVisible = +// onShow +// } +// } +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/common/IsCmdEdit.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/common/IsCmdEdit.kt index f5dcc8e48..a96497794 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/common/IsCmdEdit.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/common/IsCmdEdit.kt @@ -8,13 +8,13 @@ object IsCmdEdit { fun judge( editFragment: EditFragment, ): Boolean { - val onPassCmdVariableEdit = - editFragment.passCmdVariableEdit == - CommandClickScriptVariable.PASS_CMDVARIABLE_EDIT_ON_VALUE +// val onPassCmdVariableEdit = +// editFragment.passCmdVariableEdit == +// CommandClickScriptVariable.PASS_CMDVARIABLE_EDIT_ON_VALUE val currentEditFragmentTag = editFragment.tag return currentEditFragmentTag?.startsWith( FragmentTagPrefix.Prefix.SETTING_VAL_EDIT_PREFIX.str ) != true - && !onPassCmdVariableEdit +// && !onPassCmdVariableEdit } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/common/TerminalShowByTerminalDo.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/common/TerminalShowByTerminalDo.kt index 1e622ef81..4024b781f 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/common/TerminalShowByTerminalDo.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/common/TerminalShowByTerminalDo.kt @@ -44,7 +44,7 @@ object TerminalShowByTerminalDo { ) val onTerminalDoOffAndTermux = ( terminalDo == SettingVariableSelects.TerminalDoSelects.OFF.name - || terminalDo == SettingVariableSelects.TerminalDoSelects.TERMUX.name +// || terminalDo == SettingVariableSelects.TerminalDoSelects.TERMUX.name ) if( onTerminalDoOffAndTermux diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/common/TerminalShowByTerminalDoWhenReuse.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/common/TerminalShowByTerminalDoWhenReuse.kt index 9a9d32a59..491dc44eb 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/common/TerminalShowByTerminalDoWhenReuse.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/common/TerminalShowByTerminalDoWhenReuse.kt @@ -37,7 +37,7 @@ object TerminalShowByTerminalDoWhenReuse { ) val onTerminalDoOffAndTermux = ( terminalDo == SettingVariableSelects.TerminalDoSelects.OFF.name - || terminalDo == SettingVariableSelects.TerminalDoSelects.TERMUX.name +// || terminalDo == SettingVariableSelects.TerminalDoSelects.TERMUX.name ) if( // editFragment.languageType != LanguageTypeSelects.JAVA_SCRIPT diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/common/TitleImageAndViewSetter.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/common/TitleImageAndViewSetter.kt index 286dbb9a1..282fd406c 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/common/TitleImageAndViewSetter.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/common/TitleImageAndViewSetter.kt @@ -2,16 +2,16 @@ package com.puutaro.commandclick.fragment_lib.edit_fragment.common import android.graphics.drawable.Drawable import androidx.appcompat.widget.AppCompatImageView -import androidx.core.view.isVisible +import androidx.appcompat.widget.AppCompatTextView import androidx.fragment.app.Fragment import com.bumptech.glide.Glide import com.bumptech.glide.RequestBuilder import com.bumptech.glide.load.engine.DiskCacheStrategy import com.puutaro.commandclick.common.variable.path.UsePath -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.SearchBoxSettingsForListIndex import com.puutaro.commandclick.proccess.shell_macro.ShellMacroHandler +import com.puutaro.commandclick.proccess.ubuntu.BusyboxExecutor import com.puutaro.commandclick.util.CcPathTool import com.puutaro.commandclick.util.map.CmdClickMap import com.puutaro.commandclick.util.state.FannelInfoTool @@ -22,23 +22,31 @@ object TitleImageAndViewSetter { private const val backstackCountSeparator = " " private const val switchOff = "OFF" + + private const val keySeparator = '|' fun set( - editFragment: EditFragment, + fragment: Fragment, + editTextView: AppCompatTextView, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + busyboxExecutor: BusyboxExecutor?, + editTitleImageView: AppCompatImageView, + titleSettingMap: Map?, ) { - val titleTextMap = editFragment.editBoxTitleConfig.get( + val titleTextMap = titleSettingMap?.get( EditBoxTitleKey.TEXT.key ).let { CmdClickMap.createMap( it, - '|' + keySeparator ) }.toMap() - val titleImageMap = editFragment.editBoxTitleConfig.get( + val titleImageMap = titleSettingMap?.get( EditBoxTitleKey.IMAGE.key ).let { CmdClickMap.createMap( it, - '|' + keySeparator ) }.toMap() titleTextMap.get( @@ -47,38 +55,52 @@ object TitleImageAndViewSetter { val onTitleSwitch = it != switchOff if (onTitleSwitch) return@let - editFragment.binding.editTitleLinearlayout.isVisible = false +// editFragment.binding.editTitleLinearlayout.isVisible = false return } setTitleText( - editFragment, + fragment, + editTextView, + fannelInfoMap, + setReplaceVariableMap, + busyboxExecutor, titleTextMap ) setTitleImage( - editFragment, - titleImageMap + fragment, + editTitleImageView, + fannelInfoMap, + titleImageMap, ) } private fun setTitleText( - editFragment: EditFragment, + fragment: Fragment, + editTextView: AppCompatTextView, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + busyboxExecutor: BusyboxExecutor?, titleTextMap: Map? ){ - val binding = editFragment.binding - val editTextView = binding.editTextView +// val binding = editFragment.binding +// val editTextView = binding.editTextView editTextView.text = EditTextMaker.make( - editFragment, + fragment, + fannelInfoMap, + setReplaceVariableMap, + busyboxExecutor, titleTextMap ) // editFragment.editBoxTitleConfig } fun makeDefaultTitle( - editFragment: EditFragment, + fragment: Fragment, + fannelInfoMap: Map, ): String { - val fannelInfoMap = - editFragment.fannelInfoMap +// val fannelInfoMap = +// fragment.fannelInfoMap // val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( // fannelInfoMap @@ -87,7 +109,7 @@ object TitleImageAndViewSetter { fannelInfoMap ) val backstackOrder = makeBackstackCount( - editFragment + fragment ) return listOf( "(${backstackOrder})", @@ -116,15 +138,17 @@ object TitleImageAndViewSetter { } private fun setTitleImage( - editFragment: EditFragment, + fragment: Fragment, + editTitleImageView: AppCompatImageView, + fannelInfoMap: Map, titleImageMap: Map, ){ val isNotSet = titleImageMap.get( TitleImageSettingKey.VISIBLE.key ) == switchOff if(isNotSet) return - val fannelInfoMap = - editFragment.fannelInfoMap +// val fannelInfoMap = +// fragment.fannelInfoMap // val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( // fannelInfoMap @@ -132,10 +156,10 @@ object TitleImageAndViewSetter { val currentFannelName = FannelInfoTool.getCurrentFannelName( fannelInfoMap ) - val binding = editFragment.binding - val editTitleImageView = binding.editTitleImage +// val binding = fragment.binding +// val editTitleImageView = binding.editTitleImage FannelLogoSetter.setTitleFannelLogo( - editFragment, + fragment, editTitleImageView, // currentAppDirPath: String, currentFannelName, @@ -150,12 +174,12 @@ object TitleImageAndViewSetter { private object FannelLogoSetter { fun setTitleFannelLogo( - editFragment: EditFragment, + fragment: Fragment, titleImageView: AppCompatImageView?, // currentAppDirPath: String, selectedScriptName: String, ){ - val context = editFragment.context + val context = fragment.context ?: return if( titleImageView == null @@ -198,41 +222,53 @@ private object FannelLogoSetter { private object EditTextMaker { fun make( - editFragment: EditFragment, + fragment: Fragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + busyboxExecutor: BusyboxExecutor?, titleTextMap: Map?, ): String { val defaultEditBoxTitle = TitleImageAndViewSetter.makeDefaultTitle( - editFragment, + fragment, + fannelInfoMap, ) val shellConText = makeByShellCon( - editFragment, + fragment, + fannelInfoMap, + setReplaceVariableMap, titleTextMap, + busyboxExecutor, defaultEditBoxTitle, ) return when(shellConText.isNullOrEmpty()) { false -> shellConText else -> SearchBoxSettingsForListIndex.makeCurrentVariableValueInEditText( - editFragment, + fragment, + fannelInfoMap, defaultEditBoxTitle ) } } private fun makeByShellCon( - editFragment: EditFragment, + fragment: Fragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, editTextPropertyMap: Map?, + busyboxExecutor: BusyboxExecutor?, currentVariableValue: String?, ): String? { if( editTextPropertyMap.isNullOrEmpty() + || busyboxExecutor == null ) return null - val busyboxExecutor = - editFragment.busyboxExecutor - ?: return null - val setReplaceVariableMap = - editFragment.setReplaceVariableMap - - val fannelInfoMap = - editFragment.fannelInfoMap +// val busyboxExecutor = +// editFragment.busyboxExecutor +// ?: return null +// val setReplaceVariableMap = +// editFragment.setReplaceVariableMap +// +// val fannelInfoMap = +// editFragment.fannelInfoMap // val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( // fannelInfoMap @@ -254,7 +290,9 @@ private object EditTextMaker { if( !shellConSrc.isNullOrEmpty() ) return getOutputByShellCon( - editFragment, + fragment, + setReplaceVariableMap, + busyboxExecutor, repValMap, shellConSrc, // currentAppDirPath, @@ -265,12 +303,12 @@ private object EditTextMaker { SearchBoxSettingsForListIndex.backstackCountMarkForInsertEditText val backstackCountMap = mapOf( backstackCountKey to execMakeBackstackCount( - editFragment + fragment ).toString() ) val updateRepValMap = repValMap + backstackCountMap return ShellMacroHandler.handle( - editFragment.context, + fragment.context, busyboxExecutor, editTextPropertyMap.get( TitleTextSettingKey.SHELL_PATH.key @@ -282,7 +320,9 @@ private object EditTextMaker { } private fun getOutputByShellCon( - editFragment: EditFragment, + fragment: Fragment, + setReplaceVariableMap: Map?, + busyboxExecutor: BusyboxExecutor?, repValMap: Map?, shellConSrc: String, // currentAppDirPath: String, @@ -291,7 +331,7 @@ private object EditTextMaker { ): String? { val shellCon = SetReplaceVariabler.execReplaceByReplaceVariables( shellConSrc, - editFragment.setReplaceVariableMap, + setReplaceVariableMap, // currentAppDirPath, currentFannelName ).replace( @@ -299,14 +339,14 @@ private object EditTextMaker { currentVariableValue ?: String(), ).let { SearchBoxSettingsForListIndex.backStackMarkReplace( - editFragment, + fragment, it ) } if( shellCon.isEmpty() ) return null - return editFragment.busyboxExecutor?.getCmdOutput( + return busyboxExecutor?.getCmdOutput( shellCon, repValMap ) diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/EditTextProducerForEdit.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/EditTextProducerForEdit.kt index 412bb25c1..9ec11b70c 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/EditTextProducerForEdit.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/EditTextProducerForEdit.kt @@ -1,131 +1,32 @@ package com.puutaro.commandclick.fragment_lib.edit_fragment.processor -import android.R -import android.widget.* -import androidx.appcompat.widget.LinearLayoutCompat import androidx.fragment.app.activityViewModels -import com.puutaro.commandclick.common.variable.edit.* +import com.puutaro.commandclick.activity_lib.event.lib.terminal.ExecSetToolbarButtonImage +import com.puutaro.commandclick.common.variable.res.CmdClickIcons import com.puutaro.commandclick.fragment.EditFragment -import com.puutaro.commandclick.fragment_lib.edit_fragment.variable.* -import com.puutaro.commandclick.proccess.ScriptFileDescription import com.puutaro.commandclick.proccess.edit.edit_text_support_view.* -import com.puutaro.commandclick.proccess.edit.lib.SetVariableTyper -import com.puutaro.commandclick.util.LogSystems -import com.puutaro.commandclick.util.state.FannelInfoTool +import com.puutaro.commandclick.proccess.history.fannel_history.FannelHistoryButtonEvent import com.puutaro.commandclick.view_model.activity.EditViewModel -import java.lang.ref.WeakReference - +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch object EditTextProducerForEdit { -// private val binding = editFragment.binding -// private val context = editFragment.context -// private val currentScriptContentsList = editFragment.currentFannelConList -// private val editViewModel: EditViewModel by editFragment.activityViewModels() -// -// private val fannelInfoMap = editFragment.fannelInfoMap -//// private val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( -//// fannelInfoMap -//// ) - -// private val setReplaceVariableMap = editFragment.setReplaceVariableMap - private val descriptionHidValName = "description" - - -// private val editParameters = EditParameters( -//// editFragment, -// currentScriptContentsList, -// editFragment.recordNumToMapNameValueInCommandHolder, -// editFragment.recordNumToMapNameValueInSettingHolder, -// fannelInfoMap, -// setReplaceVariableMap, -// false, -// editFragment.hideSettingVariableList, -// ) - -// private val withEditComponent = WithEditComponent( -// editFragment, -// ) -// -// private val withIndexListView = WithIndexListView( -// editFragment, -// ) fun adds( editFragment: EditFragment, - onSettingEdit: Boolean = false ) { - val binding = editFragment.binding - val currentScriptContentsList = editFragment.currentFannelConList val editViewModel: EditViewModel by editFragment.activityViewModels() - - val fannelInfoMap = editFragment.fannelInfoMap -// private val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( -// fannelInfoMap -// ) - - val setReplaceVariableMap = editFragment.setReplaceVariableMap - val descriptionHidValName = "description" - - - val editParameters = EditParameters( -// editFragment, - currentScriptContentsList, - editFragment.recordNumToMapNameValueInCommandHolder, - editFragment.recordNumToMapNameValueInSettingHolder, - fannelInfoMap, - setReplaceVariableMap, - false, - editFragment.hideSettingVariableList, - ) - -// val withEditComponent = WithEditComponent( -// editFragment, -// ) -// -// val withIndexListView = WithIndexListView( -// editFragment, -// ) editViewModel.variableNameToEditTextIdMap.clear() editFragment.listConSelectBoxMapList.clear() - when (onSettingEdit) { - true -> execAddEditComponent( - editFragment, - editParameters, - editFragment.recordNumToMapNameValueInSettingHolder, - EditTextIdForEdit.SETTING_VARIABLE.id, - ) - false -> execAddEditComponent( - editFragment, - editParameters, - editFragment.recordNumToMapNameValueInCommandHolder, - EditTextIdForEdit.COMMAND_VARIABLE.id, - ) - } - val disableDesc = - editFragment.hideSettingVariableList - .contains(descriptionHidValName) - if(disableDesc) return - binding.editLinearLayout.addView( - makeDescriptionButton( - editFragment, - ) + execAddEditComponent( + editFragment, ) } private fun execAddEditComponent( editFragment: EditFragment, - editParameters: EditParameters, - recordNumToMapNameValueInCommandOrSettingHolder: Map?>?, - editTextStartId: Int, ){ - val recordNumToSetVariableMaps = - SetVariableTyper.makeRecordNumToSetVariableMaps( - editFragment, - editFragment.setVariableTypeList, - recordNumToMapNameValueInCommandOrSettingHolder, - editFragment.setReplaceVariableMap, - editFragment.busyboxExecutor, - ) // FileSystems.writeFile( // File(UsePath.cmdclickDefaultAppDirPath, "setValMap.txt").absolutePath, // listOf( @@ -135,164 +36,47 @@ object EditTextProducerForEdit { // ) execAdd( editFragment, - editParameters, - recordNumToMapNameValueInCommandOrSettingHolder, - recordNumToSetVariableMaps, - editTextStartId ) } private fun execAdd( editFragment: EditFragment, - editParameters: EditParameters, - recordNumToMapNameValueInHolder: Map?>?, - recordNumToSetVariableMaps: Map?>?, - editTextStartId: Int, ) { - val context = editFragment.context - val binding = editFragment.binding - val existIndexList = editFragment.existIndexList - val recordNumToNameToValueInHolderSize = recordNumToMapNameValueInHolder?.size ?: return - (1..recordNumToNameToValueInHolderSize).forEach { - seedNum -> - val currentOrder = seedNum - 1 - val currentRecordNumToMapNameValueInHolder = - recordNumToMapNameValueInHolder.entries.elementAt( - currentOrder - ) - val currentRecordNumToNameToValueInHolder = - currentRecordNumToMapNameValueInHolder.value - val insertTextView = TextView(context) - val currentVariableName = currentRecordNumToNameToValueInHolder?.get( - RecordNumToMapNameValueInHolderColumn.VARIABLE_NAME.name - ) - if ( - currentVariableName.isNullOrEmpty() - ) return - insertTextView.text = currentVariableName - binding.editLinearLayout.addView(insertTextView) - val currentVariableValue = currentRecordNumToNameToValueInHolder.get( - RecordNumToMapNameValueInHolderColumn.VARIABLE_VALUE.name - ) - val currentId = editTextStartId + currentOrder - val currentRecordNum = - currentRecordNumToMapNameValueInHolder.key - editParameters.currentId = currentId - editParameters.currentVariableName = currentVariableName - editParameters.currentVariableValue = currentVariableValue - editParameters.setVariableMap = recordNumToSetVariableMaps?.get( - currentRecordNum - ) - val editTextSupportViewNameList = EditTextSupportViewName.values().map { - it.str - } - val variableTypeList = editParameters.setVariableMap?.get( - SetVariableTypeColumn.VARIABLE_TYPE.name - )?.split(":")?.filter { - val isContain = editTextSupportViewNameList.contains(it) - if ( - isContain - ) return@filter isContain - LogSystems.stdWarn("Irregular option: ${it}") - false - } ?: emptyList() - editParameters.variableTypeList = variableTypeList - if(existIndexList){ - setListIndexLayoutComponent( - editFragment, - editParameters, - recordNumToSetVariableMaps, - currentRecordNum, - insertTextView, - ) - return@forEach - } - if(editFragment.existIndexList) return@forEach - WithEditComponent.insert( - editFragment, - insertTextView, - editParameters, - ).let { - binding.editLinearLayout.addView(it) - } - } + setListIndexLayoutComponent( + editFragment, + ) } private fun setListIndexLayoutComponent( editFragment: EditFragment, - editParameters: EditParameters, - recordNumToSetVariableMaps: Map?>?, - currentRecordNum: Int, - insertTextView: TextView, ){ val binding = editFragment.binding - val listIndexOrder = recordNumToSetVariableMaps?.filter { - val setValTypeEl = it.value - val variableType = setValTypeEl?.get(SetVariableTypeColumn.VARIABLE_TYPE.name) - variableType?.contains( - EditTextSupportViewName.LIST_INDEX.str - ) ?: false - }?.keys?.firstOrNull() ?: 0 - when(true){ - (currentRecordNum < listIndexOrder) -> - WithEditComponent.insert( - editFragment, - insertTextView, - editParameters, - ).let { - binding.editListInnerTopLinearLayout.addView(it) - } - (currentRecordNum == listIndexOrder) -> - WithIndexListView.create( - editFragment, - editParameters - ) - else -> - WithEditComponent.insert( - editFragment, - insertTextView, - editParameters, - ).let { - binding.editListInnerBottomLinearLayout.addView(it) - } + CoroutineScope(Dispatchers.Main).launch { + ExecSetToolbarButtonImage.setImageButton( + binding.editToolbarFannelCenterButtonImage, + CmdClickIcons.HISTORY + ) + binding.editToolbarFannelCenterButton.setOnClickListener { + FannelHistoryButtonEvent.invoke(editFragment) + } } - } - - - private fun makeDescriptionButton( - editFragment: EditFragment, - ): Button { - val context = editFragment.context - val fannelInfoMap = editFragment.fannelInfoMap - val descriptionButton = Button(context) - val buttonLabel = "Description" - descriptionButton.text = buttonLabel - val linearParamsForButton = LinearLayoutCompat.LayoutParams( - LinearLayoutCompat.LayoutParams.MATCH_PARENT, - LinearLayoutCompat.LayoutParams.MATCH_PARENT, + WithEditComponentListView.create( + editFragment, + editFragment.fannelInfoMap, + editFragment.setReplaceVariableMap, + editFragment.busyboxExecutor, + editFragment.listIndexConfigMap, + binding.editTextView, + binding.editTitleImage, + binding.editListRecyclerView, + binding.editListBkFrame, + binding.editListSearchEditText, + binding.editFooterLinearlayout, + binding.editToolBarLinearLayout, + binding.editToolbarFannelCenterButton, + editFragment.mainFannelConList, ) - descriptionButton.layoutParams = linearParamsForButton - context?.let { - descriptionButton.setTextColor( - it.getColor(R.color.white) - ) - descriptionButton.backgroundTintList = - it.getColorStateList( - com.puutaro.commandclick.R.color.terminal_color - ) - } - descriptionButton.setOnClickListener { innerButtonView -> - ScriptFileDescription.show( - editFragment, - editFragment.currentFannelConList, -// currentAppDirPath, - FannelInfoTool.getCurrentFannelName( - fannelInfoMap - ) - ) - } - return descriptionButton } } diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/KeyboardWhenTermLongForEdit.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/KeyboardWhenTermLongForEdit.kt index 3decb946f..9a37166fe 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/KeyboardWhenTermLongForEdit.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/KeyboardWhenTermLongForEdit.kt @@ -14,45 +14,45 @@ object KeyboardWhenTermLongForEdit { editFragment: EditFragment, isOpen: Boolean ){ - val context = editFragment.context - val activity = editFragment.activity - val editExecuteTerminal = TargetFragmentInstance.getFromFragment( - activity, - context?.getString( - R.string.edit_terminal_fragment - ) - ) ?: return - if(!editExecuteTerminal.isVisible) return - val listenerForEditSizeWhenLong = - context as? EditFragment.OnLongTermKeyBoardOpenAjustListenerForEdit - val binding = editFragment.binding - when(editFragment.existIndexList) { - true -> { - binding.editListInnerTopLinearLayout.isVisible = !isOpen - binding.editListInnerBottomLinearLayout.isVisible = !isOpen - } - else -> { - val linearLayoutParam = - editFragment.binding.editFragment.layoutParams as LinearLayoutCompat.LayoutParams - val isShow = linearLayoutParam.weight == ReadLines.LONGTH - binding.editTextScroll.isVisible = !isOpen && isShow - } - } - binding.editToolBar.isVisible = !isOpen - binding.pageSearch.cmdindexSearchCancel.isVisible = !isOpen - val isNotVisiblePageOrWebSearch = - !binding.pageSearch.cmdclickPageSearchToolBar.isVisible - && !binding.webSearch.webSearchToolbar.isVisible - val editWeight = if( - isOpen - && isNotVisiblePageOrWebSearch - ) editBodySize.HIDE.size - else if(isOpen) editBodySize.OPEN.size - else editBodySize.SHRINK.size - listenerForEditSizeWhenLong?.onLongTermKeyBoardOpenAjustForEdit( - editWeight - ) - if(!isOpen) activity?.currentFocus?.clearFocus() +// val context = editFragment.context +// val activity = editFragment.activity +// val editExecuteTerminal = TargetFragmentInstance.getFromFragment( +// activity, +// context?.getString( +// R.string.edit_terminal_fragment +// ) +// ) ?: return +// if(!editExecuteTerminal.isVisible) return +// val listenerForEditSizeWhenLong = +// context as? EditFragment.OnLongTermKeyBoardOpenAjustListenerForEdit +// val binding = editFragment.binding +//// when(editFragment.existIndexList) { +//// true -> { +//// binding.editListInnerTopLinearLayout.isVisible = !isOpen +//// binding.editListInnerBottomLinearLayout.isVisible = !isOpen +//// } +//// else -> { +//// val linearLayoutParam = +//// editFragment.binding.editFragment.layoutParams as LinearLayoutCompat.LayoutParams +//// val isShow = linearLayoutParam.weight == ReadLines.LONGTH +//// binding.editTextScroll.isVisible = !isOpen && isShow +//// } +//// } +// binding.editToolBar.isVisible = !isOpen +// binding.pageSearch.cmdindexSearchCancel.isVisible = !isOpen +// val isNotVisiblePageOrWebSearch = +// !binding.pageSearch.cmdclickPageSearchToolBar.isVisible +// && !binding.webSearch.webSearchToolbar.isVisible +// val editWeight = if( +// isOpen +// && isNotVisiblePageOrWebSearch +// ) editBodySize.HIDE.size +// else if(isOpen) editBodySize.OPEN.size +// else editBodySize.SHRINK.size +// listenerForEditSizeWhenLong?.onLongTermKeyBoardOpenAjustForEdit( +// editWeight +// ) +// if(!isOpen) activity?.currentFocus?.clearFocus() } } diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/ListIndexSizingToKeyboard.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/ListIndexSizingToKeyboard.kt index c23ef5568..99dbef394 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/ListIndexSizingToKeyboard.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/ListIndexSizingToKeyboard.kt @@ -14,9 +14,9 @@ object ListIndexSizingToKeyboard { editFragment: EditFragment, isOpen: Boolean ){ - if( - !editFragment.existIndexList - ) return +// if( +// !editFragment.existIndexList +// ) return val binding = editFragment.binding val editListRecyclerView = binding.editListRecyclerView val listIndexForEditAdapter = editListRecyclerView.adapter @@ -25,7 +25,7 @@ object ListIndexSizingToKeyboard { isOpen, binding, ) - binding.editListInnerTopLinearLayout.isVisible = !isOpen +// binding.editListInnerTopLinearLayout.isVisible = !isOpen CoroutineScope(Dispatchers.Main).launch { delay(300) editListRecyclerView.scrollToPosition( @@ -43,18 +43,18 @@ object ListIndexSizingToKeyboard { if( !editListSearchEditText.isVisible ) return - val editListLinearLayout = - binding.editListLinearLayout - val layoutParams = - editListLinearLayout.layoutParams - as RelativeLayout.LayoutParams - when(isOpen) { - true -> layoutParams.addRule( - RelativeLayout.ALIGN_PARENT_BOTTOM - ) - else -> layoutParams.removeRule( - RelativeLayout.ALIGN_PARENT_BOTTOM - ) - } +// val editListLinearLayout = +// binding.editListLinearLayout +// val layoutParams = +// editListLinearLayout.layoutParams +// as RelativeLayout.LayoutParams +// when(isOpen) { +// true -> layoutParams.addRule( +// RelativeLayout.ALIGN_PARENT_BOTTOM +// ) +// else -> layoutParams.removeRule( +// RelativeLayout.ALIGN_PARENT_BOTTOM +// ) +// } } } diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/PageSearchToolbarManagerForEdit.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/PageSearchToolbarManagerForEdit.kt index 1be6968f8..ee614003c 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/PageSearchToolbarManagerForEdit.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/PageSearchToolbarManagerForEdit.kt @@ -11,7 +11,6 @@ import com.blankj.utilcode.util.ToastUtils import com.puutaro.commandclick.R import com.puutaro.commandclick.fragment.EditFragment import com.puutaro.commandclick.common.variable.variant.PageSearchToolbarButtonVariant -import com.puutaro.commandclick.proccess.js_macro_libs.toolbar_libs.EditLongPressType import com.puutaro.commandclick.proccess.js_macro_libs.toolbar_libs.EditToolbarSwitcher object PageSearchToolbarManagerForEdit{ @@ -20,144 +19,144 @@ object PageSearchToolbarManagerForEdit{ ){ val context = cmdEditFragment.context val binding = cmdEditFragment.binding - val pageSearch = binding.pageSearch - val cmdindexSearchCancel = pageSearch.cmdindexSearchCancel +// val pageSearch = binding.pageSearch +// val cmdindexSearchCancel = pageSearch.cmdindexSearchCancel - cmdindexSearchCancel.setOnClickListener { - cancelView -> - EditToolbarSwitcher.switch( - cmdEditFragment, - EditLongPressType.NORMAL.jsMacro - ) - } +// cmdindexSearchCancel.setOnClickListener { +// cancelView -> +// EditToolbarSwitcher.switch( +// cmdEditFragment, +// EditLongPressType.NORMAL.jsMacro +// ) +// } } fun pageSearchTextChangeListner( cmdEditFragment: EditFragment ){ - val context = cmdEditFragment.context - val binding = cmdEditFragment.binding - val pageSearch = binding.pageSearch - val cmdPageSearchEditText = pageSearch.cmdPageSearchEditText - val listener = context as? EditFragment.OnLongPressPlayOrEditButtonListener - val pageSearchLongPressType = EditLongPressType.PAGE_SEARCH - val editExecuteTerminalTag = context?.getString(R.string.edit_terminal_fragment) - try { - val linearWeightParamWide = LinearLayoutCompat.LayoutParams( - 0, - ViewGroup.LayoutParams.MATCH_PARENT, - ) - linearWeightParamWide.weight = 0.67F - val linearWeightParamShrink = LinearLayoutCompat.LayoutParams( - 0, - ViewGroup.LayoutParams.MATCH_PARENT, - ) - linearWeightParamShrink.weight = 0.56F - val searchText = PageSearchToolbarButtonVariant.SEARCH_TEXT - cmdPageSearchEditText.addTextChangedListener(object : TextWatcher { - override fun beforeTextChanged( - s: CharSequence?, - start: Int, - count: Int, - after: Int - ) { - } - - override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {} - override fun afterTextChanged(s: Editable?) { - if (s.isNullOrEmpty()) { - pageSearch.cmdindexSearchTotal.visibility = View.GONE - pageSearch.cmdPageSearchEditText.layoutParams = linearWeightParamWide - } else { - pageSearch.cmdindexSearchTotal.visibility = View.VISIBLE - pageSearch.cmdPageSearchEditText.layoutParams = linearWeightParamShrink - } - try { - listener?.onLongPressPlayOrEditButton( - pageSearchLongPressType, - editExecuteTerminalTag, - s.toString(), - searchText, - ) - }catch(e: Exception){ - ToastUtils.showLong(e.toString()) - } - } - }) - } catch(e: Exception){ - ToastUtils.showLong(e.toString()) - } +// val context = cmdEditFragment.context +// val binding = cmdEditFragment.binding +// val pageSearch = binding.pageSearch +// val cmdPageSearchEditText = pageSearch.cmdPageSearchEditText +// val listener = context as? EditFragment.OnLongPressPlayOrEditButtonListener +// val pageSearchLongPressType = EditLongPressType.PAGE_SEARCH +// val editExecuteTerminalTag = context?.getString(R.string.edit_terminal_fragment) +// try { +// val linearWeightParamWide = LinearLayoutCompat.LayoutParams( +// 0, +// ViewGroup.LayoutParams.MATCH_PARENT, +// ) +// linearWeightParamWide.weight = 0.67F +// val linearWeightParamShrink = LinearLayoutCompat.LayoutParams( +// 0, +// ViewGroup.LayoutParams.MATCH_PARENT, +// ) +// linearWeightParamShrink.weight = 0.56F +// val searchText = PageSearchToolbarButtonVariant.SEARCH_TEXT +// cmdPageSearchEditText.addTextChangedListener(object : TextWatcher { +// override fun beforeTextChanged( +// s: CharSequence?, +// start: Int, +// count: Int, +// after: Int +// ) { +// } +// +// override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {} +// override fun afterTextChanged(s: Editable?) { +// if (s.isNullOrEmpty()) { +// pageSearch.cmdindexSearchTotal.visibility = View.GONE +// pageSearch.cmdPageSearchEditText.layoutParams = linearWeightParamWide +// } else { +// pageSearch.cmdindexSearchTotal.visibility = View.VISIBLE +// pageSearch.cmdPageSearchEditText.layoutParams = linearWeightParamShrink +// } +// try { +// listener?.onLongPressPlayOrEditButton( +// pageSearchLongPressType, +// editExecuteTerminalTag, +// s.toString(), +// searchText, +// ) +// }catch(e: Exception){ +// ToastUtils.showLong(e.toString()) +// } +// } +// }) +// } catch(e: Exception){ +// ToastUtils.showLong(e.toString()) +// } } fun onKeyListner( cmdEditFragment: EditFragment ){ - val context = cmdEditFragment.context - val binding = cmdEditFragment.binding - val pageSearch = binding.pageSearch - val cmdPageSearchEditText = pageSearch.cmdPageSearchEditText - val listener = context as? EditFragment.OnLongPressPlayOrEditButtonListener - val pageSearchLongPressType = EditLongPressType.PAGE_SEARCH - val editExecuteTerminalTag = context?.getString(R.string.edit_terminal_fragment) - cmdPageSearchEditText.setOnKeyListener(object : View.OnKeyListener { - override fun onKey(v: View?, keyCode: Int, event: KeyEvent): Boolean { - if (event.getAction() != KeyEvent.ACTION_DOWN || - keyCode != KeyEvent.KEYCODE_ENTER - ) return false - listener?.onLongPressPlayOrEditButton( - pageSearchLongPressType, - editExecuteTerminalTag, - "", - PageSearchToolbarButtonVariant.DOWN, - ) - return false - } - }) +// val context = cmdEditFragment.context +// val binding = cmdEditFragment.binding +// val pageSearch = binding.pageSearch +// val cmdPageSearchEditText = pageSearch.cmdPageSearchEditText +// val listener = context as? EditFragment.OnLongPressPlayOrEditButtonListener +// val pageSearchLongPressType = EditLongPressType.PAGE_SEARCH +// val editExecuteTerminalTag = context?.getString(R.string.edit_terminal_fragment) +// cmdPageSearchEditText.setOnKeyListener(object : View.OnKeyListener { +// override fun onKey(v: View?, keyCode: Int, event: KeyEvent): Boolean { +// if (event.getAction() != KeyEvent.ACTION_DOWN || +// keyCode != KeyEvent.KEYCODE_ENTER +// ) return false +// listener?.onLongPressPlayOrEditButton( +// pageSearchLongPressType, +// editExecuteTerminalTag, +// "", +// PageSearchToolbarButtonVariant.DOWN, +// ) +// return false +// } +// }) } fun searchTopClickLisnter( cmdEditFragment: EditFragment ){ - val context = cmdEditFragment.context - val binding = cmdEditFragment.binding - val pageSearch = binding.pageSearch - val cmdindexSearchTopAllow = pageSearch.cmdindexSearchTopAllow - val listener = context as? EditFragment.OnLongPressPlayOrEditButtonListener - val pageSearchLongPressType = EditLongPressType.PAGE_SEARCH - val editExecuteTerminalTag = context?.getString(R.string.edit_terminal_fragment) - cmdindexSearchTopAllow.setOnClickListener { - TopAllowButtonView -> - if(!cmdEditFragment.isVisible) return@setOnClickListener - listener?.onLongPressPlayOrEditButton( - pageSearchLongPressType, - editExecuteTerminalTag, - "", - PageSearchToolbarButtonVariant.TOP, - ) - return@setOnClickListener - } +// val context = cmdEditFragment.context +// val binding = cmdEditFragment.binding +// val pageSearch = binding.pageSearch +// val cmdindexSearchTopAllow = pageSearch.cmdindexSearchTopAllow +// val listener = context as? EditFragment.OnLongPressPlayOrEditButtonListener +// val pageSearchLongPressType = EditLongPressType.PAGE_SEARCH +// val editExecuteTerminalTag = context?.getString(R.string.edit_terminal_fragment) +// cmdindexSearchTopAllow.setOnClickListener { +// TopAllowButtonView -> +// if(!cmdEditFragment.isVisible) return@setOnClickListener +// listener?.onLongPressPlayOrEditButton( +// pageSearchLongPressType, +// editExecuteTerminalTag, +// "", +// PageSearchToolbarButtonVariant.TOP, +// ) +// return@setOnClickListener +// } } fun searchDownClickLisnter( cmdEditFragment: EditFragment ){ - val context = cmdEditFragment.context - val binding = cmdEditFragment.binding - val pageSearch = binding.pageSearch - val cmdindexSearchDownAllow = pageSearch.cmdindexSearchDownAllow - val listener = context as? EditFragment.OnLongPressPlayOrEditButtonListener - val pageSearchLongPressType = EditLongPressType.PAGE_SEARCH - val editExecuteTerminalTag = context?.getString(R.string.edit_terminal_fragment) - cmdindexSearchDownAllow.setOnClickListener { - DownAllowButtonView -> - if(!cmdEditFragment.isVisible) return@setOnClickListener - listener?.onLongPressPlayOrEditButton( - pageSearchLongPressType, - editExecuteTerminalTag, - "", - PageSearchToolbarButtonVariant.DOWN, - ) - } +// val context = cmdEditFragment.context +// val binding = cmdEditFragment.binding +// val pageSearch = binding.pageSearch +// val cmdindexSearchDownAllow = pageSearch.cmdindexSearchDownAllow +// val listener = context as? EditFragment.OnLongPressPlayOrEditButtonListener +// val pageSearchLongPressType = EditLongPressType.PAGE_SEARCH +// val editExecuteTerminalTag = context?.getString(R.string.edit_terminal_fragment) +// cmdindexSearchDownAllow.setOnClickListener { +// DownAllowButtonView -> +// if(!cmdEditFragment.isVisible) return@setOnClickListener +// listener?.onLongPressPlayOrEditButton( +// pageSearchLongPressType, +// editExecuteTerminalTag, +// "", +// PageSearchToolbarButtonVariant.DOWN, +// ) +// } } } diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/RecordNumtoMapNameValueInHolderMaker.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/RecordNumtoMapNameValueInHolderMaker.kt index 8c31f0713..37f218fa0 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/RecordNumtoMapNameValueInHolderMaker.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/RecordNumtoMapNameValueInHolderMaker.kt @@ -13,89 +13,89 @@ object RecordNumToMapNameValueInHolderMaker { private const val commandSectionStart = CommandClickScriptVariable.CMD_SEC_START private const val commandSectionEnd = CommandClickScriptVariable.CMD_SEC_END - fun makeForSetting( - editFragment: EditFragment, - ): Map?>? { - val settingFannelConList = SettingFannelConHandlerForEdit.handle( - editFragment - ) - val recordNumToMapNameValueInSettingHolderSrc = - RecordNumToMapNameValueInHolder.parse( - settingFannelConList, - settingSectionStart, - settingSectionEnd, - true, - ) - return filterRecordNumToMapNameValueInHolderByHideVariable( - editFragment, - recordNumToMapNameValueInSettingHolderSrc - ) -// return when( -// IsCmdEdit.judge(editFragment) -// ) { -// false -> { -//// editSettingVariable() -// filterRecordNumToMapNameValueInHolderByHideVariable( -// editFragment, -// recordNumToMapNameValueInSettingHolderSrc -// ) -// } -// else -> { -//// editCommandVariable() -// recordNumToMapNameValueInSettingHolderSrc -// } -// } - } +// fun makeForSetting( +// editFragment: EditFragment, +// ): Map? { +// val settingFannelConList = SettingFannelConHandlerForEdit.handle( +// editFragment +// ) +// val recordNumToMapNameValueInSettingHolderSrc = +// RecordNumToMapNameValueInHolder.parse( +// settingFannelConList, +// settingSectionStart, +// settingSectionEnd, +// ) +// return recordNumToMapNameValueInSettingHolderSrc +//// filterRecordNumToMapNameValueInHolderByHideVariable( +//// editFragment, +//// recordNumToMapNameValueInSettingHolderSrc +//// ) +//// return when( +//// IsCmdEdit.judge(editFragment) +//// ) { +//// false -> { +////// editSettingVariable() +//// filterRecordNumToMapNameValueInHolderByHideVariable( +//// editFragment, +//// recordNumToMapNameValueInSettingHolderSrc +//// ) +//// } +//// else -> { +////// editCommandVariable() +//// recordNumToMapNameValueInSettingHolderSrc +//// } +//// } +// } +// +// fun makeForCmdHolder( +// mainFannelSettingConList: List, +// ): Map? { +// val recordNumToMapNameValueInCommandHolderSrc = +// RecordNumToMapNameValueInHolder.parse( +// mainFannelSettingConList, +// commandSectionStart, +// commandSectionEnd +// ) +// return recordNumToMapNameValueInCommandHolderSrc +//// filterRecordNumToMapNameValueInHolderByHideVariable( +//// editFragment, +//// recordNumToMapNameValueInCommandHolderSrc +//// ) +//// return when( +//// IsCmdEdit.judge(editFragment) +//// ) { +//// false -> { +////// editSettingVariable() +//// recordNumToMapNameValueInCommandHolderSrc +//// } +//// else -> { +////// editCommandVariable() +//// filterRecordNumToMapNameValueInHolderByHideVariable( +//// editFragment, +//// recordNumToMapNameValueInCommandHolderSrc +//// ) +//// } +//// } +// } - fun makeForCmdHolder( - editFragment: EditFragment, - mainFannelSettingConList: List, - ): Map?>? { - val recordNumToMapNameValueInCommandHolderSrc = - RecordNumToMapNameValueInHolder.parse( - mainFannelSettingConList, - commandSectionStart, - commandSectionEnd - ) - return filterRecordNumToMapNameValueInHolderByHideVariable( - editFragment, - recordNumToMapNameValueInCommandHolderSrc - ) -// return when( -// IsCmdEdit.judge(editFragment) -// ) { -// false -> { -//// editSettingVariable() -// recordNumToMapNameValueInCommandHolderSrc -// } -// else -> { -//// editCommandVariable() -// filterRecordNumToMapNameValueInHolderByHideVariable( -// editFragment, -// recordNumToMapNameValueInCommandHolderSrc -// ) -// } +// private fun filterRecordNumToMapNameValueInHolderByHideVariable( +// editFragment: EditFragment, +// recordNumToMapNameValueInHolder: Map?>?, +// ): Map?>? { +//// val hideSettingVariableList = editFragment.hideSettingVariableList +// return recordNumToMapNameValueInHolder?.filter { +// currentRecordNumToMapNameValueInHolder -> +// val currentRecordNumToNameToValueInHolder = +// currentRecordNumToMapNameValueInHolder.value +// val currentVariableName = currentRecordNumToNameToValueInHolder?.get( +// RecordNumToMapNameValueInHolderColumn.VARIABLE_NAME.name +// ) +// if ( +// currentVariableName.isNullOrEmpty() +// ) return@filter false +// !hideSettingVariableList.contains( +// currentVariableName +// ) // } - } - - private fun filterRecordNumToMapNameValueInHolderByHideVariable( - editFragment: EditFragment, - recordNumToMapNameValueInHolder: Map?>?, - ): Map?>? { - val hideSettingVariableList = editFragment.hideSettingVariableList - return recordNumToMapNameValueInHolder?.filter { - currentRecordNumToMapNameValueInHolder -> - val currentRecordNumToNameToValueInHolder = - currentRecordNumToMapNameValueInHolder.value - val currentVariableName = currentRecordNumToNameToValueInHolder?.get( - RecordNumToMapNameValueInHolderColumn.VARIABLE_NAME.name - ) - if ( - currentVariableName.isNullOrEmpty() - ) return@filter false - !hideSettingVariableList.contains( - currentVariableName - ) - } - } +// } } diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/ScriptFileSaver.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/ScriptFileSaver.kt index e39d9fb3f..cd2dd81a7 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/ScriptFileSaver.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/ScriptFileSaver.kt @@ -9,51 +9,51 @@ import com.puutaro.commandclick.util.state.SettingFannelConHandlerForEdit import com.puutaro.commandclick.util.state.FannelInfoTool import java.io.File -object ScriptFileSaver{ -// private val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( -// fannelInfoMap -// ) - fun save( - editFragment: EditFragment - ){ - val fannelInfoMap = editFragment.fannelInfoMap - val currentFannelName = FannelInfoTool.getCurrentFannelName( - fannelInfoMap - ) -// val editedTextContents = EditedTextContents( +//object ScriptFileSaver{ +//// private val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( +//// fannelInfoMap +//// ) +// fun save( +// editFragment: EditFragment +// ){ +// val fannelInfoMap = editFragment.fannelInfoMap +// val currentFannelName = FannelInfoTool.getCurrentFannelName( +// fannelInfoMap +// ) +//// val editedTextContents = EditedTextContents( +//// editFragment, +//// ) +// val isSettingEdit = !IsCmdEdit.judge(editFragment) +// val editedShellContentsList = when( +// isSettingEdit +// ) { +// true -> { +// val settingFannelConList = SettingFannelConHandlerForEdit.handle( +// editFragment +// ) +//// EditedTextContents.updateBySettingVariables( +//// editFragment, +//// settingFannelConList, +//// editFragment.recordNumToMapNameValueInSettingHolder, +//// ) +// } +// +// else -> { +// val currentFannelConList = ReadText( +// File(UsePath.cmdclickDefaultAppDirPath, currentFannelName).absolutePath +// ).textToList() +// EditedTextContents.updateByCommandVariables( +// editFragment, +// currentFannelConList, +// editFragment.recordNumToMapNameValueInCommandHolder, +// ) +// } +// } +// EditedTextContents.save( // editFragment, +// currentFannelName, +// editedShellContentsList, +// isSettingEdit // ) - val isSettingEdit = !IsCmdEdit.judge(editFragment) - val editedShellContentsList = when( - isSettingEdit - ) { - true -> { - val settingFannelConList = SettingFannelConHandlerForEdit.handle( - editFragment - ) - EditedTextContents.updateBySettingVariables( - editFragment, - settingFannelConList, - editFragment.recordNumToMapNameValueInSettingHolder, - ) - } - - else -> { - val currentFannelConList = ReadText( - File(UsePath.cmdclickDefaultAppDirPath, currentFannelName).absolutePath - ).textToList() - EditedTextContents.updateByCommandVariables( - editFragment, - currentFannelConList, - editFragment.recordNumToMapNameValueInCommandHolder, - ) - } - } - EditedTextContents.save( - editFragment, - currentFannelName, - editedShellContentsList, - isSettingEdit - ) - } -} +// } +//} diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/ToolbarButtonProducerForEdit.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/ToolbarButtonProducerForEdit.kt index 9396688d9..2ee7e11c3 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/ToolbarButtonProducerForEdit.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/ToolbarButtonProducerForEdit.kt @@ -1,10 +1,8 @@ package com.puutaro.commandclick.fragment_lib.edit_fragment.processor -import android.content.Context import android.graphics.drawable.Drawable import android.view.Gravity import android.view.LayoutInflater -import android.view.ViewGroup import android.widget.* import androidx.appcompat.widget.AppCompatImageView import androidx.appcompat.widget.LinearLayoutCompat @@ -13,174 +11,107 @@ import com.bumptech.glide.RequestBuilder import com.bumptech.glide.load.engine.DiskCacheStrategy import com.puutaro.commandclick.R import com.puutaro.commandclick.activity_lib.event.lib.terminal.ExecSetToolbarButtonImage +import com.puutaro.commandclick.common.variable.path.UsePath import com.puutaro.commandclick.common.variable.res.CmdClickIcons import com.puutaro.commandclick.custom_view.OutlineTextView import com.puutaro.commandclick.fragment.EditFragment import com.puutaro.commandclick.fragment_lib.edit_fragment.common.ToolbarButtonBariantForEdit import com.puutaro.commandclick.proccess.history.fannel_history.FannelHistoryButtonEvent import com.puutaro.commandclick.proccess.tool_bar_button.ToolbarButtonHandler +import com.puutaro.commandclick.util.file.FileSystems import com.puutaro.commandclick.util.image_tools.ScreenSizeCalculator +import java.io.File object ToolbarButtonProducerForEdit { -// var languageType = LanguageTypeSelects.JAVA_SCRIPT -// var languageTypeToSectionHolderMap = -// CommandClickScriptVariable.LANGUAGE_TYPE_TO_SECTION_HOLDER_MAP.get( -// languageType -// ) -// var settingSectionStart = languageTypeToSectionHolderMap?.get( -// CommandClickScriptVariable.HolderTypeName.SETTING_SEC_START -// ) as String +// fun make( +// editFragment: EditFragment, +// toolbarButtonBariantForEdit: ToolbarButtonBariantForEdit, +// ) { +// val context = editFragment.context +//// FileSystems.updateFile( +//// File(UsePath.cmdclickDefaultAppDirPath, "toolbar.txt").absolutePath, +//// listOf( +//// "toolbarButtonBariantForEdit: ${toolbarButtonBariantForEdit.str}", +//// "howSetButton: ${howSetButton( +//// editFragment, +//// toolbarButtonBariantForEdit +//// )}", +//// "toolBarButtonVisibleMap: ${editFragment.toolBarButtonVisibleMap}", +//// "toolbarButtonConfigMap: ${editFragment.toolbarButtonConfigMap}", +//// ).joinToString("\n") +//// ) +// if( +// !howSetButton( +// editFragment, +// toolbarButtonBariantForEdit +// ) +// || context == null +// ) return // -// var settingSectionEnd = languageTypeToSectionHolderMap?.get( -// CommandClickScriptVariable.HolderTypeName.SETTING_SEC_END -// ) as String - - fun make( - editFragment: EditFragment, - toolbarButtonBariantForEdit: ToolbarButtonBariantForEdit, - ) { - val context = editFragment.context -// val toolbarButtonHandler = ToolbarButtonHandler( -// editFragment, -// ) - if( - !howSetButton( - editFragment, - toolbarButtonBariantForEdit - ) - || context == null - ) return - - - val buttonLayout = makeButtonLayout( - editFragment, - toolbarButtonBariantForEdit, - ) - val iconIdToCaption = editFragment.toolBarButtonIconMap[toolbarButtonBariantForEdit] - ?: Pair(R.drawable.icons8_ok, String()) - - - buttonLayout.findViewById(R.id.icon_caption_layout_image)?.let { - imageButtonView -> - setImageView( - editFragment, - imageButtonView, - toolbarButtonBariantForEdit, - iconIdToCaption - ) - } -// val imageView = makeImageView( -// editFragment, -// toolbarButtonBariantForEdit, -// iconIdToCaption -// ) - buttonLayout.findViewById(R.id.icon_caption_layout_caption)?.let { - captionTextView -> - setCaption( - captionTextView, - iconIdToCaption, - ) - } -// val textView = makeTextView( -// context, -// iconIdToCaption -// ) -// buttonLayout.addView(imageButtonView) -// buttonLayout.addView(captionTextView) - - - - -// insertImageButtonParam.weight = editFragment.buttonWeight -// val makeButtonView = ImageButton(context) -// ButtonColorSettingForToolbarButton.set( -// editFragment, -// toolbarButtonBariantForEdit, -// makeButtonView -// ) -//// makeButtonView.imageTintList = -//// context?.getColorStateList(R.color.terminal_color) -// makeButtonView.setBackgroundResource(android.R.drawable.list_selector_background) -// makeButtonView.setImageResource( -// editFragment.toolBarButtonIconMap[toolbarButtonBariantForEdit] -// ?: R.drawable.icons8_ok -// ) -// makeButtonView.backgroundTintList = -// context?.getColorStateList(R.color.white) -//// it.getColorStateList(R.color.terminal_color) // -// ButtonStatusSettingsForToolbarButton.set( +// val buttonLayout = makeButtonLayout( // editFragment, // toolbarButtonBariantForEdit, -// makeButtonView // ) -// makeButtonView.layoutParams = insertImageButtonParam -// makeButtonView.tag = toolbarButtonBariantForEdit.str - buttonLayout.setOnLongClickListener { - buttonInnerView -> - onLongClickHandler( - editFragment, - buttonLayout, -// makeButtonView, - toolbarButtonBariantForEdit, -// recordNumToMapNameValueInCommandHolder, -// recordNumToMapNameValueInSettingHolder, - ) - true - } - - buttonLayout.setOnClickListener { view -> - when (toolbarButtonBariantForEdit) { - ToolbarButtonBariantForEdit.HISTORY -> { - FannelHistoryButtonEvent.invoke(editFragment) -// val editExecuteTerminalFragment = TargetFragmentInstance() -// .getFromFragment( -// editFragment.activity, -// context.getString(R.string.edit_terminal_fragment) -// ) -// if( -// editExecuteTerminalFragment != null -// ){ -// val listener = context as? EditFragment.OnKeyboardVisibleListenerForEditFragment -// listener?.onKeyBoardVisibleChangeForEditFragment( -// false, -// true -// ) -// } -// HistoryButtonSwitcher.switch( +// val iconIdToCaption = editFragment.toolBarButtonIconMap[toolbarButtonBariantForEdit] +// ?: Pair(R.drawable.icons8_ok, String()) +// +// +// buttonLayout.findViewById(R.id.icon_caption_layout_image)?.let { +// imageButtonView -> +// setImageView( +// editFragment, +// imageButtonView, +// toolbarButtonBariantForEdit, +// iconIdToCaption +// ) +// } +// buttonLayout.findViewById(R.id.icon_caption_layout_caption)?.let { +// captionTextView -> +// setCaption( +// captionTextView, +// iconIdToCaption, +// ) +// } +// buttonLayout.setOnLongClickListener { +// buttonInnerView -> +// onLongClickHandler( +// editFragment, +// buttonLayout, +// toolbarButtonBariantForEdit, +// ) +// true +// } +// +// buttonLayout.setOnClickListener { view -> +// when (toolbarButtonBariantForEdit) { +// ToolbarButtonBariantForEdit.HISTORY -> { +// FannelHistoryButtonEvent.invoke(editFragment) +// return@setOnClickListener +// } +// ToolbarButtonBariantForEdit.SETTING, +// ToolbarButtonBariantForEdit.OK, +// ToolbarButtonBariantForEdit.EDIT, +// ToolbarButtonBariantForEdit.EXTRA, +// -> { +// ToolbarButtonHandler.handle( // editFragment, -// editFragment.context?.getString( -// R.string.edit_terminal_fragment -// ), -// editFragment.historySwitch, -// urlHistoryButtonEvent, -// CLICLTYPE.SHORT +// false, +// toolbarButtonBariantForEdit, +// buttonLayout +//// makeButtonView, // ) - return@setOnClickListener - } - ToolbarButtonBariantForEdit.SETTING, - ToolbarButtonBariantForEdit.OK, - ToolbarButtonBariantForEdit.EDIT, - ToolbarButtonBariantForEdit.EXTRA, - -> { - ToolbarButtonHandler.handle( - editFragment, - false, - toolbarButtonBariantForEdit, - buttonLayout -// makeButtonView, - ) - } - ToolbarButtonBariantForEdit.CANCEL -> {} - } - } - editFragment.binding.editToolbarLinearLayout.addView( - buttonLayout -// makeButtonView - ) - } +// } +// ToolbarButtonBariantForEdit.CANCEL -> {} +// } +// } +// editFragment.binding.editToolBarLinearLayout.addView( +// buttonLayout +//// makeButtonView +// ) +// } private fun makeButtonLayout( editFragment: EditFragment, @@ -192,13 +123,7 @@ object ToolbarButtonProducerForEdit { R.layout.icon_caption_layout, null ) as FrameLayout -// val buttonLayout = FrameLayout(context as Context) buttonLayout.tag = toolbarButtonBariantForEdit.str -// val outValue = TypedValue() -// context.theme -// .resolveAttribute(android.R.attr.selectableItemBackground, outValue, true) -// buttonLayout.setBackgroundResource(outValue.resourceId) -// buttonLayout.setBackgroundResource(android.R.drawable.list_selector_background) val param = LinearLayoutCompat.LayoutParams( 0, LinearLayoutCompat.LayoutParams.MATCH_PARENT, @@ -212,90 +137,56 @@ object ToolbarButtonProducerForEdit { param.gravity = Gravity.CENTER param.weight = editFragment.buttonWeight buttonLayout.layoutParams = param -// buttonLayout.orientation = LinearLayoutCompat.VERTICAL return buttonLayout } - private fun setCaption( - captionTextView: OutlineTextView, - iconIdToCaption: Pair - ) { - captionTextView.text =iconIdToCaption.second.ifEmpty { - val iconId = iconIdToCaption.first - CmdClickIcons.values().firstOrNull { - it.id == iconId - }?.str ?: String() - } - captionTextView.setStrokeColor(R.color.white) - captionTextView.setFillColor(R.color.fill_gray) - } - -// private fun makeTextView( -// context: Context, +// private fun setCaption( +// captionTextView: OutlineTextView, // iconIdToCaption: Pair -// ): AppCompatTextView { -// val textView = AppCompatTextView(context) -// val paramForTextView = LinearLayoutCompat.LayoutParams( -// ViewGroup.LayoutParams.MATCH_PARENT, -// ViewGroup.LayoutParams.MATCH_PARENT, -// ) -// val horizonMargin = ScreenSizeCalculator.toDp(context, 4) -// paramForTextView.marginStart = horizonMargin -// paramForTextView.marginEnd = horizonMargin -// paramForTextView.gravity = Gravity.CENTER -// textView.layoutParams = paramForTextView -// textView.gravity = Gravity.CENTER -// textView.text = iconIdToCaption.second.ifEmpty { +// ) { +// captionTextView.text =iconIdToCaption.second.ifEmpty { // val iconId = iconIdToCaption.first // CmdClickIcons.values().firstOrNull { // it.id == iconId // }?.str ?: String() // } -// textView.textSize = 12f -// textView.inputType = InputType.TYPE_CLASS_TEXT -// textView.maxLines = 1 -// textView.setTypeface(null, Typeface.BOLD) -// textView.ellipsize = TextUtils.TruncateAt.END -// return textView +// captionTextView.setStrokeColor(R.color.white) +// captionTextView.setFillColor(R.color.fill_gray) +// } +// +// private fun setImageView( +// editFragment: EditFragment, +// imageView: AppCompatImageView, +// toolbarButtonBariantForEdit: ToolbarButtonBariantForEdit, +// iconIdToCaption: Pair +// ): AppCompatImageView{ +// val imageViewContext = imageView.context +// val iconId = iconIdToCaption.first +// imageView.tag = CmdClickIcons.values().firstOrNull { +// it.id == iconId +// }?.str ?: toolbarButtonBariantForEdit.str +// val icon = CmdClickIcons.values().firstOrNull { +// it.id == iconId +// } +// val requestBuilder: RequestBuilder = +// Glide.with(imageViewContext) +// .asDrawable() +// .sizeMultiplier(0.1f) +// val isImageFile = +// ExecSetToolbarButtonImage.isImageFile(icon?.assetsPath) +// when(isImageFile && icon != null) { +// true -> ExecSetToolbarButtonImage.setForEditFragment( +// editFragment, +// ) +// else -> Glide.with(imageViewContext) +// .load(iconId) +// .skipMemoryCache(true) +// .diskCacheStrategy(DiskCacheStrategy.NONE) +// .thumbnail(requestBuilder) +// .into(imageView) +// } +// return imageView // } - - private fun setImageView( - editFragment: EditFragment, - imageView: AppCompatImageView, - toolbarButtonBariantForEdit: ToolbarButtonBariantForEdit, - iconIdToCaption: Pair - ): AppCompatImageView{ -// val dpSize = ScreenSizeCalculator.toDp(context, 40) - val imageViewContext = imageView.context - val iconId = iconIdToCaption.first - imageView.tag = CmdClickIcons.values().firstOrNull { - it.id == iconId - }?.str ?: toolbarButtonBariantForEdit.str -// imageView.imageTintList = null -// imageView.backgroundTintList = imageViewContext.getColorStateList(R.color.white) -// imageView.scaleType = ImageView.ScaleType.FIT_CENTER - val icon = CmdClickIcons.values().firstOrNull { - it.id == iconId - } - val requestBuilder: RequestBuilder = - Glide.with(imageViewContext) - .asDrawable() - .sizeMultiplier(0.1f) - val isImageFile = - ExecSetToolbarButtonImage.isImageFile(icon?.assetsPath) - when(isImageFile && icon != null) { - true -> ExecSetToolbarButtonImage.setForEditFragment( - editFragment, - ) - else -> Glide.with(imageViewContext) - .load(iconId) - .skipMemoryCache(true) - .diskCacheStrategy(DiskCacheStrategy.NONE) - .thumbnail(requestBuilder) - .into(imageView) - } - return imageView - } private fun howSetButton( editFragment: EditFragment, diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/WebSearchToolbarManagerForEdit.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/WebSearchToolbarManagerForEdit.kt index b975fa9b2..c932a9717 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/WebSearchToolbarManagerForEdit.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/WebSearchToolbarManagerForEdit.kt @@ -8,7 +8,6 @@ import androidx.appcompat.widget.LinearLayoutCompat import com.puutaro.commandclick.common.variable.variant.ReadLines import com.puutaro.commandclick.fragment.EditFragment import com.puutaro.commandclick.fragment_lib.command_index_fragment.list_view_lib.internet_button.GoogleSuggest -import com.puutaro.commandclick.proccess.js_macro_libs.toolbar_libs.EditLongPressType import com.puutaro.commandclick.proccess.js_macro_libs.toolbar_libs.EditToolbarSwitcher import com.puutaro.commandclick.proccess.UrlTexter import com.puutaro.commandclick.util.Keyboard @@ -19,79 +18,79 @@ object WebSearchToolbarManagerForEdit { cmdEditFragment: EditFragment ){ - val binding = cmdEditFragment.binding - val webSearch = binding.webSearch - val cmdWebSearchEditText = webSearch.cmdWebSearchEditText - cmdWebSearchEditText.setOnKeyListener(object : View.OnKeyListener { - override fun onKey(v: View?, keyCode: Int, event: KeyEvent): Boolean { - if (event.getAction() != KeyEvent.ACTION_DOWN || - keyCode != KeyEvent.KEYCODE_ENTER - ) return false - Keyboard.hiddenKeyboardForFragment( - cmdEditFragment - ) - if( - cmdWebSearchEditText.text.isNullOrEmpty() - ) return false - UrlTexter.launch( - cmdEditFragment, - cmdWebSearchEditText, - cmdWebSearchEditText.text.toString() - ) - return false - } - }) +// val binding = cmdEditFragment.binding +// val webSearch = binding.webSearch +// val cmdWebSearchEditText = webSearch.cmdWebSearchEditText +// cmdWebSearchEditText.setOnKeyListener(object : View.OnKeyListener { +// override fun onKey(v: View?, keyCode: Int, event: KeyEvent): Boolean { +// if (event.getAction() != KeyEvent.ACTION_DOWN || +// keyCode != KeyEvent.KEYCODE_ENTER +// ) return false +// Keyboard.hiddenKeyboardForFragment( +// cmdEditFragment +// ) +// if( +// cmdWebSearchEditText.text.isNullOrEmpty() +// ) return false +// UrlTexter.launch( +// cmdEditFragment, +// cmdWebSearchEditText, +// cmdWebSearchEditText.text.toString() +// ) +// return false +// } +// }) } fun setGoogleSuggest( cmdEditFragment: EditFragment ){ - val binding = cmdEditFragment.binding - val webSearch = binding.webSearch - val cmdWebSearchEditText = webSearch.cmdWebSearchEditText - val googleSuggest = GoogleSuggest( - cmdEditFragment, - cmdWebSearchEditText - ) - cmdWebSearchEditText.addTextChangedListener(object : TextWatcher { - override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} - override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { - if( - !cmdWebSearchEditText.hasFocus() - ) return - val linearLayoutParam = - cmdEditFragment.binding.editFragment.layoutParams as LinearLayoutCompat.LayoutParams - val editFragmentWeight = linearLayoutParam.weight - if( - editFragmentWeight == ReadLines.LONGTH - ) { - cmdWebSearchEditText.threshold = 100000 - return - } - try { - googleSuggest.set(cmdWebSearchEditText.text) - } catch (e: Exception){ - print("pass") - } - } - override fun afterTextChanged(s: Editable?) { - if(!cmdWebSearchEditText.hasFocus()) return - } - }) +// val binding = cmdEditFragment.binding +// val webSearch = binding.webSearch +// val cmdWebSearchEditText = webSearch.cmdWebSearchEditText +// val googleSuggest = GoogleSuggest( +// cmdEditFragment, +// cmdWebSearchEditText +// ) +// cmdWebSearchEditText.addTextChangedListener(object : TextWatcher { +// override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} +// override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { +// if( +// !cmdWebSearchEditText.hasFocus() +// ) return +// val linearLayoutParam = +// cmdEditFragment.binding.editFragment.layoutParams as LinearLayoutCompat.LayoutParams +// val editFragmentWeight = linearLayoutParam.weight +// if( +// editFragmentWeight == ReadLines.LONGTH +// ) { +// cmdWebSearchEditText.threshold = 100000 +// return +// } +// try { +// googleSuggest.set(cmdWebSearchEditText.text) +// } catch (e: Exception){ +// print("pass") +// } +// } +// override fun afterTextChanged(s: Editable?) { +// if(!cmdWebSearchEditText.hasFocus()) return +// } +// }) } fun setCancelListener( cmdEditFragment: EditFragment ){ - val binding = cmdEditFragment.binding - val webSearch = binding.webSearch - val webSearchCancel = webSearch.webSearchCancel - webSearchCancel.setOnClickListener { - cancelView -> - EditToolbarSwitcher.switch( - cmdEditFragment, - EditLongPressType.NORMAL.jsMacro - ) - } +// val binding = cmdEditFragment.binding +// val webSearch = binding.webSearch +// val webSearchCancel = webSearch.webSearchCancel +// webSearchCancel.setOnClickListener { +// cancelView -> +// EditToolbarSwitcher.switch( +// cmdEditFragment, +// EditLongPressType.NORMAL.jsMacro +// ) +// } } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/lib/EditedTextContents.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/lib/EditedTextContents.kt index b680b9564..250802bf1 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/lib/EditedTextContents.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/processor/lib/EditedTextContents.kt @@ -3,16 +3,12 @@ package com.puutaro.commandclick.fragment_lib.edit_fragment.processor.lib import com.puutaro.commandclick.common.variable.path.UsePath import com.puutaro.commandclick.common.variable.variables.CommandClickScriptVariable import com.puutaro.commandclick.common.variable.variant.SettingVariableSelects -import com.puutaro.commandclick.common.variable.settings.FannelInfoSetting import com.puutaro.commandclick.fragment.EditFragment -import com.puutaro.commandclick.fragment_lib.edit_fragment.variable.EditTextIdForEdit import com.puutaro.commandclick.proccess.CommentOutLabelingSection -import com.puutaro.commandclick.proccess.edit.lib.ScriptContentsLister import com.puutaro.commandclick.util.CommandClickVariables.substituteCmdClickVariable import com.puutaro.commandclick.util.CommandClickVariables.extractValListFromHolder import com.puutaro.commandclick.util.file.FileSystems import com.puutaro.commandclick.util.str.ScriptPreWordReplacer -import com.puutaro.commandclick.util.edit_tool.CcEditComponent import com.puutaro.commandclick.util.state.FannelStateRooterManager import java.io.File @@ -22,46 +18,46 @@ object EditedTextContents { val settingSectionStart = CommandClickScriptVariable.SETTING_SEC_START val settingSectionEnd = CommandClickScriptVariable.SETTING_SEC_END - fun updateByCommandVariables( - editFragment: EditFragment, - scriptContentsList: List, - recordNumToMapNameValueInCommandHolder: Map?>?, - ): List { - val fannelInfoMap = editFragment.fannelInfoMap - val currentScriptFileName = fannelInfoMap.get( - FannelInfoSetting.current_fannel_name.name - ) ?: FannelInfoSetting.current_fannel_name.defalutStr - return if( - recordNumToMapNameValueInCommandHolder.isNullOrEmpty() -// || editFragment.existIndexList - ) { - scriptContentsList - } else { - ScriptContentsLister.update( - CcEditComponent.makeEditLinearLayoutList(editFragment), - recordNumToMapNameValueInCommandHolder, - scriptContentsList, - EditTextIdForEdit.COMMAND_VARIABLE.id - ) - } - } - - fun updateBySettingVariables( - editFragment: EditFragment, - editedScriptContentsList: List, - recordNumToMapNameValueInSettingHolder: Map?>? = null - ): List { - return if (recordNumToMapNameValueInSettingHolder == null) { - editedScriptContentsList - } else { - ScriptContentsLister.update( - CcEditComponent.makeEditLinearLayoutList(editFragment), - recordNumToMapNameValueInSettingHolder, - editedScriptContentsList, - EditTextIdForEdit.SETTING_VARIABLE.id - ) - } - } +// fun updateByCommandVariables( +// editFragment: EditFragment, +// scriptContentsList: List, +// recordNumToMapNameValueInCommandHolder: Map?>?, +// ): List { +// val fannelInfoMap = editFragment.fannelInfoMap +// val currentScriptFileName = fannelInfoMap.get( +// FannelInfoSetting.current_fannel_name.name +// ) ?: FannelInfoSetting.current_fannel_name.defalutStr +// return if( +// recordNumToMapNameValueInCommandHolder.isNullOrEmpty() +//// || editFragment.existIndexList +// ) { +// scriptContentsList +// } else { +// ScriptContentsLister.update( +//// EditComponent.makeEditLinearLayoutList(editFragment), +// recordNumToMapNameValueInCommandHolder, +// scriptContentsList, +// EditTextIdForEdit.COMMAND_VARIABLE.id +// ) +// } +// } +// +// fun updateBySettingVariables( +// editFragment: EditFragment, +// editedScriptContentsList: List, +// recordNumToMapNameValueInSettingHolder: Map?>? = null +// ): List { +// return if (recordNumToMapNameValueInSettingHolder == null) { +// editedScriptContentsList +// } else { +// ScriptContentsLister.update( +// CcEditComponent.makeEditLinearLayoutList(editFragment), +// recordNumToMapNameValueInSettingHolder, +// editedScriptContentsList, +// EditTextIdForEdit.SETTING_VARIABLE.id +// ) +// } +// } fun save( editFragment: EditFragment, diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/variable/EditTextIdForEdit.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/variable/EditTextIdForEdit.kt index 9e6783769..46487cf57 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/variable/EditTextIdForEdit.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/edit_fragment/variable/EditTextIdForEdit.kt @@ -1,8 +1,8 @@ package com.puutaro.commandclick.fragment_lib.edit_fragment.variable -enum class EditTextIdForEdit( - val id: Int - ) { - SETTING_VARIABLE(20000), - COMMAND_VARIABLE(30000) -} \ No newline at end of file +//enum class EditTextIdForEdit( +// val id: Int +// ) { +// SETTING_VARIABLE(20000), +// COMMAND_VARIABLE(30000) +//} \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/BroadcastHandlerForTerm.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/BroadcastHandlerForTerm.kt index 1e17030bc..c57534753 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/BroadcastHandlerForTerm.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/BroadcastHandlerForTerm.kt @@ -1,9 +1,15 @@ package com.puutaro.commandclick.fragment_lib.terminal_fragment import android.content.Intent +import androidx.appcompat.widget.AppCompatEditText +import androidx.core.view.isVisible +import androidx.recyclerview.widget.RecyclerView +import com.puutaro.commandclick.R import com.puutaro.commandclick.common.variable.broadcast.extra.PocketWebviewLaunchExtra import com.puutaro.commandclick.common.variable.broadcast.extra.PocketWebviewLoadUrlExtra import com.puutaro.commandclick.common.variable.broadcast.scheme.BroadCastIntentSchemeTerm +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter +import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.ListViewToolForListIndexAdapter import com.puutaro.commandclick.fragment.TerminalFragment import com.puutaro.commandclick.fragment_lib.terminal_fragment.broadcast.receiver.BroadcastHtmlReceiveHandler import com.puutaro.commandclick.fragment_lib.terminal_fragment.broadcast.receiver.HtmlLauncher @@ -12,6 +18,7 @@ import com.puutaro.commandclick.fragment_lib.terminal_fragment.broadcast.receive import com.puutaro.commandclick.fragment_lib.terminal_fragment.broadcast.receiver.MonitorTextLauncher import com.puutaro.commandclick.fragment_lib.terminal_fragment.broadcast.receiver.MonitorToast import com.puutaro.commandclick.fragment_lib.terminal_fragment.broadcast.receiver.PocketWebViewLancher +import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.ListSettingsForListIndex import com.puutaro.commandclick.util.state.TargetFragmentInstance object BroadcastHandlerForTerm { @@ -98,6 +105,27 @@ object BroadcastHandlerForTerm { cmdindexSelectionSearchButton, ) } + BroadCastIntentSchemeTerm.EDIT_INDEX_LIST_UPDATE -> { + val editListRecyclerView = terminalFragment.editListDialog?.findViewById( + R.id.edit_list_dialog_recycler_view + ) ?: return + val editListSearchEditText = terminalFragment.editListDialog?.findViewById( + R.id.edit_list_dialog_search_edit_text + ) + val editComponentListAdapter = editListRecyclerView.adapter as EditComponentListAdapter + if(editListSearchEditText?.isVisible == true) { + editListSearchEditText.setText(String()) + } + ListViewToolForListIndexAdapter.listIndexListUpdateFileList( + editComponentListAdapter, + ListSettingsForListIndex.ListIndexListMaker.makeLineMapListHandler( + editComponentListAdapter.fannelInfoMap, + editComponentListAdapter.setReplaceVariableMap, + editComponentListAdapter.editListMap, + editComponentListAdapter.busyboxExecutor, + ) + ) + } } } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/ButtonImageCreator.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/ButtonImageCreator.kt index 8fa58feeb..bdec3b22b 100644 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/ButtonImageCreator.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/ButtonImageCreator.kt @@ -5,7 +5,6 @@ import android.graphics.Bitmap import android.graphics.BitmapFactory import android.graphics.Canvas import android.graphics.Color -import android.graphics.Matrix import android.graphics.Paint import android.graphics.PorterDuff import android.graphics.PorterDuffXfermode @@ -66,7 +65,7 @@ object ButtonImageCreator { BitmapFactory.decodeByteArray(it, 0, it.size) } } - val assetsPathList = CmdClickIcons.values().map { + val assetsPathList = CmdClickIcons.entries.map { it.assetsPath } execCreate( @@ -84,6 +83,7 @@ object ButtonImageCreator { context, listOf(CmdClickIcons.GOOGLE.assetsPath), defaultUrlCapBitmap, + null, ) // withContext(Dispatchers.IO){ // FileSystems.updateFile( @@ -118,26 +118,34 @@ object ButtonImageCreator { (1..4).random() % 4 <= 2 ) return@async } - val originalImagePath = capturePartPngDirPathList.shuffled().firstOrNull()?.let { - dirPath -> - if( - dirPath.isEmpty() - ) return@let null - FileSystems.sortedFiles(dirPath).shuffled().firstOrNull()?.let fileList@ { - if( - it.isEmpty() - ) return@fileList null - File(dirPath, it).absolutePath - } - } - val byteArray = cropImage( + val byteArray = ExecButtonImageCreator.create( context, assetsPath, - originalImagePath, + capturePartPngDirPathList, defaultUrlCapBitmap, null, - null, + BitmapTool.GradientBitmap.GradOrient.BOTH, ) ?: return@async +// val originalImagePath = capturePartPngDirPathList.shuffled().firstOrNull()?.let { +// dirPath -> +// if( +// dirPath.isEmpty() +// ) return@let null +// FileSystems.sortedFiles(dirPath).shuffled().firstOrNull()?.let fileList@ { +// if( +// it.isEmpty() +// ) return@fileList null +// File(dirPath, it).absolutePath +// } +// } +// val byteArray = cropImage( +// context, +// assetsPath, +// originalImagePath, +// defaultUrlCapBitmap, +// null, +// null, +// ) ?: return@async FileSystems.writeFromByteArray( toolbarButtonImageFile.absolutePath, @@ -150,6 +158,38 @@ object ButtonImageCreator { } } + object ExecButtonImageCreator{ + fun create( + context: Context?, + assetsPath: String, + capturePartPngDirPathList: List, + defaultUrlCapBitmap: Bitmap?, + centerColorStr: String?, + gradOrient: BitmapTool.GradientBitmap.GradOrient, + ): ByteArray? { + val originalImagePath = capturePartPngDirPathList.shuffled().firstOrNull()?.let { + dirPath -> + if( + dirPath.isEmpty() + ) return@let null + FileSystems.sortedFiles(dirPath).shuffled().firstOrNull()?.let fileList@ { + if( + it.isEmpty() + ) return@fileList null + File(dirPath, it).absolutePath + } + } + return cropImage( + context, + assetsPath, + originalImagePath, + defaultUrlCapBitmap, + centerColorStr, + gradOrient, + ) + } + } + object SelectionBarButton { @@ -173,6 +213,7 @@ object ButtonImageCreator { context: Context?, assetsPathList: List, defaultUrlCapBitmap: Bitmap?, + centerColorStr: String?, ) { val capturePartPngDirPathList = makeCapturePartPngDirPathList() val concurrentLimit = 5 @@ -218,8 +259,8 @@ object ButtonImageCreator { assetsPath, originalImagePath, defaultUrlCapBitmap, - ccGradColorList.random(), - ccGradColorList.random(), + centerColorStr, + BitmapTool.GradientBitmap.GradOrient.BOTH, ) ?: return@async FileSystems.writeFromByteArray( selectionBarImageFile.absolutePath, @@ -271,16 +312,15 @@ object ButtonImageCreator { } } - private suspend fun cropImage( + private fun cropImage( context: Context?, maskAssetsPath: String, originalImagePath: String?, defaultUrlCapBitmap: Bitmap?, - startGradColor: String?, - endGradColor: String? + centerColorStr: String?, + gradOrient: BitmapTool.GradientBitmap.GradOrient, ): ByteArray? { - val original = withContext(Dispatchers.IO) { - when(originalImagePath.isNullOrEmpty()){ + val original = when(originalImagePath.isNullOrEmpty()){ true -> defaultUrlCapBitmap else -> BitmapTool.convertFileToBitmap( originalImagePath @@ -292,48 +332,48 @@ object ButtonImageCreator { 300.0 ) ) - } - } ?: return null - val maskByteArray = withContext(Dispatchers.IO) { - AssetsFileManager.assetsByteArray( + } ?: return null + val maskByteArray = AssetsFileManager.assetsByteArray( context, maskAssetsPath - ) - }?: return null - val src = withContext(Dispatchers.IO) { - BitmapFactory.decodeByteArray( + ) ?: return null + val src = BitmapFactory.decodeByteArray( maskByteArray, 0, maskByteArray.size ) - } - val output = withContext(Dispatchers.IO) { - Bitmap.createBitmap( + val output = Bitmap.createBitmap( src.width, src.height, Bitmap.Config.ARGB_8888 ) - } - val outBitmap = withContext(Dispatchers.IO) { + val outBitmap = let { val paint = Paint(Paint.ANTI_ALIAS_FLAG) paint.xfermode = PorterDuffXfermode(PorterDuff.Mode.DST_IN) val canvas = Canvas(output) canvas.drawBitmap(original, 0f, 0f, null) paint.color = -0x1000000 canvas.drawBitmap(src, 0f, 0f, paint) - return@withContext output + return@let output } val cornerDips = (2..8).random() + val colorIntArray = listOf( + colorList.random(), + centerColorStr ?: colorList.random(), + colorList.random() + ).map { + Color.parseColor(it) + }.toIntArray() val bkBitmapSrc = BitmapTool.GradientBitmap.makeGradientBitmap2( original.width, original.height, - startGradColor ?: colorList.random(), - endGradColor ?: colorList.random(), + colorIntArray, + gradOrient, ) - val overBitmap = overlayBitmap( + val overBitmap = BitmapTool.ImageTransformer.overlayBitmap( bkBitmapSrc, outBitmap, - ) ?: return null + ) val resultBitmap = getRoundedCornerBitmap( context, overBitmap, @@ -342,7 +382,7 @@ object ButtonImageCreator { return BitmapTool.convertBitmapToByteArray(resultBitmap) } - private fun makeCapturePartPngDirPathList(): List { + fun makeCapturePartPngDirPathList(): List { val lastModifyExtend = UrlHistoryPath.lastModifyExtend val partPngDirName = UrlHistoryPath.partPngDirName val captureDirPath = UrlHistoryPath.makeCaptureHistoryDirPath() @@ -373,20 +413,6 @@ object ButtonImageCreator { return Bitmap.createBitmap(bitmap, startX, startY, widthPx, heightPx, null, false) } - - private fun overlayBitmap(bitmapBackground: Bitmap, bitmapImage: Bitmap): Bitmap? { - val bitmap2Width = bitmapImage.width - val bitmap2Height = bitmapImage.height - val marginLeft = (bitmapBackground.width * 0.5 - bitmap2Width * 0.5).toFloat() - val marginTop = (bitmapBackground.height * 0.5 - bitmap2Height * 0.5).toFloat() - val overlayBitmap = - Bitmap.createBitmap(bitmap2Width, bitmap2Height, bitmapBackground.config) - val canvas = Canvas(overlayBitmap) - canvas.drawBitmap(bitmapBackground, Matrix(), null) - canvas.drawBitmap(bitmapImage, marginLeft, marginTop, null) - return overlayBitmap - } - private fun getRoundedCornerBitmap( context: Context?, bitmap: Bitmap, diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/FannelHistoryGifCreator.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/FannelHistoryGifCreator.kt index 3db32582e..180872999 100644 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/FannelHistoryGifCreator.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/FannelHistoryGifCreator.kt @@ -14,6 +14,7 @@ import com.puutaro.commandclick.util.file.FileSystems import com.puutaro.commandclick.util.file.ReadText import com.puutaro.commandclick.util.file.UrlFileSystems import com.puutaro.commandclick.util.image_tools.BitmapTool +import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.async @@ -44,28 +45,27 @@ object FannelHistoryGifCreator { val concurrentLimit = 5 val semaphore = Semaphore(concurrentLimit) val tag = terminalFragment.tag - gifCreateJob = terminalFragment.lifecycleScope.launch { - terminalFragment.repeatOnLifecycle(Lifecycle.State.STARTED) { - if( - !tag.isNullOrEmpty() - && tag != terminalFragment.context?.getString(R.string.index_terminal_fragment) - ) return@repeatOnLifecycle - val fannelList = withContext(Dispatchers.IO) { - UrlFileSystems.getFannelList( - context - ).split("\n").filter { - it.isNotEmpty() - } - } - val fannelNameList = withContext(Dispatchers.IO) { - UrlFileSystems.extractFannelNameList(fannelList) - } - val urlPrtPngMap = withContext(Dispatchers.IO) { - makeUrlPrtPngMapList( - fannelNameList, - fannelList, - ) + gifCreateJob = CoroutineScope(Dispatchers.IO).launch { + if( + !tag.isNullOrEmpty() + && tag != terminalFragment.context?.getString(R.string.index_terminal_fragment) + ) return@launch + val fannelList = withContext(Dispatchers.IO) { + UrlFileSystems.getFannelList( + context + ).split("\n").filter { + it.isNotEmpty() } + } + val fannelNameList = withContext(Dispatchers.IO) { + UrlFileSystems.extractFannelNameList(fannelList) + } + val urlPrtPngMap = withContext(Dispatchers.IO) { + makeUrlPrtPngMapList( + fannelNameList, + fannelList, + ) + } // FileSystems.writeFile( // File(UsePath.cmdclickDefaultAppDirPath, "gifList.txt").absolutePath, // listOf( @@ -75,46 +75,46 @@ object FannelHistoryGifCreator { //// "partPngMap: ${partPngMap}", // ).joinToString("\n############\n") + "\n----------------\n" // ) - withContext(Dispatchers.IO) { - val jobList = urlPrtPngMap.map { - map -> + withContext(Dispatchers.IO) { + val jobList = urlPrtPngMap.map { + map -> // if( // !isActive() // ) return@withContext - async { + async { // if( // !isActive() // ) return@async - semaphore.withPermit { + semaphore.withPermit { // if( // !isActive() // ) return@withPermit - val fannelName = map.key - val urlPngPathList = map.value + val fannelName = map.key + val urlPngPathList = map.value // val appDirName = withContext(Dispatchers.IO) { // FannelHistoryManager.getAppDirNameFromAppHistoryFileName( // historyName // ) // } // val appDirPath = File(cmdclickAppDirPath, appDirName).absolutePath - val designList = makeDesignConList( - fannelName, + val designList = makeDesignConList( + fannelName, // appDirName, - urlPngPathList, - ) - val captureGifDesignConList = FannelHistoryPath.getCaptureGifDesignPath( + urlPngPathList, + ) + val captureGifDesignConList = FannelHistoryPath.getCaptureGifDesignPath( // appDirPath, - fannelName, - ).let { - ReadText(it).textToList() - } - val gifPath = FannelHistoryPath.getCaptureGifPath( + fannelName, + ).let { + ReadText(it).textToList() + } + val gifPath = FannelHistoryPath.getCaptureGifPath( // appDirPath, - fannelName, - ) - val isRecreateGif = - !File(gifPath).isFile - || captureGifDesignConList != designList + fannelName, + ) + val isRecreateGif = + !File(gifPath).isFile + || captureGifDesignConList != designList // if(historyName.contains("newsSpeecher")) { // FileSystems.updateFile( // File( @@ -130,20 +130,19 @@ object FannelHistoryGifCreator { // ).joinToString("\n") + "\n-----------\n" // ) // } - if ( - !isRecreateGif + if ( + !isRecreateGif // || !isActive() - ) return@withPermit - GifCreator.create( - context, - fannelName, - urlPngPathList, - ) - } + ) return@withPermit + GifCreator.create( + context, + fannelName, + urlPngPathList, + ) } } - jobList.forEach { it.await() } } + jobList.forEach { it.await() } } } } diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/PinFannelBarManager.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/PinFannelBarManager.kt index f058d975d..906dd898a 100644 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/PinFannelBarManager.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/PinFannelBarManager.kt @@ -12,6 +12,7 @@ import androidx.fragment.app.Fragment import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import com.blankj.utilcode.util.ToastUtils import com.puutaro.commandclick.R import com.puutaro.commandclick.common.variable.fannel.SystemFannel import com.puutaro.commandclick.common.variable.path.UsePath @@ -142,9 +143,11 @@ object PinFannelBarManager { FactFannel.creatingToast() return } - FileSystems.updateLastModified( - File(cmdclickDefaultAppDirPath, fannelName).absolutePath - ) + CoroutineScope(Dispatchers.IO).launch { + FileSystems.updateLastModified( + File(cmdclickDefaultAppDirPath, fannelName).absolutePath + ) + } EditExecuteOrElse.handle( terminalFragment, fannelName, diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/TermOnLongClickListener.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/TermOnLongClickListener.kt index f28c200ff..c0172b969 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/TermOnLongClickListener.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/TermOnLongClickListener.kt @@ -4,7 +4,7 @@ import android.os.Handler import android.os.Looper import android.webkit.WebView import androidx.core.view.isVisible -import com.blankj.utilcode.util.ToastUtils +import com.puutaro.commandclick.common.variable.path.UsePath import com.puutaro.commandclick.common.variable.variant.SettingVariableSelects import com.puutaro.commandclick.fragment.TerminalFragment import com.puutaro.commandclick.fragment_lib.terminal_fragment.proccess.LongPressForImage @@ -13,12 +13,14 @@ import com.puutaro.commandclick.fragment_lib.terminal_fragment.proccess.LongPres import com.puutaro.commandclick.proccess.broadcast.BroadCastIntent import com.puutaro.commandclick.util.JavaScriptLoadUrl import com.puutaro.commandclick.util.file.AssetsFileManager +import com.puutaro.commandclick.util.file.FileSystems import com.puutaro.commandclick.util.state.TargetFragmentInstance import com.puutaro.commandclick.util.url.WebUrlVariables import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext +import java.io.File import java.lang.ref.WeakReference @@ -134,12 +136,17 @@ object TermOnLongClickListener { ?: return@setOnLongClickListener false val longPressImageUrl = message.data.getString("src") ?: return@setOnLongClickListener false + val longPressImageText = message.data.getString("title") + ?.replace( + "(https?|ftp|file)://[^  \t]*".toRegex(), + String() + ) ?: return@setOnLongClickListener false if ( currentPageUrl?.startsWith(httpsStartStr) == true || currentPageUrl?.startsWith(httpStartStr) == true ) { longPressForSrcImageAnchor.launch( - terminalWebView.title, + longPressImageText, longPressLinkUrl, longPressImageUrl, currentUrl @@ -150,12 +157,16 @@ object TermOnLongClickListener { WebView.HitTestResult.SRC_ANCHOR_TYPE -> { val longPressLinkUrl = hitTestResult.extra ?: return@setOnLongClickListener false + val message = Handler(Looper.getMainLooper()).obtainMessage() + terminalWebView.requestFocusNodeHref(message) + val srcText = message.data.getString("title") + ?: return@setOnLongClickListener false if ( currentPageUrl?.startsWith(httpsStartStr) == true || currentPageUrl?.startsWith(httpStartStr) == true ) { longPressForSrcAnchor.launch( - terminalWebView.title, + srcText, longPressLinkUrl, currentUrl ) diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/broadcast/register/BroadcastRegisterForTerm.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/broadcast/register/BroadcastRegisterForTerm.kt index 9ff876c07..777a7fbb4 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/broadcast/register/BroadcastRegisterForTerm.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/broadcast/register/BroadcastRegisterForTerm.kt @@ -25,6 +25,7 @@ object BroadcastRegisterForTerm { // BroadCastIntentSchemeTerm.POCKET_WEBVIEW_PRELOAD_URL.action, BroadCastIntentSchemeTerm.POCKET_WEBVIEW_LOAD_URL.action, BroadCastIntentSchemeTerm.FANNEL_PIN_BAR_UPDATE.action, + BroadCastIntentSchemeTerm.EDIT_INDEX_LIST_UPDATE.action, ) ) } diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/JsUbuntu.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/JsUbuntu.kt index 33141c95f..ec2d6b211 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/JsUbuntu.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/JsUbuntu.kt @@ -1,14 +1,16 @@ package com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface import android.webkit.JavascriptInterface -import androidx.fragment.app.activityViewModels import com.blankj.utilcode.util.ToastUtils import com.puutaro.commandclick.common.variable.broadcast.scheme.BroadCastIntentSchemeUbuntu import com.puutaro.commandclick.common.variable.broadcast.extra.UbuntuServerIntentExtra +import com.puutaro.commandclick.common.variable.fannel.SystemFannel import com.puutaro.commandclick.common.variable.network.UsePort import com.puutaro.commandclick.common.variable.path.UsePath import com.puutaro.commandclick.fragment.TerminalFragment import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.dialog.JsDialog +import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog.ListJsDialogV2 +import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog.PromptWithListDialog import com.puutaro.commandclick.proccess.broadcast.BroadcastSender import com.puutaro.commandclick.proccess.ubuntu.Shell2Http import com.puutaro.commandclick.proccess.ubuntu.UbuntuController @@ -18,15 +20,13 @@ import com.puutaro.commandclick.util.Intent.CurlManager import com.puutaro.commandclick.util.JavaScriptLoadUrl import com.puutaro.commandclick.util.file.ReadText import com.puutaro.commandclick.util.shell.LinuxCmd -import com.puutaro.commandclick.util.state.FannelInfoTool -import com.puutaro.commandclick.util.state.TargetFragmentInstance -import com.puutaro.commandclick.view_model.activity.TerminalViewModel import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withContext +import java.io.File import java.lang.ref.WeakReference @@ -299,7 +299,7 @@ class JsUbuntu( fun isInstall( installStampFilePath: String, expectStampCon: String, - installConfirmTitleAndMessage: String, + installConfirmTitle: String, installOneList: String, cautionTitleAndMessage: String, ): Boolean { @@ -315,9 +315,9 @@ class JsUbuntu( Stamp file contents - ### installConfirmTitleAndMessage + ### installConfirmTitle - Install confirm title and message separated by `|` + Install confirm title ### installOneList @@ -336,7 +336,7 @@ class JsUbuntu( ?args= installStampFilePath=`${cmdYoutuberInstallStampFilePath}` &expectStampCon=`${INSTALL_STAMP_CON}` - &confirmTitleAndMsg="Press install button|" + &confirmTitleAndMsg="Press install button" &installOneList="install\tpuzzle" &cautionTitleAndMsg="Caution!|Install by ⚙️ button" ``` @@ -351,12 +351,25 @@ class JsUbuntu( return isInstall } val jsDialog = JsDialog(terminalFragmentRef) - val installTitleToMsg = makeTitleToMsg(installConfirmTitleAndMessage) - val el = jsDialog.listDialog( - installTitleToMsg.first, - installTitleToMsg.second, - installOneList +// val installTitleToMsg = makeTitleToMsg(installConfirmTitle) + val listDialogMapCon = listOf( +// "${ListJsDialogV2.ListJsDialogKey.MAX_LINES.key}=null", + "${ListJsDialogV2.ListJsDialogKey.SEARCH_VISIBLE.key}=${PromptWithListDialog.switchOff}", + "${ListJsDialogV2.ListJsDialogKey.SAVE_TAG.key}=isInstallUbuntu", +// "${ListJsDialogV2.ListJsDialogKey.BACKGROUND_TYPE.key}=${PromptWithListDialog.Companion.PromptBackground.Type.transparent.name}", +// "${ListJsDialogV2.ListJsDialogKey.MAX_LINES.key}=null", + ).joinToString(ListJsDialogV2.listJsDialogMapSeparator.toString()) + val el = jsDialog.list( + File(UsePath.cmdclickDefaultAppDirPath, SystemFannel.preference).absolutePath, + installConfirmTitle, + installOneList, + listDialogMapCon ) +// jsDialog.listDialog( +// installTitleToMsg.first, +// installTitleToMsg.second, +// installOneList +// ) if( el.isNotEmpty() ) { diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/dialog/JsDialog.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/dialog/JsDialog.kt index a3efd7b5f..e45817e7d 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/dialog/JsDialog.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/dialog/JsDialog.kt @@ -10,7 +10,12 @@ import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib. import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog.ImageJsDialog import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog.JsConfirm import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog.DebugJsAlert +import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog.DragSortJsDialog +import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog.EditListDialog +import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog.GridJsDialogV2 +import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog.JsConfirmV2 import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog.ListJsDialog +import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog.ListJsDialogV2 import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog.MultiSelectGridViewJsDialog import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog.MultiSelectJsDialog import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog.MultiSelectOnlyImageGridViewJsDialog @@ -18,9 +23,9 @@ import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib. import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog.OnlyImageGridJsDialog import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog.OnlySpannableGridJsDialog import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog.PromptJsDialog +import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog.PromptWithListDialog import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog.QrScanJsDialog import com.puutaro.commandclick.util.dialog.DialogObject -import com.puutaro.commandclick.util.state.FannelInfoTool import com.puutaro.commandclick.util.str.QuoteTool import java.lang.ref.WeakReference @@ -32,7 +37,7 @@ class JsDialog( terminalFragmentRef ) - private val jsConfirm = JsConfirm( + private val jsConfirm = JsConfirmV2( terminalFragmentRef ) @@ -92,6 +97,22 @@ class JsDialog( terminalFragmentRef ) + private val editListDialog = EditListDialog( + terminalFragmentRef + ) + + private val promptWithListDialog = PromptWithListDialog( + terminalFragmentRef, + ) + + private val dragSortJsDialog = DragSortJsDialog( + terminalFragmentRef + ) + + private val gridDialogV2 = GridJsDialogV2( + terminalFragmentRef + ) + @JavascriptInterface fun listDialog( title: String, @@ -413,15 +434,25 @@ class JsDialog( @JavascriptInterface fun confirm( title: String, - body: String, ): Boolean { val isOk = jsConfirm.create( title, - body, ) return isOk } +// @JavascriptInterface +// fun confirmOld( +// title: String, +// body: String, +// ): Boolean { +// val isOk = jsConfirm.create( +// title, +// body, +// ) +// return isOk +// } + @JavascriptInterface fun dAlert( title: String, @@ -436,4 +467,68 @@ class JsDialog( ) return conArg } + + @JavascriptInterface + fun editList( + fannelInfoCon: String, + listIndexConfigPath: String + ){ + editListDialog.create( + fannelInfoCon, + listIndexConfigPath, + ) + } + + @JavascriptInterface + fun promptWithList( + fannelPath: String, + title: String, + promptConfigMapCon: String, + ): String { + return promptWithListDialog.create( + fannelPath, + title, + promptConfigMapCon, + ) + } + + @JavascriptInterface + fun list( + fannelPath: String, + title: String, + listIconTsvCon: String, + promptConfigMapCon: String, + ): String { + return ListJsDialogV2.launch( + promptWithListDialog, + fannelPath, + title, + listIconTsvCon, + promptConfigMapCon, + ) + } + + @JavascriptInterface + fun dragSort( + title: String, + dragSortFilePath: String + ){ + dragSortJsDialog.create( + title, + dragSortFilePath + ) + } + + @JavascriptInterface + fun grid( + title: String, + imagePathListCon: String, + configMapCon: String, + ): String { + return gridDialogV2.create( + title, + imagePathListCon, + configMapCon, + ) + } } diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/edit/JsDirSelect.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/edit/JsDirSelect.kt index c591d5044..7a5f5495e 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/edit/JsDirSelect.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/edit/JsDirSelect.kt @@ -203,10 +203,10 @@ class JsDirSelect( scriptFileName, "${targetVariable}=\"${recentDirName}\"" ) - JsEdit(terminalFragmentRef).updateEditText( - targetVariable, - recentDirName - ) +// JsEdit(terminalFragmentRef).updateEditText( +// targetVariable, +// recentDirName +// ) terminalViewModel.onDialog = false } } @@ -241,10 +241,10 @@ class JsDirSelect( scriptFileName, "${targetVariable}=\"${renameDirNameForDialog}\"" ) - JsEdit(terminalFragmentRef).updateEditText( - targetVariable, - renameDirNameForDialog - ) +// JsEdit(terminalFragmentRef).updateEditText( +// targetVariable, +// renameDirNameForDialog +// ) } private fun updateScriptFile( diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/edit/JsEdit.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/edit/JsEdit.kt index e9442aff1..a90c0c489 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/edit/JsEdit.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/edit/JsEdit.kt @@ -1,15 +1,12 @@ package com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.edit import android.webkit.JavascriptInterface -import androidx.fragment.app.activityViewModels +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter import com.puutaro.commandclick.fragment.TerminalFragment -import com.puutaro.commandclick.fragment_lib.edit_fragment.variable.EditTextSupportViewId -import com.puutaro.commandclick.proccess.edit.lib.EditVariableName +import com.puutaro.commandclick.fragment_lib.terminal_fragment.proccess.EditListRecyclerViewGetter import com.puutaro.commandclick.util.file.FileSystems import com.puutaro.commandclick.util.file.ReadText -import com.puutaro.commandclick.util.state.FannelInfoTool -import com.puutaro.commandclick.util.state.TargetFragmentInstance -import com.puutaro.commandclick.view_model.activity.EditViewModel +import com.puutaro.commandclick.util.str.QuoteTool import java.lang.ref.WeakReference class JsEdit( @@ -19,7 +16,6 @@ class JsEdit( // private val activity = terminalFragment.activity // private val editViewModel: EditViewModel by terminalFragment.activityViewModels() - @JavascriptInterface fun updateByVariable( fannelScriptPath: String, @@ -27,10 +23,10 @@ class JsEdit( updateVariableValue: String, ){ val jsScript = JsScript(terminalFragmentRef) - updateEditText( - targetVariableName, - updateVariableValue - ) +// updateEditText( +// targetVariableName, +// updateVariableValue +// ) val jsContents = ReadText( fannelScriptPath ).readText() @@ -44,72 +40,107 @@ class JsEdit( ) } +// @JavascriptInterface +// fun updateEditText( +// updateVariableName: String, +// updateVariableValue: String +// ){ +// val terminalFragment = terminalFragmentRef.get() +// ?: return +// val context = terminalFragment.context +// val listener = context as? TerminalFragment.OnEditTextUpdateListenerForTermFragment +// val editViewModel: EditViewModel by terminalFragment.activityViewModels() +// val editTextId = editViewModel.variableNameToEditTextIdMap.get(updateVariableName) +// listener?.onEditTextUpdateForTermFragment( +// editTextId, +// updateVariableValue +// ) +// } + @JavascriptInterface - fun updateEditText( - updateVariableName: String, - updateVariableValue: String + fun updateTextViewAndFannel_S( + indexOrParentTagName: String, + srcFragment: String, + tagName: String, + updateText: String, + isSave: Boolean, ){ val terminalFragment = terminalFragmentRef.get() ?: return - val context = terminalFragment.context - val listener = context as? TerminalFragment.OnEditTextUpdateListenerForTermFragment - val editViewModel: EditViewModel by terminalFragment.activityViewModels() - val editTextId = editViewModel.variableNameToEditTextIdMap.get(updateVariableName) - listener?.onEditTextUpdateForTermFragment( - editTextId, - updateVariableValue + val context = terminalFragment.context ?: return + val listener = context as TerminalFragment.OnTextViewAndFannelUpdateListenerForTerm + listener.onTextViewAndFannelForTermFragment( + indexOrParentTagName, + srcFragment, + tagName, + updateText, + isSave, ) } @JavascriptInterface - fun getFromEditText( + fun getSettingValue( targetVariableName: String, + srcFragment: String, ): String { val terminalFragment = terminalFragmentRef.get() ?: return String() - val fannelInfoMap = - terminalFragment.fannelInfoMap -// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( -// fannelInfoMap -// ) - val currentFannelName = FannelInfoTool.getCurrentFannelName( - fannelInfoMap - ) - val fannelState = FannelInfoTool.getCurrentStateName( - fannelInfoMap - ) - val activity = terminalFragment.activity - val editFragment = TargetFragmentInstance.getCurrentEditFragmentFromFragment( - activity, -// currentAppDirPath, - currentFannelName, - fannelState + val editListRecyclerView = EditListRecyclerViewGetter.get( + terminalFragment, + srcFragment ) ?: return String() - val targetEditTextCon = EditVariableName.getText( - editFragment, + val editComponentListAdapter = + editListRecyclerView.adapter as EditComponentListAdapter + return editComponentListAdapter.getCurrentSettingVals( targetVariableName - ) - return targetEditTextCon - } + )?.let { + QuoteTool.trimBothEdgeQuote(it) + } ?: String() - @JavascriptInterface - fun updateSpinner( - updateVariableName: String, - updateVariableValue: String - ){ - val terminalFragment = terminalFragmentRef.get() - ?: return - val context = terminalFragment.context - val listener = context as? TerminalFragment.OnSpinnerUpdateListenerForTermFragment - val editViewModel: EditViewModel by terminalFragment.activityViewModels() - val editTextId = - editViewModel.variableNameToEditTextIdMap.get(updateVariableName) - ?:return - val currentSpinnerId = editTextId + EditTextSupportViewId.SPINNER.id - listener?.onSpinnerUpdateForTermFragment( - currentSpinnerId, - updateVariableValue - ) +// val fannelInfoMap = +// terminalFragment.fannelInfoMap +// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( +// fannelInfoMap +// ) +// +// val currentFannelName = FannelInfoTool.getCurrentFannelName( +// fannelInfoMap +// ) +// val fannelState = FannelInfoTool.getCurrentStateName( +// fannelInfoMap +// ) +// val activity = terminalFragment.activity +// val editFragment = TargetFragmentInstance.getCurrentEditFragmentFromFragment( +// activity, +//// currentAppDirPath, +// currentFannelName, +// fannelState +// ) ?: return String() +// val targetEditTextCon = EditVariableName.getText( +// editFragment, +// targetVariableName +// ) +// return targetEditTextCon } + +// @JavascriptInterface +// fun updateSpinner( +// updateVariableName: String, +// updateVariableValue: String +// ){ +// val terminalFragment = terminalFragmentRef.get() +// ?: return +// val context = terminalFragment.context +// val listener = context as? TerminalFragment.OnSpinnerUpdateListenerForTermFragment +// val editViewModel: EditViewModel by terminalFragment.activityViewModels() +// val editTextId = +// editViewModel.variableNameToEditTextIdMap.get(updateVariableName) +// ?:return +// val currentSpinnerId = editTextId + EditTextSupportViewId.SPINNER.id +// listener?.onSpinnerUpdateForTermFragment( +// currentSpinnerId, +// updateVariableValue +// ) +// } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/edit/JsFannelConSaver.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/edit/JsFannelConSaver.kt index 42b2e1ec4..ae27837bc 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/edit/JsFannelConSaver.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/edit/JsFannelConSaver.kt @@ -2,7 +2,6 @@ package com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.edi import android.webkit.JavascriptInterface import com.puutaro.commandclick.fragment.TerminalFragment -import com.puutaro.commandclick.fragment_lib.edit_fragment.processor.ScriptFileSaver import com.puutaro.commandclick.util.state.FannelInfoTool import com.puutaro.commandclick.util.state.TargetFragmentInstance import java.lang.ref.WeakReference @@ -32,6 +31,6 @@ class JsFannelConSaver( currentFannelName, currentFannelState ) ?: return - ScriptFileSaver.save(editFragment) +// ScriptFileSaver.save(editFragment) } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/edit/JsFileSelect.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/edit/JsFileSelect.kt index 468335d42..ec1920fe1 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/edit/JsFileSelect.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/edit/JsFileSelect.kt @@ -11,7 +11,6 @@ import com.blankj.utilcode.util.ToastUtils import com.puutaro.commandclick.common.variable.path.UsePath import com.puutaro.commandclick.fragment.TerminalFragment import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.dialog.JsDialog -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.FileSelectSpinnerViewProducer import com.puutaro.commandclick.util.str.QuoteTool import com.puutaro.commandclick.util.file.FileSystems import com.puutaro.commandclick.util.file.ReadText @@ -26,7 +25,8 @@ import java.lang.ref.WeakReference class JsFileSelect( private val terminalFragmentRef: WeakReference ) { - private val noSuffixMacroWord = FileSelectSpinnerViewProducer.noExtend + private val noSuffixMacroWord = String() + //FileSelectSpinnerViewProducer.noExtend private val totalExtendRegex = Regex("\\.[a-zA-Z0-9]*$") private var confirmDialog: Dialog? = null @@ -231,10 +231,10 @@ class JsFileSelect( scriptFileName, "${targetVariable}=\"${recentLogFile}\"" ) - JsEdit(terminalFragmentRef).updateEditText( - targetVariable, - recentLogFile - ) +// JsEdit(terminalFragmentRef).updateEditText( +// targetVariable, +// recentLogFile +// ) } } @@ -275,10 +275,10 @@ class JsFileSelect( scriptFileName, "${targetVariable}=\"${renameFileNameOkForDialog}\"" ) - JsEdit(terminalFragmentRef).updateEditText( - targetVariable, - renameFileNameOkForDialog - ) +// JsEdit(terminalFragmentRef).updateEditText( +// targetVariable, +// renameFileNameOkForDialog +// ) } private fun updateScriptFile( diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/edit/JsListConSBSaver.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/edit/JsListConSBSaver.kt index 06388a7d2..65957f5a3 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/edit/JsListConSBSaver.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/edit/JsListConSBSaver.kt @@ -34,9 +34,9 @@ class JsListConSBSaver( currentFannelName, currentFannelState ) ?: return - ListContentsSelectBoxTool.saveListContents( - editFragment, - buttonTag - ) +// ListContentsSelectBoxTool.saveListContents( +// editFragment, +// buttonTag +// ) } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/edit/JsListSelect.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/edit/JsListSelect.kt index 5abb4784b..e4c92dab1 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/edit/JsListSelect.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/edit/JsListSelect.kt @@ -168,18 +168,18 @@ class JsListSelect( currentScriptPath, replacedScriptContents ) - val jsEdit = JsEdit(terminalFragmentRef) - if( +// val jsEdit = JsEdit(terminalFragmentRef) +// if( defaultVariable.isNotEmpty() - ) jsEdit.updateEditText( - defaultVariable, - String(), - ) - if( - replaceTargetVariable.isNotEmpty() - ) jsEdit.updateEditText( - replaceTargetVariable, - recentItem, - ) +// ) jsEdit.updateEditText( +// defaultVariable, +// String(), +// ) +// if( +// replaceTargetVariable.isNotEmpty() +// ) jsEdit.updateEditText( +// replaceTargetVariable, +// recentItem, +// ) } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/edit/JsScript.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/edit/JsScript.kt index dc2259255..85e64e9b1 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/edit/JsScript.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/edit/JsScript.kt @@ -138,11 +138,11 @@ class JsScript( replaceNewlineSepaCon: String, ): String { val replacedCommandVariableCon = CommandClickVariables.replaceVariableInHolder( - scriptContents, + scriptContents.split("\n"), replaceNewlineSepaCon, commandStartHolder, commandEndHolder, - ) + ).joinToString("\n") return replacedCommandVariableCon } @@ -152,11 +152,11 @@ class JsScript( replaceNewlineSepaCon: String, ): String { val replacedSettingVariableCon = CommandClickVariables.replaceVariableInHolder( - scriptContents, + scriptContents.split("\n"), replaceNewlineSepaCon, settingStartHolder, settingEndHolder, - ) + ).joinToString("\n") return replacedSettingVariableCon } diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/edit/JsValEdit.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/edit/JsValEdit.kt index 1d238a7ba..d6dfef514 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/edit/JsValEdit.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/edit/JsValEdit.kt @@ -20,33 +20,33 @@ class JsValEdit( // private val fannelInfoMap = terminalFragment.fannelInfoMap - @JavascriptInterface - fun editAndSaveCmdVar( - title: String, - fannelPath: String, - setVariableTypes: String, - targetVariables: String, - ): String { - val terminalFragment = terminalFragmentRef.get() - ?: return String() - val context = terminalFragment.context - val isOk = try { - execEditAndSaveCmdVar( - title, - fannelPath, - setVariableTypes, - targetVariables, - ) - } catch (e: Exception){ - ToastUtils.showShort(e.toString()) - LogSystems.stdErr( - context, - "$e" - ) - cancelReturnCode - } - return isOk - } +// @JavascriptInterface +// fun editAndSaveCmdVar( +// title: String, +// fannelPath: String, +// setVariableTypes: String, +// targetVariables: String, +// ): String { +// val terminalFragment = terminalFragmentRef.get() +// ?: return String() +// val context = terminalFragment.context +// val isOk = try { +// execEditAndSaveCmdVar( +// title, +// fannelPath, +// setVariableTypes, +// targetVariables, +// ) +// } catch (e: Exception){ +// ToastUtils.showShort(e.toString()) +// LogSystems.stdErr( +// context, +// "$e" +// ) +// cancelReturnCode +// } +// return isOk +// } @JavascriptInterface fun registerFannelConChange( @@ -65,52 +65,52 @@ class JsValEdit( ) } - private fun execEditAndSaveCmdVar( - title: String, - fannelPath: String, - setVariableTypes: String, - targetVariables: String, - ): String { - val resultKeyValueCon = JsDialog(terminalFragmentRef).formDialog( - title, - setVariableTypes, - targetVariables, - ) - if( - resultKeyValueCon.isEmpty() - ) return cancelReturnCode - - val variableMap = CmdClickMap.createMap( - resultKeyValueCon, - '\n' - ) - val jsEdit = JsEdit(terminalFragmentRef) - variableMap.forEach { - val varName = it.first - val varValue = it.second - jsEdit.updateEditText( - varName, - varValue - ) - } - val jsScript = JsScript(terminalFragmentRef) - val fcon = ReadText( - fannelPath - ).readText() - val replacedCon = jsScript.replaceCommandVariable( - fcon, - resultKeyValueCon - ) - registerFannelConChange( - replacedCon - ) - if( - replacedCon.isEmpty() - ) return okReturnCode - FileSystems.writeFile( - fannelPath, - replacedCon - ) - return okReturnCode - } +// private fun execEditAndSaveCmdVar( +// title: String, +// fannelPath: String, +// setVariableTypes: String, +// targetVariables: String, +// ): String { +// val resultKeyValueCon = JsDialog(terminalFragmentRef).formDialog( +// title, +// setVariableTypes, +// targetVariables, +// ) +// if( +// resultKeyValueCon.isEmpty() +// ) return cancelReturnCode +// +// val variableMap = CmdClickMap.createMap( +// resultKeyValueCon, +// '\n' +// ) +// val jsEdit = JsEdit(terminalFragmentRef) +// variableMap.forEach { +// val varName = it.first +// val varValue = it.second +// jsEdit.updateEditText( +// varName, +// varValue +// ) +// } +// val jsScript = JsScript(terminalFragmentRef) +// val fcon = ReadText( +// fannelPath +// ).readText() +// val replacedCon = jsScript.replaceCommandVariable( +// fcon, +// resultKeyValueCon +// ) +// registerFannelConChange( +// replacedCon +// ) +// if( +// replacedCon.isEmpty() +// ) return okReturnCode +// FileSystems.writeFile( +// fannelPath, +// replacedCon +// ) +// return okReturnCode +// } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/DragSortJsDialog.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/DragSortJsDialog.kt new file mode 100644 index 000000000..a62cc93c9 --- /dev/null +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/DragSortJsDialog.kt @@ -0,0 +1,698 @@ +package com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog + +import android.app.Dialog +import android.content.Context +import android.graphics.Bitmap +import android.graphics.Color +import android.graphics.drawable.AnimationDrawable +import android.graphics.drawable.BitmapDrawable +import android.graphics.drawable.ColorDrawable +import android.view.Gravity +import android.view.ViewGroup +import android.widget.FrameLayout +import androidx.appcompat.content.res.AppCompatResources +import androidx.appcompat.widget.AppCompatImageView +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.core.content.ContextCompat +import androidx.core.graphics.drawable.toBitmap +import androidx.recyclerview.widget.ItemTouchHelper +import androidx.recyclerview.widget.RecyclerView +import com.daimajia.androidanimations.library.Techniques +import com.daimajia.androidanimations.library.YoYo +import com.puutaro.commandclick.R +import com.puutaro.commandclick.activity_lib.event.lib.terminal.ExecSetToolbarButtonImage +import com.puutaro.commandclick.common.variable.res.CmdClickColor +import com.puutaro.commandclick.common.variable.res.CmdClickIcons +import com.puutaro.commandclick.component.adapter.DragSortRecyclerAdapter +import com.puutaro.commandclick.custom_manager.PreLoadLayoutManager +import com.puutaro.commandclick.fragment.TerminalFragment +import com.puutaro.commandclick.util.file.FileSystems +import com.puutaro.commandclick.util.file.ReadText +import com.puutaro.commandclick.util.image_tools.BitmapTool +import com.puutaro.commandclick.util.list.ListTool +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.withContext +import java.io.File +import java.lang.ref.WeakReference + + +class DragSortJsDialog( + private val terminalFragmentRef: WeakReference +) { + + companion object { + private var dragSortDialogObj: Dialog? = null + private var dimAlphaJob: Job? = null + private var setRecyclerJob: Job? = null + private var setBkImageJob: Job? = null + } + + fun create( + title: String, + dragSortFilePath: String, + ){ + runBlocking { + withContext(Dispatchers.Main) { + execCreate( + title, + dragSortFilePath, + ) + } + } + } + + fun execCreate( + titleSrc: String, + dragSortFilePath: String, + ) { + val terminalFragment = terminalFragmentRef.get() + ?: return Unit.also { + simpleExitDialog() + } + val context = terminalFragment.context + ?: return Unit.also { + simpleExitDialog() + } + + val dragSortFileFileObj = File(dragSortFilePath) + if( + !dragSortFileFileObj.isFile + ) return Unit.also { + simpleExitDialog() + } + dragSortDialogObj = Dialog( + context, + R.style.BottomSheetDialogThemeWithNoDimm + ) + dragSortDialogObj?.setContentView( + R.layout.drag_sort_dialog_layout + ) + dragSortDialogObj?.window?.setLayout( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT, + ) + val dragSortDialogConstraint = dragSortDialogObj?.findViewById( + R.id.drag_sort_dialog_constraint + ) + val dragSortRecyclerView = + dragSortDialogObj?.findViewById( + R.id.drag_sort_dialog_recycler_view + ) + + dragSortDialogObj?.setOnCancelListener { + exitDialog( + dragSortDialogConstraint, + dragSortRecyclerView + ) + } + dragSortDialogObj?.window?.apply { + setGravity(Gravity.BOTTOM) + setBackgroundDrawable( + ColorDrawable(Color.TRANSPARENT), + ) + } + dragSortDialogObj?.show() + val title = titleSrc.ifEmpty { + "Drag sort" + } + setBkImageJob?.cancel() + setBkImageJob = CoroutineScope(Dispatchers.Main).launch { + +// withContext(Dispatchers.Main){ +// dragSortDialogObj?.findViewById( +// R.id.drag_sort_dialog_bk_image_bk_cut_in +// )?.apply { +// YoYo.with(Techniques.FadeOut) +// .duration(500) +// .repeat(0) +// .playOn(this@apply) +// } +// } + val imageSizePair = withContext(Dispatchers.Main) { + Pair( + 200f, + 400f + ) + } + val textBitmapList = withContext(Dispatchers.IO) { + val bkTitleText = title.replace( + Regex("[  ]"), + "C" + ) + val repeatNum = bkTitleText.let { + 1800 / it.length + } + + (1..3).map { + + BitmapTool.DrawText.drawTextToBitmapByRandom( + bkTitleText.repeat(repeatNum), + 170.toFloat(), + 340.toFloat(), + (10..15).random().toFloat(), + Color.BLACK, + ).let { textBitmapSrc -> + val scaledTextBitmapSrc = Bitmap.createScaledBitmap( + textBitmapSrc, + imageSizePair.first.toInt(), + imageSizePair.second.toInt(), + true + ) + scaledTextBitmapSrc + } + } + } + + val allowBitmapList = withContext(Dispatchers.IO) { + listOf( + R.drawable.brushi_allow_dot, + R.drawable.brushi_allow22, + R.drawable.brushi_allow3, + ).map { + AppCompatResources.getDrawable( + context, + it, + )?.toBitmap() + } + } + val rotateAllowBitmapList = withContext(Dispatchers.IO) { + allowBitmapList.map { allow -> + if (allow == null) return@map null + BitmapTool.rotate( + allow, + 180f + ) + } + } + val allColorUIdList = listOf( + CmdClickColor.LIGTH_BLUE.id, + R.color.true_blue_color, + CmdClickColor.NABY.id, + CmdClickColor.LIGHT_GREEN.id, + CmdClickColor.DARK_GREEN.id, + CmdClickColor.OLIVE_GREEN.id, + CmdClickColor.RED.id, + CmdClickColor.AO.id, + CmdClickColor.LIGHT_AO.id, + CmdClickColor.ORANGE.id, + CmdClickColor.LIGHT_ORANGE.id, + CmdClickColor.BROWN.id, + CmdClickColor.WHITE.id, + CmdClickColor.YELLOW.id, + CmdClickColor.BLACK.id, + R.color.purple_200, + ) + val shuujiColorIdList = listOf( + CmdClickColor.LIGTH_BLUE.id, + R.color.true_blue_color, + CmdClickColor.LIGHT_GREEN.id, + CmdClickColor.RED.id, + CmdClickColor.LIGHT_AO.id, + CmdClickColor.ORANGE.id, + CmdClickColor.LIGHT_ORANGE.id, + CmdClickColor.WHITE.id, + CmdClickColor.YELLOW.id, + R.color.purple_200, + CmdClickColor.BLACK.id, + CmdClickColor.NABY.id, + CmdClickColor.DARK_GREEN.id, + ) + val darkColorIdList = listOf( + R.color.true_blue_color, + CmdClickColor.NABY.id, + CmdClickColor.DARK_GREEN.id, + CmdClickColor.OLIVE_GREEN.id, + CmdClickColor.BROWN.id, + CmdClickColor.BLACK.id, + ) + val useColorIdList = mutableListOf() + val shuujiColorId = withContext(Dispatchers.IO) { + val shuujiColorStrSrc = shuujiColorIdList.filter { + !useColorIdList.contains(it) + }.random() + useColorIdList.add(shuujiColorStrSrc) + shuujiColorStrSrc + } + val textColorId = withContext(Dispatchers.IO) { + val textColorIdSrc = allColorUIdList.filter { + !useColorIdList.contains(it) + }.random() + useColorIdList.add(textColorIdSrc) + textColorIdSrc + } + val goalAlpha = when( + darkColorIdList.contains(shuujiColorId) + ){ + true -> 0.4f + else -> 0.8f + } + val strokeColorId = withContext(Dispatchers.IO) { + val isLightColor = darkColorIdList.contains(textColorId) + val strokeColorIdSrc = allColorUIdList.filter { + !useColorIdList.contains(it) + }.let { + entryColorIdList -> + if( + !isLightColor + ) return@let entryColorIdList + entryColorIdList.filter { + !darkColorIdList.contains(it) + } + }.random() + useColorIdList.add(strokeColorIdSrc) + strokeColorIdSrc + } + withContext(Dispatchers.Main){ + dragSortDialogObj?.findViewById( + R.id.drag_sort_dialog_bk_image_bk_allow1 + )?.apply { + imageTintList = AppCompatResources.getColorStateList( + context, + shuujiColorId + ) + val animationDrawable = makeAllowDuration( + context, + allowBitmapList + ) +// AnimationDrawable() +// allowBitmapList.forEachIndexed { index, allow -> +// if(allow == null) return@forEachIndexed +// val duration = makeAllowDuration(index) +// animationDrawable.addFrame( +// BitmapDrawable(context.resources, allow), +// duration +// ) +// } +// animationDrawable.isOneShot = true + setImageDrawable(animationDrawable) + animationDrawable.start() + + } + dragSortDialogObj?.findViewById( + R.id.drag_sort_dialog_bk_image_bk_allow2 + )?.apply { + imageTintList = AppCompatResources.getColorStateList( + context, + shuujiColorId + ) + val animationDrawable = makeAllowDuration( + context, + rotateAllowBitmapList + ) +// val animationDrawable = AnimationDrawable() +// rotateAllowBitmapList.forEachIndexed { index, allow -> +// if(allow == null) return@forEachIndexed +// val duration = makeAllowDuration(index) +// animationDrawable.addFrame( +// BitmapDrawable(context.resources, allow), +// duration +// ) +// } +// animationDrawable.isOneShot = true + setImageDrawable(animationDrawable) + animationDrawable.start() + } + } + withContext(Dispatchers.Main) { + dragSortDialogObj?.findViewById( + R.id.drag_sort_dialog_title_image + )?.apply { + val titleLimitLength = 20 + val titleText = title.take(titleLimitLength).mapIndexed { index, c -> + if (index == 0) { + return@mapIndexed c.uppercase() + } + c + }.joinToString(" ") + val titleTextSize = sizeCalculator( + 100f, + 60f, + titleLimitLength, + titleText, + ) +// ((80f * baseTextSize) / titleText.length).let { +// titleTextSizeSrc -> +// if( +// titleTextSizeSrc > maxSize +// ) return@let maxSize +// if( +// titleTextSizeSrc > titleTextSize +// ) return@let titleTextSizeSrc +// titleTextSize +// } + val minStrokeSize = 5f + val strokeWidth = + sizeCalculator( + 15f, + minStrokeSize, + titleLimitLength, + titleText, + ).let { + if(it < minStrokeSize) return@let minStrokeSize + it + } +// let { +// val maxSize = 6f +// val minSize = 3f +// val maxSizeDelta = maxSize - minSize +// val maxLengthDelta = titleLimitLength.toFloat() +// val inclination = maxSizeDelta / maxLengthDelta +// val curLength = (titleText.length / 2).let curLength@ { +// if(it == 0) return@curLength 1 +// it +// } +// val strokeWidth = minSize + inclination * curLength +// strokeWidth +// } +// ( +// ((maxStrokeSize * baseTextSize) / titleText.length + 1) +// ).let { +// strokeWidthSrc -> +// if( +// strokeWidthSrc > maxStrokeSize +// ) return@let maxStrokeSize +// strokeWidthSrc +// } + val textColor = ContextCompat.getColor( + context, + textColorId + ) + val strokeColor = ContextCompat.getColor( + context, + strokeColorId + ) + val titleBitmap = BitmapTool.DrawText.drawTextToBitmap( + titleText, + imageSizePair.first, + imageSizePair.second, + Color.TRANSPARENT, + titleTextSize, + textColor, + strokeColor, + strokeWidth, + 1.5f, + ) + val textBitmapListSrc = withContext(Dispatchers.IO) { +// FileSystems.writeFromByteArray( +// File(UsePath.cmdclickDefaultAppDirPath, "ltitleBitmap.png").absolutePath, +// BitmapTool.convertBitmapToByteArray(titleBitmap), +// ) + textBitmapList.mapIndexed { index, textBitmap -> +// FileSystems.writeFromByteArray( +// File(UsePath.cmdclickDefaultAppDirPath, "ltextBitmap${index}.png").absolutePath, +// BitmapTool.convertBitmapToByteArray(textBitmap), +// ) + return@mapIndexed BitmapTool.ImageTransformer.mask( + titleBitmap, + textBitmap, + ) + } + } + withContext(Dispatchers.Main) { + val animationDrawable = AnimationDrawable() + textBitmapListSrc.forEach { + animationDrawable.addFrame( + BitmapDrawable(context.resources, it), + 500 + ) + } + animationDrawable.isOneShot = false + setImageDrawable(animationDrawable) + animationDrawable.start() + YoYo.with(Techniques.FadeIn) + .duration(700) + .repeat(0) + .playOn(this@apply) + } + } + } + withContext(Dispatchers.Main) { + dragSortDialogObj?.findViewById( + R.id.drag_sort_dialog_bk_image_bk + )?.apply { + dimAlphaJob?.cancel() + dimAlphaJob = CoroutineScope(Dispatchers.IO).launch{ + withContext(Dispatchers.IO){ + delay(200) + } + withContext(Dispatchers.IO) { + val changeTimes = 4 + val plusAlpha = goalAlpha / changeTimes + val delayTime = 200L / changeTimes + for(i in 1..changeTimes) { + delay(delayTime) + if ( + dragSortDialogObj?.isShowing != true + || alpha >= goalAlpha + ) { + alpha = goalAlpha + dimAlphaJob?.cancel() + break + } + alpha += plusAlpha + } + } + } + } + } + } + setRecyclerJob?.cancel() + setRecyclerJob = CoroutineScope(Dispatchers.Main).launch{ + dragSortRecyclerView?.apply { + val preloadLayoutManager: RecyclerView.LayoutManager = PreLoadLayoutManager( + context, + true + ) + layoutManager = preloadLayoutManager + } + val dragSortList = withContext(Dispatchers.IO) { + makeDragSortList( + dragSortFilePath + ) + } + val dragSortRecyclerAdapter = withContext(Dispatchers.IO) { + DragSortRecyclerAdapter( + context, + dragSortList.toMutableList(), + ) + } + withContext(Dispatchers.Main) { +// val itemDecoration: ItemDecoration = +// DividerItemDecoration( +// context, +// DividerItemDecoration.VERTICAL +// ) +// dragSortRecyclerView?.addItemDecoration(itemDecoration) + setItemTouchHelper( + dragSortRecyclerView, + dragSortRecyclerAdapter, + ) + } + withContext(Dispatchers.IO) { + dragSortRecyclerView?.adapter = dragSortRecyclerAdapter + } + + withContext(Dispatchers.Main) { + dragSortDialogObj?.findViewById( + R.id.drag_sort_dialog_cancel + )?.apply { + ExecSetToolbarButtonImage.setImageButton( + this, + CmdClickIcons.CANCEL + ) + setOnClickListener { + exitDialog( + dragSortDialogConstraint, + dragSortRecyclerView, + ) + } + } + } + withContext(Dispatchers.Main) { + dragSortDialogObj?.findViewById( + R.id.drag_sort_dialog_ok + )?.apply { + ExecSetToolbarButtonImage.setImageButton( + this, + CmdClickIcons.OK + ) + setOnClickListener { + exitDialog( + dragSortDialogConstraint, + dragSortRecyclerView + ) + FileSystems.writeFile( + dragSortFilePath, + dragSortRecyclerAdapter.dragSortList + .reversed() + .joinToString("\n") + ) + } + } + } + } + } + + private fun makeAllowDuration( + context: Context, + rotateAllowBitmapList: List + ): AnimationDrawable { + return AnimationDrawable().apply { + rotateAllowBitmapList.forEachIndexed { + index, allow -> + if( + allow == null + ) return@forEachIndexed + val duration = when(index){ + 0 -> 200 + 1 -> 150 + else -> 100 + } + addFrame( + BitmapDrawable( + context.resources, + allow + ), + duration + ) + } + isOneShot = true + } + } + + private fun sizeCalculator( + maxSize: Float, + minSize: Float, + titleLimitLength: Int, + titleText: String, + ): Float { +// val maxSize = 100f +// val minSize = 60f + val maxSizeDelta = maxSize - minSize + val maxLengthDelta = titleLimitLength.toFloat() + val inclination = maxSizeDelta / maxLengthDelta + val marginLength = 1 + val curLength = (titleText.length / 2).let curLength@ { + if(it == 0) return@curLength 1 + if(it % 2 == 1) return@curLength it + 1 + it + } + marginLength + val textSize = maxSize - inclination * curLength +// FileSystems.writeFile( +// File(UsePath.cmdclickDefaultAppDirPath, "lsize.txt").absolutePath, +// listOf( +// "maxSizeDelta: ${maxSizeDelta}", +// "maxLengthDelta: ${maxLengthDelta}", +// "inclination: ${inclination}", +// "curLength: ${curLength}", +// "textSize: ${textSize}", +// ).joinToString("\n") +// ) + return textSize + } + + private fun simpleExitDialog(){ + exitDialog( + null, + null, + ) + } + + private fun exitDialog( + dragSortDialogConstraint: ConstraintLayout?, + dragSortRecyclerView: RecyclerView?, + ){ + dimAlphaJob?.cancel() + setRecyclerJob?.cancel() + setBkImageJob?.cancel() + dragSortRecyclerView?.layoutManager = null + dragSortRecyclerView?.adapter = null + dragSortRecyclerView?.recycledViewPool?.clear() + dragSortRecyclerView?.removeAllViews() + dragSortDialogConstraint?.removeAllViews() + dragSortDialogObj?.dismiss() + dragSortDialogObj = null + } + + + private fun makeDragSortList( + listContentsFilePath: String, + ): List { + val fileObj = File(listContentsFilePath) + val parentDir = fileObj.parent ?: String() + FileSystems.createDirs(parentDir) + return ReadText( + listContentsFilePath + ).textToList().filter { + it.trim().isNotEmpty() + }.reversed() + } + + private fun setItemTouchHelper( + recyclerView: RecyclerView?, + dragSortRecyclerAdapter: DragSortRecyclerAdapter, + ){ + val context = recyclerView?.context + ?: return + val mIth = ItemTouchHelper( + object : ItemTouchHelper.SimpleCallback( + ItemTouchHelper.UP or ItemTouchHelper.DOWN, + ItemTouchHelper.LEFT + ) { + + override fun onMove(recyclerView: RecyclerView, + viewHolder: RecyclerView.ViewHolder, + target: RecyclerView.ViewHolder): Boolean { + val adapter = recyclerView.adapter as DragSortRecyclerAdapter + val from = viewHolder.bindingAdapterPosition + val to = target.bindingAdapterPosition + adapter.notifyItemMoved(from, to) + ListTool.switchList( + dragSortRecyclerAdapter.dragSortList, + from, + to, + ) + return true + } + + override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) { + if( + direction != ItemTouchHelper.LEFT + ) return + val position = viewHolder.layoutPosition + dragSortRecyclerAdapter.notifyItemRemoved(position) + dragSortRecyclerAdapter.dragSortList.removeAt(position) + } + + override fun onSelectedChanged(viewHolder: RecyclerView.ViewHolder?, actionState: Int) { + super.onSelectedChanged(viewHolder, actionState) + if (actionState == ItemTouchHelper.ACTION_STATE_DRAG) { + viewHolder?.itemView?.alpha = 0.5f + viewHolder?.itemView?.setBackgroundColor( + ContextCompat.getColor( + context, + R.color.light_ao + ) + ) + } + } + + override fun clearView(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder) { + super.clearView(recyclerView, viewHolder) + viewHolder.itemView.alpha = 1.0f + viewHolder.itemView.setBackgroundColor( + ContextCompat.getColor( + context, + R.color.trans + ) + ) + } + }) + mIth.attachToRecyclerView(recyclerView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/EditListDialog.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/EditListDialog.kt new file mode 100644 index 000000000..820464694 --- /dev/null +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/EditListDialog.kt @@ -0,0 +1,180 @@ +package com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog + +import android.app.Dialog +import android.view.ViewGroup +import android.widget.FrameLayout +import androidx.appcompat.widget.AppCompatEditText +import androidx.appcompat.widget.AppCompatImageView +import androidx.appcompat.widget.AppCompatTextView +import androidx.appcompat.widget.LinearLayoutCompat +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.recyclerview.widget.RecyclerView +import com.puutaro.commandclick.R +import com.puutaro.commandclick.common.variable.path.UsePath +import com.puutaro.commandclick.common.variable.settings.EditSettings +import com.puutaro.commandclick.common.variable.variables.CommandClickScriptVariable +import com.puutaro.commandclick.fragment.TerminalFragment +import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.system.JsFannelInfo +import com.puutaro.commandclick.proccess.edit.edit_text_support_view.WithEditComponentListView +import com.puutaro.commandclick.proccess.edit.lib.ListSettingVariableListMaker +import com.puutaro.commandclick.proccess.edit.lib.SetReplaceVariabler +import com.puutaro.commandclick.util.CommandClickVariables +import com.puutaro.commandclick.util.file.ReadText +import com.puutaro.commandclick.util.map.CmdClickMap +import com.puutaro.commandclick.util.state.FannelInfoTool +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import java.io.File +import java.lang.ref.WeakReference + +class EditListDialog( + private val terminalFragmentRef: WeakReference +) { + fun create( + fannelInfoCon: String, + listIndexConfigPath: String, + ){ + CoroutineScope(Dispatchers.Main).launch { + execCreate( + fannelInfoCon, + listIndexConfigPath, + ) + } + + } + + fun execCreate( + fannelInfoCon: String, + listIndexConfigPath: String, + ){ + val terminalFragment = terminalFragmentRef.get() + ?: return + val context = terminalFragment.context + ?: return + + terminalFragment.editListDialog = Dialog(context) + terminalFragment.editListDialog?.setContentView( + R.layout.edit_list_dialog_layout + ) ?: return + val constraintLayout = + terminalFragment.editListDialog?.findViewById( + R.id.edit_list_dialog_constraint_layout + ) ?: return + val editListTitleView = + terminalFragment.editListDialog?.findViewById( + R.id.edit_list_dialog_title_view + ) ?: return + val editListTitleImage = + terminalFragment.editListDialog?.findViewById( + R.id.edit_list_dialog_title_image + ) ?: return + val editListRecyclerView = + terminalFragment.editListDialog?.findViewById( + R.id.edit_list_dialog_recycler_view + ) ?: return + val editListBkFrame = + terminalFragment.editListDialog?.findViewById( + R.id.edit_list_bk_frame + ) ?: return + + val editListSearchEditText = + terminalFragment.editListDialog?.findViewById( + R.id.edit_list_dialog_search_edit_text + ) ?: return + val editFooterLinearlayout = + terminalFragment.editListDialog?.findViewById( + R.id.edit_list_dialog_footer_linearlayout + ) ?: return + + val fannelInfoMap = CmdClickMap.createMap( + fannelInfoCon, + JsFannelInfo.fannelInfoMapSeparator + ).toMap() + val mainFannelFile = FannelInfoTool.getCurrentFannelName( + fannelInfoMap, + ).let { + File(UsePath.cmdclickDefaultAppDirPath, it) + } + val mainFannelConList = ReadText( + mainFannelFile.absolutePath, + ).textToList() + val settingVariableList = CommandClickVariables.extractValListFromHolder( + mainFannelConList, + CommandClickScriptVariable.SETTING_SEC_START, + CommandClickScriptVariable.SETTING_SEC_END, + ) + val setReplaceVariableMap = SetReplaceVariabler.makeSetReplaceVariableMap( + context, + settingVariableList, + mainFannelFile.name + ) + val virtualSettingValsListForListIndex = listOf( + CommandClickScriptVariable.SETTING_SEC_START, + "${CommandClickScriptVariable.LIST_INDEX_CONFIG}=${EditSettings.filePrefix}${listIndexConfigPath}", + CommandClickScriptVariable.SETTING_SEC_END, + ) + val listIndexConfigMap = ListSettingVariableListMaker.makeConfigMapFromSettingValList( + CommandClickScriptVariable.LIST_INDEX_CONFIG, + virtualSettingValsListForListIndex, + fannelInfoMap, + setReplaceVariableMap, + String() + ) + WithEditComponentListView.create( + terminalFragment, + fannelInfoMap, + setReplaceVariableMap, + terminalFragment.busyboxExecutor, + listIndexConfigMap, + editListTitleView, + editListTitleImage, + editListRecyclerView, + editListBkFrame, + editListSearchEditText, + editFooterLinearlayout, + null, + null, + mainFannelConList, + ) + terminalFragment.editListDialog?.setOnCancelListener { + editListRecyclerView.removeAllViews() + editFooterLinearlayout.removeAllViews() + editListBkFrame.removeAllViews() + constraintLayout.removeAllViews() + terminalFragment.editListDialog?.dismiss() + terminalFragment.editListDialog = null + } + terminalFragment.editListDialog?.window?.setLayout( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT + ) + terminalFragment.editListDialog?.show() + } + + fun dismiss(){ + val constraintLayout = + terminalFragmentRef.get()?.editListDialog?.findViewById( + R.id.edit_list_dialog_constraint_layout + ) + val editListRecyclerView = + terminalFragmentRef.get()?.editListDialog?.findViewById( + R.id.edit_list_dialog_recycler_view + ) + val editListBkFrame = + terminalFragmentRef.get()?.editListDialog?.findViewById( + R.id.edit_list_bk_frame + ) + val editFooterLinearlayout = + terminalFragmentRef.get()?.editListDialog?.findViewById( + R.id.edit_list_dialog_footer_linearlayout + ) + editListRecyclerView?.removeAllViews() + editFooterLinearlayout?.removeAllViews() + editListBkFrame?.removeAllViews() + constraintLayout?.removeAllViews() + val terminalFragment = terminalFragmentRef.get() + terminalFragment?.editListDialog?.dismiss() + terminalFragment?.editListDialog = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/FormJsDialog.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/FormJsDialog.kt index abcb35770..80a472980 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/FormJsDialog.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/FormJsDialog.kt @@ -12,14 +12,11 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import com.puutaro.commandclick.R import com.puutaro.commandclick.common.variable.variables.CommandClickScriptVariable -//import com.puutaro.commandclick.common.variable.variant.LanguageTypeSelects import com.puutaro.commandclick.common.variable.edit.* import com.puutaro.commandclick.fragment.TerminalFragment import com.puutaro.commandclick.proccess.edit.lib.SetReplaceVariabler -import com.puutaro.commandclick.proccess.edit.lib.SetVariableTyper import com.puutaro.commandclick.proccess.edit.lib.ScriptContentsLister import com.puutaro.commandclick.util.CommandClickVariables -import com.puutaro.commandclick.util.LogSystems import com.puutaro.commandclick.util.RecordNumToMapNameValueInHolder import com.puutaro.commandclick.view_model.activity.TerminalViewModel import kotlinx.coroutines.* @@ -138,27 +135,27 @@ class FormJsDialog( String(), ) - val setVariableTypeList = SetVariableTyper.makeSetVariableTypeList( - recordNumToMapNameValueInSettingHolder, - String(), +// val setVariableTypeList = SetVariableTyper.makeSetVariableTypeList( +// recordNumToMapNameValueInSettingHolder, // String(), - null - )?.joinToString("\n")?.let { - SetReplaceVariabler.execReplaceByReplaceVariables( - it, - setReplaceVariableMap, -// String(), - String() - ) - }?.split("\n") +//// String(), +// null +// )?.joinToString("\n")?.let { +// SetReplaceVariabler.execReplaceByReplaceVariables( +// it, +// setReplaceVariableMap, +//// String(), +// String() +// ) +// }?.split("\n") - val recordNumToSetVariableMaps = SetVariableTyper.makeRecordNumToSetVariableMaps( - terminalFragment, - setVariableTypeList, - recordNumToMapNameValueInCommandHolder, - setReplaceVariableMap, - terminalFragment.busyboxExecutor, - ) +// val recordNumToSetVariableMaps = SetVariableTyper.makeRecordNumToSetVariableMaps( +// terminalFragment, +// setVariableTypeList, +// recordNumToMapNameValueInCommandHolder, +// setReplaceVariableMap, +// terminalFragment.busyboxExecutor, +// ) formDialog = Dialog( context @@ -182,24 +179,24 @@ class FormJsDialog( // FannelInfoSetting.current_app_dir.name // to terminalFragment.currentAppDirPath // ) - val editParameters = EditParameters( -// terminalFragment, - virtualJsContentsList, - recordNumToMapNameValueInCommandHolder, - recordNumToMapNameValueInSettingHolder, - emptyMap(), - setReplaceVariableMap, - true, - emptyList() - ) +// val editParameters = EditParameters( +//// terminalFragment, +// virtualJsContentsList, +//// recordNumToMapNameValueInCommandHolder, +//// recordNumToMapNameValueInSettingHolder, +// emptyMap(), +// setReplaceVariableMap, +// true, +//// emptyList() +// ) - execFormPartsAdd( - terminalFragment, - editParameters, - recordNumToSetVariableMaps, - exitTextStartId, - linearLayout - ) +// execFormPartsAdd( +// terminalFragment, +// editParameters, +//// recordNumToSetVariableMaps, +// exitTextStartId, +// linearLayout +// ) terminalViewModel.onDialog = true returnValue = String() @@ -221,26 +218,26 @@ class FormJsDialog( confirmOkButton?.setOnClickListener { formDialog?.dismiss() formDialog = null - val updateVirtualJsContentsList = if( - recordNumToMapNameValueInCommandHolder.isNullOrEmpty() - ) virtualJsContentsList - else { - ScriptContentsLister.update( - listOf(linearLayout), - recordNumToMapNameValueInCommandHolder, - virtualJsContentsList, - exitTextStartId - ) - } - val dialogReturnStringListSource = CommandClickVariables.extractValListFromHolder( - updateVirtualJsContentsList, - commandSectionStart, - commandSectionEnd - ) - returnValue = - dialogReturnStringListSource?.slice( - 1 until dialogReturnStringListSource.size-1 - )?.joinToString("\n") ?: String() +// val updateVirtualJsContentsList = if( +// recordNumToMapNameValueInCommandHolder.isNullOrEmpty() +// ) virtualJsContentsList +// else { +// ScriptContentsLister.update( +// listOf(linearLayout), +// recordNumToMapNameValueInCommandHolder, +// virtualJsContentsList, +// exitTextStartId +// ) +// } +// val dialogReturnStringListSource = CommandClickVariables.extractValListFromHolder( +// updateVirtualJsContentsList, +// commandSectionStart, +// commandSectionEnd +// ) +// returnValue = +// dialogReturnStringListSource?.slice( +// 1 until dialogReturnStringListSource.size-1 +// )?.joinToString("\n") ?: String() terminalViewModel.onDialog = false } @@ -286,76 +283,76 @@ class FormJsDialog( return "\n\n${settingSectionContents}\n\n\n${commandSectionContents}\n".split("\n") } - private fun execFormPartsAdd( - fragment: Fragment, - editParameters: EditParameters, - recordNumToSetVariableMaps: Map?>?, - editTextStartId: Int, - linearLayout: LinearLayoutCompat - ){ - val terminalFragment = terminalFragmentRef.get() - ?: return - val context = terminalFragment.context - val recordNumToNameToValueInHolderSize = - editParameters.recordNumToMapNameValueInCommandHolder?.size ?: return - (1..recordNumToNameToValueInHolderSize).forEach { seedNum -> - val linearParams = LinearLayoutCompat.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.WRAP_CONTENT, - ) - val currentOrder = seedNum - 1 - val currentRecordNumToMapNameValueInHolder = - editParameters.recordNumToMapNameValueInCommandHolder.entries.elementAt( - currentOrder - ) - val currentRecordNumToNameToValueInHolder = - currentRecordNumToMapNameValueInHolder.value - val insertTextView = TextView(context) - val currentVariableName = currentRecordNumToNameToValueInHolder?.get( - RecordNumToMapNameValueInHolderColumn.VARIABLE_NAME.name - ) - val currentVariableValue = currentRecordNumToNameToValueInHolder?.get( - RecordNumToMapNameValueInHolderColumn.VARIABLE_VALUE.name - ) - val currentId = editTextStartId + currentOrder - insertTextView.text = currentVariableName - linearParams.weight = 1F - insertTextView.layoutParams = linearParams - linearLayout.addView(insertTextView) - val insertEditText = EditText(context) - insertEditText.tag = currentVariableName - insertEditText.id = currentId - insertEditText.backgroundTintList = - context?.getColorStateList(R.color.gray_out) - insertEditText.setSelectAllOnFocus(true) - val currentRecordNum = - currentRecordNumToMapNameValueInHolder.key - editParameters.setVariableMap = recordNumToSetVariableMaps?.get( - currentRecordNum - ) - editParameters.currentId = currentId - editParameters.currentVariableName = currentVariableName - editParameters.currentVariableValue = currentVariableValue - editParameters.setVariableMap = recordNumToSetVariableMaps?.get( - currentRecordNum - ) - val variableTypeList = editParameters.setVariableMap?.get( - SetVariableTypeColumn.VARIABLE_TYPE.name - )?.split(":")?.filter { - val isContain = variableTypeDefineListForMiniEdit.contains(it) - if ( - isContain - ) return@filter isContain - LogSystems.stdWarn("Irregular option: ${it}") - false - } ?: emptyList() - editParameters.variableTypeList = variableTypeList - val horizontalLinearLayout = WithEditComponentForFormJsDialog.insert( - fragment, - insertTextView, - editParameters - ) - linearLayout.addView(horizontalLinearLayout) - } - } +// private fun execFormPartsAdd( +// fragment: Fragment, +// editParameters: EditParameters, +//// recordNumToSetVariableMaps: Map?>?, +// editTextStartId: Int, +// linearLayout: LinearLayoutCompat +// ){ +// val terminalFragment = terminalFragmentRef.get() +// ?: return +// val context = terminalFragment.context +// val recordNumToNameToValueInHolderSize = +// editParameters.recordNumToMapNameValueInCommandHolder?.size ?: return +// (1..recordNumToNameToValueInHolderSize).forEach { seedNum -> +// val linearParams = LinearLayoutCompat.LayoutParams( +// ViewGroup.LayoutParams.MATCH_PARENT, +// ViewGroup.LayoutParams.WRAP_CONTENT, +// ) +// val currentOrder = seedNum - 1 +// val currentRecordNumToMapNameValueInHolder = +// editParameters.recordNumToMapNameValueInCommandHolder.entries.elementAt( +// currentOrder +// ) +// val currentRecordNumToNameToValueInHolder = +// currentRecordNumToMapNameValueInHolder.value +// val insertTextView = TextView(context) +// val currentVariableName = currentRecordNumToNameToValueInHolder?.get( +// RecordNumToMapNameValueInHolderColumn.VARIABLE_NAME.name +// ) +// val currentVariableValue = currentRecordNumToNameToValueInHolder?.get( +// RecordNumToMapNameValueInHolderColumn.VARIABLE_VALUE.name +// ) +// val currentId = editTextStartId + currentOrder +// insertTextView.text = currentVariableName +// linearParams.weight = 1F +// insertTextView.layoutParams = linearParams +// linearLayout.addView(insertTextView) +// val insertEditText = EditText(context) +// insertEditText.tag = currentVariableName +// insertEditText.id = currentId +// insertEditText.backgroundTintList = +// context?.getColorStateList(R.color.gray_out) +// insertEditText.setSelectAllOnFocus(true) +// val currentRecordNum = +// currentRecordNumToMapNameValueInHolder.key +//// editParameters.setVariableMap = recordNumToSetVariableMaps?.get( +//// currentRecordNum +//// ) +//// editParameters.currentId = currentId +//// editParameters.currentVariableName = currentVariableName +//// editParameters.currentVariableValue = currentVariableValue +//// editParameters.setVariableMap = recordNumToSetVariableMaps?.get( +//// currentRecordNum +//// ) +//// val variableTypeList = editParameters.setVariableMap?.get( +//// SetVariableTypeColumn.VARIABLE_TYPE.name +//// )?.split(":")?.filter { +//// val isContain = variableTypeDefineListForMiniEdit.contains(it) +//// if ( +//// isContain +//// ) return@filter isContain +//// LogSystems.stdWarn("Irregular option: ${it}") +//// false +//// } ?: emptyList() +//// editParameters.variableTypeList = variableTypeList +//// val horizontalLinearLayout = WithEditComponentForFormJsDialog.insert( +//// fragment, +//// insertTextView, +//// editParameters +//// ) +//// linearLayout.addView(horizontalLinearLayout) +// } +// } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/GgleSchDialog.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/GgleSchDialog.kt index 935407298..fb1d21ba9 100644 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/GgleSchDialog.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/GgleSchDialog.kt @@ -53,7 +53,10 @@ class GgleSchDialog( private var webViewDialogInstance: Dialog? = let { val terminalFragment = terminalFragmentRef.get() val context = terminalFragment?.context - val webViewDialog = Dialog(context as Context) + val webViewDialog = Dialog( + context as Context, + R.style.BottomSheetDialogTheme, + ) webViewDialog.setContentView( R.layout.ggle_sch_webview_layout ) @@ -309,7 +312,10 @@ class GgleSchDialog( - settings.textZoom = ((terminalFragment?.fontZoomPercent ?: 100) * 95 ) / 100 + terminalFragment?.fontZoomPercent?.let { + settings.textZoom = it + } +// settings.textZoom = ((terminalFragment?.fontZoomPercent ?: 100) * 95 ) / 100 pocketWebViewSrc.setLayerType(View.LAYER_TYPE_HARDWARE, null) JsInterfaceAdder.add( WeakReference(terminalFragment), diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/GridJsDialogV2.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/GridJsDialogV2.kt new file mode 100644 index 000000000..7d71a16d5 --- /dev/null +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/GridJsDialogV2.kt @@ -0,0 +1,551 @@ +package com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog + +import android.app.Dialog +import android.content.res.ColorStateList +import android.graphics.Bitmap +import android.graphics.BitmapFactory +import android.graphics.Color +import android.graphics.drawable.AnimationDrawable +import android.graphics.drawable.BitmapDrawable +import android.graphics.drawable.ColorDrawable +import android.graphics.drawable.Drawable +import android.view.Gravity +import android.view.ViewGroup +import android.view.animation.AlphaAnimation +import android.widget.FrameLayout +import androidx.appcompat.content.res.AppCompatResources +import androidx.appcompat.widget.AppCompatImageView +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.core.graphics.drawable.toBitmap +import androidx.core.view.isVisible +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.bumptech.glide.RequestBuilder +import com.bumptech.glide.load.engine.DiskCacheStrategy +import com.daimajia.androidanimations.library.Techniques +import com.daimajia.androidanimations.library.YoYo +import com.puutaro.commandclick.R +import com.puutaro.commandclick.common.variable.res.CmdClickColorStr +import com.puutaro.commandclick.component.adapter.GridListAdapter +import com.puutaro.commandclick.custom_manager.PreLoadGridLayoutManager +import com.puutaro.commandclick.custom_view.OutlineTextView +import com.puutaro.commandclick.fragment.TerminalFragment +import com.puutaro.commandclick.util.file.AssetsFileManager +import com.puutaro.commandclick.util.image_tools.BitmapTool +import com.puutaro.commandclick.util.image_tools.BitmapTool.ImageTransformer +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.withContext +import java.lang.ref.WeakReference + + +class GridJsDialogV2( + private val terminalFragmentRef: WeakReference +) { + private var returnValue = String() + private var gridDialogObj: Dialog? = null + private var onDialog = false + private var dimAlphaJob: Job? = null + private val pink = "#faf0f9" + private val whiteColorList = listOf( + CmdClickColorStr.WHITE_GREEN.str, + CmdClickColorStr.WHITE_BLUE.str, + pink, + ) + + private val blackGreen = "#0f1419" + val colorPairList = listOf( + blackGreen to CmdClickColorStr.WHITE_GREEN.str, + blackGreen to CmdClickColorStr.WHITE_BLUE.str, + CmdClickColorStr.DARK_GREEN.str to CmdClickColorStr.WHITE_GREEN.str, + CmdClickColorStr.DARK_GREEN.str to CmdClickColorStr.WHITE_BLUE.str, + CmdClickColorStr.NAVY.str to CmdClickColorStr.WHITE_BLUE.str, + CmdClickColorStr.BLUE.str to CmdClickColorStr.WHITE_BLUE.str, + CmdClickColorStr.BLUE_DARK_PURPLE.str to CmdClickColorStr.WHITE_BLUE.str, + CmdClickColorStr.PURPLE.str to CmdClickColorStr.WHITE_GREEN.str, + CmdClickColorStr.DARK_BROWN.str to CmdClickColorStr.WHITE_GREEN.str, + CmdClickColorStr.SKERLET.str to CmdClickColorStr.WHITE_GREEN.str, + CmdClickColorStr.SKERLET.str to CmdClickColorStr.WHITE_BLUE.str, + CmdClickColorStr.ORANGE.str to CmdClickColorStr.NAVY.str, + CmdClickColorStr.SKERLET.str to CmdClickColorStr.NAVY.str, + CmdClickColorStr.YELLOW.str to CmdClickColorStr.ORANGE.str, + // CmdClickColorStr.YELLOW.str to CmdClickColorStr.SKERLET.str, + CmdClickColorStr.YELLOW.str to CmdClickColorStr.DARK_BROWN.str, + CmdClickColorStr.YELLOW.str to CmdClickColorStr.BLUE_DARK_PURPLE.str, + CmdClickColorStr.YELLOW.str to CmdClickColorStr.NAVY.str, + CmdClickColorStr.YELLOW.str to CmdClickColorStr.DARK_GREEN.str, + CmdClickColorStr.YELLOW.str to CmdClickColorStr.THICK_AO.str, + CmdClickColorStr.YELLOW.str to CmdClickColorStr.BLACK_AO.str, + // CmdClickColorStr.YELLOW.str to CmdClickColorStr.GREEN.str, + // CmdClickColorStr.YELLOW.str to CmdClickColorStr.CARKI.str, + CmdClickColorStr.YELLOW.str to CmdClickColorStr.PURPLE.str, + + CmdClickColorStr.WATER_BLUE.str to CmdClickColorStr.NAVY.str, + CmdClickColorStr.WATER_BLUE.str to CmdClickColorStr.DARK_GREEN.str, + CmdClickColorStr.WATER_BLUE.str to CmdClickColorStr.BLUE_DARK_PURPLE.str, + CmdClickColorStr.WATER_BLUE.str to CmdClickColorStr.THICK_AO.str, + CmdClickColorStr.WATER_BLUE.str to CmdClickColorStr.BLACK_AO.str, + CmdClickColorStr.WATER_BLUE.str to CmdClickColorStr.GREEN.str, + CmdClickColorStr.WATER_BLUE.str to CmdClickColorStr.CARKI.str, + + CmdClickColorStr.WHITE_BLUE.str to CmdClickColorStr.DARK_GREEN.str, + CmdClickColorStr.WHITE_BLUE.str to CmdClickColorStr.BLACK_AO.str, + CmdClickColorStr.WHITE_BLUE.str to CmdClickColorStr.NAVY.str, + CmdClickColorStr.WHITE_BLUE.str to CmdClickColorStr.BLUE_DARK_PURPLE.str, + CmdClickColorStr.WHITE_BLUE.str to CmdClickColorStr.ORANGE.str, + CmdClickColorStr.WHITE_BLUE.str to CmdClickColorStr.SKERLET.str, + CmdClickColorStr.WHITE_BLUE.str to CmdClickColorStr.DARK_BROWN.str, + CmdClickColorStr.WHITE_BLUE.str to CmdClickColorStr.THICK_AO.str, + CmdClickColorStr.WHITE_BLUE.str to CmdClickColorStr.GREEN.str, + CmdClickColorStr.WHITE_BLUE.str to CmdClickColorStr.PURPLE.str, + CmdClickColorStr.WHITE_BLUE.str to blackGreen, + CmdClickColorStr.WHITE_GREEN.str to blackGreen, + ) + + fun create( + title: String, + imagePathListTabSepaStr: String, + configMapCon: String, + ): String { + onDialog = true + returnValue = String() + runBlocking { + withContext(Dispatchers.Main) { + execCreate( + title, + imagePathListTabSepaStr, + configMapCon, + ) + } + withContext(Dispatchers.IO) { + while (true) { + delay(100) + if (!onDialog) break + } + } + } + return returnValue + } + + private fun execCreate( + title: String, + imagePathListNewlineSepaStr: String, + configMapCon: String, + ) { + val terminalFragment = terminalFragmentRef.get() + ?: return Unit.also { + simpleExitDialog() + } + val context = terminalFragment.context + ?: return Unit.also { + simpleExitDialog() + } + + val usrColorPair = colorPairList.random() + + val waterColor = convertWhiteColor(usrColorPair.first) + val titleAndDimColor = convertWhiteColor(usrColorPair.second) + gridDialogObj = Dialog( + context, + R.style.BottomSheetDialogTheme + ) + gridDialogObj?.setContentView( + R.layout.grid_dialog_v2_layout + ) + gridDialogObj?.findViewById( + R.id.grid_dialog_v2_title + )?.apply { + val titleString = if( + title.isNotEmpty() + ){ + title + } else "Select" + text = titleString + } + gridDialogObj?.window?.setLayout( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT + ) + gridDialogObj?.window?.apply { + setBackgroundDrawable( + ColorDrawable(Color.TRANSPARENT) + ) + setGravity(Gravity.BOTTOM) + } + gridDialogObj?.findViewById( + R.id.grid_dialog_v2_dimm_image_frame + ).apply{ + originalDimmEffect( + this, + titleAndDimColor + ) + } + gridDialogObj?.show() + CoroutineScope(Dispatchers.Main).launch { + val titleBkImage = withContext(Dispatchers.Main){ + gridDialogObj?.findViewById( + R.id.grid_dialog_v2_title_bk_image + ) + } + gridDialogObj?.findViewById( + R.id.grid_dialog_v2_pour_image1 + )?.apply { + val imageViewContext = this.context + val pngSizePair = Pair(200, 300) + val gradientRect = BitmapTool.GradientBitmap.makeGradientBitmap2( + pngSizePair.first, + pngSizePair.second, + listOf( + "#00000000", + waterColor, +// gradTopColorStr, + ).map { + Color.parseColor(it) + }.toIntArray(), + BitmapTool.GradientBitmap.GradOrient.VERTICAL_BOTTOM_TO_TOP, + ) + val revGradientRect = BitmapTool.rotate( + gradientRect, + 180f + ).let { + BitmapTool.ImageTransformer.adjustOpacity( + it, + 200 + ) + } + val cutSrcBitmap = + AssetsFileManager.assetsByteArray( + context, + AssetsFileManager.sibukiPngPath + )?.let { + BitmapFactory.decodeByteArray( + it, + 0, + it.size + ).let { + val srcWidth = it.width + val srcHeight = it.height + val cutHeight = srcHeight / 3 + val cutSrcBitmap = BitmapTool.ImageTransformer.cutByTarget( + it, + srcWidth, + cutHeight, + 0, + 0 + ) + cutSrcBitmap + } + } ?: return@apply + val cutWidth = cutSrcBitmap.width / 3 + val cutHeight = cutSrcBitmap.height + val gradientRectCutForShibuki = Bitmap.createScaledBitmap( + gradientRect, + cutWidth, + cutHeight, + true + ) + val shibukiBitmapList = (1..2).map { + val normalOrFlipBitmap = when( + (1..2).random() + ){ + 1 -> BitmapTool.ImageTransformer.flipHorizontally(cutSrcBitmap) + else -> cutSrcBitmap + } + val cutBitmap = BitmapTool.ImageTransformer.cut( + cutSrcBitmap, + (normalOrFlipBitmap.width / 3), + normalOrFlipBitmap.height, + ) + ImageTransformer.mask( + gradientRectCutForShibuki, + cutBitmap, + ) + } + val shibukiBitmap = BitmapTool.ImageTransformer.overlayBitmap( + shibukiBitmapList.last() as Bitmap, + shibukiBitmapList.first() as Bitmap, + ) + val animationDrawable = AnimationDrawable() + val bitmapList = listOf( + R.drawable.pour1, + R.drawable.pour2, + R.drawable.pour3, + ).mapIndexed { index, drawableId -> + AppCompatResources.getDrawable( + context, + drawableId, + )?.toBitmap( + pngSizePair.first, + pngSizePair.second, + )?.let { + maskBitmap -> + val maskedBitmap = BitmapTool.ImageTransformer.mask( + gradientRect, + maskBitmap, + ) + maskedBitmap + } + } + bitmapList.forEachIndexed { index, bitmap -> + if(bitmap == null) return@forEachIndexed + val duration = when(index){ + 0 -> 150 + 1 -> 100 + 2 -> 10 + else -> 70 + } + animationDrawable.addFrame( + BitmapDrawable(imageViewContext.resources, bitmap), + duration + ) + } + animationDrawable.isOneShot = true + setImageDrawable(animationDrawable) + animationDrawable.start() + YoYo.with(Techniques.FadeOut) + .duration(600) // 400 + .repeat(0) + .playOn(this) + val bkShibukiBitmap = withContext(Dispatchers.IO){ + val bkShibukiBitmapSrc = shibukiBitmapList.random() + BitmapTool.ImageTransformer.cutByTarget( + bkShibukiBitmapSrc, + bkShibukiBitmapSrc.width, + (bkShibukiBitmapSrc.height / 3), + 0, + 0 + + ) + } + val bkShibukiBitmapOpacity = withContext(Dispatchers.IO){ + BitmapTool.ImageTransformer.adjustOpacity( + bkShibukiBitmap, + 50 + ) + } + CoroutineScope(Dispatchers.Main).launch { + gridDialogObj?.findViewById( + R.id.grid_dialog_v2_splash_image_view + )?.apply setBkGridImage@{ + imageTintList = ColorStateList.valueOf( + Color.parseColor(waterColor) + ) + alpha = 1f + setImageBitmap(bkShibukiBitmapOpacity) + delay(300) //300 + isVisible = true + delay(50) + YoYo.with(Techniques.FadeOut) + .duration(300) // //400 + .repeat(0) + .playOn(this@setBkGridImage) + } + } + CoroutineScope(Dispatchers.Main).launch { + gridDialogObj?.findViewById( + R.id.grid_dialog_v2_splash_bk_image_view + )?.apply setBkGridImage@ { + imageTintList = ColorStateList.valueOf( + Color.parseColor(waterColor) + ) + setImageBitmap(bkShibukiBitmap) + delay(300) //300 + isVisible = true + } + } + CoroutineScope(Dispatchers.Main).launch { + withContext(Dispatchers.IO){ + delay(250) + } + withContext(Dispatchers.Main){ + titleBkImage?.apply setTitleBk@ { + setImageBitmap(revGradientRect) + CoroutineScope(Dispatchers.Main).launch { + YoYo.with(Techniques.FadeIn) + .duration(300) + .repeat(0) + .playOn(this@setTitleBk) + } + } + gridDialogObj?.findViewById( + R.id.grid_dialog_v2_title_effect_image1 + )?.apply setEffectImage@ { + val requestBuilder: RequestBuilder = + Glide.with(context) + .asDrawable() + .sizeMultiplier(0.1f) + Glide + .with(context) + .load(shibukiBitmap) +// .transition(DrawableTransitionOptions.withCrossFade()) + .skipMemoryCache(true) + .diskCacheStrategy(DiskCacheStrategy.NONE) + .thumbnail(requestBuilder) + .into(this@setEffectImage) + imageTintList = ColorStateList.valueOf( + Color.parseColor(waterColor) + ) + CoroutineScope(Dispatchers.Main).launch { + YoYo.with(Techniques.FadeOut) + .duration(500) + .repeat(0) + .playOn(this@setEffectImage) + } + } + } + } + } + } + + CoroutineScope(Dispatchers.Main).launch { + val imagePathList = withContext(Dispatchers.IO) { + makeImageList( + imagePathListNewlineSepaStr + ) + } + val gridListAdapter = withContext(Dispatchers.IO) { + GridListAdapter( + imagePathList + ) + } + val holderConstraint = withContext(Dispatchers.Main) { + gridDialogObj?.findViewById( + R.id.grid_dialog_v2_constraint + ) + } + val gridListRecyclerView = withContext(Dispatchers.Main) { + gridDialogObj?.findViewById( + R.id.grid_dialog_v2_grid_view + ) + } + gridDialogObj?.setOnCancelListener { + exitDialog( + holderConstraint, + gridListRecyclerView, + String() + ) + } + withContext(Dispatchers.Main) { + gridListRecyclerView?.apply { + adapter = gridListAdapter + layoutManager = PreLoadGridLayoutManager( + context, + 3, + true, + ) + CoroutineScope(Dispatchers.Main).launch { + YoYo.with(Techniques.FadeIn) + .duration(300) // 1000 + .repeat(0) + .playOn(this@apply) + } + } + } + withContext(Dispatchers.Main){ + invokeListItemSetClickListenerForListDialog( + holderConstraint, + gridListRecyclerView, + gridListAdapter, + ) + } + } + } + + private fun convertWhiteColor( + colorStr: String, + ): String { + if( + !whiteColorList.contains(colorStr) + ) return colorStr + return whiteColorList.random() + } + + private fun originalDimmEffect( + imageFrame: FrameLayout?, + titleAndDimColor: String, + ){ + val goalAlpha = 0.6f + imageFrame?.apply { + dimAlphaJob?.cancel() + dimAlphaJob = CoroutineScope(Dispatchers.IO).launch{ + withContext(Dispatchers.Main) { + setBackgroundColor(Color.parseColor(titleAndDimColor)) + alpha = 1f + isVisible = true + } + withContext(Dispatchers.IO){ + delay(400) //500 + } + withContext(Dispatchers.Main){ + val animation1 = AlphaAnimation(1f, goalAlpha) + animation1.duration = 70 //200 + animation1.fillAfter = true + startAnimation(animation1) + } + } + } + } + + private fun invokeListItemSetClickListenerForListDialog( + holderConstraint: ConstraintLayout?, + gridListView: RecyclerView?, + gridListAdapter: GridListAdapter, + ) { + gridListAdapter.itemClickListener = object: GridListAdapter.OnItemClickListener { + override fun onItemClick(holder: GridListAdapter.GridListViewHolder) { + val selectedImagePath = + gridListAdapter.imagePathList.getOrNull(holder.bindingAdapterPosition) + ?: return + exitDialog( + holderConstraint, + gridListView, +// gridListBkRecyclerView, + selectedImagePath, + ) + } + } + } + + + private fun makeImageList( + listCon: String + ): List { + return listCon + .split("\n") + .filter { + it.trim().isNotEmpty() + } + } + + private fun simpleExitDialog(){ + exitDialog( + null, + null, +// gridListBkView: RecyclerView?, + String(), + ) + } + + private fun exitDialog( + holderConstraint: ConstraintLayout?, + gridListView: RecyclerView?, +// gridListBkView: RecyclerView?, + returnStr: String, + ){ + gridListView?.apply { + layoutManager = null + adapter = null + recycledViewPool.clear() + removeAllViews() + } + holderConstraint?.removeAllViews() + returnValue = returnStr + gridDialogObj?.dismiss() + gridDialogObj = null + onDialog = false + } +} diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/JsConfirmV2.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/JsConfirmV2.kt new file mode 100644 index 000000000..1e5d5116e --- /dev/null +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/JsConfirmV2.kt @@ -0,0 +1,403 @@ +package com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog + +import android.app.Dialog +import android.graphics.Bitmap +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.graphics.drawable.Drawable +import android.view.Gravity +import android.view.ViewGroup +import android.widget.FrameLayout +import androidx.appcompat.widget.AppCompatImageView +import androidx.constraintlayout.widget.ConstraintLayout +import com.bumptech.glide.Glide +import com.bumptech.glide.RequestBuilder +import com.bumptech.glide.load.engine.DiskCacheStrategy +import com.daimajia.androidanimations.library.Techniques +import com.daimajia.androidanimations.library.YoYo +import com.puutaro.commandclick.R +import com.puutaro.commandclick.common.variable.res.CmdClickColorStr +import com.puutaro.commandclick.fragment.TerminalFragment +import com.puutaro.commandclick.util.LogSystems +import com.puutaro.commandclick.util.file.AssetsFileManager +import com.puutaro.commandclick.util.image_tools.BitmapTool +import com.puutaro.commandclick.util.image_tools.ScreenSizeCalculator +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.async +import kotlinx.coroutines.channels.Channel +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.withContext +import java.lang.ref.WeakReference + + +class JsConfirmV2( + private val terminalFragmentRef: WeakReference +) { + private var confirmDialogObj: Dialog? = null + private var returnBool = false + private var onDialog = false +// private var leftWhiteTitleBitmap: Bitmap? = null +// private var rightTitleBlackBitmap: Bitmap? = null + + fun create( + title: String, + ): Boolean { + onDialog = true + runBlocking { + withContext(Dispatchers.Main) { + try { + execCreate( + title, + ) + } catch (e: Exception){ + LogSystems.stdErr( + terminalFragmentRef.get()?.context, + e.toString() + ) + dismissProcess( + null, + null, + false, + ) + } + } + withContext(Dispatchers.IO) { + while (true) { + delay(100) + if ( + !onDialog + ) break + } + } + } + return returnBool + } + + private fun execCreate( + title: String, + ) { + val terminalFragment = terminalFragmentRef.get() + ?: return + val context = terminalFragment.context + if( + context == null + ) { + dismissProcess( + null, + null, + false, + ) + return + } + if( + title.isEmpty() + ) { + dismissProcess( + null, + null, + false, + ) + return + } + val requestBuilder: RequestBuilder = + Glide.with(context) + .asDrawable() + .sizeMultiplier(0.1f) + val leftRightBitmapChannel = Channel>(2) + CoroutineScope(Dispatchers.IO).launch { +// val screenHeight = ScreenSizeCalculator.pxHeight(terminalFragment) + val screenWidth = withContext(Dispatchers.Main) { + ScreenSizeCalculator.pxWidth( + terminalFragment + ) + } + val titleLength = title.length + val baseTitleLength = let { + val quotient = screenWidth / 90 + val threshold = 8 + if( + quotient <= threshold + ) return@let threshold + quotient + } + val constraintWidth = let { + if(titleLength >= baseTitleLength) return@let screenWidth + (screenWidth * titleLength) / baseTitleLength + } + val fontSize = let { + val baseWidth = 720f + val minSize = 100f + val incline = (150f - minSize) / (1080f - baseWidth) + val culcSize = incline * (screenWidth - baseWidth) + minSize + if( + culcSize <= minSize + ) return@let minSize + culcSize + } + val centerConstraintX = constraintWidth / 2 + val constraintHeight = let { + val quotient = titleLength / baseTitleLength + val oneLineHeight = constraintWidth / 3 + return@let when( + quotient + ) { + 0 -> oneLineHeight + 1, 2 -> oneLineHeight * (quotient + 1) + else -> screenWidth + } + } + val srcTitleWhiteBitmap = withContext(Dispatchers.IO) { + BitmapTool.DrawText.drawTextToBitmap( + title, + constraintWidth.toFloat(), + constraintHeight.toFloat(), + Color.TRANSPARENT, + fontSize, + Color.WHITE, + Color.WHITE, + 2f, + 1.5f, + ) + } + +// FileSystems.writeFile( +// File(UsePath.cmdclickDefaultAppDirPath, "confirm.txt").absolutePath, +// listOf( +// +// "beforeConstWidth: ${beforeConstWidth}", +// "beforeConstHeight: ${beforeConstHeight}", +// "constraintWidth: ${constraintWidth}", +// "constraintHeight: ${constraintHeight}", +// "screenHeight: ${screenHeight}", +// "screenWidth: ${screenWidth}", +// ).joinToString("\n") +// ) + val jobList = (1..2).map { + order -> + async { + val bitmap = when(order) { + 1 -> BitmapTool.ImageTransformer.cutByTarget( + srcTitleWhiteBitmap, + centerConstraintX, + constraintHeight, + 0, + 0 + ) + + else -> BitmapTool.ImageTransformer.cutByTarget( + srcTitleWhiteBitmap, + centerConstraintX, + constraintHeight, + centerConstraintX, + 0 + ) + } + leftRightBitmapChannel.send(order to bitmap) + } + } + jobList.forEach { it.await() } + leftRightBitmapChannel.close() + } + confirmDialogObj = Dialog( + context, + R.style.BottomSheetDialogThemeWithNoDimm, + ) + confirmDialogObj?.setContentView( + R.layout.confirm_dialog_v2_layout + ) +// val titleRight = confirmDialogObj?.findViewById( +// R.id.confirm_dialog_v2_title_right +// ) + + val confirmConstraint = + confirmDialogObj?.findViewById( + R.id.confirm_dialog_v2_constraint + ) + confirmDialogObj?.setOnCancelListener { + dismissProcess( + confirmConstraint, + leftRightBitmapChannel, + false, + ) + } + val leftForeImage = + confirmDialogObj?.findViewById( + R.id.confirm_dialog_v2_left_fore_image + ) + val rightForeImage = + confirmDialogObj?.findViewById( + R.id.confirm_dialog_v2_right_fore_image + ) + val confirmLeftTitleView = + confirmDialogObj?.findViewById( + R.id.confirm_dialog_v2_cancel + ) + val confirmRightTitleView = + confirmDialogObj?.findViewById( + R.id.confirm_dialog_v2_ok + ) + val leftFrameLayout = confirmDialogObj?.findViewById( + R.id.confirm_dialog_v2_left_frame, + ) + val rightFrameLayout = confirmDialogObj?.findViewById( + R.id.confirm_dialog_v2_right_frame, + ) + listOf( + leftFrameLayout to false, + confirmLeftTitleView to false, + rightFrameLayout to true, + confirmRightTitleView to true, + ).forEach { + viewToBool -> + val view = viewToBool.first + val bool = viewToBool.second + view?.apply { + setOnClickListener { + dismissProcess( + confirmConstraint, + leftRightBitmapChannel, + bool, + ) + } + } + } + CoroutineScope(Dispatchers.IO).launch { + for (orderToBitmap in leftRightBitmapChannel) { + val order = orderToBitmap.first + val bitmap = orderToBitmap.second + val imageView = withContext(Dispatchers.IO) { + when (order) { + 1 -> confirmLeftTitleView + else ->confirmRightTitleView + } + } ?: return@launch + withContext(Dispatchers.Main) { + imageView.setImageBitmap(bitmap) + } +// withContext(Dispatchers.Main) { +// Glide +// .with(context) +// .load(bitmap) +// .transition(DrawableTransitionOptions.withCrossFade()) +// .skipMemoryCache(true) +// .diskCacheStrategy(DiskCacheStrategy.NONE) +// .thumbnail(requestBuilder) +// .into(imageView) +// } + } + } + val animationPair = listOf( + Techniques.SlideInRight to Techniques.SlideInLeft, +// Techniques.SlideInDown to Techniques.SlideInUp, +// null to null, + ).random() +// val rippleDelayPair = listOf( +// 0L, +// 100L +// ).shuffled().let { +// it.first() to it.last() +// } + val aoColorStr = "#007F89" + val redPurple = "#BB86FC" + val redAiIro = "#b305f7" + val blueGreen = "#298072" + //""#2f9c8b" + //"#32b39f" + //""#25cfb5" + val red = "#FF0000" + val cancelImageColorStr = listOf( + CmdClickColorStr.SKERLET.str, + redPurple, + redAiIro, + red, + ).random() + val okImageColorStr = listOf( + aoColorStr, + blueGreen, + CmdClickColorStr.GREEN.str, + CmdClickColorStr.BLUE.str, + CmdClickColorStr.PURPLE.str, + ).random() + CoroutineScope(Dispatchers.Main).launch { + val byteArrayPair = withContext(Dispatchers.IO) { + AssetsFileManager.assetsByteArray( + context, + AssetsFileManager.xPngPath + ) to AssetsFileManager.assetsByteArray( + context, + AssetsFileManager.oPngPath + ) + } + + withContext(Dispatchers.Main) { + val jobList = (1..2).map { + async { + val byteArray = when (it) { + 1 -> byteArrayPair.first + else -> byteArrayPair.second + } + val imageView = when (it) { + 1 -> leftForeImage + else -> rightForeImage + } ?: return@async + val colorStr = when (it) { + 1 -> cancelImageColorStr + else -> okImageColorStr + } + imageView.setColorFilter(Color.parseColor(colorStr)) + Glide + .with(context) + .load(byteArray) + .skipMemoryCache(true) + .diskCacheStrategy(DiskCacheStrategy.NONE) + .thumbnail(requestBuilder) + .into(imageView) + val techniques = when (it) { + 1 -> animationPair.first + else -> animationPair.second + } + YoYo.with(techniques) + .duration(100) + .playOn(imageView) + } + } + jobList.forEach { it.await() } + } + } + + + confirmDialogObj?.window?.apply { + setLayout( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT + ) + setBackgroundDrawable( + ColorDrawable(Color.TRANSPARENT) + ) + setGravity( + Gravity.BOTTOM + ) + } + confirmDialogObj?.show() + } + + private fun dismissProcess( + confirmConstraint: ConstraintLayout?, + leftRightBitmapChannel: Channel>?, + returnBoolSrc: Boolean, + ){ + try { + leftRightBitmapChannel?.close() + } catch (e: Exception){ + null + } + confirmConstraint?.removeAllViews() + returnBool = returnBoolSrc + confirmDialogObj?.dismiss() + confirmDialogObj = null + onDialog = false + } +} \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/JsIconSelectBox.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/JsIconSelectBox.kt index b854e4ceb..59e15ecdf 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/JsIconSelectBox.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/JsIconSelectBox.kt @@ -23,25 +23,25 @@ class JsIconSelectBox( val terminalFragment = terminalFragmentRef.get() ?: return val context = terminalFragment.context - val jsEdit = JsEdit(terminalFragmentRef) - val currentItem = jsEdit.getFromEditText(valName) - val listSrc = readListPath(listPath) - val sortedListSrc = sortByCurrentItem( - currentItem, - listSrc, - ) - val selectItem = ListJsDialog(terminalFragmentRef).create( - "", - "", - sortedListSrc, - ) - if( - selectItem.trim().isEmpty() - ) return - jsEdit.updateEditText( - valName, - selectItem - ) +// val jsEdit = JsEdit(terminalFragmentRef) +// val currentItem = jsEdit.getFromEditText(valName) +// val listSrc = readListPath(listPath) +// val sortedListSrc = sortByCurrentItem( +// currentItem, +// listSrc, +// ) +// val selectItem = ListJsDialog(terminalFragmentRef).create( +// "", +// "", +// sortedListSrc, +// ) +// if( +// selectItem.trim().isEmpty() +// ) return +// jsEdit.updateEditText( +// valName, +// selectItem +// ) } private fun sortByCurrentItem( diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/ListJsDialogV2.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/ListJsDialogV2.kt new file mode 100644 index 000000000..0017b344f --- /dev/null +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/ListJsDialogV2.kt @@ -0,0 +1,88 @@ +package com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog + +import com.puutaro.commandclick.util.map.CmdClickMap + +object ListJsDialogV2 { + + const val listJsDialogMapSeparator = ',' + + fun launch( + promptWithListDialog: PromptWithListDialog, + fannelPath: String, + title: String, + listIconTsvCon: String, + listJsDialogMapCon: String, + ): String { + val listJsDialogMap = CmdClickMap.createMap( + listJsDialogMapCon, + listJsDialogMapSeparator, + ).toMap() + val searchHint = listJsDialogMap.get( + ListJsDialogKey.SEARCH_HINT.key + ) ?: String() + val focusItemTitles = listJsDialogMap.get( + ListJsDialogKey.FOCUS_ITEM_TITLES.key + ) ?: String() + val defaultSearchText = listJsDialogMap.get( + ListJsDialogKey.DEFAULT_SEARCH_TEXT.key + ) ?: String() + val searchVisible = listJsDialogMap.get( + ListJsDialogKey.SEARCH_VISIBLE.key + ) ?: String() + val saveTag = listJsDialogMap.get( + ListJsDialogKey.SAVE_TAG.key + ) ?: String() +// val backgroundType = listJsDialogMap.get( +// ListJsDialogKey.BACKGROUND_TYPE.key +// ) ?: String() +// val onKeyOpenMode = listJsDialogMap.get( +// ListJsDialogKey.ON_KEY_OPEN_MODE.key +// ) ?: String() +// val maxLines = when(onKeyOpenMode){ +// PromptWithListDialog.switchOn -> null +// else -> listJsDialogMap.get( +// ListJsDialogKey.MAX_LINES.key +// ).let { +// try { +// it?.toInt() +// } catch(e: Exception){ +// null +// } +// } +// } + val promptConfigCon = """ + ${PromptWithListDialog.Companion.PromptWithTextMapKey.list.name}= + |${PromptWithListDialog.Companion.PromptListVars.saveTag.name}=${saveTag} + |${PromptWithListDialog.Companion.PromptListVars.concatList.name}="${listIconTsvCon}" + |${PromptWithListDialog.Companion.PromptListVars.focusItemTitles.name}=${focusItemTitles} + |${PromptWithListDialog.Companion.PromptListVars.onInsertByClick.name}=OFF + |${PromptWithListDialog.Companion.PromptListVars.visible.name}=ON + |${PromptWithListDialog.Companion.PromptListVars.onDismissByClick.name}=ON + |${PromptWithListDialog.Companion.PromptListVars.disableUpdate.name}=ON, + ${PromptWithListDialog.Companion.PromptWithTextMapKey.editText.name}= + ${PromptWithListDialog.Companion.PromptEditTextKey.default.name}=${defaultSearchText} + |${PromptWithListDialog.Companion.PromptEditTextKey.hint.name}="${searchHint}" + |${PromptWithListDialog.Companion.PromptEditTextKey.visible.name}=${searchVisible}, + """.trimIndent().split("\n").joinToString(String()) { + it.trim() + } + return promptWithListDialog.create( + fannelPath, + title, + promptConfigCon + ) + } + + + enum class ListJsDialogKey(val key: String){ +// MAX_LINES(PromptWithListDialog.Companion.PromptTitleKey.maxLines.name), + SAVE_TAG(PromptWithListDialog.Companion.PromptListVars.saveTag.name), + FOCUS_ITEM_TITLES(PromptWithListDialog.Companion.PromptListVars.focusItemTitles.name), + SEARCH_VISIBLE("searchVisible"), + SEARCH_HINT("searchHint"), + DEFAULT_SEARCH_TEXT("defaultSearchText"), +// DISABLE_LIST_BIND_STR(PromptWithListDialog.Companion.PromptEditTextKey.disableListBind.name), +// BACKGROUND_TYPE("backgroundType"), +// ON_KEY_OPEN_MODE(PromptWithListDialog.Companion.PromptExtraKey.onKeyOpenMode.name), + } +} \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/PromptWithListDialog.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/PromptWithListDialog.kt new file mode 100644 index 000000000..0511c24ee --- /dev/null +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/PromptWithListDialog.kt @@ -0,0 +1,3188 @@ +package com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog + +import android.app.Dialog +import android.content.Context +import android.graphics.Bitmap +import android.graphics.Canvas +import android.graphics.Color +import android.graphics.LinearGradient +import android.graphics.Paint +import android.graphics.Paint.FontMetricsInt +import android.graphics.Shader +import android.graphics.Typeface +import android.graphics.drawable.AnimationDrawable +import android.graphics.drawable.BitmapDrawable +import android.graphics.drawable.ColorDrawable +import android.graphics.drawable.Drawable +import android.text.Editable +import android.text.Spannable +import android.text.SpannableString +import android.text.TextPaint +import android.text.TextWatcher +import android.text.style.CharacterStyle +import android.text.style.RelativeSizeSpan +import android.text.style.ReplacementSpan +import android.text.style.UpdateAppearance +import android.view.Gravity +import android.view.KeyEvent +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.ViewTreeObserver +import android.view.ViewTreeObserver.OnGlobalLayoutListener +import android.widget.FrameLayout +import android.widget.ImageView +import android.widget.RelativeLayout +import androidx.appcompat.content.res.AppCompatResources +import androidx.appcompat.widget.AppCompatEditText +import androidx.appcompat.widget.AppCompatImageView +import androidx.appcompat.widget.AppCompatTextView +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.constraintlayout.widget.ConstraintSet +import androidx.core.graphics.drawable.toBitmap +import androidx.core.view.isVisible +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.bumptech.glide.RequestBuilder +import com.bumptech.glide.load.engine.DiskCacheStrategy +import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions +import com.daimajia.androidanimations.library.Techniques +import com.daimajia.androidanimations.library.YoYo +import com.github.mikephil.charting.charts.PieChart +import com.github.mikephil.charting.data.PieData +import com.github.mikephil.charting.data.PieDataSet +import com.github.mikephil.charting.data.PieEntry +import com.google.android.material.card.MaterialCardView +import com.puutaro.commandclick.R +import com.puutaro.commandclick.common.variable.res.CmdClickColor +import com.puutaro.commandclick.common.variable.res.CmdClickColorStr +import com.puutaro.commandclick.common.variable.res.FannelIcons +import com.puutaro.commandclick.component.adapter.PromptListAdapter +import com.puutaro.commandclick.custom_manager.PreLoadLayoutManager +import com.puutaro.commandclick.custom_view.OutlineTextView +import com.puutaro.commandclick.fragment.TerminalFragment +import com.puutaro.commandclick.fragment_lib.terminal_fragment.ButtonImageCreator +import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog.PromptWithListDialog.StatisticsTool.makeStatisticsMapList +import com.puutaro.commandclick.proccess.edit.lib.SetReplaceVariabler +import com.puutaro.commandclick.proccess.js_macro_libs.edit_setting_extra.EditSettingExtraArgsTool +import com.puutaro.commandclick.proccess.ubuntu.BusyboxExecutor +import com.puutaro.commandclick.proccess.ubuntu.UbuntuFiles +import com.puutaro.commandclick.util.CcPathTool +import com.puutaro.commandclick.util.LogSystems +import com.puutaro.commandclick.util.file.FileSystems +import com.puutaro.commandclick.util.file.ReadText +import com.puutaro.commandclick.util.image_tools.BitmapTool +import com.puutaro.commandclick.util.image_tools.BitmapTool.ImageTransformer +import com.puutaro.commandclick.util.map.CmdClickMap +import com.puutaro.commandclick.util.state.FannelInfoTool +import com.puutaro.commandclick.util.str.QuoteTool +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job +import kotlinx.coroutines.async +import kotlinx.coroutines.channels.Channel +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.sync.Semaphore +import kotlinx.coroutines.sync.withPermit +import kotlinx.coroutines.withContext +import net.yslibrary.android.keyboardvisibilityevent.KeyboardVisibilityEvent +import net.yslibrary.android.keyboardvisibilityevent.KeyboardVisibilityEventListener +import java.io.File +import java.lang.ref.WeakReference +import java.time.LocalDateTime + + +class PromptWithListDialog( + private val terminalFragmentRef: WeakReference +) { + private var returnValue = String() + private var onDialog = false + + companion object { + private var promptDialogObj: Dialog? = null + private const val listPrefix = "list" + private const val listDirName = "${listPrefix}Text" + private const val listTxtSuffix = ".txt" + private const val sectionSeparator = ',' + private const val keySeparator = '|' + const val valueSeparator = '?' + const val switchOn = "ON" + const val switchOff = "OFF" + const val onSystemkeyOpenModeStr = "onSystemKeyOpenMode" + + fun exit(){ + StatisticsTool.exit() + } + enum class PromptWithTextMapKey { + list, + editText, +// background, + title, + extra, + } + + enum class PromptTitleKey { + maxLines, + } + + enum class PromptEditTextKey { + default, + hint, + shellPath, + fannelPath, + repValCon, + disableListBind, + visible, + onFocus, + } + enum class PromptListVars { + saveTag, + concatFilePathList, + concatList, + onInsertByClick, + onDismissByClick, + visible, + limit, + disableUpdate, + focusItemTitles, + } + + enum class PromptExtraKey { + removeFilePaths, + onKeyOpenMode, + } + + +// object PromptBackground { +// enum class Key { +// type +// } +// +// enum class Type{ +// transparent +// } +// } + + object PromptMapList { + + const val promptListSeparator = '\t' + + enum class PromptListKey( + val key: String + ){ + TITLE("title"), + ICON("icon") + } + + fun makePromptMapList( + fannelName: String, + setReplaceVariablesMap: Map?, + promptListFile: File?, + promptListMap: Map, + filterString: String, + listLimit: Int?, + ): MutableList> { + val mainMapListSrc = when(promptListFile == null) { + true -> emptyList() + else -> ReadText( + promptListFile.absolutePath + ).readText().let { + SetReplaceVariabler.execReplaceByReplaceVariables( + it, + setReplaceVariablesMap, + fannelName, + ) + }.split("\n").map { line -> + makeMap(line) + } + } + val extraMapListFromFileSrc = makeExtraMapList( + fannelName, + setReplaceVariablesMap, + promptListMap.get(PromptListVars.concatFilePathList.name)?.let { + QuoteTool.splitBySurroundedIgnore( + it, + valueSeparator + ) + } + ) + val titleKey = PromptListKey.TITLE.key + val concatMapListFromFile = concatTwoMapList( + mainMapListSrc, + extraMapListFromFileSrc + ) + val extraMapList = makeExtraMapListFromCon( + promptListMap.get(PromptListVars.concatList.name)?.let { + QuoteTool.trimBothEdgeQuote(it) + } + ) + val promptMapList = concatTwoMapList( + concatMapListFromFile, + extraMapList + ) +// FileSystems.writeFile( +// File(UsePath.cmdclickDefaultAppDirPath, "lpromptList.txt").absolutePath, +// listOf( +// "mainMapListSrc: ${mainMapListSrc}", +// "extraMapListFromFileSrc: ${extraMapListFromFileSrc}", +// "concatMapListFromFile: ${concatMapListFromFile}", +// "extraMapList: ${extraMapList}", +// "promptMapList: ${promptMapList}", +// ).joinToString("\n\n----------\n\n") +// ) + return when (filterString.isEmpty()) { + true -> promptMapList + else -> promptMapList.distinct().filter { lineMap -> + val title = lineMap.get(titleKey) + ?: return@filter true + Regex( + filterString + .lowercase() + .replace("\n", "") + ).containsMatchIn( + title.lowercase() + ) + } + }.let { listSrc -> + when (listLimit == null) { + true -> listSrc + else -> listSrc.take(listLimit) + }.filter { + lineMap -> + !lineMap.get( + PromptListKey.TITLE.key + ).isNullOrEmpty() + }.toMutableList() + } + } + + private fun concatTwoMapList( + baseMapListSrc: List>, + addMapList: List> + ): List> { + val titleKey = PromptListKey.TITLE.key + val iconKey = PromptListKey.ICON.key + val baseMapList = baseMapListSrc.filter { + baseLineMap -> + val baseTitle = baseLineMap.get(titleKey) + val baseIconStr = baseLineMap.get(iconKey) + ?: String() + !addMapList.any { + addMapListFromFileSrcMap -> + val addTitleFromFile = addMapListFromFileSrcMap.get(titleKey) + val isTitleEqual = + baseTitle == addTitleFromFile + val addIconStr = addMapListFromFileSrcMap.get(iconKey) + ?: String() + val isIconEqual = + baseIconStr == addIconStr + isTitleEqual && !isIconEqual + } + } + + val concatMapList = baseMapList + addMapList.filter { + addLineMap -> + val addTitle = addLineMap.get(titleKey) + !baseMapList.any { baseMap -> + val baseTitle = baseMap.get(titleKey) + val isTitleEqual = + baseTitle == addTitle + isTitleEqual + } + } + return concatMapList + } + + private fun makeExtraMapList( + fannelName: String, + setReplaceVariablesMap: Map?, + listConcatFilePathList: List?, + ): List> { + if ( + listConcatFilePathList.isNullOrEmpty() + ) return emptyList() + return listConcatFilePathList.map { + ReadText(it).readText().let { + SetReplaceVariabler.execReplaceByReplaceVariables( + it, + setReplaceVariablesMap, + fannelName, + ) + }.split("\n").map makeMap@ { + line -> + makeMap(line) + } + }.flatten().filter { it.isNotEmpty() } + } + + private fun makeExtraMapListFromCon( + concatList: String?, + ): List> { + if ( + concatList.isNullOrEmpty() + ) return emptyList() + return concatList.split(valueSeparator).map { + line -> + makeMap(line) + }.filter { it.isNotEmpty() } + + } + + private fun makeMap(line: String): Map { + val titleToIconList = line.split(promptListSeparator) + if( + titleToIconList.isEmpty() + ) return emptyMap() + val title = titleToIconList.first() + val icon = titleToIconList.getOrNull(1) + return mapOf( + PromptListKey.TITLE.key to title, + PromptListKey.ICON.key to icon + ) + } + } + } + + fun create( + fannelPath: String, + title: String, + promptConfigMapConSrc: String, + ): String { + val fannelFile = File(fannelPath) + if( + !fannelFile.isFile + ) { + LogSystems.stdSErr("invalid fannel path: ${fannelFile.absolutePath}") + return String() + } + val terminalFragment = terminalFragmentRef.get() + ?: return String() + onDialog = true + returnValue = String() + val setReplaceVariablesMap = SetReplaceVariabler.makeSetReplaceVariableMapFromSubFannel( + terminalFragment.context, + fannelPath + ) + val promptConfigMapCon = SetReplaceVariabler.execReplaceByReplaceVariables( + promptConfigMapConSrc, + setReplaceVariablesMap, + fannelFile.name + ) + runBlocking { + withContext(Dispatchers.Main) { + try { + execCreate( + terminalFragment, + fannelPath, + setReplaceVariablesMap, + title, + promptConfigMapCon, + ) + } catch (e: Exception){ + LogSystems.stdErr( + terminalFragment.context, + e.toString() + ) + simpleExitDialog() + } + } + withContext(Dispatchers.IO) { + for (i in 1..60 * 5) { + delay(100) + if ( + !onDialog + ) break + } + } + } + return returnValue + } + + + private suspend fun execCreate( + terminalFragment: TerminalFragment, + fannelPath: String, + setReplaceVariablesMap: Map?, + title: String, + promptConfigMapCon: String, + ) { +// val execCreateStart = LocalDateTime.now() + val context = terminalFragment.context + ?: return Unit.also { + simpleExitDialog() + } + + val promptConfigMap = + CmdClickMap.createMap( + promptConfigMapCon, + sectionSeparator, + ).toMap() + val promptExtraMap = promptConfigMap.get(PromptWithTextMapKey.extra.name)?.let { + CmdClickMap.createMap( + it, + keySeparator + ).toMap() + } +// val promptBkMap = promptConfigMap.get(PromptWithTextMapKey.background.name)?.let { +// CmdClickMap.createMap( +// it, +// keySeparator +// ).toMap() +// } +// val isTransparent = true +// promptBkMap?.get( +// PromptBackground.Key.type.name +// ) == PromptBackground.Type.transparent.name + val isWhiteBackground = true +// let { +// val randEndNum = 5 +// (1..randEndNum).random() % randEndNum == 0 +// } +// when(isTransparent) { +// true -> false +// else -> { +// val randEndNum = 5 +// (1..randEndNum).random() % randEndNum == 0 +// } +// } + promptDialogObj = Dialog( + context, + R.style.BottomSheetDialogThemeWithNoDimm +// R.style.extraMenuDialogStyle, +// R.style.BottomSheetDialogThemeWithLightDimm + ) +// when(isTransparent) { +// true -> Dialog( +// context, +// R.style.BottomSheetDialogThemeWithNoDimm +//// R.style.extraMenuDialogStyle, +//// R.style.BottomSheetDialogThemeWithLightDimm +// ) +// else -> Dialog( +// context, +//// R.style.extraMenuDialogStyle, +// R.style.BottomSheetDialogTheme +// ) +// } + promptDialogObj?.setContentView( + R.layout.prompt_list_dialog_layout + ) + val holderConstraint = + promptDialogObj?.findViewById( + R.id.prompt_list_dialog_constraint + ) ?: return Unit.also { + simpleExitDialog() + } + val bkRelative = + promptDialogObj?.findViewById( + R.id.prompt_list_dialog_bk_relative + ) ?: return Unit.also { + simpleExitDialog() + } + + + promptExtraMap?.get(PromptExtraKey.removeFilePaths.name)?.split( + valueSeparator + )?.forEach { removeFilePath -> + FileSystems.removeFiles( + removeFilePath, + ) + } + + val titleMap = CmdClickMap.createMap( + promptConfigMap.get(PromptWithTextMapKey.title.name), + keySeparator + ).toMap() + val promptListView = promptDialogObj?.findViewById( + R.id.prompt_list_dialog_list_view + ) ?: return Unit.also { + simpleExitDialog() + } + val firstTitleGradColorsStrList = firstTitleGradColorStrList( + isWhiteBackground + ) +// val promptTitleStart = LocalDateTime.now() + val promptListTitleView = makePromptTitle( + promptDialogObj, + title, + firstTitleGradColorsStrList, + titleMap, + ) +// val promptTitleEnd = LocalDateTime.now() + val editTextMap = CmdClickMap.createMap( + promptConfigMap.get(PromptWithTextMapKey.editText.name), + keySeparator + ).toMap() + val promptListMap = CmdClickMap.createMap( + promptConfigMap.get(PromptWithTextMapKey.list.name), + keySeparator + ).toMap() + val disableUpdate = promptListMap.get( + PromptListVars.disableUpdate.name + ) == switchOn + val fannelDirPath = CcPathTool.getMainFannelDirPath(fannelPath) + val promptListFile = withContext(Dispatchers.IO) { + val listDirPath = "${fannelDirPath}/${listDirName}" + val saveTag = promptListMap.get(PromptListVars.saveTag.name) + makeListTextFileName( + saveTag, + )?.let { + File(listDirPath, it) + } + } + + val defaultText = withContext(Dispatchers.IO) { + val defaultTextSrc = editTextMap.get( + PromptEditTextKey.default.name + ) ?: String() + when (defaultTextSrc.isEmpty()) { + true -> EditTextMakerForPromptList.makeTextByShell( + terminalFragment, + editTextMap + ) + + else -> defaultTextSrc + } + } + val disableListBind = editTextMap.get( + PromptEditTextKey.disableListBind.name + ) == switchOn + val editTextVisible = editTextMap.get( + PromptEditTextKey.visible.name + ) != switchOff + val listLimit = + promptListMap.get(PromptListVars.limit.name)?.let { + try{ + it.toInt() + } catch (e: Exception){ + null + } + } + val focusItemTitlesList = + promptListMap.get(PromptListVars.focusItemTitles.name)?.split(valueSeparator) + + val listVisible = + promptListMap.get(PromptListVars.visible.name) != switchOff + val filterText = when( + !listVisible + || disableListBind + || !editTextVisible + ){ + true -> String() + else -> defaultText ?: String() + } +// val promptlistStart = LocalDateTime.now() + val promptList: MutableList> = //mutableListOf() + PromptMapList.makePromptMapList( + File(fannelPath).name, + setReplaceVariablesMap, + promptListFile, + promptListMap, + filterText, + listLimit, + ) +// val promptWindowSetStart = LocalDateTime.now() +// val bkImageView = promptDialogObj?.findViewById( +// R.id.prompt_list_dialog_list_bk_image +// ) ?: return Unit.also { +// simpleExitDialog() +// } + promptDialogObj?.window?.apply { + setLayout( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT + ) + setBackgroundDrawable( + ColorDrawable(Color.TRANSPARENT) + ) + setGravity( + Gravity.BOTTOM + ) + } +// val promptWindowSetEnd = LocalDateTime.now() + promptDialogObj?.show() +// FileSystems.writeFile( +// File(UsePath.cmdclickDefaultAppDirPath, "promptTime.txt").absolutePath, +// listOf( +// "execCreateStart: ${execCreateStart}", +// "promptTitleStart: ${promptTitleStart}", +// "promptTitleEnd: ${promptTitleEnd}", +// "promptlistStart: ${promptlistStart}", +// "promptWindowSetStart: ${promptWindowSetStart}", +// "promptWindowSetEnd: ${promptWindowSetEnd}", +// ).joinToString("\n") +// ) +// CoroutineScope(Dispatchers.Main).launch{ +// when ( +// isWhiteBackground +// ) { +// true -> bkImageView.setImageDrawable( +// AppCompatResources.getDrawable(context, R.drawable.white_floor) +// ) +// else -> { +// val bitmap = withContext(Dispatchers.IO) { +// val colorStrList = CmdClickColorStr.entries.map { it.str } +// val colorIntArray = listOf( +// colorStrList.random(), +// colorStrList.random(), +// colorStrList.random() +// ).map { +// Color.parseColor(it) +// }.toIntArray() +// BitmapTool.GradientBitmap.makeGradientBitmap2( +// 600, +// 1200, +// colorIntArray, +// BitmapTool.GradientBitmap.GradOrient.BOTH +// ) +// } +// bkImageView.apply { +// setImageBitmap(bitmap) +// } +// } +// } +//// originalDimmEffect( +//// bkImageView +//// ) +// } + CoroutineScope(Dispatchers.Main).launch { + val promptEditText = withContext(Dispatchers.Main) { + EditTextMakerForPromptList.make( + promptDialogObj, + editTextMap, + filterText, + editTextVisible, + ) + } + val promptListAdapter = withContext(Dispatchers.IO) { + PromptListAdapter( + context, + promptList, + isWhiteBackground, + focusItemTitlesList, + ) + } + withContext(Dispatchers.Main) { + promptDialogObj?.setOnCancelListener { + exitDialog( + fannelDirPath, + holderConstraint, + bkRelative, + promptListView, + String(), + null, + promptListFile, + listLimit, + disableUpdate, + ) + } + } + withContext(Dispatchers.Main) { + promptListView.apply { + isVisible = listVisible + adapter = promptListAdapter + layoutManager = PreLoadLayoutManager( + context, + true, + ) + } + } + withContext(Dispatchers.Main) { + editTextKeyListener( + fannelDirPath, + holderConstraint, + bkRelative, + promptListView, + promptEditText, + promptListFile, + listLimit, + disableUpdate + ) + } + withContext(Dispatchers.Main) { + setPromptEditText( + File(fannelPath).name, + setReplaceVariablesMap, + promptEditText, + promptListFile, + promptListMap, + promptListView, + promptListAdapter, + disableListBind, + listLimit, + ) + } + withContext(Dispatchers.Main) { + setItemClickListener( + fannelDirPath, + holderConstraint, + bkRelative, + promptListView, + promptListAdapter, + promptEditText, + promptListMap, + promptListFile, + listLimit, + disableUpdate, + ) + } + CoroutineScope(Dispatchers.Main).launch { + autoHideTitleByYPosi( + promptListView, + promptListAdapter, + promptListTitleView, + title, + ) + } +// withContext(Dispatchers.Main){ +// scrollToBottom( +// promptListView, +// promptListAdapter, +// ) +// } + } + + CoroutineScope(Dispatchers.Main).launch { + val statisticsTitleList = withContext(Dispatchers.IO) { + makeStatisticsMapList( + fannelDirPath, + promptListFile?.name?.let { + CcPathTool.trimAllExtend(it) + }, + promptList, + ) + } + withContext(Dispatchers.Main) { + StatisticsTool.displayStatisticsBk( + terminalFragmentRef, + promptDialogObj, + statisticsTitleList, + firstTitleGradColorsStrList, + isWhiteBackground, + ) + } + } + KeyboardHandler.handle( + terminalFragment, + promptDialogObj, + promptListTitleView, + promptListView, + promptExtraMap, + ) + } + + private fun firstTitleGradColorStrList( + isWhiteBackground: Boolean + ): List { + val whiteColorStr = "#ffffff" + val colorList = listOf( + CmdClickColorStr.LIGHT_GREEN.str, +// CmdClickColorStr.THICK_AO.str, + CmdClickColorStr.BLUE.str, + CmdClickColorStr.SKERLET.str, + CmdClickColorStr.YELLOW.str, + CmdClickColorStr.WHITE_GREEN.str, + CmdClickColorStr.GREEN.str, + CmdClickColorStr.YELLOW_GREEN.str, + CmdClickColorStr.BLACK_AO.str, + CmdClickColorStr.WATER_BLUE.str, + CmdClickColorStr.PURPLE.str, + CmdClickColorStr.ORANGE.str, + CmdClickColorStr.BROWN.str, + ) + val color1 = colorList.random() + val alreadyColorList: MutableList = mutableListOf() + alreadyColorList.add(color1) + val color2 = let { + if( + !isWhiteBackground + ) return@let whiteColorStr + colorList.filter{ + it != color1 + }.random() + } + alreadyColorList.add(color2) + val color3 = let { + colorList.filter { + !alreadyColorList.contains(it) + }.random() + } + val aoColorStr = "#007F89" + val useTitleColorListSrc = listOf( + color1, + color2, + color3, + ) + val useTitleColorList = useTitleColorListSrc.contains(aoColorStr).let { + isUseAo -> + if( + isUseAo + ) return@let useTitleColorListSrc + val plusAoList = + useTitleColorListSrc.shuffled().take(2) + listOf(aoColorStr) + plusAoList.shuffled() + } + return listOf( + useTitleColorList.get(0), + useTitleColorList.get(1), + whiteColorStr, + useTitleColorList.get(2), + ) // Define your gradient colors + } + + private fun autoHideTitleByYPosi( + promptListView: RecyclerView?, + promptListAdapter: PromptListAdapter, + promptListTitleView: OutlineTextView?, + title: String, + ){ + if( + promptListView == null + || promptListTitleView == null + ) return +// val promptListAdapter = promptListView.adapter as? PromptListAdapter +// promptListAdapter?.prompMapList?.firstOrNull() +// ?: return@launch + val layoutLastIndex = promptListAdapter.prompMapList.lastIndex + promptListView.viewTreeObserver?.addOnGlobalLayoutListener(object : + OnGlobalLayoutListener { + override fun onGlobalLayout() { + val viewTreeObserver = this + CoroutineScope(Dispatchers.Main).launch ajustPosition@ { + withContext(Dispatchers.Main) { + promptListView.viewTreeObserver.removeOnGlobalLayoutListener( + viewTreeObserver + ) + } + val holder = withContext(Dispatchers.IO) { + for (i in 1..10) { + val holderSrc = + promptListView.findViewHolderForAdapterPosition(layoutLastIndex) as? PromptListAdapter.PromptListViewHolder + if( + holderSrc != null + ) return@withContext holderSrc + delay(200) + continue + } + null + } ?: return@ajustPosition + holder.itemView.viewTreeObserver.addOnGlobalLayoutListener(object : + OnGlobalLayoutListener { + override fun onGlobalLayout() { + val listener = this + CoroutineScope(Dispatchers.Main).launch execAjustPosition@ { +// withContext(Dispatchers.IO){ +// delay(200) +// } + withContext(Dispatchers.Main) { + holder.itemView.viewTreeObserver.removeOnGlobalLayoutListener( + listener + ) + } + val windowLocation = withContext(Dispatchers.IO) { + val windowLocationSrc = IntArray(2) + holder.promptListAdapterLinear.getLocationInWindow(windowLocationSrc) + windowLocationSrc + } + + val recyclerLastYPosition = withContext(Dispatchers.IO) { + windowLocation[1] + } + val textY = withContext(Dispatchers.IO) { + promptListTitleView.y + promptListTitleView.measuredHeight + } + if( + recyclerLastYPosition > textY + ) return@execAjustPosition +// Unit.also { +// FileSystems.writeFile( +// File( +// UsePath.cmdclickDefaultAppDirPath, +// "lPosit_dialog00.txt" +// ).absolutePath, +// listOf( +// "promptListView.y: ${promptListView.y}", +// "promptListView.measuredHeight: ${promptListView.measuredHeight}", +// "lastIndex: ${layoutLastIndex}", +// "holder.promptListAdapterTitle.text: ${holder.promptListAdapterTitle.text}", +// "title: ${title}", +// "x :" + windowLocation[0] + " , y : " + windowLocation[1], +// "textY: ${promptListTitleView.y + promptListTitleView.height}" +// ).joinToString("\n") +// ) +// } + + val searchCardView = withContext(Dispatchers.Main) { + promptDialogObj?.findViewById( + R.id.prompt_list_dialog_search_edit_cardview + ) + } +// val searchCardViewVerticalMarginKeyOpenDp = withContext(Dispatchers.IO){ +// context.resources.getDimension( +// R.dimen.prompt_list_dialog_vertical_search_cardview_key_open_margin +// ).toInt() +// } + withContext(Dispatchers.Main) { + promptListView.setAutofillHints(onSystemkeyOpenModeStr) + KeyboardHandler.setToKeyOpen( + promptListTitleView, + promptListView, +// searchCardViewVerticalMarginKeyOpenDp, + searchCardView + ) + } +// FileSystems.writeFile( +// File( +// UsePath.cmdclickDefaultAppDirPath, +// "lPosit_dialog.txt" +// ).absolutePath, +// listOf( +// "title: ${title}", +// "x :" + windowLocation[0] + " , y : " + windowLocation[1], +// "textY: ${promptListTitleView.y + promptListTitleView.height}" +// ).joinToString("\n") +// ) + } + } + }) + } + } + }) + } + +// private suspend fun scrollToBottom( +// promptListView: RecyclerView?, +// promptListAdapter: PromptListAdapter, +// ){ +// delay(200) +// promptListView?.scrollToPosition(promptListAdapter.itemCount - 1) +// } + +// private fun originalDimmEffect( +// imageView: AppCompatImageView? +// ){ +// val goalAlpha = 0.8f +// val loopTimes = 2 +// val plusAlpha = goalAlpha / loopTimes +// imageView?.apply { +// alpha = 0f +// CoroutineScope(Dispatchers.IO).launch { +// for (i in 1..loopTimes) { +// withContext(Dispatchers.IO) { +// delay(200) +// } +// withContext(Dispatchers.Main) { +// alpha += plusAlpha +// } +// } +// } +// } +// } + + private fun makePromptTitle( + promptDialogObj: Dialog?, + titleSrc: String, + firstTitleGradColorsStrList: List, + titleMap: Map?, + ): OutlineTextView? { + val maxLinesInt = titleMap?.get( + PromptTitleKey.maxLines.name + )?.let { + try{ + it.toInt() + } catch (e: Exception){ + null + } + } ?: Integer.MAX_VALUE + val title = when(titleSrc.length <= 3){ + true -> "Select" + else -> titleSrc.trim() + } + return promptDialogObj?.findViewById( + R.id.prompt_list_dialog_list_title + )?.apply { + val titleStr = title.map { + "${it}" + }.joinToString(" ") + val ss1 = SpannableString(titleStr) + ss1.setSpan( + RelativeSizeSpan(2f), + 0, + 1, + 0 + ) + val colors = firstTitleGradColorsStrList.map { + Color.parseColor(it) + }.toIntArray() + val angle = (220..320).random() //45 // Set the gradient angle +// FileSystems.updateFile( +// File(UsePath.cmdclickDefaultAppDirPath, "lgradient.txt").absolutePath, +// listOf( +// "positions: ${positions.map { it }.joinToString("| ")}, angle: ${angle}, color1: ${color1}, color2: ${color2}" +// ).joinToString("\n") +// ) + val gradientSpan = LinearGradientSpan(colors, null, angle) + ss1.setSpan(gradientSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) + val radius = 10f + val dx = 10f + val dy = 10f + val shadowColor = Color.WHITE + val shadowSpan = ShadowSpan(radius, dx, dy, shadowColor) + ss1.setSpan(shadowSpan, 0, 1, Spannable.SPAN_INCLUSIVE_INCLUSIVE) + + text = ss1 + setFillColor(R.color.ao) + setStrokeColor(CmdClickColor.WHITE.id) + outlineWidthSrc = 3 + maxLines = maxLinesInt + viewTreeObserver?.addOnPreDrawListener(object : ViewTreeObserver.OnPreDrawListener { + override fun onPreDraw(): Boolean { + // Remove listener because we don't want this called before _every_ frame + viewTreeObserver?.removeOnPreDrawListener(this) + minHeight = height + lineHeight + (lineHeight * 0.1f).toInt() + return true // true because we don't want to skip this frame + } + }) + } + } + + private object KeyboardHandler { + + fun handle( + terminalFragment: TerminalFragment, + promptDialogObj: Dialog?, + promptListTitleView: AppCompatTextView?, + promptListView: RecyclerView?, + promptExtraMap: Map?, + ){ + val context = terminalFragment.context + ?: return + val searchCardView = promptDialogObj?.findViewById( + R.id.prompt_list_dialog_search_edit_cardview + ) +// val cancelImageView = promptDialogObj?.findViewById( +// R.id.prompt_list_dialog_cancel +// ) +// val okImageView = promptDialogObj?.findViewById( +// R.id.prompt_list_dialog_ok +// ) + val searchCardViewVerticalMarginNormalDp = context.resources.getDimension( + R.dimen.prompt_list_dialog_vertical_search_cardview_margin + ).toInt() +// okImageView?.isVisible = editTextVisible +// val searchCardViewVerticalMarginKeyOpenDp = context.resources.getDimension( +// R.dimen.prompt_list_dialog_vertical_search_cardview_key_open_margin +// ).toInt() + val isKeyOpenMode = promptExtraMap?.get( + PromptExtraKey.onKeyOpenMode.name + ) == switchOn + if(isKeyOpenMode){ + setToKeyOpen( + promptListTitleView, + promptListView, +// searchCardViewVerticalMarginKeyOpenDp, + searchCardView, +// cancelImageView, +// okImageView, + ) + } + CoroutineScope(Dispatchers.Main).launch { + withContext(Dispatchers.IO){ + delay(1000) + } + } + terminalFragment.activity?.let { + KeyboardVisibilityEvent.setEventListener( + it, + terminalFragment.viewLifecycleOwner, + KeyboardVisibilityEventListener { + isOpen -> + if( + !terminalFragment.isVisible + || promptDialogObj?.isShowing != true + ) return@KeyboardVisibilityEventListener + when(isOpen){ + true -> { + setToKeyOpen( + promptListTitleView, + promptListView, +// searchCardViewVerticalMarginKeyOpenDp, + searchCardView, +// cancelImageView, +// okImageView, + ) +// promptListTitleView?.alpha = 0.4f +// val constraintLayout = promptListView?.layoutParams as? ConstraintLayout.LayoutParams +// constraintLayout?.apply { +// topToTop = ConstraintSet.PARENT_ID +// topToBottom = ConstraintLayout.LayoutParams.UNSET +// bottomMargin = searchCardViewVerticalMarginKeyOpenDp +// } +// promptListView?.layoutParams = constraintLayout +// +// val cardConstraintLayout = searchCardView?.layoutParams as? ConstraintLayout.LayoutParams +// cardConstraintLayout?.setMargins( +// cardConstraintLayout.marginStart, +// cardConstraintLayout.topMargin, +// cardConstraintLayout.marginEnd, +// 0 +// ) +// searchCardView?.layoutParams = cardConstraintLayout +// cancelImageView?.isVisible = false +// okImageView?.isVisible = false + + } + else -> { + val systemKeyOpenModeSign = promptListView?.autofillHints?.firstOrNull() ?: String() + if( + isKeyOpenMode + || systemKeyOpenModeSign == onSystemkeyOpenModeStr + ) return@KeyboardVisibilityEventListener + promptListTitleView?.alpha = 1f + val constraintLayout = promptListView?.layoutParams as? ConstraintLayout.LayoutParams + constraintLayout?.apply { + topToTop = ConstraintLayout.LayoutParams.UNSET + topToBottom = R.id.prompt_list_dialog_list_title + bottomMargin = searchCardViewVerticalMarginNormalDp + } + promptListView?.layoutParams = constraintLayout + + val cardConstraintLayout = searchCardView?.layoutParams as? ConstraintLayout.LayoutParams + cardConstraintLayout?.setMargins( + cardConstraintLayout.marginStart, + cardConstraintLayout.topMargin, + cardConstraintLayout.marginEnd, + searchCardViewVerticalMarginNormalDp + ) +// cancelImageView?.isVisible = true +// okImageView?.isVisible = true && editTextVisible + } + } + } + ) + } + } + + fun setToKeyOpen( + promptListTitleView: AppCompatTextView?, + promptListView: RecyclerView?, +// searchCardViewVerticalMarginKeyOpenDp: Int, + searchCardView: MaterialCardView?, + ){ + promptListTitleView?.alpha = 0.4f + val constraintLayout = promptListView?.layoutParams as? ConstraintLayout.LayoutParams + constraintLayout?.apply { + topToTop = ConstraintSet.PARENT_ID + topToBottom = ConstraintLayout.LayoutParams.UNSET +// bottomMargin = searchCardViewVerticalMarginKeyOpenDp + } + promptListView?.layoutParams = constraintLayout + + val cardConstraintLayout = searchCardView?.layoutParams as? ConstraintLayout.LayoutParams + cardConstraintLayout?.setMargins( + cardConstraintLayout.marginStart, + cardConstraintLayout.topMargin, + cardConstraintLayout.marginEnd, + 0 + ) + searchCardView?.layoutParams = cardConstraintLayout + } + } + + + private fun setPromptEditText( + fannelName: String, + setReplaceVariablesMap: Map?, + promptEditText: AppCompatEditText?, + promptListFile: File?, + editTextMap: Map, + promptListView: RecyclerView?, + promptListAdapter: PromptListAdapter, + disableListBind: Boolean, + listLimit: Int?, + ){ + if(promptEditText == null) return + promptEditText.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {} + + override fun afterTextChanged(s: Editable?) { + if( + !promptEditText.hasFocus() + || disableListBind + ) return + val updatePromptList = PromptMapList.makePromptMapList( + fannelName, + setReplaceVariablesMap, + promptListFile, + editTextMap, + promptEditText.text.toString(), + listLimit, + ) + promptListAdapter.prompMapList.clear() + promptListAdapter.prompMapList.addAll(updatePromptList) + promptListAdapter.notifyDataSetChanged() +// CoroutineScope(Dispatchers.Main).launch { +// scrollToBottom( +// promptListView, +// promptListAdapter, +// ) +// } + } + }) + } + + private fun editTextKeyListener( + fannelDirPath: String, + holderLinear: ConstraintLayout?, + bkRelative: RelativeLayout?, + promptListView: RecyclerView?, + promptEditText: AppCompatEditText?, + promptListFile: File?, + listLimit: Int?, + disableUpdate: Boolean, + ){ + val promptListAdapter = promptListView?.adapter as? PromptListAdapter + promptEditText?.setOnKeyListener(object : View.OnKeyListener { + override fun onKey(v: View?, keyCode: Int, event: KeyEvent): Boolean { + if ( + event.action != KeyEvent.ACTION_DOWN + || keyCode != KeyEvent.KEYCODE_ENTER + ) return false + val currentInputEditable = promptEditText.text + if(promptEditText.text.isNullOrEmpty()){ + exitDialog( + fannelDirPath, + holderLinear, + bkRelative, + promptListView, + String(), + null, + promptListFile, + listLimit, + disableUpdate + ) + return false + } + val titleKey = PromptMapList.PromptListKey.TITLE.key + val iconKey = PromptMapList.PromptListKey.ICON.key + val iconStr = promptListAdapter?.prompMapList?.firstOrNull { + lineMap -> + val curTitle = lineMap.get( + titleKey + ) + curTitle == returnValue + }?.get( + iconKey + ) + exitDialog( + fannelDirPath, + holderLinear, + bkRelative, + promptListView, + currentInputEditable.toString(), + iconStr, + promptListFile, + listLimit, + disableUpdate + ) + return false + } + }) + } + + private fun setItemClickListener( + fannelDirPath: String, + holderConstraint: ConstraintLayout?, + bkRelative: RelativeLayout?, + promptListView: RecyclerView?, + promptListAdapter: PromptListAdapter, + promptEditText: AppCompatEditText?, + promptListMap: Map, + promptListFile: File?, + listLimit: Int?, + disableUpdate: Boolean, + ){ + val onInsertByClick = promptListMap.get( + PromptListVars.onInsertByClick.name + ) == switchOn + val onDismissByClick = promptListMap.get( + PromptListVars.onDismissByClick.name + ) == switchOn + promptListAdapter.itemClickListener = object: PromptListAdapter.OnItemClickListener{ + override fun onItemClick(holder: PromptListAdapter.PromptListViewHolder) { + val itemTitle = holder.itemMap.get( + PromptMapList.PromptListKey.TITLE.key + ) ?: return + val itemIconStr = holder.itemMap.get( + PromptMapList.PromptListKey.ICON.key + ) + if(onInsertByClick) { + promptEditText?.setText(itemTitle) + } + if( + !onDismissByClick + ) { + ColdListRegister.register( + fannelDirPath, + promptListFile, + listLimit, + disableUpdate, + itemTitle, + itemIconStr, + ) + promptListAdapter.notifyDataSetChanged() + return + } + exitDialog( + fannelDirPath, + holderConstraint, + bkRelative, + promptListView, + itemTitle, + itemIconStr, + promptListFile, + listLimit, + disableUpdate, + ) + } + } + } + + private fun simpleExitDialog(){ + exitDialog( + String(), + null, + null, + null, + String(), + String(), + null, + null, + true, + ) + } + + private fun exitDialog( + fannelDirPath: String, + holderConstraint: ConstraintLayout?, + bkRelative: RelativeLayout?, + promptListView: RecyclerView?, + returnStr: String, + iconStr: String?, + promptListFile: File?, + listLimit: Int?, + disableUpdate: Boolean, + ){ + promptListView?.layoutManager = null + promptListView?.adapter = null + promptListView?.recycledViewPool?.clear() + promptListView?.removeAllViews() + bkRelative?.removeAllViews() + holderConstraint?.removeAllViews() + returnValue = returnStr + ColdListRegister.register( + fannelDirPath, + promptListFile, + listLimit, + disableUpdate, + returnValue, + iconStr, + ) + promptDialogObj?.dismiss() + promptDialogObj = null + onDialog = false + } + + + private object StatisticsTool { + + const val statisticsName = "statistics" + const val statisticsMapSeparator = ',' + + enum class StatisticsKey( + val key: String + ){ + TITLE("title"), + DATETIME("datetime"), + } + + fun exit(){ + DotBk.exit() + } + + suspend fun displayStatisticsBk( + terminalFragmentRef: WeakReference, + promptDialogObj: Dialog?, + statisticsTitleList: List, + firstTitleGradColorsStrList: List, + isWhiteBackground: Boolean, + ){ +// DotBk.handle( +// terminalFragmentRef, +// promptDialogObj, +// statisticsTitleList, +// fannelDirPath, +// saveTagName, +// isWhiteBackground +// ) +// return + val handleRnd = (1..8).random() + when(true) { + (handleRnd <= 2) -> makeMonocroBk( + terminalFragmentRef, + promptDialogObj, + statisticsTitleList, +// + ) + (handleRnd <= 4) -> makeWebBk( + terminalFragmentRef, + promptDialogObj, + statisticsTitleList, +// + ) + (handleRnd <= 6) -> DotBk.handle( + terminalFragmentRef, + promptDialogObj, + statisticsTitleList, + firstTitleGradColorsStrList, + isWhiteBackground, + ) + else -> makePieBk( + terminalFragmentRef, + promptDialogObj, + statisticsTitleList, + ) + } + } + + private object DotBk { + + + private var imageSetMakeJob: Job? = null + + fun exit(){ + imageSetMakeJob?.cancel() + } + + suspend fun handle( + terminalFragmentRef: WeakReference, + promptDialogObj: Dialog?, + statisticsTitleList: List, + firstTitleGradColorsStrList: List, + isWhiteBackground: Boolean, + ){ + val context = terminalFragmentRef.get()?.context + val imageSetTriple = makeImageSet( + context, + statisticsTitleList, + ) + + setImageSet( + terminalFragmentRef, + promptDialogObj, + imageSetTriple, + firstTitleGradColorsStrList, + isWhiteBackground, + ) + } + + suspend fun setImageSet( + terminalFragmentRef: WeakReference, + promptDialogObj: Dialog?, + imageSetTriple: Triple, Bitmap, List>?, + firstTitleGradColorsStrList: List, + isWhiteBackground: Boolean, + ) { + if( + imageSetTriple == null + ) return + val terminalFragment = + terminalFragmentRef.get() + ?: return + val context = terminalFragment.context + ?: return +// val isAlreadySet = isDotImageCreate( +// fannelDirPath, +// saveTagName, +// ) +// val statisticsDotImageDirPath = getStatisticsDotImageDir( +// fannelDirPath, +// saveTagName +// ).absolutePath + val firstDotStormBitmapList = imageSetTriple.first +// when (isAlreadySet) { +// false -> PromptListImageSet.firstDotStormImagePathList.map { +// AssetsFileManager.assetsByteArray( +// context, +// it +// )?.let { +// BitmapFactory.decodeByteArray( +// it, +// 0, +// it.size +// ) +// } +// } + +// else -> PromptListImageSet.getFirstDotStormPathList( +// statisticsDotImageDirPath +// ).map { +// BitmapTool.convertFileToBitmap( +// it +// ) +// } +// } + val mainImageBitmap = imageSetTriple.second +// when (isAlreadySet) { +// false -> +// AssetsFileManager.assetsByteArray( +// context, +// PromptListImageSet.mainImagePath +// )?.let { +// BitmapFactory.decodeByteArray( +// it, +// 0, +// it.size +// ) +// } +// +// else -> PromptListImageSet.getMainImagePath( +// statisticsDotImageDirPath +// ).let { +// BitmapTool.convertFileToBitmap( +// it +// ) +// } +// } + val strImageBitmapList = imageSetTriple.third +// when (isAlreadySet) { +// false -> PromptListImageSet.strImagePathList.map { +// AssetsFileManager.assetsByteArray( +// context, +// it +// )?.let { +// BitmapFactory.decodeByteArray( +// it, +// 0, +// it.size +// ) +// } +// } +// +// else -> PromptListImageSet.getStrImagePathList( +// statisticsDotImageDirPath +// ).map { +// BitmapTool.convertFileToBitmap( +// it +// ) +// } +// } + + val imageColorStrList = listOf( + CmdClickColorStr.LIGHT_GREEN.str, + CmdClickColorStr.ANDROID_GREEN.str, + CmdClickColorStr.YELLOW_GREEN.str, + CmdClickColorStr.GREEN.str, +// CmdClickColorStr.THICK_GREEN.str, + CmdClickColorStr.DARK_GREEN.str, +// CmdClickColorStr.GOLD_YELLOW.str, + CmdClickColorStr.WATER_BLUE.str, +// CmdClickColorStr.THICK_AO.str, +// CmdClickColorStr.BLACK_AO.str, + CmdClickColorStr.BLUE.str, + CmdClickColorStr.BLUE_DARK_PURPLE.str, + CmdClickColorStr.NAVY.str, + CmdClickColorStr.PURPLE.str, + CmdClickColorStr.ORANGE.str, +// CmdClickColorStr.BROWN.str, +// CmdClickColorStr.DARK_BROWN.str, +// CmdClickColorStr.YELLOW.str, +// CmdClickColorStr.SKERLET.str, + "#000000", +// "#ffffff", + CmdClickColorStr.SKERLET.str, + ) + val darkColorList = listOf( + CmdClickColorStr.ANDROID_GREEN.str, + CmdClickColorStr.YELLOW_GREEN.str, + CmdClickColorStr.GREEN.str, +// CmdClickColorStr.THICK_GREEN.str, + CmdClickColorStr.DARK_GREEN.str, +// CmdClickColorStr.GOLD_YELLOW.str, +// CmdClickColorStr.THICK_AO.str, +// CmdClickColorStr.BLACK_AO.str, + CmdClickColorStr.BLUE.str, + CmdClickColorStr.BLUE_DARK_PURPLE.str, + CmdClickColorStr.NAVY.str, + CmdClickColorStr.PURPLE.str, +// CmdClickColorStr.BROWN.str, +// CmdClickColorStr.DARK_BROWN.str, + "#000000", + ) + val dotStormColorListForWhiteBackground = listOf( + CmdClickColorStr.GREEN.str, +// CmdClickColorStr.THICK_GREEN.str, + CmdClickColorStr.DARK_GREEN.str, +// CmdClickColorStr.GOLD_YELLOW.str, + CmdClickColorStr.THICK_AO.str, +// CmdClickColorStr.BLACK_AO.str, + CmdClickColorStr.BLUE.str, + CmdClickColorStr.BLUE_DARK_PURPLE.str, + CmdClickColorStr.NAVY.str, + CmdClickColorStr.PURPLE.str, + CmdClickColorStr.ORANGE.str, + CmdClickColorStr.BROWN.str, + CmdClickColorStr.DARK_BROWN.str, + CmdClickColorStr.SKERLET.str, + "#000000", + ) + val frontBkImageColorStr = when(isWhiteBackground) { + true -> dotStormColorListForWhiteBackground + // darkColorList.random() + else -> imageColorStrList + }.let { + frontBkImageColorStrListSrc -> + filterByFirstGradColorList( + frontBkImageColorStrListSrc, + firstTitleGradColorsStrList + ) + }.random() + val isLightColorToBack = darkColorList.contains(frontBkImageColorStr) + val backBkImageColorStr = imageColorStrList.filter { + if (isLightColorToBack) { + return@filter !darkColorList.contains(it) + } + true + }.filter { + it != frontBkImageColorStr + }.let { + colorStrList -> + filterByFirstGradColorList( + colorStrList, + firstTitleGradColorsStrList + ) + }.random() + promptDialogObj?.findViewById( + R.id.prompt_list_dialog_list_extra_fore_container + )?.apply { + val goalMinusAlpha = 1f + val loopTimes = 5 + val minusAlpha = goalMinusAlpha / loopTimes + alpha = 1f + isVisible = true + CoroutineScope(Dispatchers.IO).launch { + withContext(Dispatchers.IO){ + delay(200) + } + for (i in 1..loopTimes) { + withContext(Dispatchers.IO) { + delay(50) + } + withContext(Dispatchers.Main) { + alpha -= minusAlpha + } + } + } + } + val forImageViewBitmapToResIdList = listOf( + firstDotStormBitmapList[0] to R.id.prompt_list_dialog_list_extra_bk_fore_image3, + firstDotStormBitmapList[1] to R.id.prompt_list_dialog_list_extra_bk_fore_image2, + ) + forImageViewBitmapToResIdList.forEachIndexed { index, bitmapToResId -> + val bitmap = bitmapToResId.first + val imageViewId = bitmapToResId.second + promptDialogObj?.findViewById( + imageViewId + )?.apply { + setColorFilter( + Color.parseColor(frontBkImageColorStr) + ) + setImageBitmap(bitmap) + isVisible = true + val duration = when (index) { + 0 -> 200L + 1 -> 700L + else -> 700L + } + YoYo.with(Techniques.FadeOut) + .duration(duration) + .repeat(0) + .playOn(this@apply) + } + } + promptDialogObj?.findViewById( + R.id.prompt_list_dialog_list_bk_extra_back_image1 + )?.apply { + imageTintList = null + setColorFilter( + Color.parseColor(backBkImageColorStr) + ) + scaleType = ImageView.ScaleType.FIT_XY + isVisible = true + setImageBitmap( + mainImageBitmap + ) + } + promptDialogObj?.findViewById( + R.id.prompt_list_dialog_list_bk_extra_back_image2 + )?.apply { + imageTintList = null + setColorFilter( + Color.parseColor(frontBkImageColorStr) + ) + scaleType = ImageView.ScaleType.FIT_XY + isVisible = true + val animationDrawable = AnimationDrawable() + strImageBitmapList.forEach { + animationDrawable.addFrame( + BitmapDrawable(context.resources, it), + 600 + ) + } + animationDrawable.isOneShot = false + setImageDrawable(animationDrawable) + animationDrawable.start() + } + promptDialogObj?.findViewById( + R.id.prompt_list_dialog_list_extra_bk_container + )?.apply { + isVisible = true + val loopTimes = 2 + CoroutineScope(Dispatchers.IO).launch { + for (i in 1..loopTimes) { + withContext(Dispatchers.IO) { + delay(100) + } + withContext(Dispatchers.Main) { + val plusAlpha = when(i){ + 1 -> 0.2f + else -> 0.3f + } + alpha += plusAlpha + } + } + } + } + } + + private fun filterByFirstGradColorList( + colorStrList: List, + firstTitleGradColorsStrList: List + ): List { + val filteredFirstTitleGradColorsStrList = colorStrList.filter { + firstTitleGradColorsStrList.contains(it) + } + if( + filteredFirstTitleGradColorsStrList.isNotEmpty() + ) return filteredFirstTitleGradColorsStrList + return colorStrList + } + + suspend fun makeImageSet( + context: Context?, + statisticsTitleList: List, + ): Triple< + List, + Bitmap, + List, + >? { + if( + context == null + ) return null + val decentTextToFreqList = statisticsTitleList.groupBy { it } + .mapValues { it.value.size } + .filterKeys { !it.isNullOrEmpty() } + .toList() + .sortedByDescending { (_, value) -> value } + val frequencyMapList = + decentTextToFreqList.toMap() + val textList = frequencyMapList.map { freqMap -> + val text = freqMap.key + ?: return@map emptyList() + val freq = freqMap.value + (0..freq).map { text } + }.flatten() + + val cutPeaceLength = 32 + val srcOneSide = cutPeaceLength * 8 + val curRepeatNum = let { + val baseRepeatNum = 2500 + val baseCutPeace = 32f + (baseRepeatNum * cutPeaceLength * 2.5) / baseCutPeace + } + val textBitmapList = (1..10).map { + textList.random() + }.joinToString(" ").let { titlesTextSrc -> + val repeatNum = (curRepeatNum / titlesTextSrc.length).toInt() + titlesTextSrc.repeat(repeatNum) + }.let { titlesText -> + val srcTextBitmapSideLength = + (srcOneSide * 1.1).toFloat() + val concurrencyLimitForMakeTextBitmap = 3 + val semaphoreForMakeTextBitmap = Semaphore(concurrencyLimitForMakeTextBitmap) + val channelForMakeTextBitmap = + Channel>(concurrencyLimitForMakeTextBitmap) + val indexToTextBitmapList: MutableList> = mutableListOf() + withContext(Dispatchers.IO) { + val jobList = (1..concurrencyLimitForMakeTextBitmap).map { index -> + async { + semaphoreForMakeTextBitmap.withPermit { + val textBitmap = BitmapTool.DrawText.drawTextToBitmapByRandom( + titlesText, + srcTextBitmapSideLength, + srcTextBitmapSideLength, + (8..10).random().toFloat(), +// (15..20).random().toFloat(), + Color.BLACK + ).let { + ImageTransformer.cutCenter2( + it, + srcOneSide, + srcOneSide + ) + } + channelForMakeTextBitmap.send(Pair(index, textBitmap)) + } + } + } + jobList.forEach { it.await() } + channelForMakeTextBitmap.close() + for (indexToBitmap in channelForMakeTextBitmap) { + indexToTextBitmapList.add(indexToBitmap) + } + indexToTextBitmapList.sortBy { it.first } + indexToTextBitmapList.map { + it.second + }.let { + it + it[1] + } + } + } + + val textBitmapListToMaskSquare = makeDrawableBitmapListToMaskSquare( + textBitmapList, + srcOneSide, + cutPeaceLength + ) + val firstDotStormBitmapList = textBitmapListToMaskSquare.first + val maskSquare = textBitmapListToMaskSquare.second + ?: return null + val padding = srcOneSide * 0.2 + val marginOneSide = (srcOneSide - padding).toInt() + val useFannelIconList = listOf( + FannelIcons.CORSAIR, + FannelIcons.SKULL, + FannelIcons.SKULL_HORIZON, + + ) + val noUseFannelIconList = listOf( + FannelIcons.JANOMITI2 + ) + val fannelIcon = FannelIcons.entries.filter { + !noUseFannelIconList.contains(it) + }.random() + //useFannelIconList.random() + val ordinalySizeIconList = listOf( + FannelIcons.CROCODILE, + FannelIcons.LABRADOR, + FannelIcons.JANOMITI, + FannelIcons.JANOMITI2, + FannelIcons.CHECKER, + ) + val srcMainImageDrawable = AppCompatResources.getDrawable( + context, + fannelIcon.id + ) ?: return null + val srcMainImageBitmap = when( + ordinalySizeIconList.contains(fannelIcon) + ) { + true -> srcMainImageDrawable.toBitmap( + srcOneSide, + srcOneSide + ) + else -> { + val srcMainImageBitmapWithMargin = srcMainImageDrawable.toBitmap( + marginOneSide, + marginOneSide + ) + ImageTransformer.addPadding( + srcMainImageBitmapWithMargin, + padding.toInt(), + padding.toInt() + ).let { + BitmapTool.resizeByMaxHeight( + it, + srcOneSide.toDouble() + ) + } + } + } +// .let { +// when( +// (1..3).random() % 2 == 0 +// ){ +// true -> { +// ImageTransformer.exchangeTransparentToBlack( +// it +// ) +// } +// else -> it +// } +// } + val mainImageBitmap = let { + val reversedSquareBitmap = ImageTransformer.exchangeTransparentToBlack( + maskSquare, + ) + val maskedMainImageBitmap = ImageTransformer.maskImageByTransparent( + srcMainImageBitmap, + reversedSquareBitmap, + ) + maskedMainImageBitmap + } + val concurrencyLimitForCenterImage = textBitmapList.size + val semaphoreForTextBk = Semaphore(10) + val channelForTextBk = Channel>(concurrencyLimitForCenterImage) + val indexToTextBkBitmapList: MutableList> = mutableListOf() + val shrinkNumb = 10 //(0..7).random() + val strImageBitmapList = + withContext(Dispatchers.IO) { + val jobList = textBitmapList.mapIndexed { index, textBitmap -> + async { + semaphoreForTextBk.withPermit { + if ( + textBitmap == null + ) return@withPermit null + val textBkBitmap = + ImageTransformer.maskImageByTransparent( + textBitmap, + srcMainImageBitmap, + ).let { drawableBitmap -> + val shrinkOneSideLength = srcOneSide - shrinkNumb + ImageTransformer.cutCenter2( + drawableBitmap, + shrinkOneSideLength, + shrinkOneSideLength, + ) + } + channelForTextBk.send(Pair(index, textBkBitmap)) + } + } + } + jobList.forEach { it.await() } + channelForTextBk.close() + for (indexToBitmap in channelForTextBk) { + indexToTextBkBitmapList.add(indexToBitmap) + } + indexToTextBkBitmapList.sortBy { it.first } + indexToTextBkBitmapList.map { + it.second + } + } + return Triple( + firstDotStormBitmapList, + mainImageBitmap, + strImageBitmapList + ) + } + + private suspend fun makeDrawableBitmapListToMaskSquare( + textBitmapList: List, + srcOneSide: Int, + peaceLength: Int, + ): Pair, Bitmap?> { + val textBitmapListSize = textBitmapList.size + val startX = 4 + val endX = 10 + val ajustNum = 2 + val concurrencyLimit = textBitmapListSize + val semaphore = Semaphore(concurrencyLimit) + val channelForSquareList = Channel>(textBitmapListSize) + val maskIndexToSquareList: MutableList> = mutableListOf() + withContext(Dispatchers.IO) { +// (1..textBitmapListSize) + val jobList = listOf(2, 3).map { order -> + async { + semaphore.withPermit { + val incline = ((endX - startX) / textBitmapListSize.toFloat()) + val currentRndEnd = (endX - incline * order).toInt() - ajustNum + val rndList = (1..currentRndEnd) + val maskSquare = BitmapTool.DotArt.maskSquareMaker( + srcOneSide, + peaceLength, + rndList, + 2 + ) + channelForSquareList.send(Pair(order, maskSquare)) + } + } + } + jobList.forEach { it.await() } + channelForSquareList.close() + for(indexToBitmap in channelForSquareList){ + maskIndexToSquareList.add(indexToBitmap) + } + } + maskIndexToSquareList.sortBy { + val index = it.first + index + } + val maskSquareList = maskIndexToSquareList.map { + val bitmap = it.second + bitmap + } +// .take(4).let { +// listOf( +// it[1], +// it[2], +// ) +// } +// FileSystems.updateFile( +// File(UsePath.cmdclickDefaultAppDirPath, "lmaskSquareList0.txt").absolutePath, +// listOf( +// "LocalDateTime: ${LocalDateTime.now()}", +// "srcOneSide: ${srcOneSide}", +// "peaceLength: ${peaceLength}", +// "maskSquareListSize: ${maskSquareList.size}", +// "isNull:: ${maskSquareList.any { +// it == null } +// }", +// ).joinToString("\n") +// ) + val concurrencyLimitForMask = maskSquareList.size + val semaphoreForMask = Semaphore(concurrencyLimitForMask) + val channelForMask = Channel>(concurrencyLimitForMask) + val indexToMaskTextList: MutableList> = mutableListOf() + val maskTextList = withContext(Dispatchers.IO) { + val jobList = maskSquareList.mapIndexed { index, maskSquareSrc -> + if ( + maskSquareSrc == null + ) return@mapIndexed null + async { + semaphoreForMask.withPermit { + val curTextBitmap = textBitmapList.getOrNull(index) + ?: return@withPermit + val maskedBitmap1 = ImageTransformer.maskImageByTransparent( + curTextBitmap, + maskSquareSrc, + ) + channelForMask.send(Pair(index, maskedBitmap1)) + } + } + } + jobList.forEach { it?.await() } + channelForMask.close() + for(indexToBitmap in channelForMask){ + indexToMaskTextList.add(indexToBitmap) + } + indexToMaskTextList.sortBy { it.first } + indexToMaskTextList.map { + it.second + } + } + return maskTextList to maskSquareList.last() + } + } + + private suspend fun makeMonocroBk( + terminalFragmentRef: WeakReference, + promptDialogObj: Dialog?, + statisticsTitleList: List, + ){ + val context = terminalFragmentRef.get()?.context + ?: return + withContext(Dispatchers.IO){ + //chartのコンポーネントを取得 + val bkRelative = promptDialogObj?.findViewById( + R.id.prompt_list_dialog_bk_relative + ) ?: return@withContext + + val dialogMargin = 200 + val screenHeightInt = withContext(Dispatchers.IO) screenHeightInt@ { + for(i in 1..5) { + val measuredHeight = withContext(Dispatchers.Main){ + bkRelative.measuredHeight + } + val screenHeightIntSrc = measuredHeight - dialogMargin + if(screenHeightIntSrc <= 0) { + delay(100) + continue + } + return@screenHeightInt screenHeightIntSrc + } + 0 + }.let { + if(it <= 0) return@withContext + it + } + val screenWidthInt = withContext(Dispatchers.IO) screenWidthInt@ { + for(i in 1..5) { + val measuredWidth = withContext(Dispatchers.Main){ + bkRelative.measuredWidth + } + val screenWidthIntSrc = measuredWidth - dialogMargin + if(screenWidthIntSrc <= 0) { + delay(100) + continue + } + return@screenWidthInt screenWidthIntSrc + } + 0 + }.let { + if(it <= 0) return@withContext + it + } + val decentTextToFreqList = statisticsTitleList.groupBy { it } + .mapValues { it.value.size } + .filterKeys { !it.isNullOrEmpty() } + .toList() + .sortedByDescending { (_, value) -> value } + val frequencyMapList = + decentTextToFreqList.toMap() + val decentTextList = decentTextToFreqList.map { + it.first + }.filter { + !it.isNullOrEmpty() + } + val textList = frequencyMapList.map { + freqMap -> + val text = freqMap.key + ?: return@map emptyList() + val freq = freqMap.value + (0..freq).map { text } + }.flatten() + val screenWidth = screenWidthInt + 500 + val oneSideLengthDiff = (screenWidth) / decentTextList.size + val textToOneSideLengthMap = decentTextList.mapIndexed { + index, text -> + val startInt = screenWidth - oneSideLengthDiff * (index + 1) + val endInt = screenWidth - oneSideLengthDiff * index + text to (startInt..endInt) + }.toMap() + val rotateAngleRndList = (-270..270) + val alphaRndList = (100..300) +// (100..400) + val repeatTimes = (7..10).random() + val textSizeEnd = 11 + val textSizeDiff = textSizeEnd / decentTextList.size + val textToFloatMap = decentTextList.mapIndexed { + index, text -> + text to (textSizeEnd - textSizeDiff * index).toFloat() + }.toMap() + + val fixRotationAngle = rotateAngleRndList.random().toFloat() + + val colorIntArray = listOf( + CmdClickColorStr.DARK_GREEN.str, + CmdClickColorStr.DARK_GREEN.str + ).map { + Color.parseColor(it) + }.toIntArray() + val bitmap = BitmapTool.GradientBitmap.makeGradientBitmap2( + 100, + 100, + colorIntArray, + BitmapTool.GradientBitmap.GradOrient.BOTH + ) + val requestBuilder: RequestBuilder = + Glide.with(context) + .asDrawable() + .sizeMultiplier(0.1f) + (0..repeatTimes).forEachIndexed { + index, _ -> + withContext(Dispatchers.Main) createText@{ + val inflater = LayoutInflater.from(context) + val buttonLayout = inflater.inflate( + R.layout.prompt_list_bk_another_component, + null + ) as FrameLayout + val curText = textList.shuffled().first() + buttonLayout.apply { + val oneSideLength = try { + textToOneSideLengthMap.get(curText)?.random() + } catch (e: Exception){ null } ?: screenWidthInt +// oneSideLengthRndList.random() + val relativeParam = RelativeLayout.LayoutParams( + oneSideLength, + oneSideLength, + ) + layoutParams = relativeParam + alpha = alphaRndList.random().toFloat() / 1000 + rotation = fixRotationAngle + val putXyPair = let { + var putXyPairSrc: Pair = Pair(0f, 0f) + for(i in 1..5 ){ + putXyPairSrc = Pair( + (-oneSideLength..screenWidthInt).random().toFloat(), + (-oneSideLength..screenHeightInt).random().toFloat() + ) + val isBottomLeft = putXyPairSrc.first > (screenWidthInt / 2) + || putXyPairSrc.second > screenHeightInt / 2 + if( + !isBottomLeft + ) return@let putXyPairSrc + if ( + (1..3).random() == 1 + ) return@let putXyPairSrc + } + putXyPairSrc + } + x = putXyPair.first + y = putXyPair.second + } + bkRelative.addView(buttonLayout) + + CoroutineScope(Dispatchers.Main).launch { + val textView = + buttonLayout.findViewById(R.id.prompt_list_bk_another_caption) + + textView.apply { + text = curText + typeface = Typeface.DEFAULT + textToFloatMap.get(curText)?.let { + textSize = it + } + } + + buttonLayout.findViewById(R.id.prompt_list_bk_another_layout_image) + .apply { + imageTintList = AppCompatResources.getColorStateList( + context, + R.color.black + ) + setImageBitmap(bitmap) + + Glide + .with(context) + .load(bitmap) + .transition(DrawableTransitionOptions.withCrossFade()) + .skipMemoryCache(true) + .diskCacheStrategy(DiskCacheStrategy.NONE) + .thumbnail(requestBuilder) + .into(this) + } + } + } + } + withContext(Dispatchers.Main) { +// delay(200) + val iconId = FannelIcons.entries.map { it.id }.shuffled().first() + val shuujiImage = AppCompatImageView(context).apply { + val relativeParam = FrameLayout.LayoutParams( + FrameLayout.LayoutParams.MATCH_PARENT, + FrameLayout.LayoutParams.MATCH_PARENT, + ).apply { + bottomMargin = 2 + leftMargin = 2 + } + layoutParams = relativeParam + imageTintList = AppCompatResources.getColorStateList(context, R.color.black) + setImageResource(iconId) + scaleType = ImageView.ScaleType.FIT_XY + alpha = 1f + } + val shuujiImageWhiteShadow2 = AppCompatImageView(context).apply { + val relativeParam = FrameLayout.LayoutParams( + FrameLayout.LayoutParams.MATCH_PARENT, + FrameLayout.LayoutParams.MATCH_PARENT, + ).apply { + bottomMargin = 0 + leftMargin = 0 + } + layoutParams = relativeParam + imageTintList = + AppCompatResources.getColorStateList(context, R.color.white) + setImageResource(iconId) + scaleType = ImageView.ScaleType.FIT_XY + alpha = 1f + } + val shuujiImageWhiteShadow3 = AppCompatImageView(context).apply { + val relativeParam = FrameLayout.LayoutParams( + FrameLayout.LayoutParams.MATCH_PARENT, + FrameLayout.LayoutParams.MATCH_PARENT, + ).apply { + bottomMargin = 4 + leftMargin = 4 + } + layoutParams = relativeParam + imageTintList = + AppCompatResources.getColorStateList(context, R.color.white) + setImageResource(iconId) + scaleType = ImageView.ScaleType.FIT_XY + alpha = 1f + } + val bkFrameLayout = FrameLayout(context).apply { + val relativeParam = RelativeLayout.LayoutParams( + (screenWidthInt * 3) / 4, + (screenHeightInt * 3) / 4, + ).apply { + addRule(RelativeLayout.ALIGN_PARENT_BOTTOM) + addRule(RelativeLayout.ALIGN_PARENT_END) + } + layoutParams = relativeParam + alpha = 0.7f + } + bkFrameLayout.addView(shuujiImageWhiteShadow2) + bkFrameLayout.addView(shuujiImageWhiteShadow3) + bkFrameLayout.addView(shuujiImage) +// delay(100) + bkRelative.addView(bkFrameLayout) + } + + } + } + + private suspend fun makeWebBk( + terminalFragmentRef: WeakReference, + promptDialogObj: Dialog?, + statisticsTitleList: List, + ){ + val context = terminalFragmentRef.get()?.context + ?: return + withContext(Dispatchers.IO){ + //chartのコンポーネントを取得 + val bkRelative = promptDialogObj?.findViewById( + R.id.prompt_list_dialog_bk_relative + ) ?: return@withContext + + val dialogMargin = 200 + val screenHeightInt = withContext(Dispatchers.IO) screenHeightInt@ { + for(i in 1..5) { + val measuredHeight = withContext(Dispatchers.Main){ + bkRelative.measuredHeight + } + val screenHeightIntSrc = measuredHeight - dialogMargin + if(screenHeightIntSrc <= 0) { + delay(100) + continue + } + return@screenHeightInt screenHeightIntSrc + } + 0 + }.let { + if(it <= 0) return@withContext + it + } + val screenWidthInt = + withContext(Dispatchers.IO) screenWidthInt@ { + for(i in 1..5) { + val measuredWidth = withContext(Dispatchers.Main){ + bkRelative.measuredWidth + } + val screenWidthIntSrc = measuredWidth - dialogMargin + if(screenWidthIntSrc <= 0) { + delay(100) + continue + } + return@screenWidthInt screenWidthIntSrc + } + 0 + }.let { + if(it <= 0) return@withContext + it + } + val decentTextToFreqList = statisticsTitleList.groupBy { it } + .mapValues { it.value.size } + .filterKeys { !it.isNullOrEmpty() } + .toList() + .sortedByDescending { (_, value) -> value } + val frequencyMapList = + decentTextToFreqList.toMap() + val decentTextList = decentTextToFreqList.map { + it.first + }.filter { + !it.isNullOrEmpty() + } + val textList = frequencyMapList.map { + freqMap -> + val text = freqMap.key + ?: return@map emptyList() + val freq = freqMap.value + (0..freq).map { text } + }.flatten() + + val srcColorList = listOf( + CmdClickColorStr.LIGHT_GREEN, + CmdClickColorStr.WHITE_GREEN, + CmdClickColorStr.ANDROID_GREEN, + CmdClickColorStr.YELLOW_GREEN, + CmdClickColorStr.GREEN, +// CmdClickColorStr.THICK_GREEN, +// CmdClickColorStr.DARK_GREEN, +// CmdClickColorStr.CARKI, +// CmdClickColorStr.GOLD_YELLOW, + CmdClickColorStr.WATER_BLUE, + CmdClickColorStr.WHITE_BLUE, +// CmdClickColorStr.THICK_AO, +// CmdClickColorStr.BLACK_AO, + CmdClickColorStr.BLUE, + CmdClickColorStr.WHITE_BLUE_PURPLE, +// CmdClickColorStr.BLUE_DARK_PURPLE, +// CmdClickColorStr.NAVY, + CmdClickColorStr.PURPLE, + CmdClickColorStr.ORANGE, +// CmdClickColorStr.BROWN, +// CmdClickColorStr.DARK_BROWN, + CmdClickColorStr.YELLOW, + CmdClickColorStr.SKERLET, + ) + val colorStrList = srcColorList.map { + it.str + } + val colorIdList = CmdClickColor.entries.map { + it.id + } + val textColorIdMap = frequencyMapList.map { + val text = it.key ?: String() + val colorId = colorIdList.shuffled().first() + text to colorId + }.filter { + it.first.isNotEmpty() + }.toMap() + val capturePartPngDirPathList = ButtonImageCreator.makeCapturePartPngDirPathList() + val colorStr = colorStrList.random() + val colorIntArray = listOf( + colorStr, + colorStr, + ).map { + Color.parseColor(it) + }.toIntArray() + val defaultBkBitmap = BitmapTool.GradientBitmap.makeGradientBitmap2( + 300, + 600, + colorIntArray, + BitmapTool.GradientBitmap.GradOrient.BOTH + ) + + val textSrcBkBitmapMap = frequencyMapList.map { + val text = it.key ?: String() + val capturePngPath = capturePartPngDirPathList.shuffled().firstOrNull()?.let { dirPath -> + if ( + dirPath.isEmpty() + ) return@let null + FileSystems.sortedFiles(dirPath).shuffled().firstOrNull() + ?.let fileList@{ + if ( + it.isEmpty() + ) return@fileList null + File(dirPath, it).absolutePath + } + } + if(capturePngPath.isNullOrEmpty()) return@map text to defaultBkBitmap + val srcBitmap = BitmapTool.convertFileToBitmap(capturePngPath) + ?: return@map text to defaultBkBitmap + text to srcBitmap + }.filter { + it.first.isNotEmpty() + }.toMap() + val bitmapCutWidth = 100 + val textBkBitmapMap = textSrcBkBitmapMap.map { + val text = it.key + val srcBitmap = it.value + + val cutBitmap = BitmapTool.ImageTransformer.cut( + srcBitmap, + bitmapCutWidth, + (bitmapCutWidth * 1.73).toInt() + ) + text to cutBitmap + }.filter { + it.first.isNotEmpty() + }.toMap() + val screenWidth = (10 * screenWidthInt) / 10 + 500 + val oneSideLengthDiff = (screenWidth) / decentTextList.size + val textToOneSideLengthMap = decentTextList.mapIndexed { + index, text -> + val startInt = screenWidth - oneSideLengthDiff * (index + 1) + val endInt = screenWidth - oneSideLengthDiff * index + text to (startInt..endInt) + }.toMap() + val rotateAngleRndList = (-270..270) + val alphaRndList = (100..300) + //(100..400) + val repeatTimes = (5..10).random() + val textSizeEnd = 30 + val textSizeDiff = textSizeEnd / decentTextList.size + val textToFloatMap = decentTextList.mapIndexed { + index, text -> + text to (textSizeEnd - textSizeDiff * index).toFloat() + }.toMap() + val fixRotationAngle = rotateAngleRndList.random().toFloat() + + + val requestBuilder: RequestBuilder = + Glide.with(context) + .asDrawable() + .sizeMultiplier(0.1f) + val plusRotateListSrc = listOf(-90f, 0f, 90f) + val plusRotateList = when((1..3).random() == 3) { + false -> listOf(plusRotateListSrc.random()) + else -> plusRotateListSrc + } + (0..repeatTimes).forEachIndexed { + index, _ -> + withContext(Dispatchers.Main) createText@{ + val inflater = LayoutInflater.from(context) + val buttonLayout = inflater.inflate( + R.layout.web_bk_image_caption_layout, + null + ) as FrameLayout + val curText = textList.shuffled().first() + buttonLayout.apply { + val scaleWidth = try { + textToOneSideLengthMap.get(curText)?.random() + } catch (e: Exception){ null } ?: screenWidthInt + val scaleHeight = (scaleWidth * 1.73).toInt() + val relativeParam = RelativeLayout.LayoutParams( + scaleWidth, + scaleHeight, + ) + layoutParams = relativeParam + alpha = alphaRndList.random().toFloat() / 1000 + rotation = fixRotationAngle + plusRotateList.random() + val putXyPair = let { + var putXyPairSrc: Pair = Pair(0f, 0f) + val shrinkRate = 10 + for(i in 1..5 ){ + putXyPairSrc = Pair( + (-( shrinkRate * scaleWidth) / 10..(10 * screenWidthInt) / 10).random().toFloat(), + (-(shrinkRate * scaleHeight) / 10..(10 * screenHeightInt) / 10).random().toFloat() + ) + val isBottomLeft = putXyPairSrc.first > (screenWidthInt / 2) + || putXyPairSrc.second > screenHeightInt / 2 + if( + !isBottomLeft + ) return@let putXyPairSrc + if ( + (1..3).random() == 1 + ) return@let putXyPairSrc + } + putXyPairSrc + } + x = putXyPair.first + y = putXyPair.second + } + bkRelative.addView(buttonLayout) + + CoroutineScope(Dispatchers.Main).launch { + val textView = + buttonLayout.findViewById(R.id.web_bk_image_caption_layout_caption) + + textView.apply { + text = curText + typeface = Typeface.DEFAULT + textColorIdMap.get(curText)?.let { + setFillColor(it) + } + setStrokeColor(R.color.black) + textToFloatMap.get(curText)?.let { + textSize = it + } + } + + buttonLayout.findViewById(R.id.web_bk_image_caption_layout_image) + .apply { + imageTintList = null + val isAnime = (1..3).random() == 3 + if(!isAnime) { + val bkBitmap = + textBkBitmapMap.get(curText) ?: defaultBkBitmap + + Glide + .with(context) + .load(bkBitmap) + .transition(DrawableTransitionOptions.withCrossFade()) + .skipMemoryCache(true) + .diskCacheStrategy(DiskCacheStrategy.NONE) + .thumbnail(requestBuilder) + .into(this) + return@apply + } + val srcBkBitmap = + textSrcBkBitmapMap.get(curText) ?: defaultBkBitmap + val animationDrawable = AnimationDrawable() + val cutHeight = (bitmapCutWidth * 1.73).toInt() + val bitmapList = (1..3).map { + BitmapTool.ImageTransformer.cut( + srcBkBitmap, + bitmapCutWidth, + cutHeight + ) + } + val delay = (800..900).random() + bitmapList.forEach { + animationDrawable.addFrame( + BitmapDrawable(context.resources, it), + delay + ) + } + animationDrawable.isOneShot = false + setImageDrawable(animationDrawable) + animationDrawable.start() + } + } + } + } + } + } + + + private suspend fun makePieBk( + terminalFragmentRef: WeakReference, + promptDialogObj: Dialog?, + statisticsTitleList: List, + ){ + val context = terminalFragmentRef.get()?.context + ?: return + withContext(Dispatchers.IO){ + //chartのコンポーネントを取得 + val bkRelative = promptDialogObj?.findViewById( + R.id.prompt_list_dialog_bk_relative + ) ?: return@withContext + + val dialogMargin = 200 + val screenHeightInt = withContext(Dispatchers.IO) screenHeightInt@ { + for(i in 1..5) { + val measuredHeight = withContext(Dispatchers.Main){ + bkRelative.measuredHeight + } + val screenHeightIntSrc = measuredHeight - dialogMargin + if(screenHeightIntSrc <= 0) { + delay(100) + continue + } + return@screenHeightInt screenHeightIntSrc + } + 0 + }.let { + if(it <= 0) return@withContext + it + } + val screenWidthInt = withContext(Dispatchers.IO) screenWidthInt@ { + for(i in 1..5) { + val measuredWidth = withContext(Dispatchers.Main){ + bkRelative.measuredWidth + } + val screenWidthIntSrc = measuredWidth - dialogMargin + if(screenWidthIntSrc <= 0) { + delay(100) + continue + } + return@screenWidthInt screenWidthIntSrc + } + 0 + }.let { + if(it <= 0) return@withContext + it + } + + val frequencyMapList = statisticsTitleList.groupBy { it } + .mapValues { it.value.size } + .filterKeys { !it.isNullOrEmpty() } + .toList() + .sortedByDescending { (_, value) -> value } + .toMap() + +//表示する色を設定 + val value: ArrayList = ArrayList() + frequencyMapList.forEach { frequencyMap -> + value.add( + PieEntry( + frequencyMap.value.toFloat(), + frequencyMap.key + ) + ) + } + val srcColorList = listOf( + CmdClickColorStr.LIGHT_GREEN, +// CmdClickColorStr.WHITE_GREEN, + CmdClickColorStr.ANDROID_GREEN, +// CmdClickColorStr.YELLOW_GREEN, + CmdClickColorStr.GREEN, +// CmdClickColorStr.THICK_GREEN, +// CmdClickColorStr.DARK_GREEN, +// CmdClickColorStr.CARKI, +// CmdClickColorStr.GOLD_YELLOW, + CmdClickColorStr.WATER_BLUE, +// CmdClickColorStr.WHITE_BLUE, +// CmdClickColorStr.THICK_AO, +// CmdClickColorStr.BLACK_AO, + CmdClickColorStr.BLUE, +// CmdClickColorStr.WHITE_BLUE_PURPLE, +// CmdClickColorStr.BLUE_DARK_PURPLE, +// CmdClickColorStr.NAVY, + CmdClickColorStr.PURPLE, + CmdClickColorStr.ORANGE, +// CmdClickColorStr.BROWN, +// CmdClickColorStr.DARK_BROWN, +// CmdClickColorStr.YELLOW, + CmdClickColorStr.SKERLET, + ) + val color: ArrayList = ArrayList() + val colorStrList = srcColorList.map { + it.str + } +// CmdClickColorStr.values() + val colorList = mutableListOf() + frequencyMapList.forEach { + val colorStr = colorStrList.shuffled().first() + colorList.add(colorStr) + color.add(Color.parseColor(colorStr)) + } + val oneSideLengthRndList = (300..(7 * screenWidthInt) / 4) + val holeRadiasHolePercentRndList = (0..75) + val rotateAngleRndList = (-270..270) + val alphaRndList = (100..200) //(100..400) + val repeatTimes = (10..15).random() + val animationTriggerEndNum = 8 + val animationTriggerRndList = (1..animationTriggerEndNum) + val xyDurationSrcList = (200..20000) + (0..repeatTimes).forEach { + _ -> + //グラフのデータを設定 + + //chartに設定 + val dataSet = PieDataSet(value, "sample") +// dataSet.isUsingSliceColorAsValueLineColor = true + +// value.setValueTextColor(Color.BLACK); +// dataSet.setValueLinePart1OffsetPercentage(90.0f); +// dataSet.setValueLinePart1Length(1f); +// dataSet.setValueLinePart2Length(.2f); +// dataSet.valueTextColor = Color.BLACK; +// dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + + dataSet.colors = color + dataSet.valueTextSize = 9f + withContext(Dispatchers.Main) createPie@{ + val oneSideLength = oneSideLengthRndList.random() + val relativeParam = RelativeLayout.LayoutParams( + oneSideLength, + oneSideLength, + ) + val pieChart = PieChart(context).apply { + layoutParams = relativeParam + x = (-oneSideLength..screenWidthInt).random().toFloat() + y = (-oneSideLength..screenHeightInt).random().toFloat() + description?.isEnabled = false + legend?.isEnabled = false + setTouchEnabled(false) +// val high = Highlight(highlightIndex, 0, 0) +// high.dataIndex = 0 +// highlightValue(null) + + isDrawHoleEnabled = true // 真ん中に穴を空けるかどうか + val holeRadiusFloat = holeRadiasHolePercentRndList.random().toFloat() + holeRadius = holeRadiusFloat //50f; // 真ん中の穴の大きさ(%指定) + val transparentCircleRadiusFloat = + (holeRadiusFloat.toInt()..100).random().toFloat() + transparentCircleRadius = transparentCircleRadiusFloat //55f + val rotationAngleEnd = rotateAngleRndList.random().toFloat() + rotationAngle = rotationAngleEnd +// + //270F // 開始位置の調整 + isRotationEnabled = true + + val alphaFloat = alphaRndList.random().toFloat() / 1000 + alpha = alphaFloat + + setEntryLabelTextSize(13f) + isSelected = false + + data = PieData(dataSet) + // refresh + } + bkRelative.addView(pieChart) + CoroutineScope(Dispatchers.Main).launch { + withContext(Dispatchers.Main) { + pieChart.invalidate() + } + if( + animationTriggerRndList.random() < 7 + ) return@launch + withContext(Dispatchers.Main) { + val durationMilliisX = xyDurationSrcList.random() + val durationMilliisY = xyDurationSrcList.random() + pieChart.animateXY(durationMilliisX, durationMilliisY) + } + } + } + } + } + } + + fun makeStatisticsTextFile( + fannelDirPath: String, + saveTagName: String?, + ): File { + return when(saveTagName.isNullOrEmpty()) { + true -> File("${fannelDirPath}/${statisticsName}/promptWithList.txt") + else -> listOf( + fannelDirPath, + statisticsName, + saveTagName, + "promptWithList.txt", + ).joinToString("/") + .replace(Regex("[/]+"), "/") + .let { + File(it) + } + } + } + + fun saveStatistics( + fannelDirPath: String, + saveTagName: String?, + trimedReturnValue: String, + ) { + val statisticsFile = makeStatisticsTextFile( + fannelDirPath, + saveTagName, + ) + val statisticsTitle = trimedReturnValue.replace( + statisticsMapSeparator.toString(), + String() + ) + val insertLine = listOf( + "${StatisticsKey.TITLE.key}=${statisticsTitle}", + "${StatisticsKey.DATETIME.key}=${LocalDateTime.now()}", + ).joinToString(statisticsMapSeparator.toString()) + val updateStatisticsCon = ReadText( + statisticsFile.absolutePath + ).textToList() + listOf(insertLine) + val historyTakeNum = 500 + FileSystems.writeFile( + statisticsFile.absolutePath, + updateStatisticsCon + .takeLast(historyTakeNum) + .joinToString("\n") + ) + } + + fun makeStatisticsMapList( + fannelDirPath: String, + saveTagName: String?, + promptMapList: List>, + ): List { + val statisticsTxtFile = makeStatisticsTextFile( + fannelDirPath, + saveTagName, + ) + val statisticsMapList = ReadText( + statisticsTxtFile.absolutePath + ).textToList().filter{ + it.isNotEmpty() + }.map { + CmdClickMap.createMap( + it, + statisticsMapSeparator + ).toMap() + } + val titleKey = StatisticsKey.TITLE.key + val frequencyMapListSrc = statisticsMapList.map{ + elMap -> + elMap.get(titleKey) + } + val promptList = promptMapList.map { + lineMap -> + lineMap.get( + PromptMapList.PromptListKey.TITLE.key + ) + } + val statistiscTitleList = frequencyMapListSrc + promptList + return statistiscTitleList.ifEmpty { + listOf( + "CC", + "cmdclick", + "CommandClick", + ) + } + } + } + + private object ColdListRegister { + + + fun register( + fannelDirPath: String, + promptListFile: File?, + listLimit: Int?, + disableUpdate: Boolean, + returnValue: String, + itemIconStr: String?, + ) { + val trimedReturnValue = + returnValue.trim() + if ( + trimedReturnValue.isEmpty() + ) return + StatisticsTool.saveStatistics( + fannelDirPath, + promptListFile?.name?.let { + CcPathTool.trimAllExtend(it) + }, + trimedReturnValue, + ) + if( + promptListFile == null + || disableUpdate + ) return + val updatePromptList = + makeNoEmptyList( + trimedReturnValue, + itemIconStr, + promptListFile, + ).distinct().let { listSrc -> + when (listLimit == null) { + true -> listSrc + else -> listSrc.take(listLimit) + } + } + val lineMapCon = updatePromptList.map { + lineMap -> + val title = lineMap.get( + PromptMapList.PromptListKey.TITLE.key + ) ?: String() + val iconStr = lineMap.get( + PromptMapList.PromptListKey.ICON.key + ) ?: String() + listOf( + title, + iconStr + ).joinToString(PromptMapList.promptListSeparator.toString()) + }.joinToString("\n") + FileSystems.writeFile( + promptListFile.absolutePath, + lineMapCon + ) + } + + private fun makeNoEmptyList( + trimedReturnValue: String, + iconStr: String?, + promptListFile: File?, + ): List> { + val titleKey = PromptMapList.PromptListKey.TITLE.key + val iconKey = PromptMapList.PromptListKey.ICON.key + val curMapList = when(promptListFile == null) { + true -> emptyList() + else -> ReadText( + promptListFile.absolutePath + ).textToList().map { titleToIconStr -> + val titleToIconStrList = titleToIconStr.split( + PromptMapList.promptListSeparator, + ) + val curTitle = titleToIconStrList.firstOrNull() ?: String() + val curConStr = titleToIconStrList.getOrNull(1) ?: String() + mapOf( + titleKey to curTitle, + iconKey to curConStr + ) + } + } + if( + trimedReturnValue.isEmpty() + ) return curMapList + val selectedMap = when( + iconStr.isNullOrEmpty() + ){ + true -> mapOf( + titleKey to trimedReturnValue, + ) + else -> mapOf( + titleKey to trimedReturnValue, + iconKey to iconStr + ) + } + val selectedTitle = selectedMap.get(titleKey) +// FileSystems.writeFile( +// File(UsePath.cmdclickDefaultAppDirPath, "list_makeNoEmptyList.txt").absolutePath, +// listOf( +// "promptListFilePath: ${promptListFile.absolutePath}", +// "promptListFileCon: ${ReadText( +// promptListFile.absolutePath +// ).textToList()}", +// "trimedReturnValue: ${trimedReturnValue}", +// "curMapList: ${curMapList}", +// "curMap: ${selectedMap}", +// ).joinToString("\n") +// ) + return listOf(selectedMap) + curMapList.filter { + lineMap -> + val title = lineMap.get(titleKey) + title != selectedTitle + } + } + } + + private fun makeListTextFileName( + variableName: String?, + ): String? { + if( + variableName.isNullOrEmpty() + ) return null + val prefixUpperVariableName = variableName.replaceFirstChar { it.uppercase() } + return "${listPrefix}${prefixUpperVariableName}${listTxtSuffix}" + } + +} + +private object EditTextMakerForPromptList { + fun make( + promptDialogObj: Dialog?, + editTextMap: Map, + setText: String?, + visible: Boolean, + ): AppCompatEditText? { + val promptEditText = + promptDialogObj?.findViewById( + R.id.prompt_list_dialog_search_edit_text + ) ?: return null + promptEditText.setText(setText) + editTextMap.get( + PromptWithListDialog.Companion.PromptEditTextKey.hint.name + )?.let { + promptEditText.hint = it + } +// if(!visible) { + promptDialogObj.findViewById( + R.id.prompt_list_dialog_search_edit_cardview + )?.apply { + isVisible = visible + } +// promptEditText.isVisible = false +// return promptEditText +// } + if(!visible) { + return promptEditText + } + val isFocus = editTextMap.get( + PromptWithListDialog.Companion. PromptEditTextKey.onFocus.name + ) == PromptWithListDialog.switchOn + if(isFocus) { + promptEditText.requestFocus() + } + return promptEditText + } + + fun makeTextByShell( + terminalFragment: TerminalFragment, + editTextMap: Map, + ): String? { + val context = terminalFragment.context + ?: return null + val mainOrSubFannelPath = editTextMap.get( + PromptWithListDialog.Companion.PromptEditTextKey.fannelPath.name + ) + val setReplaceVariableMap = when( + mainOrSubFannelPath.isNullOrEmpty() + ){ + true -> emptyMap() + else -> SetReplaceVariabler + .makeSetReplaceVariableMapFromSubFannel( + context, + mainOrSubFannelPath + ) + } + val fannelInfoMap = FannelInfoTool.getFannelInfoMap( + terminalFragment, + mainOrSubFannelPath + ) +// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( +// fannelInfoMap +// ) + val currentFannelName = FannelInfoTool.getCurrentFannelName( + fannelInfoMap + ) + + val shellCon = editTextMap.get( + PromptWithListDialog.Companion.PromptEditTextKey.shellPath.name + )?.let { + EditSettingExtraArgsTool.makeShellCon(editTextMap) + }?.let { + SetReplaceVariabler.execReplaceByReplaceVariables( + it, + setReplaceVariableMap, +// currentAppDirPath, + currentFannelName + ) + } ?: return null + val busyboxExecutor = BusyboxExecutor( + context, + UbuntuFiles(context), + ) + val repValMap = editTextMap.get( + PromptWithListDialog.Companion.PromptEditTextKey.repValCon.name + ).let { + CmdClickMap.createMap( + it, + '&' + ) + }.toMap() + return busyboxExecutor.getCmdOutput( + shellCon, + repValMap + ) + } +} + + +class LinearGradientSpan( + private val colors: IntArray, + private val positions: FloatArray?, + private val angle: Int +) : + ReplacementSpan() { + override fun getSize( + paint: Paint, + text: CharSequence, + start: Int, + end: Int, + fm: FontMetricsInt? + ): Int { + return paint.measureText(text, start, end).toInt() + } + + override fun draw( + canvas: Canvas, + text: CharSequence, + start: Int, + end: Int, + x: Float, + top: Int, + y: Int, + bottom: Int, + paint: Paint + ) { + val width = paint.measureText(text, start, end) + val height = (bottom - top).toFloat() + val radians = Math.toRadians(angle.toDouble()) + val gradientX = (Math.cos(radians) * width).toFloat() + val gradientY = (Math.sin(radians) * height).toFloat() + val gradient = LinearGradient( + x, + y.toFloat(), + x + gradientX, + y + gradientY, + colors, + positions, + Shader.TileMode.CLAMP + ) + paint.shader = gradient + canvas.drawText(text, start, end, x, y.toFloat(), paint) + } +} + +class ShadowSpan( + private val radius: Float, + private val dx: Float, + private val dy: Float, + private val shadowColor: Int +) : + CharacterStyle(), UpdateAppearance { + override fun updateDrawState(tp: TextPaint) { + tp.setShadowLayer(radius, dx, dy, shadowColor) + } +} diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/WebViewJsDialog.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/WebViewJsDialog.kt index 641767409..1c639ee60 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/WebViewJsDialog.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/WebViewJsDialog.kt @@ -136,9 +136,12 @@ class WebViewJsDialog( private var webViewDialogInstance: Dialog? = let { val terminalFragment = terminalFragmentRef.get() val context = terminalFragment?.context - val webViewDialog = Dialog(context as Context) + val webViewDialog = Dialog( + context as Context, + R.style.FullScreenRoundCornerDialogTheme, + ) webViewDialog.setContentView( - R.layout.dialog_webview_layout + R.layout.dialog_webview_layout, ) webViewDialog.window?.setLayout( ViewGroup.LayoutParams.MATCH_PARENT, @@ -185,10 +188,10 @@ class WebViewJsDialog( terminalFragment, pocketWebViewSrc ) - toolbarHideShow( - terminalFragment, - pocketWebViewSrc - ) +// toolbarHideShow( +// terminalFragment, +// pocketWebViewSrc +// ) webViewSetting( terminalFragment, pocketWebViewSrc @@ -508,8 +511,10 @@ class WebViewJsDialog( settings.cacheMode = WebSettings.LOAD_NO_CACHE - - settings.textZoom = ((terminalFragment?.fontZoomPercent ?: 100) * 95 ) / 100 + terminalFragment?.fontZoomPercent?.let { + settings.textZoom = it + } +// settings.textZoom = ((terminalFragment?.fontZoomPercent ?: 100) * 95 ) / 100 pocketWebViewSrc.setLayerType(View.LAYER_TYPE_HARDWARE, null) JsInterfaceAdder.add( WeakReference(terminalFragment), diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/WithEditComponentForFormJsDialog.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/WithEditComponentForFormJsDialog.kt index 20490a937..9e695bafc 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/WithEditComponentForFormJsDialog.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/lib/dialog/WithEditComponentForFormJsDialog.kt @@ -1,279 +1,271 @@ package com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog -import android.content.Context -import android.text.InputType -import android.view.ViewGroup -import android.widget.LinearLayout -import android.widget.TextView -import androidx.core.view.isVisible -import androidx.fragment.app.Fragment -import com.puutaro.commandclick.common.variable.edit.EditParameters -import com.puutaro.commandclick.common.variable.edit.EditTextSupportViewName -import com.puutaro.commandclick.common.variable.edit.TypeVariable -import com.puutaro.commandclick.fragment.EditFragment -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.checkIndexNum -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.culcSetVariableTypeMarkIndex -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.EditTextSetter -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.EditableListContentsSelectSpinnerViewProducer -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.EditableSpinnerViewProducer -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.FileSelectSpinnerViewProducer -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.InDeCrementerViewProducer -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.ListContentsSelectSpinnerViewProducer -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.SpinnerViewProducer -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.VariableLabelAdder -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.lib.SetVariableTypeValue -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.updateSetVariableMapByEditSupportViewNameIndex -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.updateVariableTypeListByExcludeSupportView -import com.puutaro.commandclick.proccess.edit.lib.SetVariableTyper +//import android.content.Context +//import android.text.InputType +//import android.view.ViewGroup +//import android.widget.LinearLayout +//import android.widget.TextView +//import androidx.fragment.app.Fragment +//import com.puutaro.commandclick.common.variable.edit.EditParameters +//import com.puutaro.commandclick.common.variable.edit.EditTextSupportViewName +//import com.puutaro.commandclick.common.variable.edit.TypeVariable +//import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.EditTextSetter +//import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.EditableListContentsSelectSpinnerViewProducer +//import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.EditableSpinnerViewProducer +//import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.InDeCrementerViewProducer +//import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.ListContentsSelectSpinnerViewProducer +//import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.SpinnerViewProducer +//import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.VariableLabelAdder +//import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.lib.SetVariableTypeValue -object WithEditComponentForFormJsDialog { - - private val textAndLabelList = TypeVariable.textAndLabelList - private val noIndexTypeList = TypeVariable.noIndexTypeList - - fun insert( - fragment: Fragment, - insertTextView: TextView, - editParameters: EditParameters, - ): LinearLayout { - val context = fragment.context - - val textLabelIndex = culcSetVariableTypeMarkIndex( - editParameters, - textAndLabelList, - EditTextSupportViewName.VARIABLE_LABEL.str - ) - VariableLabelAdder.add( - insertTextView, - editParameters, - textLabelIndex - ) - editParameters.variableTypeList = updateVariableTypeListByExcludeSupportView( - editParameters, - textLabelIndex, - EditTextSupportViewName.VARIABLE_LABEL.str - ) - editParameters.setVariableMap = updateSetVariableMapByEditSupportViewNameIndex( - editParameters, - textLabelIndex, - ) - - val editTextPropertyIndex = culcSetVariableTypeMarkIndex( - editParameters, - textAndLabelList, - EditTextSupportViewName.EDIT_TEXT_PROPERTY.str - ) - val setVariableValueForEditText = SetVariableTypeValue.makeByReplace( - editParameters - ) - val editTextPropertyMap = SetVariableTyper.getCertainSetValIndexMap( - setVariableValueForEditText, - editTextPropertyIndex - ) - val variableTypeList = updateVariableTypeListByExcludeSupportView( - editParameters, - editTextPropertyIndex, - EditTextSupportViewName.EDIT_TEXT_PROPERTY.str - ) - editParameters.variableTypeList = variableTypeList - editParameters.setVariableMap = updateSetVariableMapByEditSupportViewNameIndex( - editParameters, - editTextPropertyIndex, - ) - - - val editTextWeight = decideTextEditWeight( - variableTypeList, - ) - val otherComponentWeight = decideOtherComponentWeight( - editTextWeight, - variableTypeList, - ) - val insertEditText = EditTextSetter.set( - fragment, - editParameters, - editTextPropertyMap, - editTextWeight - ) - val isInsertTextViewVisible = !editParameters.variableTypeList.contains( - EditTextSupportViewName.HIDDEN_LABEL.str - ) - - checkIndexNum( - fragment, - editParameters, - noIndexTypeList - ) - - insertTextView.isVisible = isInsertTextViewVisible - val horizontalLinearLayout = makeHorizontalLayout(context) - horizontalLinearLayout.addView(insertEditText) - (variableTypeList.indices).forEach { - val variableTypeListUntilCurrent = variableTypeList.take(it + 1) - val currentComponentIndex = variableTypeListUntilCurrent.filter { - !noIndexTypeList.contains(it) - }.size - 1 - when(variableTypeList[it]){ - EditTextSupportViewName.CHECK_BOX.str -> { - val insertSpinner = SpinnerViewProducer.make( - fragment.context, - insertEditText, - editParameters, - currentComponentIndex, - otherComponentWeight, - ) - horizontalLinearLayout.addView(insertSpinner) - } - EditTextSupportViewName.EDITABLE_CHECK_BOX.str -> { - val insertSpinner = EditableSpinnerViewProducer.make( - fragment, - insertEditText, - editParameters, - currentComponentIndex, - otherComponentWeight, - ) - horizontalLinearLayout.addView(insertSpinner) - } - EditTextSupportViewName.EDITABLE_FILE_SELECT_BOX.str -> { - val editableFileSelectSpinner = FileSelectSpinnerViewProducer.make( - fragment, - insertEditText, - editParameters, - currentComponentIndex, - otherComponentWeight, - ) - horizontalLinearLayout.addView(editableFileSelectSpinner) - } - EditTextSupportViewName.LIST_CONTENTS_SELECT_BOX.str -> { - val insertListConSpinner = ListContentsSelectSpinnerViewProducer.make( - fragment, - insertEditText, - editParameters, - currentComponentIndex, - otherComponentWeight, - ) - horizontalLinearLayout.addView(insertListConSpinner) - } - EditTextSupportViewName.EDITABLE_LIST_CONTENTS_SELECT_BOX.str -> { - val insertListConSpinner = EditableListContentsSelectSpinnerViewProducer.make( - fragment, - insertEditText, - editParameters, - currentComponentIndex, - otherComponentWeight, - ) - horizontalLinearLayout.addView(insertListConSpinner) - } - EditTextSupportViewName.NUM_INDE_CREMENTER.str -> { - val incButton = InDeCrementerViewProducer.make( - fragment, - insertEditText, - editParameters, - currentComponentIndex, - otherComponentWeight, - true, - ) - horizontalLinearLayout.addView(incButton) - val decButton = InDeCrementerViewProducer.make( - fragment, - insertEditText, - editParameters, - currentComponentIndex, - otherComponentWeight, - false - ) - horizontalLinearLayout.addView(decButton) - } - EditTextSupportViewName.READ_ONLY_EDIT_TEXT.str -> { - insertEditText.isEnabled = false - } - EditTextSupportViewName.PASSWORD.str -> { - insertEditText.inputType = ( - InputType.TYPE_CLASS_TEXT or - InputType.TYPE_TEXT_VARIATION_PASSWORD - ) - } - else -> {} - } - } - return horizontalLinearLayout - } - - private fun makeHorizontalLayout( - context: Context? - ): LinearLayout { - val horizontalLinearLayout = LinearLayout(context) - horizontalLinearLayout.orientation = LinearLayout.HORIZONTAL - horizontalLinearLayout.weightSum = 1F - val linearParamsForHorizontal = LinearLayout.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT, - ) - horizontalLinearLayout.layoutParams = linearParamsForHorizontal - return horizontalLinearLayout - } - - private fun decideTextEditWeight( - variableTypeList: List, - ): Float { - val isTextEmphasis = variableTypeList.contains( - EditTextSupportViewName.EDIT_TEXT_EMPHASIS.str - ) - val TextAndLabelOtherCompLength = makeTextAndLabelOtherCompLength(variableTypeList) - if( - TextAndLabelOtherCompLength == 0 - ) return 1F - if( - !isTextEmphasis - ) return 0F - return when(true){ - (TextAndLabelOtherCompLength >= 3) -> 0.45F - (TextAndLabelOtherCompLength == 2) -> 0.6F - (TextAndLabelOtherCompLength == 1) -> 0.7F - else -> 1F - } - } - - private fun decideOtherComponentWeight( - editTextWeight: Float, - variableTypeList: List, - ): Float { - val variableTypeIndexLength = makeVariableTypeIndexLength( - variableTypeList - ) - if( - variableTypeIndexLength > 0 - ) return (1F - editTextWeight) / variableTypeIndexLength - return 0F - } - - private fun makeVariableTypeIndexLength( - variableTypeList: List - ): Int { - val otherCompLengthSource = variableTypeList.filter { - !textAndLabelList.contains(it) - }.size - val isNumComponent = variableTypeList.contains( - EditTextSupportViewName.NUM_INDE_CREMENTER.str - ) - if ( - isNumComponent - ) return otherCompLengthSource + 1 - return otherCompLengthSource - } - - private fun makeTextAndLabelOtherCompLength( - variableTypeList: List - ): Int { - val textAndLabelOtherCompLength = variableTypeList.filter { - !textAndLabelList.contains(it) - }.size - val isNumComponent = variableTypeList.contains( - EditTextSupportViewName.NUM_INDE_CREMENTER.str - ) - if ( - isNumComponent - ) return textAndLabelOtherCompLength + 1 - return textAndLabelOtherCompLength - } -} +//object WithEditComponentForFormJsDialog { +// +// private val textAndLabelList = TypeVariable.textAndLabelList +// private val noIndexTypeList = TypeVariable.noIndexTypeList +// +// fun insert( +// fragment: Fragment, +// insertTextView: TextView, +// editParameters: EditParameters, +// ): LinearLayout { +// val context = fragment.context +// +// val textLabelIndex = culcSetVariableTypeMarkIndex( +// editParameters, +// textAndLabelList, +// EditTextSupportViewName.VARIABLE_LABEL.str +// ) +// VariableLabelAdder.add( +// insertTextView, +// editParameters, +// textLabelIndex +// ) +//// editParameters.variableTypeList = updateVariableTypeListByExcludeSupportView( +//// editParameters, +//// textLabelIndex, +//// EditTextSupportViewName.VARIABLE_LABEL.str +//// ) +//// editParameters.setVariableMap = updateSetVariableMapByEditSupportViewNameIndex( +//// editParameters, +//// textLabelIndex, +//// ) +// +// val editTextPropertyIndex = culcSetVariableTypeMarkIndex( +// editParameters, +// textAndLabelList, +// EditTextSupportViewName.EDIT_TEXT_PROPERTY.str +// ) +// val setVariableValueForEditText = SetVariableTypeValue.makeByReplace( +// editParameters +// ) +// val editTextPropertyMap = SetVariableTyper.getCertainSetValIndexMap( +// setVariableValueForEditText, +// editTextPropertyIndex +// ) +// val variableTypeList = updateVariableTypeListByExcludeSupportView( +// editParameters, +// editTextPropertyIndex, +// EditTextSupportViewName.EDIT_TEXT_PROPERTY.str +// ) +//// editParameters.variableTypeList = variableTypeList +//// editParameters.setVariableMap = updateSetVariableMapByEditSupportViewNameIndex( +//// editParameters, +//// editTextPropertyIndex, +//// ) +// +// +// val editTextWeight = decideTextEditWeight( +// variableTypeList, +// ) +// val otherComponentWeight = decideOtherComponentWeight( +// editTextWeight, +// variableTypeList, +// ) +// val insertEditText = EditTextSetter.set( +// fragment, +// editParameters, +// editTextPropertyMap, +// editTextWeight +// ) +//// val isInsertTextViewVisible = !editParameters.variableTypeList.contains( +//// EditTextSupportViewName.HIDDEN_LABEL.str +//// ) +// +// checkIndexNum( +// fragment, +// editParameters, +// noIndexTypeList +// ) +// +//// insertTextView.isVisible = isInsertTextViewVisible +// val horizontalLinearLayout = makeHorizontalLayout(context) +// horizontalLinearLayout.addView(insertEditText) +// (variableTypeList.indices).forEach { +// val variableTypeListUntilCurrent = variableTypeList.take(it + 1) +// val currentComponentIndex = variableTypeListUntilCurrent.filter { +// !noIndexTypeList.contains(it) +// }.size - 1 +// when(variableTypeList[it]){ +// EditTextSupportViewName.CHECK_BOX.str -> { +// val insertSpinner = SpinnerViewProducer.make( +// fragment.context, +// insertEditText, +// editParameters, +// currentComponentIndex, +// otherComponentWeight, +// ) +// horizontalLinearLayout.addView(insertSpinner) +// } +// EditTextSupportViewName.EDITABLE_CHECK_BOX.str -> { +// val insertSpinner = EditableSpinnerViewProducer.make( +// fragment, +// insertEditText, +// editParameters, +// currentComponentIndex, +// otherComponentWeight, +// ) +// horizontalLinearLayout.addView(insertSpinner) +// } +// EditTextSupportViewName.EDITABLE_FILE_SELECT_BOX.str -> { +// val editableFileSelectSpinner = FileSelectSpinnerViewProducer.make( +// fragment, +// insertEditText, +// editParameters, +// currentComponentIndex, +// otherComponentWeight, +// ) +// horizontalLinearLayout.addView(editableFileSelectSpinner) +// } +// EditTextSupportViewName.LIST_CONTENTS_SELECT_BOX.str -> { +// val insertListConSpinner = ListContentsSelectSpinnerViewProducer.make( +// fragment, +// insertEditText, +// editParameters, +// currentComponentIndex, +// otherComponentWeight, +// ) +// horizontalLinearLayout.addView(insertListConSpinner) +// } +// EditTextSupportViewName.EDITABLE_LIST_CONTENTS_SELECT_BOX.str -> { +// val insertListConSpinner = EditableListContentsSelectSpinnerViewProducer.make( +// fragment, +// insertEditText, +// editParameters, +// currentComponentIndex, +// otherComponentWeight, +// ) +// horizontalLinearLayout.addView(insertListConSpinner) +// } +// EditTextSupportViewName.NUM_INDE_CREMENTER.str -> { +// val incButton = InDeCrementerViewProducer.make( +// fragment, +// insertEditText, +// editParameters, +// currentComponentIndex, +// otherComponentWeight, +// true, +// ) +// horizontalLinearLayout.addView(incButton) +// val decButton = InDeCrementerViewProducer.make( +// fragment, +// insertEditText, +// editParameters, +// currentComponentIndex, +// otherComponentWeight, +// false +// ) +// horizontalLinearLayout.addView(decButton) +// } +// EditTextSupportViewName.READ_ONLY_EDIT_TEXT.str -> { +// insertEditText.isEnabled = false +// } +// EditTextSupportViewName.PASSWORD.str -> { +// insertEditText.inputType = ( +// InputType.TYPE_CLASS_TEXT or +// InputType.TYPE_TEXT_VARIATION_PASSWORD +// ) +// } +// else -> {} +// } +// } +// return horizontalLinearLayout +// } +// +// private fun makeHorizontalLayout( +// context: Context? +// ): LinearLayout { +// val horizontalLinearLayout = LinearLayout(context) +// horizontalLinearLayout.orientation = LinearLayout.HORIZONTAL +// horizontalLinearLayout.weightSum = 1F +// val linearParamsForHorizontal = LinearLayout.LayoutParams( +// ViewGroup.LayoutParams.MATCH_PARENT, +// ViewGroup.LayoutParams.MATCH_PARENT, +// ) +// horizontalLinearLayout.layoutParams = linearParamsForHorizontal +// return horizontalLinearLayout +// } +// +// private fun decideTextEditWeight( +// variableTypeList: List, +// ): Float { +// val isTextEmphasis = variableTypeList.contains( +// EditTextSupportViewName.EDIT_TEXT_EMPHASIS.str +// ) +// val TextAndLabelOtherCompLength = makeTextAndLabelOtherCompLength(variableTypeList) +// if( +// TextAndLabelOtherCompLength == 0 +// ) return 1F +// if( +// !isTextEmphasis +// ) return 0F +// return when(true){ +// (TextAndLabelOtherCompLength >= 3) -> 0.45F +// (TextAndLabelOtherCompLength == 2) -> 0.6F +// (TextAndLabelOtherCompLength == 1) -> 0.7F +// else -> 1F +// } +// } +// +// private fun decideOtherComponentWeight( +// editTextWeight: Float, +// variableTypeList: List, +// ): Float { +// val variableTypeIndexLength = makeVariableTypeIndexLength( +// variableTypeList +// ) +// if( +// variableTypeIndexLength > 0 +// ) return (1F - editTextWeight) / variableTypeIndexLength +// return 0F +// } +// +// private fun makeVariableTypeIndexLength( +// variableTypeList: List +// ): Int { +// val otherCompLengthSource = variableTypeList.filter { +// !textAndLabelList.contains(it) +// }.size +// val isNumComponent = variableTypeList.contains( +// EditTextSupportViewName.NUM_INDE_CREMENTER.str +// ) +// if ( +// isNumComponent +// ) return otherCompLengthSource + 1 +// return otherCompLengthSource +// } +// +// private fun makeTextAndLabelOtherCompLength( +// variableTypeList: List +// ): Int { +// val textAndLabelOtherCompLength = variableTypeList.filter { +// !textAndLabelList.contains(it) +// }.size +// val isNumComponent = variableTypeList.contains( +// EditTextSupportViewName.NUM_INDE_CREMENTER.str +// ) +// if ( +// isNumComponent +// ) return textAndLabelOtherCompLength + 1 +// return textAndLabelOtherCompLength +// } +//} diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/list_index/ItemPathMaker.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/list_index/ItemPathMaker.kt index 79edbe775..33c1485f4 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/list_index/ItemPathMaker.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/list_index/ItemPathMaker.kt @@ -1,39 +1,39 @@ package com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.list_index import com.blankj.utilcode.util.ToastUtils -import com.puutaro.commandclick.component.adapter.ListIndexAdapter -import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.TitleFileNameAndPathConPairForListIndexAdapter -import com.puutaro.commandclick.fragment.EditFragment -import com.puutaro.commandclick.proccess.list_index_for_edit.ListIndexEditConfig +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter 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.util.file.ReadText +import com.puutaro.commandclick.util.map.CmdClickMap import com.puutaro.commandclick.util.map.FilePrefixGetter import java.io.File object ItemPathMaker { fun make( - editFragment: EditFragment, - selectedItem: String, + editComponentListAdapter: EditComponentListAdapter, listIndexPosition: Int, ): String? { - val type = ListIndexEditConfig.getListIndexType( - editFragment - ) - val extractedPath = when(type) { -// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL, - TypeSettingsForListIndex.ListIndexTypeKey.NORMAL - -> getCatPathForNormal( - editFragment, - selectedItem - ) - TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT - -> getCatPathForTsv( - editFragment, - listIndexPosition - ) - }?.trim() +// val type = ListIndexEditConfig.getListIndexType( +// editFragment +// ) + val extractedPath = getCatPathForTsv( + editComponentListAdapter, + listIndexPosition + )?.trim() +// when(type) { +//// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL, +// TypeSettingsForListIndex.ListIndexTypeKey.NORMAL +// -> getCatPathForNormal( +// editFragment, +// selectedItem +// ) +// TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT +// -> getCatPathForTsv( +// editFragment, +// listIndexPosition +// ) +// }?.trim() if( extractedPath.isNullOrEmpty() ) { @@ -49,46 +49,59 @@ object ItemPathMaker { return extractedPath } - private fun getCatPathForNormal( - editFragment: EditFragment, - selectedItem: String - ): String { - val parentDirPath = - ListSettingsForListIndex.ListIndexListMaker.getFilterDir( - editFragment, - ListIndexAdapter.indexListMap, - ListIndexAdapter.listIndexTypeKey - ) - return File(parentDirPath, selectedItem).absolutePath - } +// private fun getCatPathForNormal( +// editFragment: EditFragment, +// selectedItem: String +// ): String { +// val parentDirPath = +// ListSettingsForListIndex.ListIndexListMaker.getFilterDir( +// editFragment, +// ListIndexAdapter.indexListMap, +// ListIndexAdapter.listIndexTypeKey +// ) +// return File(parentDirPath, selectedItem).absolutePath +// } private fun getCatPathForTsv( - editFragment: EditFragment, +// fragment: Fragment, + editComponentListAdapter: EditComponentListAdapter, listIndexPosition: Int, ): String? { - val binding = editFragment.binding - val listIndexForEditAdapter = - binding.editListRecyclerView.adapter as ListIndexAdapter - val selectedTsvLine = - listIndexForEditAdapter.listIndexList.getOrNull( +// val binding = fragment.binding +// val listIndexForEditAdapter = +// binding.editListRecyclerView.adapter as EditComponentListAdapter + val selectedLineMap = + editComponentListAdapter.lineMapList.getOrNull( listIndexPosition ) ?: return null - val tsvPath = FilePrefixGetter.get( - editFragment, - ListIndexAdapter.indexListMap, - ListSettingsForListIndex.ListSettingKey.LIST_DIR.key, +// val editComponentListAdapter = +// fragment.binding.editListRecyclerView.adapter as EditComponentListAdapter + val mapListPath = FilePrefixGetter.get( + editComponentListAdapter.fannelInfoMap, + editComponentListAdapter.setReplaceVariableMap, + editComponentListAdapter.editListMap, + ListSettingsForListIndex.ListSettingKey.MAP_LIST_PATH.key, ) ?: return null + val mapListSeparator = ListSettingsForListIndex.MapListPathManager.mapListSeparator val isExist = ReadText( - tsvPath - ).textToList().contains(selectedTsvLine) + mapListPath + ).textToList().map { + CmdClickMap.createMap( + it, + mapListSeparator + ).toMap() + }.contains(selectedLineMap) if(!isExist){ ToastUtils.showShort("No exist tsv path") return null } - val titleFileNameAndPathConPair = - TitleFileNameAndPathConPairForListIndexAdapter.get(selectedTsvLine) - ?: return null - val filePathOrCon = titleFileNameAndPathConPair.second +// val titleFileNameAndPathConPair = +// TitleFileNameAndPathConPairForListIndexAdapter.get(selectedLineMap) +// ?: return null + val filePathOrCon = selectedLineMap.get( + ListSettingsForListIndex.MapListPathManager.Key.SRC_CON.key + ) +// titleFileNameAndPathConPair.second return filePathOrCon } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/list_index/JsCopyItem.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/list_index/JsCopyItem.kt index d750fbeb7..034db0b80 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/list_index/JsCopyItem.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/list_index/JsCopyItem.kt @@ -1,6 +1,7 @@ package com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.list_index import android.webkit.JavascriptInterface +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter import com.puutaro.commandclick.fragment.TerminalFragment import com.puutaro.commandclick.proccess.js_macro_libs.edit_setting_extra.EditSettingExtraArgsTool import com.puutaro.commandclick.proccess.js_macro_libs.list_index_libs.ExecCopyFile @@ -66,9 +67,12 @@ class JsCopyItem( currentFannelName, currentFannelState ) ?: return + val editComponentListAdapter = + editFragment.binding.editListRecyclerView.adapter as EditComponentListAdapter + val editContext = editFragment.context ?: return ExecCopyPath.copyPath( - editFragment, - selectedItem, + editContext, + editComponentListAdapter, listIndexPosition ) } @@ -138,7 +142,7 @@ class JsCopyItem( ) ExecCopyFile.copyFile( editFragment, - selectedItem, + editFragment.fannelInfoMap, listIndexPosition, filterMap, ) @@ -200,7 +204,9 @@ class JsCopyItem( ) ?: return ExecCopyFileHere.copyFileHere( editFragment, - selectedItem, + editFragment.fannelInfoMap, + editFragment.setReplaceVariableMap, + editFragment.binding.editListRecyclerView, listIndexPosition ) } diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/list_index/JsDeleteItem.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/list_index/JsDeleteItem.kt index b60b08ac0..16eb08196 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/list_index/JsDeleteItem.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/list_index/JsDeleteItem.kt @@ -2,10 +2,11 @@ package com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lis import android.webkit.JavascriptInterface import com.blankj.utilcode.util.ToastUtils -import com.puutaro.commandclick.component.adapter.ListIndexAdapter +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter import com.puutaro.commandclick.fragment.TerminalFragment -import com.puutaro.commandclick.proccess.js_macro_libs.list_index_libs.ExecItemDelete import com.puutaro.commandclick.proccess.js_macro_libs.list_index_libs.ExecSimpleDelete +import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.ListSettingsForListIndex +import com.puutaro.commandclick.util.map.CmdClickMap import com.puutaro.commandclick.util.state.FannelInfoTool import com.puutaro.commandclick.util.state.TargetFragmentInstance import java.lang.ref.WeakReference @@ -69,20 +70,21 @@ class JsDeleteItem( ) ?: return val binding = editFragment.binding val listIndexForEditAdapter = - binding.editListRecyclerView.adapter as ListIndexAdapter - val listIndexPosition = - listIndexForEditAdapter.listIndexList.indexOf(selectedItem) - ExecItemDelete.execItemDelete( - editFragment, - parentDirPath, - selectedItem, - listIndexPosition, - ) + binding.editListRecyclerView.adapter as EditComponentListAdapter +// val listIndexPosition = +// listIndexForEditAdapter.lineMapList.indexOf(selectedItem) + +// ExecItemDelete.execItemDelete( +// editFragment, +// parentDirPath, +// selectedItem, +// listIndexPosition, +// ) } @JavascriptInterface fun simpleDelete_S( - selectedItem: String, + selectedItemMapCon: String, listIndexListPosition: Int, ){ /* @@ -132,8 +134,8 @@ class JsDeleteItem( ) ?: return val binding = editFragment.binding val editListRecyclerView = binding.editListRecyclerView - val listIndexForEditAdapter = editListRecyclerView.adapter as ListIndexAdapter - val listIndexListLastIndex = listIndexForEditAdapter.listIndexList.lastIndex + val listIndexForEditAdapter = editListRecyclerView.adapter as EditComponentListAdapter + val listIndexListLastIndex = listIndexForEditAdapter.lineMapList.lastIndex val isInValidIndex = listIndexListPosition < 0 && listIndexListPosition > listIndexListLastIndex if( @@ -144,11 +146,15 @@ class JsDeleteItem( ) return } + val selectedItemMap = CmdClickMap.createMap( + selectedItemMapCon, + ListSettingsForListIndex.MapListPathManager.mapListSeparator + ).toMap() ExecSimpleDelete.removeController( editFragment, editListRecyclerView, listIndexForEditAdapter, - selectedItem, + selectedItemMap, listIndexListPosition, ) } diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/list_index/JsDesc.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/list_index/JsDesc.kt index 4d0b109a2..971a5b2c8 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/list_index/JsDesc.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/list_index/JsDesc.kt @@ -1,6 +1,7 @@ package com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.list_index import android.webkit.JavascriptInterface +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter import com.puutaro.commandclick.fragment.TerminalFragment import com.puutaro.commandclick.proccess.js_macro_libs.list_index_libs.ExecShowDescription import com.puutaro.commandclick.util.state.FannelInfoTool @@ -63,9 +64,11 @@ class JsDesc( currentFannelName, currentFannelState ) ?: return + val editComponentListAdapter = + editFragment.binding.editListRecyclerView.adapter as EditComponentListAdapter ExecShowDescription.desc( editFragment, - selectedItem, + editComponentListAdapter, listIndexPosition ) } diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/list_index/JsEditorItem.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/list_index/JsEditorItem.kt index 2aa6b2c84..a82e06fb7 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/list_index/JsEditorItem.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/list_index/JsEditorItem.kt @@ -1,6 +1,7 @@ package com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.list_index import android.webkit.JavascriptInterface +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter import com.puutaro.commandclick.fragment.TerminalFragment import com.puutaro.commandclick.proccess.js_macro_libs.list_index_libs.ExecSimpleEditItem import com.puutaro.commandclick.proccess.js_macro_libs.list_index_libs.ExecWriteItem @@ -14,7 +15,6 @@ class JsEditorItem( @JavascriptInterface fun edit_S( - selectedItem: String, listIndexPosition: Int, ){ @@ -65,16 +65,16 @@ class JsEditorItem( currentFannelName, currentFannelState ) ?: return + val editComponentListAdapter = + editFragment.binding.editListRecyclerView.adapter as EditComponentListAdapter ExecSimpleEditItem.edit( - editFragment, - selectedItem, + editComponentListAdapter, listIndexPosition, ) } @JavascriptInterface fun write_S( - selectedItem: String, listIndexPosition: Int, ){ /* @@ -124,9 +124,12 @@ class JsEditorItem( currentFannelName, currentFannelState ) ?: return + val editComponentListAdapter = + editFragment.binding.editListRecyclerView.adapter as EditComponentListAdapter + val editContext = editFragment.context ?: return ExecWriteItem.write( - editFragment, - selectedItem, + editContext, + editComponentListAdapter, listIndexPosition ) } diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/list_index/JsRenameItem.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/list_index/JsRenameItem.kt index 83eec830e..af156ba3d 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/list_index/JsRenameItem.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/list_index/JsRenameItem.kt @@ -1,6 +1,7 @@ package com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.list_index import android.webkit.JavascriptInterface +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter import com.puutaro.commandclick.fragment.TerminalFragment import com.puutaro.commandclick.proccess.js_macro_libs.list_index_libs.ExecRenameFile import com.puutaro.commandclick.util.state.FannelInfoTool @@ -13,8 +14,8 @@ class JsRenameItem( @JavascriptInterface fun rename_S( - selectedItem: String, - listIndexPosition: Int + listIndexPosition: Int, + srcFragmentStr: String ){ /* ## Description @@ -47,24 +48,30 @@ class JsRenameItem( */ val terminalFragment = terminalFragmentRef.get() ?: return - val activity = terminalFragment.activity - val fannelInfoMap = terminalFragment.fannelInfoMap - val currentFannelName = FannelInfoTool.getCurrentFannelName( - fannelInfoMap - ) - val currentFannelState = FannelInfoTool.getCurrentStateName( - fannelInfoMap - ) - val editFragment = TargetFragmentInstance.getCurrentEditFragmentFromFragment( - activity, -// currentAppDirPath, - currentFannelName, - currentFannelState - ) ?: return - ExecRenameFile.rename( - editFragment, - selectedItem, + val context = terminalFragment.context ?: return + val lisetener = context as TerminalFragment.OnTextViewAndMapListUpdateListenerForTerm + lisetener.onTextViewAndMapListUpdateForTerm( listIndexPosition, + srcFragmentStr ) +// val activity = terminalFragment.activity +// val fannelInfoMap = terminalFragment.fannelInfoMap +// val currentFannelName = FannelInfoTool.getCurrentFannelName( +// fannelInfoMap +// ) +// val currentFannelState = FannelInfoTool.getCurrentStateName( +// fannelInfoMap +// ) +// val editFragment = TargetFragmentInstance.getCurrentEditFragmentFromFragment( +// activity, +//// currentAppDirPath, +// currentFannelName, +// currentFannelState +// ) ?: return +// ExecRenameFile.rename( +// editFragment, +// editFragment.binding.editListRecyclerView, +// listIndexPosition, +// ) } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/list_index/JsShowItemCon.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/list_index/JsShowItemCon.kt index c02808a99..b3447ff45 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/list_index/JsShowItemCon.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/list_index/JsShowItemCon.kt @@ -1,6 +1,7 @@ package com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.list_index import android.webkit.JavascriptInterface +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter import com.puutaro.commandclick.fragment.TerminalFragment import com.puutaro.commandclick.proccess.js_macro_libs.list_index_libs.ExecItemCat import com.puutaro.commandclick.util.state.FannelInfoTool @@ -13,7 +14,6 @@ class JsShowItemCon( @JavascriptInterface fun show_S( - selectedItem: String, listIndexPosition: Int, ){ @@ -64,9 +64,12 @@ class JsShowItemCon( currentFannelName, currentFannelState ) ?: return + val editComponentListAdapter = + editFragment.binding.editListRecyclerView.adapter as EditComponentListAdapter + val editContext = editFragment.context ?: return ExecItemCat.cat( - editFragment, - selectedItem, + editContext, + editComponentListAdapter, listIndexPosition ) } diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/qr/JsQrEdit.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/qr/JsQrEdit.kt index d93304ca5..207ded3b9 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/qr/JsQrEdit.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/qr/JsQrEdit.kt @@ -103,99 +103,99 @@ class JsQrEdit( } } else -> { - editAndSaveByFormDialog( - qrConFilePath, - qrConWithNewLine, - qrMap - ) +// editAndSaveByFormDialog( +// qrConFilePath, +// qrConWithNewLine, +// qrMap +// ) context?.sendBroadcast(broadcastIntent) } } } - private fun editAndSaveByFormDialog( - qrConFilePath: String, - qrConWithNewLine: String, - qrMap: Map - ) { - val fannelDirPath = CcPathTool.getMainFannelDirPath( - qrConFilePath - ) - val listSaveDirPath = "${fannelDirPath}/cmdclickQrList" - val resultKeyValueCon = makeResultKeyValueCon( - qrConFilePath, - qrMap, - listSaveDirPath, - ) - if( - resultKeyValueCon.isEmpty() - ) return - val updateQrMap = CmdClickMap.createMap( - resultKeyValueCon, - '\n' - ).toMap() - val jsListSelect = JsListSelect(terminalFragmentRef) - updateQrMap.keys.forEach { - val listPath = "${listSaveDirPath}/${it}List.txt" - val value = updateQrMap.get(it) ?: return@forEach - jsListSelect.updateListFileCon( - listPath, - value - ) - } - val updateQrCon = QrContents.makeFromMap( - qrConWithNewLine, - updateQrMap - ) - if( - updateQrCon.isEmpty() - ) return - FileSystems.writeFile( - qrConFilePath, - updateQrCon - ) - } +// private fun editAndSaveByFormDialog( +// qrConFilePath: String, +// qrConWithNewLine: String, +// qrMap: Map +// ) { +// val fannelDirPath = CcPathTool.getMainFannelDirPath( +// qrConFilePath +// ) +// val listSaveDirPath = "${fannelDirPath}/cmdclickQrList" +// val resultKeyValueCon = makeResultKeyValueCon( +// qrConFilePath, +// qrMap, +// listSaveDirPath, +// ) +// if( +// resultKeyValueCon.isEmpty() +// ) return +// val updateQrMap = CmdClickMap.createMap( +// resultKeyValueCon, +// '\n' +// ).toMap() +// val jsListSelect = JsListSelect(terminalFragmentRef) +// updateQrMap.keys.forEach { +// val listPath = "${listSaveDirPath}/${it}List.txt" +// val value = updateQrMap.get(it) ?: return@forEach +// jsListSelect.updateListFileCon( +// listPath, +// value +// ) +// } +// val updateQrCon = QrContents.makeFromMap( +// qrConWithNewLine, +// updateQrMap +// ) +// if( +// updateQrCon.isEmpty() +// ) return +// FileSystems.writeFile( +// qrConFilePath, +// updateQrCon +// ) +// } - private fun makeResultKeyValueCon( - qrConFilePath: String, - qrMap: Map, - listSaveDirPath: String, - ): String { - val qrConFileName = File(qrConFilePath).name - val valLabelMacro = EditTextSupportViewName.VARIABLE_LABEL.str - val txtEmphasisMacro = EditTextSupportViewName.EDIT_TEXT_EMPHASIS.str - val listConSBMacro = EditTextSupportViewName.EDITABLE_LIST_CONTENTS_SELECT_BOX.str - val listConListPathKey = ListContentsSelectSpinnerViewProducer.ListContentsEditKey.listPath.name - val listConLimitNumKey = ListContentsSelectSpinnerViewProducer.ListContentsEditKey.limitNum.name - val listConInitMark = ListContentsSelectSpinnerViewProducer.ListContentsEditKey.initMark.name - val setVariableTypes = qrMap.keys.map { - val listPath = "${listSaveDirPath}/${it}List.txt" - val valNameAndMacro = listOf( - it, - valLabelMacro, - txtEmphasisMacro, - listConSBMacro - ).joinToString(":") - val valValueListStr = listOf( - "label=this", - "${listConListPathKey}=${listPath}?${listConLimitNumKey}=20?${listConInitMark}=DELETE" - ).joinToString("|") - "${valNameAndMacro}=${valValueListStr}" - }.joinToString("\t") - val targetVariables = qrMap.keys.map { - val variableValue = getFromQrMapForForm( - qrMap, - it, - ) - "${it}=${variableValue}" - }.joinToString("\n") - return JsDialog(terminalFragmentRef).formDialog( - "Edit: ${qrConFileName}", - setVariableTypes, - targetVariables, - ) - } +// private fun makeResultKeyValueCon( +// qrConFilePath: String, +// qrMap: Map, +// listSaveDirPath: String, +// ): String { +// val qrConFileName = File(qrConFilePath).name +// val valLabelMacro = EditTextSupportViewName.VARIABLE_LABEL.str +// val txtEmphasisMacro = EditTextSupportViewName.EDIT_TEXT_EMPHASIS.str +// val listConSBMacro = EditTextSupportViewName.EDITABLE_LIST_CONTENTS_SELECT_BOX.str +// val listConListPathKey = ListContentsSelectSpinnerViewProducer.ListContentsEditKey.listPath.name +// val listConLimitNumKey = ListContentsSelectSpinnerViewProducer.ListContentsEditKey.limitNum.name +// val listConInitMark = ListContentsSelectSpinnerViewProducer.ListContentsEditKey.initMark.name +// val setVariableTypes = qrMap.keys.map { +// val listPath = "${listSaveDirPath}/${it}List.txt" +// val valNameAndMacro = listOf( +// it, +// valLabelMacro, +// txtEmphasisMacro, +// listConSBMacro +// ).joinToString(":") +// val valValueListStr = listOf( +// "label=this", +// "${listConListPathKey}=${listPath}?${listConLimitNumKey}=20?${listConInitMark}=DELETE" +// ).joinToString("|") +// "${valNameAndMacro}=${valValueListStr}" +// }.joinToString("\t") +// val targetVariables = qrMap.keys.map { +// val variableValue = getFromQrMapForForm( +// qrMap, +// it, +// ) +// "${it}=${variableValue}" +// }.joinToString("\n") +// return JsDialog(terminalFragmentRef).formDialog( +// "Edit: ${qrConFileName}", +// setVariableTypes, +// targetVariables, +// ) +// } fun getFromQrMapForForm( qrMap: Map, diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/qr/JsQrGetter.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/qr/JsQrGetter.kt index 3f3be51df..f57d8b226 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/qr/JsQrGetter.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/qr/JsQrGetter.kt @@ -2,13 +2,10 @@ package com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.qr import android.webkit.JavascriptInterface import com.puutaro.commandclick.common.variable.path.UsePath -import com.puutaro.commandclick.component.adapter.ListIndexAdapter import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.ListIndexDuplicate import com.puutaro.commandclick.fragment.TerminalFragment import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.dialog.JsDialog import com.puutaro.commandclick.proccess.js_macro_libs.edit_setting_extra.EditSettingExtraArgsTool -import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.ListSettingsForListIndex -import com.puutaro.commandclick.proccess.qr.QrScanner import com.puutaro.commandclick.util.state.FannelInfoTool import com.puutaro.commandclick.util.state.TargetFragmentInstance import kotlinx.coroutines.CoroutineScope @@ -107,11 +104,11 @@ class JsQrGetter( contentsName, ".txt", ) - val parentDirPath = ListSettingsForListIndex.ListIndexListMaker.getFilterDir( - editFragment, - ListIndexAdapter.indexListMap, - ListIndexAdapter.listIndexTypeKey - ) +// val parentDirPath = ListSettingsForListIndex.ListIndexListMaker.getFilterDir( +// editFragment, +// ListIndexAdapter.indexListMap, +// ListIndexAdapter.listIndexTypeKey +// ) ListIndexDuplicate.isFileDetect( // parentDirPath, fileName @@ -126,11 +123,11 @@ class JsQrGetter( EditSettingExtraArgsTool.ExtraKey.COMP_PREFIX.key to compPrefix, EditSettingExtraArgsTool.ExtraKey.COMP_SUFFIX.key to compSuffix, ) - QrScanner.saveFromCamera( - editFragment, - parentDirPath, - stockDirAndCompMap, - fileName - ) +// QrScanner.saveFromCamera( +// editFragment, +//// parentDirPath, +// stockDirAndCompMap, +// fileName +// ) } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/qr/JsQrLogoEdit.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/qr/JsQrLogoEdit.kt index 33f653820..6583da927 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/qr/JsQrLogoEdit.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/qr/JsQrLogoEdit.kt @@ -15,66 +15,66 @@ class JsQrLogoEdit( private val terminalFragmentRef: WeakReference ) { - @JavascriptInterface - fun edit_S( - clickFileName: String, - ){ - /* - - ## Description - - Edit QR image by dialog in [list index](https://github.com/puutaro/CommandClick/blob/master/md/developer/configs/listIndexConfig.md) - - ## Corresponding macro - - -> [EDIT_LOGO](https://github.com/puutaro/CommandClick/blob/master/md/developer/js_action/js_action_macro_for_list_logo.md#edit_logo) - - ## clickFileName arg - - clicked file name - - ## Example - - ```js.js - var=runExecQr - ?func=jsQrLogoEdit.exec_S - ?args= - &clickFileName=${file name} - - ``` - - */ - - val terminalFragment = terminalFragmentRef.get() - ?: return - val activity = terminalFragment.activity - val fannelInfoMap = terminalFragment.fannelInfoMap - val currentFannelName = FannelInfoTool.getCurrentFannelName( - fannelInfoMap - ) - val currentFannelState = FannelInfoTool.getCurrentStateName( - fannelInfoMap - ) - val editFragment = TargetFragmentInstance.getCurrentEditFragmentFromFragment( - activity, -// currentAppDirPath, - currentFannelName, - currentFannelState - ) ?: return -// val parentDirPath = ActionToolForQr.getParentDirPath( -// editFragment +// @JavascriptInterface +// fun edit_S( +// clickFileName: String, +// ){ +// /* +// +// ## Description +// +// Edit QR image by dialog in [list index](https://github.com/puutaro/CommandClick/blob/master/md/developer/configs/listIndexConfig.md) +// +// ## Corresponding macro +// +// -> [EDIT_LOGO](https://github.com/puutaro/CommandClick/blob/master/md/developer/js_action/js_action_macro_for_list_logo.md#edit_logo) +// +// ## clickFileName arg +// +// clicked file name +// +// ## Example +// +// ```js.js +// var=runExecQr +// ?func=jsQrLogoEdit.exec_S +// ?args= +// &clickFileName=${file name} +// +// ``` +// +// */ +// +// val terminalFragment = terminalFragmentRef.get() +// ?: return +// val activity = terminalFragment.activity +// val fannelInfoMap = terminalFragment.fannelInfoMap +// val currentFannelName = FannelInfoTool.getCurrentFannelName( +// fannelInfoMap +// ) +// val currentFannelState = FannelInfoTool.getCurrentStateName( +// fannelInfoMap // ) -// ToastUtils.showShort("show: ${parentDirPath}: ${clickFileName}") - CoroutineScope(Dispatchers.Main).launch { - withContext(Dispatchers.Main) { - QrLogoEditDialogLauncher.launch( - editFragment, -// parentDirPath, - clickFileName, - editFragment.qrDialogConfig ?: emptyMap(), -// qrDialogConfigMap - ) - } - } - } +// val editFragment = TargetFragmentInstance.getCurrentEditFragmentFromFragment( +// activity, +//// currentAppDirPath, +// currentFannelName, +// currentFannelState +// ) ?: return +//// val parentDirPath = ActionToolForQr.getParentDirPath( +//// editFragment +//// ) +//// ToastUtils.showShort("show: ${parentDirPath}: ${clickFileName}") +// CoroutineScope(Dispatchers.Main).launch { +// withContext(Dispatchers.Main) { +// QrLogoEditDialogLauncher.launch( +// editFragment, +//// parentDirPath, +// clickFileName, +// editFragment.qrDialogConfig ?: emptyMap(), +//// qrDialogConfigMap +// ) +// } +// } +// } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/system/JsFannelInfo.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/system/JsFannelInfo.kt new file mode 100644 index 000000000..fc2056375 --- /dev/null +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/system/JsFannelInfo.kt @@ -0,0 +1,26 @@ +package com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.system + +import android.webkit.JavascriptInterface +import com.puutaro.commandclick.common.variable.settings.FannelInfoSetting +import com.puutaro.commandclick.fragment.TerminalFragment +import java.lang.ref.WeakReference + +class JsFannelInfo( + terminalFragment: WeakReference +) { + + companion object { + val fannelInfoMapSeparator = '|' + } + + @JavascriptInterface + fun make( + currentFannelName: String = String(), + currentFannelState: String = String() + ): String { + return listOf( + "${FannelInfoSetting.current_fannel_name.name}=${currentFannelName}", + "${FannelInfoSetting.current_fannel_state.name}=${currentFannelState}", + ).joinToString(fannelInfoMapSeparator.toString()) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/system/JsSelectMonitor.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/system/JsSelectMonitor.kt index dd91d34a2..9c80c727b 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/system/JsSelectMonitor.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/system/JsSelectMonitor.kt @@ -4,11 +4,14 @@ import android.webkit.JavascriptInterface import androidx.fragment.app.activityViewModels import com.blankj.utilcode.util.ToastUtils import com.puutaro.commandclick.R +import com.puutaro.commandclick.common.variable.fannel.SystemFannel import com.puutaro.commandclick.common.variable.path.UsePath +import com.puutaro.commandclick.common.variable.res.CmdClickIcons import com.puutaro.commandclick.fragment.TerminalFragment import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.dialog.JsDialog +import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog.ListJsDialogV2 +import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog.PromptWithListDialog import com.puutaro.commandclick.util.file.FileSystems -import com.puutaro.commandclick.util.state.FannelInfoTool import com.puutaro.commandclick.view_model.activity.TerminalViewModel import java.io.File import java.lang.ref.WeakReference @@ -16,21 +19,35 @@ import java.lang.ref.WeakReference class JsSelectMonitor( private val terminalFragmentRef: WeakReference ) { - val subMenuPairListStr = SettingSubMenuEnums.values().map { - "${it.itemName}\t${it.imageId}" - }.reversed().joinToString("\n") + private val subMenuPairListStr = MonitorFileEnums.entries.map { + "${it.itemName}\t${it.imageStr}" + }.reversed().joinToString(PromptWithListDialog.valueSeparator.toString()) + private val switchOn = PromptWithListDialog.switchOn + private val switchOff = PromptWithListDialog.switchOff @JavascriptInterface fun launch(){ - val selectedMonitorFile = JsDialog(terminalFragmentRef).listDialog( - String(), - String(), - subMenuPairListStr + val terminalFragment = terminalFragmentRef.get() + ?: return + val terminalViewModel: TerminalViewModel by terminalFragment.activityViewModels() + val listDialogMapCon = listOf( + "${ListJsDialogV2.ListJsDialogKey.SEARCH_VISIBLE.key}=${PromptWithListDialog.switchOff}", + "${ListJsDialogV2.ListJsDialogKey.SAVE_TAG.key}=selectMonitor", + "${ListJsDialogV2.ListJsDialogKey.FOCUS_ITEM_TITLES.key}=${terminalViewModel.currentMonitorFileName}", +// "${ListJsDialogV2.ListJsDialogKey.BACKGROUND_TYPE.key}=${PromptWithListDialog.Companion.PromptBackground.Type.transparent.name}", +// "${ListJsDialogV2.ListJsDialogKey.MAX_LINES.key}=null", +// "${ListJsDialogV2.ListJsDialogKey.ON_KEY_OPEN_MODE.key}=${switchOff}", + ).joinToString(ListJsDialogV2.listJsDialogMapSeparator.toString()) + val selectedMonitorFile = JsDialog(terminalFragmentRef).list( + File(UsePath.cmdclickDefaultAppDirPath, SystemFannel.preference).absolutePath, + "Select monitor", + subMenuPairListStr, + listDialogMapCon ) if( selectedMonitorFile.isEmpty() ) return - SettingSubMenuEnums.values().firstOrNull { + MonitorFileEnums.entries.firstOrNull { it.itemName == selectedMonitorFile } ?: return FileSystems.createDirs( @@ -42,20 +59,17 @@ class JsSelectMonitor( selectedMonitorFile ).absolutePath ) - val terminalFragment = terminalFragmentRef.get() - ?: return - val terminalViewModel: TerminalViewModel by terminalFragment.activityViewModels() terminalViewModel.currentMonitorFileName = selectedMonitorFile ToastUtils.showShort("set ${selectedMonitorFile}") } - private enum class SettingSubMenuEnums( + private enum class MonitorFileEnums( val itemName: String, - val imageId: Int + val imageStr: String ){ - MONITOR_1(UsePath.cmdClickMonitorFileName_1, R.drawable.icons8_file), - MONITOR_2(UsePath.cmdClickMonitorFileName_2, R.drawable.icons8_file), - MONITOR_3(UsePath.cmdClickMonitorFileName_3, R.drawable.icons8_file), - MONITOR_4(UsePath.cmdClickMonitorFileName_4, R.drawable.icons8_file) + MONITOR_1(UsePath.cmdClickMonitorFileName_1, CmdClickIcons.FILE.str), + MONITOR_2(UsePath.cmdClickMonitorFileName_2, CmdClickIcons.FILE.str), + MONITOR_3(UsePath.cmdClickMonitorFileName_3, CmdClickIcons.FILE.str), + MONITOR_4(UsePath.cmdClickMonitorFileName_4, CmdClickIcons.FILE.str) } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/system/JsSettingValFrag.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/system/JsSettingValFrag.kt index 64c4c1ca0..2b59a3f0a 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/system/JsSettingValFrag.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/system/JsSettingValFrag.kt @@ -14,36 +14,36 @@ class JsSettingValFrag( private val terminalFragmentRef: WeakReference ) { - @JavascriptInterface - fun change_S( - fannelState: String - ){ - val terminalFragment = terminalFragmentRef.get() - ?: return - val context = terminalFragment.context - val activity = terminalFragment.activity - val fannelInfoMap = terminalFragment.fannelInfoMap - val currentFannelName = FannelInfoTool.getCurrentFannelName( - fannelInfoMap - ) - val listener = - context as? TerminalFragment.OnChangeEditFragmentListenerForTerm - ?: return - val editFragArg = EditFragmentArgs( - fannelInfoMap, - EditFragmentArgs.Companion.EditTypeSettingsKey.SETTING_VAL_EDIT, - ) - val settingFragTag = FragmentTagManager.makeSettingValEditTag( -// currentAppDirPath, - currentFannelName, - fannelState - ) - listener.onChangeEditFragment( - editFragArg, - settingFragTag, - activity?.getString( - R.string.edit_terminal_fragment - ) ?: String() - ) - } +// @JavascriptInterface +// fun change_S( +// fannelState: String +// ){ +// val terminalFragment = terminalFragmentRef.get() +// ?: return +// val context = terminalFragment.context +// val activity = terminalFragment.activity +// val fannelInfoMap = terminalFragment.fannelInfoMap +// val currentFannelName = FannelInfoTool.getCurrentFannelName( +// fannelInfoMap +// ) +// val listener = +// context as? TerminalFragment.OnChangeEditFragmentListenerForTerm +// ?: return +// val editFragArg = EditFragmentArgs( +// fannelInfoMap, +// EditFragmentArgs.Companion.EditTypeSettingsKey.SETTING_VAL_EDIT, +// ) +// val settingFragTag = FragmentTagManager.makeSettingValEditTag( +//// currentAppDirPath, +// currentFannelName, +// fannelState +// ) +// listener.onChangeEditFragment( +// editFragArg, +// settingFragTag, +// activity?.getString( +// R.string.edit_terminal_fragment +// ) ?: String() +// ) +// } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/system/JsStateChange.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/system/JsStateChange.kt index af1161346..4bf1066d5 100644 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/system/JsStateChange.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/system/JsStateChange.kt @@ -93,7 +93,7 @@ class JsStateChange( listDirValueKey, ) ?: return val listDirKey = - ListSettingsForListIndex.ListSettingKey.LIST_DIR.key + ListSettingsForListIndex.ListSettingKey.MAP_LIST_PATH.key TsvTool.updateTsvByKey( listDirTsvPath, listOf("${listDirKey}\t${listDirValue}") @@ -164,7 +164,7 @@ class JsStateChange( listDirTsvPathKey ) ?: return null val listDirKey = - ListSettingsForListIndex.ListSettingKey.LIST_DIR.key + ListSettingsForListIndex.ListSettingKey.MAP_LIST_PATH.key val saveListDirPath = TsvTool.getKeyValue( listDirTsvPath, listDirKey, diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/system/JsToolbarSwitcher.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/system/JsToolbarSwitcher.kt index e9aca1d80..d1045b271 100644 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/system/JsToolbarSwitcher.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/system/JsToolbarSwitcher.kt @@ -55,21 +55,21 @@ class JsToolbarSwitcher( val currentFannelState = FannelInfoTool.getCurrentStateName( fannelInfoMap ) - CoroutineScope(Dispatchers.Main).launch { - val editFragment = withContext(Dispatchers.Main) { - TargetFragmentInstance.getCurrentEditFragmentFromFragment( - activity, -// currentAppDirPath, - currentFannelName, - currentFannelState, - ) - } ?: return@launch - withContext(Dispatchers.Main) { - EditToolbarSwitcher.switch( - editFragment, - execPlayBtnLongPress - ) - } - } +// CoroutineScope(Dispatchers.Main).launch { +// val editFragment = withContext(Dispatchers.Main) { +// TargetFragmentInstance.getCurrentEditFragmentFromFragment( +// activity, +//// currentAppDirPath, +// currentFannelName, +// currentFannelState, +// ) +// } ?: return@launch +// withContext(Dispatchers.Main) { +// EditToolbarSwitcher.switch( +// editFragment, +// execPlayBtnLongPress +// ) +// } +// } } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/text/JsText.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/text/JsText.kt index f1e60cc0c..51ca3f877 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/text/JsText.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/text/JsText.kt @@ -111,6 +111,26 @@ class JsText( return lastTakenCon } + @JavascriptInterface + fun repeat( + con: String, + separator: String, + repeatNum: Int, + ): String{ + + /* + ## Description + + Take last ${takeNum} element + */ + + if(repeatNum < 1) return con + val lastTakenCon = (1..repeatNum).map { + con.split(separator) + }.flatten().joinToString(separator) + return lastTakenCon + } + @JavascriptInterface fun distinct( con: String, diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/toolbar/JsEditToolbarSwitcher.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/toolbar/JsEditToolbarSwitcher.kt index ac78bc7c2..dc51a4a36 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/toolbar/JsEditToolbarSwitcher.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/toolbar/JsEditToolbarSwitcher.kt @@ -35,13 +35,13 @@ class JsEditToolbarSwitcher( currentFannelName, currentFannelState ) ?: return - CoroutineScope(Dispatchers.Main).launch { - withContext(Dispatchers.Main){ - EditToolbarSwitcher.switch( - editFragment, - switchMacro, - ) - } - } +// CoroutineScope(Dispatchers.Main).launch { +// withContext(Dispatchers.Main){ +// EditToolbarSwitcher.switch( +// editFragment, +// switchMacro, +// ) +// } +// } } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/toolbar/JsFileAdder.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/toolbar/JsFileAdder.kt index bf28cccff..687367a41 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/toolbar/JsFileAdder.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/toolbar/JsFileAdder.kt @@ -1,30 +1,20 @@ package com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.toolbar import android.webkit.JavascriptInterface -import com.puutaro.commandclick.common.variable.broadcast.scheme.BroadCastIntentSchemeForEdit -import com.puutaro.commandclick.component.adapter.ListIndexAdapter -import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.ExecAddForListIndexAdapter +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter +import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.ExecAddForEditListAdapter import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.ListIndexDuplicate import com.puutaro.commandclick.fragment.EditFragment import com.puutaro.commandclick.fragment.TerminalFragment import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.dialog.JsDialog -import com.puutaro.commandclick.proccess.broadcast.BroadcastSender import com.puutaro.commandclick.proccess.edit.lib.EditSeparator import com.puutaro.commandclick.proccess.js_macro_libs.edit_setting_extra.EditSettingExtraArgsTool import com.puutaro.commandclick.proccess.js_macro_libs.toolbar_libs.AddFileForEdit -import com.puutaro.commandclick.proccess.list_index_for_edit.ListIndexEditConfig 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.util.file.FileSystems import com.puutaro.commandclick.util.map.CmdClickMap import com.puutaro.commandclick.util.map.FilePrefixGetter import com.puutaro.commandclick.util.state.FannelInfoTool import com.puutaro.commandclick.util.state.TargetFragmentInstance -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.delay -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext import java.io.File import java.lang.ref.WeakReference @@ -106,81 +96,87 @@ class JsFileAdder( if( fileName.isEmpty() ) return - val type = ListIndexEditConfig.getListIndexType( - editFragment - ) - when(type){ -// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL -// -> return - TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT -> - execAddForTsv( - editFragment, - fileName, - compFileNameMapCon, - separator, - ) - TypeSettingsForListIndex.ListIndexTypeKey.NORMAL - -> execAddForNormal( - editFragment, - fileName, - compFileNameMapCon, - separator, - ) - } - } - - private fun execAddForNormal( - editFragment: EditFragment, - fileName: String, - compFileNameMapCon: String, - separator: String, - ){ - val context = editFragment.context - val parentDirPath = - ListSettingsForListIndex.ListIndexListMaker.getFilterDir( - editFragment, - ListIndexAdapter.indexListMap, - ListIndexAdapter.listIndexTypeKey - ) - val compFileNameMap = CmdClickMap.createMap( - compFileNameMapCon, - separator.firstOrNull() ?: '|', - ).toMap() - val compFileName = EditSettingExtraArgsTool.makeCompFileName( +// val type = ListIndexEditConfig.getListIndexType( +// editFragment +// ) + execAddForMapList( editFragment, fileName, - compFileNameMap, - ) - ListIndexDuplicate.isFileDetect( -// parentDirPath, - compFileName, - ).let { - isDetect -> - if( - isDetect - ) return - } - FileSystems.writeFile( - File( - parentDirPath, - compFileName - ).absolutePath, - String() + compFileNameMapCon, + separator, ) - CoroutineScope(Dispatchers.IO).launch { - withContext(Dispatchers.IO){ - delay(200) - } - withContext(Dispatchers.IO) { - BroadcastSender.normalSend( - context, - BroadCastIntentSchemeForEdit.UPDATE_INDEX_LIST.action - ) - } - } +// when(type){ +//// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL +//// -> return +// TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT -> +// execAddForTsv( +// editFragment, +// fileName, +// compFileNameMapCon, +// separator, +// ) +// TypeSettingsForListIndex.ListIndexTypeKey.NORMAL +// -> execAddForNormal( +// editFragment, +// fileName, +// compFileNameMapCon, +// separator, +// ) +// } } - private fun execAddForTsv( +// private fun execAddForNormal( +// editFragment: EditFragment, +// fileName: String, +// compFileNameMapCon: String, +// separator: String, +// ){ +// val context = editFragment.context +//// val parentDirPath = +//// ListSettingsForListIndex.ListIndexListMaker.getFilterDir( +//// editFragment, +//// ListIndexAdapter.indexListMap, +//// ListIndexAdapter.listIndexTypeKey +//// ) +// val compFileNameMap = CmdClickMap.createMap( +// compFileNameMapCon, +// separator.firstOrNull() ?: '|', +// ).toMap() +// val compFileName = EditSettingExtraArgsTool.makeCompFileName( +// editFragment, +// fileName, +// compFileNameMap, +// ) +// ListIndexDuplicate.isFileDetect( +//// parentDirPath, +// compFileName, +// ).let { +// isDetect -> +// if( +// isDetect +// ) return +// } +// FileSystems.writeFile( +// File( +// parentDirPath, +// compFileName +// ).absolutePath, +// String() +// ) +// CoroutineScope(Dispatchers.IO).launch { +// withContext(Dispatchers.IO){ +// delay(200) +// } +// withContext(Dispatchers.IO) { +// BroadcastSender.normalSend( +// context, +// BroadCastIntentSchemeForEdit.UPDATE_INDEX_LIST.action +// ) +// } +// } +// } + + private fun execAddForMapList( editFragment: EditFragment, fileName: String, compFileNameMapCon: String, @@ -202,11 +198,14 @@ class JsFileAdder( fileName, compFileNameMap, ) + val editComponentListAdapter = + editFragment.binding.editListRecyclerView.adapter as EditComponentListAdapter val tsvPath = FilePrefixGetter.get( - editFragment, - ListIndexAdapter.indexListMap, - ListSettingsForListIndex.ListSettingKey.LIST_DIR.key, + editFragment.fannelInfoMap, + editFragment.setReplaceVariableMap, + editComponentListAdapter.editListMap, + ListSettingsForListIndex.ListSettingKey.MAP_LIST_PATH.key, ) ?: String() ListIndexDuplicate.isTsvDetect( tsvPath, @@ -218,7 +217,11 @@ class JsFileAdder( isDetect ) return } - val insertLine = "${title}\t${compFilePath}" +// val insertLine = "${title}\t${compFilePath}" + val insertLineMap = mapOf( + ListSettingsForListIndex.MapListPathManager.Key.SRC_TITLE.key to title, + ListSettingsForListIndex.MapListPathManager.Key.SRC_CON.key to compFilePath, + ) // FileSystems.updateFile( // File(UsePath.cmdclickDefaultAppDirPath, "add_makeCompfileName.txt").absolutePath, // listOf( @@ -231,9 +234,13 @@ class JsFileAdder( // "insertLine: ${insertLine}", // ).joinToString("\n\n\n") // ) - ExecAddForListIndexAdapter.execAddForTsv( - editFragment, - insertLine, + val editContext = editFragment.context ?: return + ExecAddForEditListAdapter.execAddForEditList( + editContext, + editFragment.fannelInfoMap, + editFragment.setReplaceVariableMap, + editFragment.binding.editListRecyclerView, + insertLineMap, ) } 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 666bc8414..29acab69a 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 @@ -1,12 +1,9 @@ package com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.toolbar import android.webkit.JavascriptInterface -import com.puutaro.commandclick.common.variable.path.UsePath -import com.puutaro.commandclick.component.adapter.ListIndexAdapter import com.puutaro.commandclick.fragment.TerminalFragment import com.puutaro.commandclick.proccess.edit.lib.FilePickerTool import com.puutaro.commandclick.proccess.js_macro_libs.edit_setting_extra.EditSettingExtraArgsTool -import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.ListSettingsForListIndex import com.puutaro.commandclick.util.map.CmdClickMap import com.puutaro.commandclick.util.state.FannelInfoTool import com.puutaro.commandclick.util.state.TargetFragmentInstance @@ -91,17 +88,21 @@ class JsFileOrDirGetter( currentFannelName, currentFannelState ) ?: return - val parentDirPath = - when ( - editFragment.existIndexList - ) { - true -> ListSettingsForListIndex.ListIndexListMaker.getFilterDir( - editFragment, - ListIndexAdapter.indexListMap, - ListIndexAdapter.listIndexTypeKey - ) - else -> UsePath.cmdclickDefaultAppDirPath - } +// val parentDirPath = ListSettingsForListIndex.ListIndexListMaker.getFilterDir( +// editFragment, +// ListIndexAdapter.indexListMap, +// ListIndexAdapter.listIndexTypeKey +// ) +// when ( +// editFragment.existIndexList +// ) { +// true -> ListSettingsForListIndex.ListIndexListMaker.getFilterDir( +// editFragment, +// ListIndexAdapter.indexListMap, +// ListIndexAdapter.listIndexTypeKey +// ) +// else -> UsePath.cmdclickDefaultAppDirPath +// } val filterMap = CmdClickMap.createMap( filterMapCon, filterMapSeparator, @@ -135,7 +136,7 @@ class JsFileOrDirGetter( context as? TerminalFragment.OnGetFileListenerForTerm ?: return listener.onGetFileForTerm( - parentDirPath, +// parentDirPath, onDirectoryPick, filterFilterPrefixListCon, filterFilterSuffixListCon, diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/toolbar/JsToolbar.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/toolbar/JsToolbar.kt index 99d457f7d..54cf25144 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/toolbar/JsToolbar.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/js_interface/toolbar/JsToolbar.kt @@ -3,14 +3,12 @@ package com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.too import android.webkit.JavascriptInterface import com.puutaro.commandclick.common.variable.path.UsePath import com.puutaro.commandclick.common.variable.variables.CommandClickScriptVariable -import com.puutaro.commandclick.component.adapter.ListIndexAdapter -import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.ExecAddForListIndexAdapter +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter +import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.ExecAddForEditListAdapter import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.ListIndexDuplicate import com.puutaro.commandclick.fragment.TerminalFragment import com.puutaro.commandclick.proccess.js_macro_libs.edit_setting_extra.EditSettingExtraArgsTool -import com.puutaro.commandclick.proccess.list_index_for_edit.ListIndexEditConfig 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.util.LogSystems import com.puutaro.commandclick.util.file.FileSystems import com.puutaro.commandclick.util.map.FilePrefixGetter @@ -49,10 +47,12 @@ class JsToolbar( if( editFragment == null ) return null + val editComponentListAdapter = editFragment.binding.editListRecyclerView.adapter as EditComponentListAdapter val listKeyCon = FilePrefixGetter.get( - editFragment, - ListIndexAdapter.indexListMap, - ListSettingsForListIndex.ListSettingKey.LIST_DIR.key, + editFragment.fannelInfoMap, + editFragment.setReplaceVariableMap, + editComponentListAdapter.editListMap, + ListSettingsForListIndex.ListSettingKey.MAP_LIST_PATH.key, ) return listKeyCon } @@ -82,9 +82,9 @@ class JsToolbar( currentFannelName, currentFannelState ) ?: return - val listIndexType = ListIndexEditConfig.getListIndexType( - editFragment - ) +// val listIndexType = ListIndexEditConfig.getListIndexType( +// editFragment +// ) val extraMap = makeSaveDirPathAndCompSuffixMap( urlConSaveParentDirPathSrc, compSuffix, @@ -129,7 +129,7 @@ class JsToolbar( CoroutineScope(Dispatchers.Main).launch { withContext(Dispatchers.Main) { addAndSort( - listIndexType, +// listIndexType, listIndexPath, compFileName, ) @@ -168,7 +168,10 @@ class JsToolbar( ) return@withContext siteTitleSrc urlString } - val insertLine = "${siteTitle}\t${urlString}" + val insertLineMap = mapOf( + ListSettingsForListIndex.MapListPathManager.Key.SRC_TITLE.key to siteTitle, + ListSettingsForListIndex.MapListPathManager.Key.SRC_CON.key to urlString, + ) withContext(Dispatchers.Main) { val editFragment = TargetFragmentInstance.getCurrentEditFragmentFromFragment( activity, @@ -176,11 +179,16 @@ class JsToolbar( currentFannelName, currentFannelState ) ?: return@withContext + val editListRecyclerView = + editFragment.binding.editListRecyclerView + val editComponentListAdapter = + editListRecyclerView.adapter as EditComponentListAdapter val tsvPath = FilePrefixGetter.get( - editFragment, - ListIndexAdapter.indexListMap, - ListSettingsForListIndex.ListSettingKey.LIST_DIR.key, + editFragment.fannelInfoMap, + editFragment.setReplaceVariableMap, + editComponentListAdapter.editListMap, + ListSettingsForListIndex.ListSettingKey.MAP_LIST_PATH.key, ) ?: String() ListIndexDuplicate.isTsvDetect( tsvPath, @@ -193,9 +201,13 @@ class JsToolbar( ) return@withContext } try { - ExecAddForListIndexAdapter.execAddForTsv( - editFragment, - insertLine + val editContext = editFragment.context ?: return@withContext + ExecAddForEditListAdapter.execAddForEditList( + editContext, + editFragment.fannelInfoMap, + editFragment.setReplaceVariableMap, + editListRecyclerView, + insertLineMap ) } catch(e: Exception){ LogSystems.stdErr( @@ -219,41 +231,41 @@ class JsToolbar( ) } - private fun makeUrlConSaveParentDirPath( - extraMap: Map, - listIndexType: TypeSettingsForListIndex.ListIndexTypeKey, - listIndexPath: String - ): String? { - val terminalFragment = terminalFragmentRef.get() - ?: return null - val activity = terminalFragment.activity - val fannelInfoMap = terminalFragment.fannelInfoMap - val currentFannelName = FannelInfoTool.getCurrentFannelName( - fannelInfoMap - ) - val currentFannelState = FannelInfoTool.getCurrentStateName( - fannelInfoMap - ) - TargetFragmentInstance.getCurrentEditFragmentFromFragment( - activity, -// currentAppDirPath, - currentFannelName, - currentFannelState - ) ?: return null - return when(listIndexType){ -// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL, - TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT - -> EditSettingExtraArgsTool.getParentDirPath( - extraMap, -// currentAppDirPath, - ) - TypeSettingsForListIndex.ListIndexTypeKey.NORMAL - -> listIndexPath - } - } +// private fun makeUrlConSaveParentDirPath( +// extraMap: Map, +// listIndexType: TypeSettingsForListIndex.ListIndexTypeKey, +// listIndexPath: String +// ): String? { +// val terminalFragment = terminalFragmentRef.get() +// ?: return null +// val activity = terminalFragment.activity +// val fannelInfoMap = terminalFragment.fannelInfoMap +// val currentFannelName = FannelInfoTool.getCurrentFannelName( +// fannelInfoMap +// ) +// val currentFannelState = FannelInfoTool.getCurrentStateName( +// fannelInfoMap +// ) +// TargetFragmentInstance.getCurrentEditFragmentFromFragment( +// activity, +//// currentAppDirPath, +// currentFannelName, +// currentFannelState +// ) ?: return null +// return when(listIndexType){ +//// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL, +// TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT +// -> EditSettingExtraArgsTool.getParentDirPath( +// extraMap, +//// currentAppDirPath, +// ) +// TypeSettingsForListIndex.ListIndexTypeKey.NORMAL +// -> listIndexPath +// } +// } private fun addAndSort( - listIndexType: TypeSettingsForListIndex.ListIndexTypeKey, +// listIndexType: TypeSettingsForListIndex.ListIndexTypeKey, listIndexPath: String, // urlConSaveParentDirPath: String, fileName: String, @@ -274,24 +286,36 @@ class JsToolbar( currentFannelName, currentFannelState ) ?: return - when(listIndexType){ -// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL, - TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT - -> { - val insertLine = listOf( - fileName, - File(UsePath.cmdclickDefaultAppDirPath, fileName).absolutePath - ).joinToString("\t") - ExecAddForListIndexAdapter.execAddForTsv( - editFragment, - insertLine - ) - } - TypeSettingsForListIndex.ListIndexTypeKey.NORMAL - -> ExecAddForListIndexAdapter.sortInAddFile( - editFragment, - File(listIndexPath, fileName).absolutePath - ) - } + val editContext = editFragment.context ?: return + val insertLine = mapOf( + ListSettingsForListIndex.MapListPathManager.Key.SRC_TITLE.key to fileName, + ListSettingsForListIndex.MapListPathManager.Key.SRC_CON.key to File(UsePath.cmdclickDefaultAppDirPath, fileName).absolutePath + ) + ExecAddForEditListAdapter.execAddForEditList( + editContext, + editFragment.fannelInfoMap, + editFragment.setReplaceVariableMap, + editFragment.binding.editListRecyclerView, + insertLine + ) +// when(listIndexType){ +//// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL, +// TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT +// -> { +// val insertLine = listOf( +// fileName, +// File(UsePath.cmdclickDefaultAppDirPath, fileName).absolutePath +// ).joinToString("\t") +// ExecAddForListIndexAdapter.execAddForTsv( +// editFragment, +// insertLine +// ) +// } +// TypeSettingsForListIndex.ListIndexTypeKey.NORMAL +// -> ExecAddForListIndexAdapter.sortInAddFile( +// editFragment, +// File(listIndexPath, fileName).absolutePath +// ) +// } } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/proccess/EditListRecyclerViewGetter.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/proccess/EditListRecyclerViewGetter.kt new file mode 100644 index 000000000..47fb5ef81 --- /dev/null +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/proccess/EditListRecyclerViewGetter.kt @@ -0,0 +1,81 @@ +package com.puutaro.commandclick.fragment_lib.terminal_fragment.proccess + +import androidx.recyclerview.widget.RecyclerView +import com.blankj.utilcode.util.ToastUtils +import com.puutaro.commandclick.R +import com.puutaro.commandclick.fragment.EditFragment +import com.puutaro.commandclick.fragment.TerminalFragment +import com.puutaro.commandclick.util.LogSystems +import com.puutaro.commandclick.util.state.TargetFragmentInstance + +object EditListRecyclerViewGetter { + + fun get( + terminalFragment: TerminalFragment?, + srcFragStr: String + ): RecyclerView? { + val recyclerViewFrag = RecyclerViewFragment.values().firstOrNull { + it.frag == srcFragStr + } + if(recyclerViewFrag == null){ + ToastUtils.showShort("not found srcFragStr: ${srcFragStr}") + return null + } + val recyclerView = when(recyclerViewFrag){ + RecyclerViewFragment.WEB -> { + getFromTermFrag(terminalFragment) + } + RecyclerViewFragment.EDIT -> { + getFromEditFrag(terminalFragment) + } + } + if(recyclerView == null){ + ToastUtils.showShort("not found recyclerView") + return null + } + return recyclerView + } + private fun getFromEditFrag( + terminalFragment: TerminalFragment? + ): RecyclerView? { + if( + terminalFragment == null + ) return null + val activity = terminalFragment.activity + val cmdEditFragmentTag = + TargetFragmentInstance.getCmdEditFragmentTag(activity) + val editFragment = TargetFragmentInstance.getCurrentBottomFragmentInFrag( + activity, + cmdEditFragmentTag, + ).let { + bottomFragment -> + if ( + bottomFragment !is EditFragment + ) return null + bottomFragment + } + return editFragment.binding.editListRecyclerView + + } + + private fun getFromTermFrag( + terminalFragment: TerminalFragment? + ): RecyclerView? { + if( + terminalFragment == null + ) return null + return terminalFragment.editListDialog?.findViewById( + R.id.edit_list_dialog_recycler_view + ) + } + + enum class RecyclerViewFragment( + val frag: String + ){ + WEB("web"), + EDIT("edit") + + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/proccess/JsInterfaceAdder.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/proccess/JsInterfaceAdder.kt index e463c5c03..10ed63617 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/proccess/JsInterfaceAdder.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/proccess/JsInterfaceAdder.kt @@ -70,6 +70,7 @@ import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.syst import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.system.JsSystemFannel import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.system.JsExit import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.system.JsFannelExecer +import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.system.JsFannelInfo import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.system.JsKeyboard import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.system.JsMonitorShower import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.system.JsPinFannel @@ -429,6 +430,10 @@ object JsInterfaceAdder { webView, JsPinFannel(terminalFragmentRef) ) + ExecJsInterfaceAdder.add( + webView, + JsFannelInfo(terminalFragmentRef) + ) } private fun toolbarAdder( diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/proccess/LongPressForImage.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/proccess/LongPressForImage.kt index f2adbe5fe..38a2b4221 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/proccess/LongPressForImage.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/proccess/LongPressForImage.kt @@ -1,23 +1,16 @@ package com.puutaro.commandclick.fragment_lib.terminal_fragment.proccess -import android.app.Dialog import android.content.Context -import android.view.Gravity -import android.view.ViewGroup -import android.widget.ListView -import androidx.appcompat.widget.AppCompatEditText -import androidx.appcompat.widget.AppCompatImageButton -import androidx.appcompat.widget.AppCompatTextView -import androidx.core.view.isVisible +import android.webkit.ValueCallback import com.puutaro.commandclick.common.variable.path.UsePath import com.puutaro.commandclick.common.variable.variables.CommandClickScriptVariable -import com.puutaro.commandclick.component.adapter.HistoryListAdapter import com.puutaro.commandclick.fragment.TerminalFragment import com.puutaro.commandclick.fragment_lib.terminal_fragment.proccess.libs.long_press.LongPressMenuTool import com.puutaro.commandclick.proccess.edit.lib.SetReplaceVariabler import com.puutaro.commandclick.proccess.intent.lib.JavascriptExecuter import com.puutaro.commandclick.util.SettingVariableReader import com.puutaro.commandclick.util.file.ReadText +import com.puutaro.commandclick.util.str.QuoteTool import java.io.File import java.lang.ref.WeakReference @@ -26,14 +19,9 @@ class LongPressForImage( private val context: Context?, private val imageMenuFilePath: String, ) { -// private val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( -// fannelInfoMap -// ) private val imageLongPressMenuFilePathObj = File(imageMenuFilePath) private val imageLongPressMenuDirPath = imageLongPressMenuFilePathObj.parent private val imageLongPressMenuFileName = imageLongPressMenuFilePathObj.name - private var longPressImageDialog: Dialog? = null - fun launch( title: String?, @@ -61,12 +49,6 @@ class LongPressForImage( } val terminalFragment = terminalFragmentRef.get() ?: return -// val longPressScriptList = -// LongPressMenuTool.makeLongPressScriptList( -// terminalFragment, -// imageLongPressMenuDirPath, -// imageLongPressMenuFileName, -// ) val longPressScriptList = LongPressMenuTool.makeLongPressScriptList( terminalFragment, imageLongPressMenuDirPath, @@ -92,12 +74,13 @@ class LongPressForImage( val menuList = LongPressMenuTool.LongPressInfoMapList.extractTitleIconOathList( longPressMenuMapList ) + val titleKey = LongPressMenuTool.LongPressKey.TITLE if( menuList.size == 1 ){ val firstMenuTitle = menuList.first().first val jsPath = longPressMenuMapList.firstOrNull { - it.get(LongPressMenuTool.LongPressKey.TITLE) == firstMenuTitle + it.get(titleKey) == firstMenuTitle }?.get(LongPressMenuTool.LongPressKey.JS_PATH) ?: return // val jsPath = LongPressMenuTool.extractJsPathFromLongPressMenuList( // menuList.first().first, @@ -110,119 +93,33 @@ class LongPressForImage( ) return } - - longPressImageDialog = Dialog( - context - ) - longPressImageDialog?.setContentView( - com.puutaro.commandclick.R.layout.list_dialog_layout - ) - val listDialogTitle = longPressImageDialog?.findViewById( - com.puutaro.commandclick.R.id.list_dialog_title - ) - listDialogTitle?.text = title - val listDialogMessage = longPressImageDialog?.findViewById( - com.puutaro.commandclick.R.id.list_dialog_message - ) - listDialogMessage?.isVisible = false - val listDialogSearchEditText = longPressImageDialog?.findViewById( - com.puutaro.commandclick.R.id.list_dialog_search_edit_text - ) - listDialogSearchEditText?.isVisible = false - val cancelButton = longPressImageDialog?.findViewById( - com.puutaro.commandclick.R.id.list_dialog_cancel - ) - cancelButton?.setOnClickListener { - longPressImageDialog?.dismiss() - longPressImageDialog = null - } - - setListView( - menuList, - longPressImageUrl, - currentUrl, - longPressMenuMapList - ) - longPressImageDialog?.window?.setLayout( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.WRAP_CONTENT - ) - longPressImageDialog?.window?.setGravity(Gravity.BOTTOM) - longPressImageDialog?.show() - - longPressImageDialog?.setOnCancelListener{ - longPressImageDialog?.dismiss() - longPressImageDialog = null - } - } - - private fun invokeListItemSetClickListenerForListDialog( - dialogListView: ListView, - longPressMenuMapList: List>, - longPressImageUrl: String, - currentUrl: String, - ) { - - dialogListView.setOnItemClickListener { - parent, View, pos, id - -> - longPressImageDialog?.dismiss() - longPressImageDialog = null - val menuListAdapter = dialogListView.adapter as HistoryListAdapter - val title = menuListAdapter.getItem(pos) - ?: return@setOnItemClickListener - HistoryListAdapter.saveItemToList( - context, - title - ) - val selectedJsPath = longPressMenuMapList.firstOrNull { - it.get(LongPressMenuTool.LongPressKey.TITLE) == title - }?.get(LongPressMenuTool.LongPressKey.JS_PATH) ?: return@setOnItemClickListener - if( - !File(selectedJsPath).isFile - ) return@setOnItemClickListener - -// val selectedMenuName = menuListAdapter.getItem(pos) -// ?: return@setOnItemClickListener -// val selectedJsPath = LongPressMenuTool.extractJsPathFromLongPressMenuList( -// selectedMenuName, -// longPressScriptList, -// ) ?: return@setOnItemClickListener - execJsFile( - selectedJsPath, - longPressImageUrl, - currentUrl, - ) - return@setOnItemClickListener - } - } - - private fun setListView( - menuList: List>, -// longPressScriptList: List, - longPressImageUrl: String, - currentUrl: String, - longPressMenuMapList: List> - - ) { - val terminalFragment = terminalFragmentRef.get() ?: return - val context = terminalFragment.context - ?: return - val subMenuListView = - longPressImageDialog?.findViewById( - com.puutaro.commandclick.R.id.list_dialog_list_view - ) ?: return - val subMenuAdapter = HistoryListAdapter( - context, - menuList.toMutableList() - ) - subMenuListView.adapter = subMenuAdapter - invokeListItemSetClickListenerForListDialog( - subMenuListView, - longPressMenuMapList, - longPressImageUrl, - currentUrl, - ) + val longPressSelectJsScript = LongPressMenuTool.LongPressJsDialogScript.make( + terminalFragment, + title, + menuList.reversed(), + "image", + ) + val terminalWebView = terminalFragment.binding.terminalWebView + terminalWebView.evaluateJavascript( + longPressSelectJsScript, + ValueCallback { selectedTitleSrc -> + val selectedTitle = + QuoteTool.trimBothEdgeQuote(selectedTitleSrc) + if( + selectedTitle.isEmpty() + ) return@ValueCallback + val selectedJsPath = longPressMenuMapList.firstOrNull { + it.get(titleKey) == selectedTitle + }?.get(LongPressMenuTool.LongPressKey.JS_PATH) ?: return@ValueCallback + if( + !File(selectedJsPath).isFile + ) return@ValueCallback + execJsFile( + selectedJsPath, + longPressImageUrl, + currentUrl, + ) + }) } diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/proccess/LongPressForSrcAnchor.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/proccess/LongPressForSrcAnchor.kt index 7381c2b2c..555930d0e 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/proccess/LongPressForSrcAnchor.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/proccess/LongPressForSrcAnchor.kt @@ -1,23 +1,16 @@ package com.puutaro.commandclick.fragment_lib.terminal_fragment.proccess -import android.app.Dialog import android.content.Context -import android.view.Gravity -import android.view.ViewGroup -import android.widget.ListView -import androidx.appcompat.widget.AppCompatEditText -import androidx.appcompat.widget.AppCompatImageButton -import androidx.appcompat.widget.AppCompatTextView -import androidx.core.view.isVisible +import android.webkit.ValueCallback import com.puutaro.commandclick.common.variable.path.UsePath import com.puutaro.commandclick.common.variable.variables.CommandClickScriptVariable -import com.puutaro.commandclick.component.adapter.HistoryListAdapter import com.puutaro.commandclick.fragment.TerminalFragment import com.puutaro.commandclick.fragment_lib.terminal_fragment.proccess.libs.long_press.LongPressMenuTool import com.puutaro.commandclick.proccess.edit.lib.SetReplaceVariabler import com.puutaro.commandclick.proccess.intent.lib.JavascriptExecuter import com.puutaro.commandclick.util.SettingVariableReader import com.puutaro.commandclick.util.file.ReadText +import com.puutaro.commandclick.util.str.QuoteTool import java.io.File import java.lang.ref.WeakReference @@ -26,11 +19,9 @@ class LongPressForSrcAnchor( private val context: Context?, private val srcAnchorMenuFilePath: String, ) { -// private val currentAppDirPath = terminalFragment.currentAppDirPath private val srcAnchorLongPressMenuFilePathObj = File(srcAnchorMenuFilePath) private val srcAnchorLongPressMenuDirPath = srcAnchorLongPressMenuFilePathObj.parent private val srcAnchorLongPressMenuFileName = srcAnchorLongPressMenuFilePathObj.name - private var longPressSrcAnchorDialog: Dialog? = null fun launch( @@ -82,12 +73,13 @@ class LongPressForSrcAnchor( val menuList = LongPressMenuTool.LongPressInfoMapList.extractTitleIconOathList( longPressMenuMapList ) + val titleKey = LongPressMenuTool.LongPressKey.TITLE if( menuList.size == 1 ){ val firstMenuTitle = menuList.first().first val jsPath = longPressMenuMapList.firstOrNull { - it.get(LongPressMenuTool.LongPressKey.TITLE) == firstMenuTitle + it.get(titleKey) == firstMenuTitle }?.get(LongPressMenuTool.LongPressKey.JS_PATH) ?: return execJsFile( jsPath, @@ -96,120 +88,33 @@ class LongPressForSrcAnchor( ) return } - - longPressSrcAnchorDialog = Dialog( - context - ) - longPressSrcAnchorDialog?.setContentView( - com.puutaro.commandclick.R.layout.list_dialog_layout - ) - val listDialogTitle = longPressSrcAnchorDialog?.findViewById( - com.puutaro.commandclick.R.id.list_dialog_title - ) - listDialogTitle?.text = title - val listDialogMessage = longPressSrcAnchorDialog?.findViewById( - com.puutaro.commandclick.R.id.list_dialog_message - ) - listDialogMessage?.isVisible = false - val listDialogSearchEditText = longPressSrcAnchorDialog?.findViewById( - com.puutaro.commandclick.R.id.list_dialog_search_edit_text - ) - listDialogSearchEditText?.isVisible = false - val cancelButton = longPressSrcAnchorDialog?.findViewById( - com.puutaro.commandclick.R.id.list_dialog_cancel - ) - cancelButton?.setOnClickListener { - longPressSrcAnchorDialog?.dismiss() - longPressSrcAnchorDialog = null - } - - setListView( - menuList, - longPressScriptList, - longPressLinkUrl, - currentUrl, - longPressMenuMapList, - ) - longPressSrcAnchorDialog?.setOnCancelListener { - longPressSrcAnchorDialog?.dismiss() - longPressSrcAnchorDialog = null - } - longPressSrcAnchorDialog?.window?.setLayout( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.WRAP_CONTENT - ) - longPressSrcAnchorDialog?.window?.setGravity(Gravity.BOTTOM) - longPressSrcAnchorDialog?.show() - } - - private fun setListView( - menuList: List>, - longPressScriptList: List, - longPressLinkUrl: String, - currentUrl: String, - longPressMenuMapList: List> - ) { - val terminalFragment = terminalFragmentRef.get() ?: return - val context = terminalFragment.context - ?: return - val subMenuListView = - longPressSrcAnchorDialog?.findViewById( - com.puutaro.commandclick.R.id.list_dialog_list_view - ) ?: return - val subMenuAdapter = HistoryListAdapter( - context, - menuList.toMutableList() - ) - subMenuListView.adapter = subMenuAdapter - invokeListItemSetClickListenerForListDialog( - subMenuListView, - longPressMenuMapList, -// longPressScriptList, - longPressLinkUrl, - currentUrl, - ) - } - - private fun invokeListItemSetClickListenerForListDialog( - dialogListView: ListView, - longPressMenuMapList: List>, -// longPressScriptList: List, - longPressLinkUrl: String, - currentUrl: String, - ) { - - dialogListView.setOnItemClickListener { - parent, View, pos, id - -> - longPressSrcAnchorDialog?.dismiss() - longPressSrcAnchorDialog = null - val menuListAdapter = dialogListView.adapter as HistoryListAdapter - val title = menuListAdapter.getItem(pos) - ?: return@setOnItemClickListener - HistoryListAdapter.saveItemToList( - context, - title - ) - val selectedJsPath = longPressMenuMapList.firstOrNull { - it.get(LongPressMenuTool.LongPressKey.TITLE) == title - }?.get(LongPressMenuTool.LongPressKey.JS_PATH) ?: return@setOnItemClickListener - if( - !File(selectedJsPath).isFile - ) return@setOnItemClickListener - -// val selectedMenuName = menuListAdapter.getItem(pos) -// ?: return@setOnItemClickListener -// val selectedJsPath = LongPressMenuTool.extractJsPathFromLongPressMenuList( -// selectedMenuName, -// longPressScriptList, -// ) ?: return@setOnItemClickListener - execJsFile( - selectedJsPath, - longPressLinkUrl, - currentUrl, - ) - return@setOnItemClickListener - } + val longPressSelectJsScript = LongPressMenuTool.LongPressJsDialogScript.make( + terminalFragment, + title, + menuList.reversed(), + "srcAnchor", + ) + val terminalWebView = terminalFragment.binding.terminalWebView + terminalWebView.evaluateJavascript( + longPressSelectJsScript, + ValueCallback { selectedTitleSrc -> + val selectedTitle = + QuoteTool.trimBothEdgeQuote(selectedTitleSrc) + if( + selectedTitle.isEmpty() + ) return@ValueCallback + val selectedJsPath = longPressMenuMapList.firstOrNull { + it.get(titleKey) == selectedTitle + }?.get(LongPressMenuTool.LongPressKey.JS_PATH) ?: return@ValueCallback + if( + !File(selectedJsPath).isFile + ) return@ValueCallback + execJsFile( + selectedJsPath, + longPressLinkUrl, + currentUrl, + ) + }) } private fun execJsFile( @@ -221,7 +126,6 @@ class LongPressForSrcAnchor( val selectedScriptNameOrPathObj = File(selectedJsPath) val execJsPath = LongPressMenuTool.makeExecJsPath( terminalFragment, -// currentAppDirPath, selectedScriptNameOrPathObj, ) val settingValList = LongPressMenuTool.extractSettingValList( diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/proccess/LongPressForSrcImageAnchor.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/proccess/LongPressForSrcImageAnchor.kt index 587674d3c..fe44b6ffa 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/proccess/LongPressForSrcImageAnchor.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/proccess/LongPressForSrcImageAnchor.kt @@ -1,39 +1,27 @@ package com.puutaro.commandclick.fragment_lib.terminal_fragment.proccess -import android.app.Dialog import android.content.Context -import android.view.Gravity -import android.view.ViewGroup -import android.widget.ListAdapter -import android.widget.ListView -import androidx.appcompat.widget.AppCompatEditText -import androidx.appcompat.widget.AppCompatImageButton -import androidx.appcompat.widget.AppCompatTextView -import androidx.core.view.isVisible +import android.webkit.ValueCallback import com.puutaro.commandclick.common.variable.path.UsePath import com.puutaro.commandclick.common.variable.variables.CommandClickScriptVariable -import com.puutaro.commandclick.component.adapter.HistoryListAdapter import com.puutaro.commandclick.fragment.TerminalFragment import com.puutaro.commandclick.fragment_lib.terminal_fragment.proccess.libs.long_press.LongPressMenuTool import com.puutaro.commandclick.proccess.edit.lib.SetReplaceVariabler import com.puutaro.commandclick.proccess.intent.lib.JavascriptExecuter import com.puutaro.commandclick.util.SettingVariableReader -import com.puutaro.commandclick.util.file.FileSystems import com.puutaro.commandclick.util.file.ReadText +import com.puutaro.commandclick.util.str.QuoteTool import java.io.File import java.lang.ref.WeakReference -import java.time.LocalDateTime class LongPressForSrcImageAnchor( private val terminalFragmentRef: WeakReference, private val context: Context?, private val srcImageAnchorMenuFilePath: String, ) { -// private val currentAppDirPath = terminalFragment.currentAppDirPath private val srcImageAnchorLongPressMenuFilePathObj = File(srcImageAnchorMenuFilePath) private val srcImageAnchorLongPressMenuDirPath = srcImageAnchorLongPressMenuFilePathObj.parent private val srcImageAnchorLongPressMenuFileName = srcImageAnchorLongPressMenuFilePathObj.name - private var longPressSrcImageAnchorDialog: Dialog? = null fun launch( title: String?, @@ -61,7 +49,8 @@ class LongPressForSrcImageAnchor( ) return } - val terminalFragment = terminalFragmentRef.get() ?: return + val terminalFragment = terminalFragmentRef.get() + ?: return val longPressScriptList = LongPressMenuTool.makeLongPressScriptList( terminalFragment, srcImageAnchorLongPressMenuDirPath, @@ -86,24 +75,17 @@ class LongPressForSrcImageAnchor( val menuList = LongPressMenuTool.LongPressInfoMapList.extractTitleIconOathList( longPressMenuMapList ) -// FileSystems.writeFile( -// File(UsePath.cmdclickDefaultAppDirPath, "longpress.txt").absolutePath, -// listOf( -// "longPressScriptList: ${longPressScriptList}", -// "longPressMenuMapList: ${longPressMenuMapList}", -// "menuList: ${menuList}", -// ).joinToString("\n\n") -// ) val menuListSize = menuList.size if( menuListSize == 0 ) return + val titleKey = LongPressMenuTool.LongPressKey.TITLE if( menuListSize == 1 ){ val firstMenuTitle = menuList.first().first val jsPath = longPressMenuMapList.firstOrNull { - it.get(LongPressMenuTool.LongPressKey.TITLE) == firstMenuTitle + it.get(titleKey) == firstMenuTitle }?.get(LongPressMenuTool.LongPressKey.JS_PATH) ?: return execJsFile( jsPath, @@ -113,124 +95,51 @@ class LongPressForSrcImageAnchor( ) return } - - longPressSrcImageAnchorDialog = Dialog( - context - ) - longPressSrcImageAnchorDialog?.setContentView( - com.puutaro.commandclick.R.layout.list_dialog_layout - ) - val listDialogTitle = longPressSrcImageAnchorDialog?.findViewById( - com.puutaro.commandclick.R.id.list_dialog_title - ) - listDialogTitle?.text = title - val listDialogMessage = longPressSrcImageAnchorDialog?.findViewById( - com.puutaro.commandclick.R.id.list_dialog_message - ) - listDialogMessage?.isVisible = false - val listDialogSearchEditText = longPressSrcImageAnchorDialog?.findViewById( - com.puutaro.commandclick.R.id.list_dialog_search_edit_text - ) - listDialogSearchEditText?.isVisible = false - val cancelButton = longPressSrcImageAnchorDialog?.findViewById( - com.puutaro.commandclick.R.id.list_dialog_cancel - ) - cancelButton?.setOnClickListener { - longPressSrcImageAnchorDialog?.dismiss() - longPressSrcImageAnchorDialog = null - } - setListView( - menuList, -// longPressScriptList, - longPressLinkUrl, - longPressImageUrl, - currentUrl, - longPressMenuMapList - ) - longPressSrcImageAnchorDialog?.setOnCancelListener { - longPressSrcImageAnchorDialog?.dismiss() - longPressSrcImageAnchorDialog = null - } - longPressSrcImageAnchorDialog?.window?.setLayout( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.WRAP_CONTENT - ) - longPressSrcImageAnchorDialog?.window?.setGravity(Gravity.BOTTOM) - longPressSrcImageAnchorDialog?.show() - } - - private fun setListView( - menuList: List>, -// longpressScriptList: List, - longPressLinkUrl: String, - longPressImageUrl: String, - currentUrl: String, - longPressMenuMapList: List>, - ) { - val terminalFragment = terminalFragmentRef.get() ?: return - val context = terminalFragment.context - ?: return - val subMenuListView = - longPressSrcImageAnchorDialog?.findViewById( - com.puutaro.commandclick.R.id.list_dialog_list_view - ) ?: return - val subMenuAdapter = HistoryListAdapter( - context, - menuList.toMutableList() - ) - subMenuListView.adapter = subMenuAdapter - invokeListItemSetClickListenerForListDialog( - subMenuListView, - longPressMenuMapList, -// longpressScriptList, - longPressLinkUrl, - longPressImageUrl, - currentUrl, - ) - } - - private fun invokeListItemSetClickListenerForListDialog( - subMenuListView: ListView, - longPressMenuMapList: List>, -// longpressScriptList: List, - longPressLinkUrl: String, - longPressImageUrl: String, - currentUrl: String, - - ) { - - subMenuListView.setOnItemClickListener { - parent, View, pos, id - -> - longPressSrcImageAnchorDialog?.dismiss() - longPressSrcImageAnchorDialog = null - val menuListAdapter = subMenuListView.adapter as HistoryListAdapter - val title = menuListAdapter.getItem(pos) - ?: return@setOnItemClickListener - HistoryListAdapter.saveItemToList( - context, - title - ) - val selectedJsPath = longPressMenuMapList.firstOrNull { - it.get(LongPressMenuTool.LongPressKey.TITLE) == title - }?.get(LongPressMenuTool.LongPressKey.JS_PATH) ?: return@setOnItemClickListener - if( - !File(selectedJsPath).isFile - ) return@setOnItemClickListener -// val selectedMenuName = menuListAdapter.getItem(pos) -// ?: return@setOnItemClickListener -// val selectedJsPath = LongPressMenuTool.extractJsPathFromLongPressMenuList( -// selectedMenuName, -// longpressScriptList, -// ) ?: return@setOnItemClickListener - execJsFile( - selectedJsPath, - longPressLinkUrl, - longPressImageUrl, - currentUrl, - ) - return@setOnItemClickListener - } + val longPressSelectJsScript = LongPressMenuTool.LongPressJsDialogScript.make( + terminalFragment, + title, + menuList.reversed(), + "srcImageAnchor", + ) + val terminalWebView = terminalFragment.binding.terminalWebView + terminalWebView.evaluateJavascript( + longPressSelectJsScript, + ValueCallback { selectedTitleSrc -> + val selectedTitle = + QuoteTool.trimBothEdgeQuote(selectedTitleSrc) + if( + selectedTitle.isEmpty() + ) return@ValueCallback +// FileSystems.writeFile( +// File(UsePath.cmdclickDefaultAppDirPath, "longpress.txt").absolutePath, +// listOf( +// "longPressScriptList: ${longPressScriptList}", +// "longPressMenuMapList: ${longPressMenuMapList}", +// "selectedTitleSrc: ${selectedTitleSrc}", +// "selectedTitle: ${selectedTitle}", +// "selectedMap: ${longPressMenuMapList.firstOrNull { +// it.get(titleKey) == selectedTitle +// }}", +// "selectedJsPath: ${longPressMenuMapList.firstOrNull { +// it.get(titleKey) == selectedTitle +// }?.get(LongPressMenuTool.LongPressKey.JS_PATH)}", +// ).joinToString("\n\n") +// ) + val selectedJsPath = longPressMenuMapList.firstOrNull { + it.get(titleKey) == selectedTitle + }?.get(LongPressMenuTool.LongPressKey.JS_PATH) + ?: return@ValueCallback + if( + !File(selectedJsPath).isFile + ) return@ValueCallback + execJsFile( + selectedJsPath, + longPressLinkUrl, + longPressImageUrl, + currentUrl, + ) + }) + return } private fun execJsFile( diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/proccess/TerminalOnHandlerForEdit.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/proccess/TerminalOnHandlerForEdit.kt index eb0d4748f..67dceee37 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/proccess/TerminalOnHandlerForEdit.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/proccess/TerminalOnHandlerForEdit.kt @@ -35,12 +35,12 @@ object TerminalOnHandlerForEdit { delay(100) } } - val isSettingValEdit = - withContext(Dispatchers.IO) { - terminalFragment.editType == - EditFragmentArgs.Companion.EditTypeSettingsKey.SETTING_VAL_EDIT - } - if(isSettingValEdit) return@launch +// val isSettingValEdit = +// withContext(Dispatchers.IO) { +// terminalFragment.editType == +// EditFragmentArgs.Companion.EditTypeSettingsKey.SETTING_VAL_EDIT +// } +// if(isSettingValEdit) return@launch val disableShortcut = withContext(Dispatchers.IO) { FannelInfoTool.getOnShortcut( terminalFragment.fannelInfoMap diff --git a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/proccess/libs/long_press/LongPressMenuTool.kt b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/proccess/libs/long_press/LongPressMenuTool.kt index 2db8d94f8..c49cbdb1c 100755 --- a/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/proccess/libs/long_press/LongPressMenuTool.kt +++ b/app/src/main/java/com/puutaro/commandclick/fragment_lib/terminal_fragment/proccess/libs/long_press/LongPressMenuTool.kt @@ -7,6 +7,11 @@ import com.puutaro.commandclick.common.variable.path.UsePath import com.puutaro.commandclick.common.variable.settings.FannelInfoSetting import com.puutaro.commandclick.common.variable.variables.CommandClickScriptVariable import com.puutaro.commandclick.fragment.TerminalFragment +import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.dialog.JsDialog +import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog.PromptWithListDialog +import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.lib.dialog.PromptWithListDialog.Companion.PromptMapList +import com.puutaro.commandclick.fragment_lib.terminal_fragment.proccess.ValidFannelNameGetterForTerm +import com.puutaro.commandclick.fragment_lib.terminal_fragment.proccess.libs.ExecJsInterfaceAdder import com.puutaro.commandclick.proccess.edit.lib.SetReplaceVariabler import com.puutaro.commandclick.proccess.edit.lib.SettingFile import com.puutaro.commandclick.util.CcPathTool @@ -28,6 +33,8 @@ import java.io.File object LongPressMenuTool { private val cmdclickDefaultAppDirPath = UsePath.cmdclickDefaultAppDirPath + private val switchOn = PromptWithListDialog.switchOn + private val switchOff = PromptWithListDialog.switchOff fun makeExecJsPath( terminalFragment: TerminalFragment, @@ -52,6 +59,60 @@ object LongPressMenuTool { } } + object LongPressJsDialogScript { + fun make( + terminalFragment: TerminalFragment, + titleSrc: String?, + menuList: List>, + saveTag: String, + ): String { + val title = titleSrc + ?: terminalFragment.binding.terminalWebView.title + ?: String() + val currentValidFannelName = + ValidFannelNameGetterForTerm.get( + terminalFragment + ) + val concatListCon = menuList.map { + val menuTitle = it.first + val menuIconStr = it.second + "${menuTitle}${PromptMapList.promptListSeparator}${menuIconStr}" + }.joinToString(PromptWithListDialog.valueSeparator.toString()) + val promptConfigCon = """ + ${PromptWithListDialog.Companion.PromptWithTextMapKey.title.name}= + ${PromptWithListDialog.Companion.PromptTitleKey.maxLines.name}=null, + ${PromptWithListDialog.Companion.PromptWithTextMapKey.list.name}= + |${PromptWithListDialog.Companion.PromptListVars.saveTag.name}=${saveTag} + |${PromptWithListDialog.Companion.PromptListVars.concatList.name}="${concatListCon}" + |${PromptWithListDialog.Companion.PromptListVars.onInsertByClick.name}=${switchOff} + |${PromptWithListDialog.Companion.PromptListVars.visible.name}=${switchOn} + |${PromptWithListDialog.Companion.PromptListVars.onDismissByClick.name}=${switchOn} + |${PromptWithListDialog.Companion.PromptListVars.limit.name}=20 + |${PromptWithListDialog.Companion.PromptListVars.disableUpdate.name}=${switchOn}, + ${PromptWithListDialog.Companion.PromptWithTextMapKey.editText.name}= + |${PromptWithListDialog.Companion.PromptEditTextKey.disableListBind.name}=${switchOff} + |${PromptWithListDialog.Companion.PromptEditTextKey.visible.name}=${switchOff}, + ${PromptWithListDialog.Companion.PromptWithTextMapKey.extra.name}= + |${PromptWithListDialog.Companion.PromptExtraKey.onKeyOpenMode.name}=${switchOff}, + """.trimIndent().split("\n").joinToString(String()) { + it.trim() + } + val jsDialogStr = ExecJsInterfaceAdder.convertUseJsInterfaceName( + JsDialog::class.java.simpleName + ) + val longPressSelectJsScript = """ + (function() { + return ${jsDialogStr}.promptWithList( + "${File(cmdclickDefaultAppDirPath, currentValidFannelName).absolutePath}", + "${title}", + `${promptConfigCon}`, + ); + })() + """.trimIndent() + return longPressSelectJsScript + } + } + object LongPressInfoMapList { diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/ValidateShell.kt b/app/src/main/java/com/puutaro/commandclick/proccess/ValidateShell.kt index 889d4b74e..b4808d361 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/ValidateShell.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/ValidateShell.kt @@ -9,86 +9,86 @@ import com.puutaro.commandclick.util.CommandClickVariables import com.puutaro.commandclick.util.RecordNumToMapNameValueInHolder -object ValidateShell { - fun correct ( - fragment: Fragment, - shellContentsList: List, - shellFileName: String, - ): String { - val context = fragment.context -// val languageType = -// CommandClickVariables.judgeJsOrShellFromSuffix(shellFileName) +//object ValidateShell { +// fun correct ( +// fragment: Fragment, +// shellContentsList: List, +// shellFileName: String, +// ): String { +// val context = fragment.context +//// val languageType = +//// CommandClickVariables.judgeJsOrShellFromSuffix(shellFileName) +//// +//// val languageTypeToSectionHolderMap = +//// CommandClickScriptVariable.LANGUAGE_TYPE_TO_SECTION_HOLDER_MAP.get(languageType) +// val labelingSectionStart = CommandClickScriptVariable.LABELING_SEC_START +//// languageTypeToSectionHolderMap?.get( +//// CommandClickScriptVariable.HolderTypeName.LABELING_SEC_START +//// ) as String +// val labelingSectionEnd = CommandClickScriptVariable.LABELING_SEC_END +//// CommandClickScriptVariable.SETTING_SEC_END,languageTypeToSectionHolderMap.get( +//// CommandClickScriptVariable.HolderTypeName.LABELING_SEC_END +//// ) as String +// val settingSectionStart = CommandClickScriptVariable.SETTING_SEC_START +//// CommandClickScriptVariable.SETTING_SEC_END,languageTypeToSectionHolderMap.get( +//// CommandClickScriptVariable.HolderTypeName.SETTING_SEC_START +//// ) as String +// val settingSectionEnd = CommandClickScriptVariable.SETTING_SEC_END +//// languageTypeToSectionHolderMap.get( +//// CommandClickScriptVariable.HolderTypeName.SETTING_SEC_END +//// ) as String // -// val languageTypeToSectionHolderMap = -// CommandClickScriptVariable.LANGUAGE_TYPE_TO_SECTION_HOLDER_MAP.get(languageType) - val labelingSectionStart = CommandClickScriptVariable.LABELING_SEC_START -// languageTypeToSectionHolderMap?.get( -// CommandClickScriptVariable.HolderTypeName.LABELING_SEC_START -// ) as String - val labelingSectionEnd = CommandClickScriptVariable.LABELING_SEC_END -// CommandClickScriptVariable.SETTING_SEC_END,languageTypeToSectionHolderMap.get( -// CommandClickScriptVariable.HolderTypeName.LABELING_SEC_END -// ) as String - val settingSectionStart = CommandClickScriptVariable.SETTING_SEC_START -// CommandClickScriptVariable.SETTING_SEC_END,languageTypeToSectionHolderMap.get( -// CommandClickScriptVariable.HolderTypeName.SETTING_SEC_START -// ) as String - val settingSectionEnd = CommandClickScriptVariable.SETTING_SEC_END -// languageTypeToSectionHolderMap.get( -// CommandClickScriptVariable.HolderTypeName.SETTING_SEC_END -// ) as String - - val commandSectionStart = CommandClickScriptVariable.CMD_SEC_START -// CommandClickScriptVariable.SETTING_SEC_END,languageTypeToSectionHolderMap.get( -// CommandClickScriptVariable.HolderTypeName.CMD_SEC_START -// ) as String - val commandSectionEnd = CommandClickScriptVariable.CMD_SEC_END -// languageTypeToSectionHolderMap.get( -// CommandClickScriptVariable.HolderTypeName.CMD_SEC_END -// ) as String - - - val holderList = shellContentsList.filter { - it == labelingSectionStart - || it == labelingSectionEnd - || it == settingSectionStart - || it == settingSectionEnd - || it == commandSectionStart - || it == commandSectionEnd - } - val holderCheck = HolderCheck( - context, - holderList, - shellFileName - ) - val checkHolderNumErrMessage = - holderCheck.aboutHolderNum() - if(checkHolderNumErrMessage.isNotEmpty()) { - return checkHolderNumErrMessage - } - val checkHolderSetEqualErrMessage = - holderCheck.aboutHoderSetMatch() - if(checkHolderSetEqualErrMessage.isNotEmpty()) { - return checkHolderSetEqualErrMessage - } - val checkHolderOrderErrMessage = - holderCheck.aboutHolderOrder() - if(checkHolderOrderErrMessage.isNotEmpty()) { - return checkHolderOrderErrMessage - } - - val checkVariableValue = CheckVariableValue( - context, - shellContentsList, -// shellFileName - ) - val checkQuoteSetOrIsBackslash = checkVariableValue.aboutQuoteSetOrIsBackSlash() - if(checkQuoteSetOrIsBackslash.isNotEmpty()){ - return checkQuoteSetOrIsBackslash - } - return String() - } -} +// val commandSectionStart = CommandClickScriptVariable.CMD_SEC_START +//// CommandClickScriptVariable.SETTING_SEC_END,languageTypeToSectionHolderMap.get( +//// CommandClickScriptVariable.HolderTypeName.CMD_SEC_START +//// ) as String +// val commandSectionEnd = CommandClickScriptVariable.CMD_SEC_END +//// languageTypeToSectionHolderMap.get( +//// CommandClickScriptVariable.HolderTypeName.CMD_SEC_END +//// ) as String +// +// +// val holderList = shellContentsList.filter { +// it == labelingSectionStart +// || it == labelingSectionEnd +// || it == settingSectionStart +// || it == settingSectionEnd +// || it == commandSectionStart +// || it == commandSectionEnd +// } +// val holderCheck = HolderCheck( +// context, +// holderList, +// shellFileName +// ) +// val checkHolderNumErrMessage = +// holderCheck.aboutHolderNum() +// if(checkHolderNumErrMessage.isNotEmpty()) { +// return checkHolderNumErrMessage +// } +// val checkHolderSetEqualErrMessage = +// holderCheck.aboutHoderSetMatch() +// if(checkHolderSetEqualErrMessage.isNotEmpty()) { +// return checkHolderSetEqualErrMessage +// } +// val checkHolderOrderErrMessage = +// holderCheck.aboutHolderOrder() +// if(checkHolderOrderErrMessage.isNotEmpty()) { +// return checkHolderOrderErrMessage +// } +// +//// val checkVariableValue = CheckVariableValue( +//// context, +//// shellContentsList, +////// shellFileName +//// ) +//// val checkQuoteSetOrIsBackslash = checkVariableValue.aboutQuoteSetOrIsBackSlash() +//// if(checkQuoteSetOrIsBackslash.isNotEmpty()){ +//// return checkQuoteSetOrIsBackslash +//// } +// return String() +// } +//} private class CheckVariableValue( private val context: Context?, @@ -131,53 +131,53 @@ private class CheckVariableValue( commandSectionEnd ) - fun aboutQuoteSetOrIsBackSlash(): String { - recordNumToMapNameValueInHolder?.forEach{ - numToNameToValueMap -> - val currentMapNameValue = numToNameToValueMap.value - val currentVariableName = currentMapNameValue?.get( - RecordNumToMapNameValueInHolderColumn.VARIABLE_NAME.name - ) ?: String() - val currentVariableValueString = currentMapNameValue?.get( - RecordNumToMapNameValueInHolderColumn.VARIABLE_VALUE.name - ) ?: String() - val currentValueLength = currentVariableValueString.length - 1 - if(currentVariableValueString.indexOf('\\') != -1) { - return context?.getString( - R.string.variable_exist_backslash_err, - "${currentVariableName}=${currentVariableValueString}" - ) ?: String() - } - if(currentVariableValueString.indexOf('\'') == -1) return@forEach - if(currentVariableValueString.indexOf('"') == -1) return@forEach - val middleCurrentVariableValueString = currentVariableValueString.substring( - 1, currentValueLength - ) - if( - middleCurrentVariableValueString.indexOf('"') != -1 - && middleCurrentVariableValueString.indexOf('\'') != -1 - ) return context?.getString( - R.string.variable_quote_set_err, - "${currentVariableName}=${currentVariableValueString}" - ) ?: String() - if( - currentVariableValueString.lastIndexOf('\'') == 0 - && currentVariableValueString.lastIndexOf('\'') == currentValueLength - && currentVariableValueString.filter { it == '\'' }.count() == 2 - ) return@forEach - if( - currentVariableValueString.lastIndexOf('"') == 0 - && currentVariableValueString.lastIndexOf('"') == currentValueLength - && currentVariableValueString.filter { it == '"' }.count() == 2 - ) return@forEach - if(currentVariableValueString.indexOf('\'') != -1) return@forEach - return context?.getString( - R.string.variable_quote_set_err, - "${currentVariableName}=${currentVariableValueString}" - ) ?: String() - } - return String() - } +// fun aboutQuoteSetOrIsBackSlash(): String { +// recordNumToMapNameValueInHolder?.forEach{ +// numToNameToValueMap -> +// val currentMapNameValue = numToNameToValueMap.value +// val currentVariableName = currentMapNameValue?.get( +// RecordNumToMapNameValueInHolderColumn.VARIABLE_NAME.name +// ) ?: String() +// val currentVariableValueString = currentMapNameValue?.get( +// RecordNumToMapNameValueInHolderColumn.VARIABLE_VALUE.name +// ) ?: String() +// val currentValueLength = currentVariableValueString.length - 1 +// if(currentVariableValueString.indexOf('\\') != -1) { +// return context?.getString( +// R.string.variable_exist_backslash_err, +// "${currentVariableName}=${currentVariableValueString}" +// ) ?: String() +// } +// if(currentVariableValueString.indexOf('\'') == -1) return@forEach +// if(currentVariableValueString.indexOf('"') == -1) return@forEach +// val middleCurrentVariableValueString = currentVariableValueString.substring( +// 1, currentValueLength +// ) +// if( +// middleCurrentVariableValueString.indexOf('"') != -1 +// && middleCurrentVariableValueString.indexOf('\'') != -1 +// ) return context?.getString( +// R.string.variable_quote_set_err, +// "${currentVariableName}=${currentVariableValueString}" +// ) ?: String() +// if( +// currentVariableValueString.lastIndexOf('\'') == 0 +// && currentVariableValueString.lastIndexOf('\'') == currentValueLength +// && currentVariableValueString.filter { it == '\'' }.count() == 2 +// ) return@forEach +// if( +// currentVariableValueString.lastIndexOf('"') == 0 +// && currentVariableValueString.lastIndexOf('"') == currentValueLength +// && currentVariableValueString.filter { it == '"' }.count() == 2 +// ) return@forEach +// if(currentVariableValueString.indexOf('\'') != -1) return@forEach +// return context?.getString( +// R.string.variable_quote_set_err, +// "${currentVariableName}=${currentVariableValueString}" +// ) ?: String() +// } +// return String() +// } } diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/WithEditComponent.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/WithEditComponent.kt index c3ffd4898..9793c525c 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/WithEditComponent.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/WithEditComponent.kt @@ -1,367 +1,331 @@ package com.puutaro.commandclick.proccess.edit.edit_text_support_view import android.content.Context -import android.text.InputType import android.view.ViewGroup import android.widget.TextView import androidx.appcompat.widget.LinearLayoutCompat -import androidx.core.view.isVisible -import androidx.fragment.app.Fragment import com.puutaro.commandclick.common.variable.edit.EditParameters import com.puutaro.commandclick.common.variable.edit.EditTextSupportViewName -import com.puutaro.commandclick.common.variable.edit.SetVariableTypeColumn import com.puutaro.commandclick.common.variable.edit.TypeVariable -import com.puutaro.commandclick.common.variable.broadcast.extra.BroadCastIntentExtraForJsDebug -import com.puutaro.commandclick.common.variable.variables.CommandClickScriptVariable import com.puutaro.commandclick.fragment.EditFragment -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.ButtonViewProducer -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.ColorPickerViewProducer -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.DatePickerProducer -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.DirOrFileChooseProducer -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.DragSortListViewProducer -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.EditTextSetter -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.EditableListContentsMultiSelectGridViewProducer -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.EditableListContentsMultiSeletctSpinnerViewProducer -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.EditableListContentsSelectGridViewProducer -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.EditableListContentsSelectOnlyImageGridViewProducer -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.EditableListContentsSelectSpinnerViewProducer -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.EditableSpinnerViewProducer -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.FileSelectGridViewProducer -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.FileSelectOnlyImageGridViewProducer -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.FileSelectSpinnerViewProducer -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.InDeCrementerViewProducer -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.ListContentsSelectSpinnerViewProducer -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.MultiFileSelectGridViewProducer -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.MultiSelectSpinnerViewProducer -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.SpinnerViewProducer -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.TimePickerViewProducer -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.VariableLabelAdder -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.lib.SetVariableTypeValue -import com.puutaro.commandclick.proccess.edit.lib.SetVariableTyper -import com.puutaro.commandclick.util.LogSystems -import com.puutaro.commandclick.util.str.QuoteTool -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext object WithEditComponent { private val textAndLabelList = TypeVariable.textAndLabelList private val noIndexTypeList = TypeVariable.noIndexTypeList - fun insert( - editFragment: EditFragment, - insertTextView: TextView, - editParameters: EditParameters, - ): LinearLayoutCompat? { - val context = editFragment.context - val textLabelIndex = culcSetVariableTypeMarkIndex( - editParameters, - textAndLabelList, - EditTextSupportViewName.VARIABLE_LABEL.str - ) - VariableLabelAdder.add( - insertTextView, - editParameters, - textLabelIndex - ) - editParameters.variableTypeList = updateVariableTypeListByExcludeSupportView( - editParameters, - textLabelIndex, - EditTextSupportViewName.VARIABLE_LABEL.str - ) - editParameters.setVariableMap = updateSetVariableMapByEditSupportViewNameIndex( - editParameters, - textLabelIndex, - ) - - val editTextPropertyIndex = culcSetVariableTypeMarkIndex( - editParameters, - textAndLabelList, - EditTextSupportViewName.EDIT_TEXT_PROPERTY.str - ) - val setVariableValueForEditText = SetVariableTypeValue.makeByReplace( - editParameters - ) - val editTextPropertyMap = SetVariableTyper.getCertainSetValIndexMap( - setVariableValueForEditText, - editTextPropertyIndex - ) - val variableTypeList = updateVariableTypeListByExcludeSupportView( - editParameters, - editTextPropertyIndex, - EditTextSupportViewName.EDIT_TEXT_PROPERTY.str - ) - editParameters.variableTypeList = variableTypeList - editParameters.setVariableMap = updateSetVariableMapByEditSupportViewNameIndex( - editParameters, - editTextPropertyIndex, - ) - val editTextWeight = decideTextEditWeight( - variableTypeList, - ) - val otherComponentWeight = decideOtherComponentWeight( - editTextWeight, - variableTypeList, - ) - val insertEditText = EditTextSetter.set( - editFragment, - editParameters, - editTextPropertyMap, - editTextWeight - ) - val horizontalLinearLayout = makeHorizontalLayout(context) - horizontalLinearLayout?.addView(insertEditText) - hideVariables( - editFragment, - editParameters, - insertTextView, -// horizontalLinearLayout, - ) - checkIndexNum( - editFragment, - editParameters, - noIndexTypeList - ) - (variableTypeList.indices).forEach { - val variableTypeListUntilCurrent = variableTypeList.take(it + 1) - val currentComponentIndex = variableTypeListUntilCurrent.filter { - !noIndexTypeList.contains(it) - }.size - 1 - when(variableTypeList[it]){ - EditTextSupportViewName.BUTTON.str -> { - val insertButton = ButtonViewProducer.make( - editFragment, - insertTextView, - insertEditText, - editParameters, - otherComponentWeight, - currentComponentIndex, - ) - horizontalLinearLayout?.addView(insertButton) - } - EditTextSupportViewName.CHECK_BOX.str -> { - val insertSpinner = SpinnerViewProducer.make( - context, - insertEditText, - editParameters, - currentComponentIndex, - otherComponentWeight, - ) - horizontalLinearLayout?.addView(insertSpinner) - } - EditTextSupportViewName.EDITABLE_CHECK_BOX.str -> { - val insertSpinner = EditableSpinnerViewProducer.make( - editFragment, - insertEditText, - editParameters, - currentComponentIndex, - otherComponentWeight, - ) - horizontalLinearLayout?.addView(insertSpinner) - } - EditTextSupportViewName.LIST_CONTENTS_SELECT_BOX.str -> { - val insertListConSpinner = ListContentsSelectSpinnerViewProducer.make( - editFragment, - insertEditText, - editParameters, - currentComponentIndex, - otherComponentWeight, - ) - horizontalLinearLayout?.addView(insertListConSpinner) - } - EditTextSupportViewName.EDITABLE_LIST_CONTENTS_SELECT_BOX.str -> { - val insertListConSpinner = EditableListContentsSelectSpinnerViewProducer.make( - editFragment, - insertEditText, - editParameters, - currentComponentIndex, - otherComponentWeight, - ) - horizontalLinearLayout?.addView(insertListConSpinner) - } - EditTextSupportViewName.GRID_BOX.str -> { - val insertGridSelectBox = EditableListContentsSelectGridViewProducer.make( - editFragment, - insertEditText, - editParameters, - currentComponentIndex, - otherComponentWeight, - ) - horizontalLinearLayout?.addView(insertGridSelectBox) - } - EditTextSupportViewName.MULTI_GRID_BOX.str -> { - val insertGridSelectBox = EditableListContentsMultiSelectGridViewProducer.make( - editFragment, - insertEditText, - editParameters, - currentComponentIndex, - otherComponentWeight, - ) - horizontalLinearLayout?.addView(insertGridSelectBox) - } - EditTextSupportViewName.ONlY_IMAGE_GRID_BOX.str -> { - val insertGridSelectBox = EditableListContentsSelectOnlyImageGridViewProducer.make( - editFragment, - insertEditText, - editParameters, - currentComponentIndex, - otherComponentWeight, - ) - horizontalLinearLayout?.addView(insertGridSelectBox) - } - EditTextSupportViewName.MULTI_SELECT_BOX.str -> { - val multiSelectSpinner = MultiSelectSpinnerViewProducer.make( - editFragment, - insertTextView, - insertEditText, - editParameters, - currentComponentIndex, - otherComponentWeight, - ) - horizontalLinearLayout?.addView(multiSelectSpinner) - } - EditTextSupportViewName.LIST_CONTENTS_MULTI_SELECT_BOX.str -> { - val listConMultiSelectSpinner = EditableListContentsMultiSeletctSpinnerViewProducer.make( - editFragment, - insertTextView, - insertEditText, - editParameters, - currentComponentIndex, - otherComponentWeight, - ) - horizontalLinearLayout?.addView(listConMultiSelectSpinner) - } - EditTextSupportViewName.DRAG_SORT_SELECT_BOX.str -> { - val dragSortListView = DragSortListViewProducer.make( - editFragment, - editParameters, - currentComponentIndex, - otherComponentWeight - ) - horizontalLinearLayout?.addView(dragSortListView) - } - EditTextSupportViewName.EDITABLE_FILE_SELECT_BOX.str -> { - val editableFileSelectSpinner = FileSelectSpinnerViewProducer.make( - editFragment, - insertEditText, - editParameters, - currentComponentIndex, - otherComponentWeight, - ) - horizontalLinearLayout?.addView(editableFileSelectSpinner) - } - EditTextSupportViewName.FILE_SELECT_GRID_BOX.str -> { - val fileSelectGridSelectBox = FileSelectGridViewProducer.make( - editFragment, - insertEditText, - editParameters, - currentComponentIndex, - otherComponentWeight, - ) - horizontalLinearLayout?.addView(fileSelectGridSelectBox) - } - EditTextSupportViewName.MULTI_FILE_SELECT_GRID_BOX.str -> { - val fileSelectGridSelectBox = MultiFileSelectGridViewProducer.make( - editFragment, - insertEditText, - editParameters, - currentComponentIndex, - otherComponentWeight, - ) - horizontalLinearLayout?.addView(fileSelectGridSelectBox) - } - EditTextSupportViewName.FILE_SELECT_ONLY_IMAGE_GRID_BOX.str -> { - val fileSelectGridSelectBox = FileSelectOnlyImageGridViewProducer.make( - editFragment, - insertEditText, - editParameters, - currentComponentIndex, - otherComponentWeight, - ) - horizontalLinearLayout?.addView(fileSelectGridSelectBox) - } - EditTextSupportViewName.NUM_INDE_CREMENTER.str -> { - val incButton = InDeCrementerViewProducer.make( - editFragment, - insertEditText, - editParameters, - currentComponentIndex, - otherComponentWeight, - true, - ) - horizontalLinearLayout?.addView(incButton) - val decButton = InDeCrementerViewProducer.make( - editFragment, - insertEditText, - editParameters, - currentComponentIndex, - otherComponentWeight, - false - ) - horizontalLinearLayout?.addView(decButton) - } - EditTextSupportViewName.FILE_PICKER.str -> { - val fileChooser = DirOrFileChooseProducer.make( - editFragment, - editParameters, - false, - insertEditText, - currentComponentIndex, - otherComponentWeight, - ) - horizontalLinearLayout?.addView(fileChooser) - } - EditTextSupportViewName.DIRECTORY_PICKER.str -> { - val dirChooser = DirOrFileChooseProducer.make( - editFragment, - editParameters, - true, - insertEditText, - currentComponentIndex, - otherComponentWeight, - ) - horizontalLinearLayout?.addView(dirChooser) - } - EditTextSupportViewName.COLOR.str -> { - val colorPicker = ColorPickerViewProducer.make( - editFragment, - insertEditText, - otherComponentWeight, - ) - horizontalLinearLayout?.addView(colorPicker) - } - EditTextSupportViewName.DATE.str -> { - val datePicker = DatePickerProducer.make( - context, - insertEditText, - otherComponentWeight, - ) - horizontalLinearLayout?.addView(datePicker) - } - EditTextSupportViewName.TIME.str -> { - val timePicker = TimePickerViewProducer.make( - editFragment, - insertEditText, - editParameters, - otherComponentWeight, - ) - horizontalLinearLayout?.addView(timePicker) - } - EditTextSupportViewName.READ_ONLY_EDIT_TEXT.str -> { - insertEditText.isEnabled = false - } - EditTextSupportViewName.PASSWORD.str -> { - insertEditText.inputType = ( - InputType.TYPE_CLASS_TEXT or - InputType.TYPE_TEXT_VARIATION_PASSWORD - ) - } - else -> {} - } - } - return horizontalLinearLayout - } +// fun insert( +// editFragment: EditFragment, +// insertTextView: TextView, +// editParameters: EditParameters, +// ): LinearLayoutCompat? { +// val context = editFragment.context +// val textLabelIndex = culcSetVariableTypeMarkIndex( +// editParameters, +// textAndLabelList, +// EditTextSupportViewName.VARIABLE_LABEL.str +// ) +// VariableLabelAdder.add( +// insertTextView, +// editParameters, +// textLabelIndex +// ) +// editParameters.variableTypeList = updateVariableTypeListByExcludeSupportView( +// editParameters, +// textLabelIndex, +// EditTextSupportViewName.VARIABLE_LABEL.str +// ) +// editParameters.setVariableMap = updateSetVariableMapByEditSupportViewNameIndex( +// editParameters, +// textLabelIndex, +// ) +// +// val editTextPropertyIndex = culcSetVariableTypeMarkIndex( +// editParameters, +// textAndLabelList, +// EditTextSupportViewName.EDIT_TEXT_PROPERTY.str +// ) +// val setVariableValueForEditText = SetVariableTypeValue.makeByReplace( +// editParameters +// ) +// val editTextPropertyMap = SetVariableTyper.getCertainSetValIndexMap( +// setVariableValueForEditText, +// editTextPropertyIndex +// ) +// val variableTypeList = updateVariableTypeListByExcludeSupportView( +// editParameters, +// editTextPropertyIndex, +// EditTextSupportViewName.EDIT_TEXT_PROPERTY.str +// ) +// editParameters.variableTypeList = variableTypeList +// editParameters.setVariableMap = updateSetVariableMapByEditSupportViewNameIndex( +// editParameters, +// editTextPropertyIndex, +// ) +// val editTextWeight = decideTextEditWeight( +// variableTypeList, +// ) +// val otherComponentWeight = decideOtherComponentWeight( +// editTextWeight, +// variableTypeList, +// ) +// val insertEditText = EditTextSetter.set( +// editFragment, +// editParameters, +// editTextPropertyMap, +// editTextWeight +// ) +// val horizontalLinearLayout = makeHorizontalLayout(context) +// horizontalLinearLayout?.addView(insertEditText) +// hideVariables( +// editFragment, +// editParameters, +// insertTextView, +//// horizontalLinearLayout, +// ) +// checkIndexNum( +// editFragment, +// editParameters, +// noIndexTypeList +// ) +// (variableTypeList.indices).forEach { +// val variableTypeListUntilCurrent = variableTypeList.take(it + 1) +// val currentComponentIndex = variableTypeListUntilCurrent.filter { +// !noIndexTypeList.contains(it) +// }.size - 1 +// when(variableTypeList[it]){ +// EditTextSupportViewName.BUTTON.str -> { +// val insertButton = ButtonViewProducer.make( +// editFragment, +// insertTextView, +// insertEditText, +// editParameters, +// otherComponentWeight, +// currentComponentIndex, +// ) +// horizontalLinearLayout?.addView(insertButton) +// } +// EditTextSupportViewName.CHECK_BOX.str -> { +// val insertSpinner = SpinnerViewProducer.make( +// context, +// insertEditText, +// editParameters, +// currentComponentIndex, +// otherComponentWeight, +// ) +// horizontalLinearLayout?.addView(insertSpinner) +// } +// EditTextSupportViewName.EDITABLE_CHECK_BOX.str -> { +// val insertSpinner = EditableSpinnerViewProducer.make( +// editFragment, +// insertEditText, +// editParameters, +// currentComponentIndex, +// otherComponentWeight, +// ) +// horizontalLinearLayout?.addView(insertSpinner) +// } +// EditTextSupportViewName.LIST_CONTENTS_SELECT_BOX.str -> { +// val insertListConSpinner = ListContentsSelectSpinnerViewProducer.make( +// editFragment, +// insertEditText, +// editParameters, +// currentComponentIndex, +// otherComponentWeight, +// ) +// horizontalLinearLayout?.addView(insertListConSpinner) +// } +// EditTextSupportViewName.EDITABLE_LIST_CONTENTS_SELECT_BOX.str -> { +// val insertListConSpinner = EditableListContentsSelectSpinnerViewProducer.make( +// editFragment, +// insertEditText, +// editParameters, +// currentComponentIndex, +// otherComponentWeight, +// ) +// horizontalLinearLayout?.addView(insertListConSpinner) +// } +// EditTextSupportViewName.GRID_BOX.str -> { +// val insertGridSelectBox = EditableListContentsSelectGridViewProducer.make( +// editFragment, +// insertEditText, +// editParameters, +// currentComponentIndex, +// otherComponentWeight, +// ) +// horizontalLinearLayout?.addView(insertGridSelectBox) +// } +// EditTextSupportViewName.MULTI_GRID_BOX.str -> { +// val insertGridSelectBox = EditableListContentsMultiSelectGridViewProducer.make( +// editFragment, +// insertEditText, +// editParameters, +// currentComponentIndex, +// otherComponentWeight, +// ) +// horizontalLinearLayout?.addView(insertGridSelectBox) +// } +// EditTextSupportViewName.ONlY_IMAGE_GRID_BOX.str -> { +// val insertGridSelectBox = EditableListContentsSelectOnlyImageGridViewProducer.make( +// editFragment, +// insertEditText, +// editParameters, +// currentComponentIndex, +// otherComponentWeight, +// ) +// horizontalLinearLayout?.addView(insertGridSelectBox) +// } +// EditTextSupportViewName.MULTI_SELECT_BOX.str -> { +// val multiSelectSpinner = MultiSelectSpinnerViewProducer.make( +// editFragment, +// insertTextView, +// insertEditText, +// editParameters, +// currentComponentIndex, +// otherComponentWeight, +// ) +// horizontalLinearLayout?.addView(multiSelectSpinner) +// } +// EditTextSupportViewName.LIST_CONTENTS_MULTI_SELECT_BOX.str -> { +// val listConMultiSelectSpinner = EditableListContentsMultiSeletctSpinnerViewProducer.make( +// editFragment, +// insertTextView, +// insertEditText, +// editParameters, +// currentComponentIndex, +// otherComponentWeight, +// ) +// horizontalLinearLayout?.addView(listConMultiSelectSpinner) +// } +// EditTextSupportViewName.DRAG_SORT_SELECT_BOX.str -> { +// val dragSortListView = DragSortListViewProducer.make( +// editFragment, +// editParameters, +// currentComponentIndex, +// otherComponentWeight +// ) +// horizontalLinearLayout?.addView(dragSortListView) +// } +// EditTextSupportViewName.EDITABLE_FILE_SELECT_BOX.str -> { +// val editableFileSelectSpinner = FileSelectSpinnerViewProducer.make( +// editFragment, +// insertEditText, +// editParameters, +// currentComponentIndex, +// otherComponentWeight, +// ) +// horizontalLinearLayout?.addView(editableFileSelectSpinner) +// } +// EditTextSupportViewName.FILE_SELECT_GRID_BOX.str -> { +// val fileSelectGridSelectBox = FileSelectGridViewProducer.make( +// editFragment, +// insertEditText, +// editParameters, +// currentComponentIndex, +// otherComponentWeight, +// ) +// horizontalLinearLayout?.addView(fileSelectGridSelectBox) +// } +// EditTextSupportViewName.MULTI_FILE_SELECT_GRID_BOX.str -> { +// val fileSelectGridSelectBox = MultiFileSelectGridViewProducer.make( +// editFragment, +// insertEditText, +// editParameters, +// currentComponentIndex, +// otherComponentWeight, +// ) +// horizontalLinearLayout?.addView(fileSelectGridSelectBox) +// } +// EditTextSupportViewName.FILE_SELECT_ONLY_IMAGE_GRID_BOX.str -> { +// val fileSelectGridSelectBox = FileSelectOnlyImageGridViewProducer.make( +// editFragment, +// insertEditText, +// editParameters, +// currentComponentIndex, +// otherComponentWeight, +// ) +// horizontalLinearLayout?.addView(fileSelectGridSelectBox) +// } +// EditTextSupportViewName.NUM_INDE_CREMENTER.str -> { +// val incButton = InDeCrementerViewProducer.make( +// editFragment, +// insertEditText, +// editParameters, +// currentComponentIndex, +// otherComponentWeight, +// true, +// ) +// horizontalLinearLayout?.addView(incButton) +// val decButton = InDeCrementerViewProducer.make( +// editFragment, +// insertEditText, +// editParameters, +// currentComponentIndex, +// otherComponentWeight, +// false +// ) +// horizontalLinearLayout?.addView(decButton) +// } +// EditTextSupportViewName.FILE_PICKER.str -> { +// val fileChooser = DirOrFileChooseProducer.make( +// editFragment, +// editParameters, +// false, +// insertEditText, +// currentComponentIndex, +// otherComponentWeight, +// ) +// horizontalLinearLayout?.addView(fileChooser) +// } +// EditTextSupportViewName.DIRECTORY_PICKER.str -> { +// val dirChooser = DirOrFileChooseProducer.make( +// editFragment, +// editParameters, +// true, +// insertEditText, +// currentComponentIndex, +// otherComponentWeight, +// ) +// horizontalLinearLayout?.addView(dirChooser) +// } +// EditTextSupportViewName.COLOR.str -> { +// val colorPicker = ColorPickerViewProducer.make( +// editFragment, +// insertEditText, +// otherComponentWeight, +// ) +// horizontalLinearLayout?.addView(colorPicker) +// } +// EditTextSupportViewName.DATE.str -> { +// val datePicker = DatePickerProducer.make( +// context, +// insertEditText, +// otherComponentWeight, +// ) +// horizontalLinearLayout?.addView(datePicker) +// } +// EditTextSupportViewName.TIME.str -> { +// val timePicker = TimePickerViewProducer.make( +// editFragment, +// insertEditText, +// editParameters, +// otherComponentWeight, +// ) +// horizontalLinearLayout?.addView(timePicker) +// } +// EditTextSupportViewName.READ_ONLY_EDIT_TEXT.str -> { +// insertEditText.isEnabled = false +// } +// EditTextSupportViewName.PASSWORD.str -> { +// insertEditText.inputType = ( +// InputType.TYPE_CLASS_TEXT or +// InputType.TYPE_TEXT_VARIATION_PASSWORD +// ) +// } +// else -> {} +// } +// } +// return horizontalLinearLayout +// } private fun makeHorizontalLayout( context: Context? @@ -456,133 +420,133 @@ object WithEditComponent { // insertTextView.isVisible = isVisible // return // } - val variableTypeList = editParameters.variableTypeList - val isInsertTextViewVisible = !variableTypeList.contains( - EditTextSupportViewName.HIDDEN_LABEL.str - ) - insertTextView.isVisible = isInsertTextViewVisible - } -} - -fun checkIndexNum( - fragment: Fragment, - editParameters: EditParameters, - noIndexTypeList: List, -){ - val currentVariableName = editParameters.currentVariableName - CoroutineScope(Dispatchers.IO).launch { - val variableTypeList = - withContext(Dispatchers.IO) { - editParameters.variableTypeList - } - val currentSetVariableValue = - withContext(Dispatchers.IO) { - editParameters.setVariableMap?.get( - SetVariableTypeColumn.VARIABLE_TYPE_VALUE.name - ) - } - val variableTypeIsIndexList = - withContext(Dispatchers.IO) { - variableTypeList.filter { - !noIndexTypeList.contains(it) - } - } - val variableTypeIsIndexListSize = - withContext(Dispatchers.IO) { - variableTypeIsIndexList.size - } - val currentSetVariableValueIndexSize = - withContext(Dispatchers.IO) { - currentSetVariableValue?.let { - QuoteTool.splitBySurroundedIgnore( - currentSetVariableValue, - '|' - ).filter { - it.trim().isNotEmpty() - }.size - } ?: 0 - } - val notExistCurrentVariableName = - currentVariableName.isNullOrEmpty() - if ( - variableTypeIsIndexListSize == currentSetVariableValueIndexSize - || notExistCurrentVariableName - ) return@launch - withContext(Dispatchers.IO) { - LogSystems.stdErr( - fragment.context, - "not match ${currentVariableName} ${CommandClickScriptVariable.SET_VARIABLE_TYPE}; " + - "options / values -> " + - "$variableTypeIsIndexListSize / $currentSetVariableValueIndexSize -> " + - "( ${variableTypeIsIndexList.joinToString(":")} ) / " + - "( ${currentSetVariableValue} )", - notiLevelSrc = BroadCastIntentExtraForJsDebug.NotiLevelType.LOW.level - ) - } +// val variableTypeList = editParameters.variableTypeList +// val isInsertTextViewVisible = !variableTypeList.contains( +// EditTextSupportViewName.HIDDEN_LABEL.str +// ) +// insertTextView.isVisible = isInsertTextViewVisible } } +//fun checkIndexNum( +// fragment: Fragment, +// editParameters: EditParameters, +// noIndexTypeList: List, +//){ +// val currentVariableName = editParameters.currentVariableName +// CoroutineScope(Dispatchers.IO).launch { +// val variableTypeList = +// withContext(Dispatchers.IO) { +// editParameters.variableTypeList +// } +// val currentSetVariableValue = +// withContext(Dispatchers.IO) { +// editParameters.setVariableMap?.get( +// SetVariableTypeColumn.VARIABLE_TYPE_VALUE.name +// ) +// } +// val variableTypeIsIndexList = +// withContext(Dispatchers.IO) { +// variableTypeList.filter { +// !noIndexTypeList.contains(it) +// } +// } +// val variableTypeIsIndexListSize = +// withContext(Dispatchers.IO) { +// variableTypeIsIndexList.size +// } +// val currentSetVariableValueIndexSize = +// withContext(Dispatchers.IO) { +// currentSetVariableValue?.let { +// QuoteTool.splitBySurroundedIgnore( +// currentSetVariableValue, +// '|' +// ).filter { +// it.trim().isNotEmpty() +// }.size +// } ?: 0 +// } +// val notExistCurrentVariableName = +// currentVariableName.isNullOrEmpty() +// if ( +// variableTypeIsIndexListSize == currentSetVariableValueIndexSize +// || notExistCurrentVariableName +// ) return@launch +// withContext(Dispatchers.IO) { +// LogSystems.stdErr( +// fragment.context, +// "not match ${currentVariableName} ${CommandClickScriptVariable.SET_VARIABLE_TYPE}; " + +// "options / values -> " + +// "$variableTypeIsIndexListSize / $currentSetVariableValueIndexSize -> " + +// "( ${variableTypeIsIndexList.joinToString(":")} ) / " + +// "( ${currentSetVariableValue} )", +// notiLevelSrc = BroadCastIntentExtraForJsDebug.NotiLevelType.LOW.level +// ) +// } +// } +//} -fun culcSetVariableTypeMarkIndex( - editParameters: EditParameters, - textAndLabelList: List, - setValTypeMarkStr: String, -): Int { - return editParameters.variableTypeList.filter { - !textAndLabelList.contains(it) - }.indexOf ( - setValTypeMarkStr - ) -} +//fun culcSetVariableTypeMarkIndex( +// editParameters: EditParameters, +// textAndLabelList: List, +// setValTypeMarkStr: String, +//): Int { +// return editParameters.variableTypeList.filter { +// !textAndLabelList.contains(it) +// }.indexOf ( +// setValTypeMarkStr +// ) +//} -fun updateVariableTypeListByExcludeSupportView( - editParameters: EditParameters, - textLabelIndex: Int, - excludeSupportViewName: String -): List { - val variableTypeListSource = editParameters.variableTypeList - if( - textLabelIndex < 0 - ) return variableTypeListSource - return variableTypeListSource.filter { - it != excludeSupportViewName - } -} -fun updateSetVariableMapByEditSupportViewNameIndex( - editParameters: EditParameters, - textLabelIndex: Int, -): Map? { - val setVariableSetSeparator = '|' - val setVariableMapSource = editParameters.setVariableMap - if( - textLabelIndex < 0 - ) return setVariableMapSource - val setVariableMapValueList = editParameters.setVariableMap?.get( - SetVariableTypeColumn.VARIABLE_TYPE_VALUE.name - )?.let { - QuoteTool.splitBySurroundedIgnore( - it, - setVariableSetSeparator - ) - } -// ?.split(setVariableSetSeparator) - ?.toMutableList() - val setVariableMapValueListLimitIndex = - setVariableMapValueList?.size ?: 0 - if( - textLabelIndex >= setVariableMapValueListLimitIndex - ) return setVariableMapSource - setVariableMapValueList?.removeAt(textLabelIndex) - val setVariableMapValue = - setVariableMapValueList?.joinToString(setVariableSetSeparator.toString()) ?: String() - if( - setVariableMapSource.isNullOrEmpty() - ) return null - return setVariableMapSource + mapOf( - SetVariableTypeColumn.VARIABLE_TYPE_VALUE.name to - setVariableMapValue - ) -} +//fun updateVariableTypeListByExcludeSupportView( +// editParameters: EditParameters, +// textLabelIndex: Int, +// excludeSupportViewName: String +//): List { +// val variableTypeListSource = editParameters.variableTypeList +// if( +// textLabelIndex < 0 +// ) return variableTypeListSource +// return variableTypeListSource.filter { +// it != excludeSupportViewName +// } +//} +// +//fun updateSetVariableMapByEditSupportViewNameIndex( +// editParameters: EditParameters, +// textLabelIndex: Int, +//): Map? { +// val setVariableSetSeparator = '|' +// val setVariableMapSource = editParameters.setVariableMap +// if( +// textLabelIndex < 0 +// ) return setVariableMapSource +// val setVariableMapValueList = editParameters.setVariableMap?.get( +// SetVariableTypeColumn.VARIABLE_TYPE_VALUE.name +// )?.let { +// QuoteTool.splitBySurroundedIgnore( +// it, +// setVariableSetSeparator +// ) +// } +//// ?.split(setVariableSetSeparator) +// ?.toMutableList() +// val setVariableMapValueListLimitIndex = +// setVariableMapValueList?.size ?: 0 +// if( +// textLabelIndex >= setVariableMapValueListLimitIndex +// ) return setVariableMapSource +// setVariableMapValueList?.removeAt(textLabelIndex) +// val setVariableMapValue = +// setVariableMapValueList?.joinToString(setVariableSetSeparator.toString()) ?: String() +// if( +// setVariableMapSource.isNullOrEmpty() +// ) return null +// return setVariableMapSource + mapOf( +// SetVariableTypeColumn.VARIABLE_TYPE_VALUE.name to +// setVariableMapValue +// ) +//} diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/WithEditComponentForListIndex.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/WithEditComponentForListIndex.kt index c1ad1c385..5fe858ccc 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/WithEditComponentForListIndex.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/WithEditComponentForListIndex.kt @@ -12,178 +12,175 @@ import com.puutaro.commandclick.fragment.EditFragment import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.EditTextSetter import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.EditableListContentsSelectSpinnerViewProducer import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.EditableSpinnerViewProducer -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.FileSelectSpinnerViewProducer import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.InDeCrementerViewProducer import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.ListContentsSelectSpinnerViewProducer import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.SpinnerViewProducer import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.VariableLabelAdder -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.lib.SetVariableTypeValue -import com.puutaro.commandclick.proccess.edit.lib.SetVariableTyper object WithEditComponentForListIndex { private val textAndLabelList = TypeVariable.textAndLabelList private val noIndexTypeList = TypeVariable.noIndexTypeList - fun insert( - editFragment: EditFragment, - insertTextView: TextView, - editParameters: EditParameters, - ): LinearLayout { - val textLabelIndex = culcSetVariableTypeMarkIndex( - editParameters, - textAndLabelList, - EditTextSupportViewName.VARIABLE_LABEL.str - ) - VariableLabelAdder.add( - insertTextView, - editParameters, - textLabelIndex - ) - editParameters.variableTypeList = updateVariableTypeListByExcludeSupportView( - editParameters, - textLabelIndex, - EditTextSupportViewName.VARIABLE_LABEL.str - ) - editParameters.setVariableMap = updateSetVariableMapByEditSupportViewNameIndex( - editParameters, - textLabelIndex, - ) - - - val editTextPropertyIndex = culcSetVariableTypeMarkIndex( - editParameters, - textAndLabelList, - EditTextSupportViewName.EDIT_TEXT_PROPERTY.str - ) - val setVariableValueForEditText = SetVariableTypeValue.makeByReplace( - editParameters - ) - val editTextPropertyMap = SetVariableTyper.getCertainSetValIndexMap( - setVariableValueForEditText, - editTextPropertyIndex - ) - val variableTypeList = updateVariableTypeListByExcludeSupportView( - editParameters, - editTextPropertyIndex, - EditTextSupportViewName.EDIT_TEXT_PROPERTY.str - ) - editParameters.setVariableMap = updateSetVariableMapByEditSupportViewNameIndex( - editParameters, - editTextPropertyIndex, - ) - - - val editTextWeight = decideTextEditWeight( - variableTypeList, - ) - val otherComponentWeight = decideOtherComponentWeight( - editTextWeight, - variableTypeList, - ) - val insertEditText = EditTextSetter.set( - editFragment, - editParameters, - editTextPropertyMap, - editTextWeight - ) - val context = editFragment.context - val horizontalLinearLayout = makeHorizontalLayout(context) - horizontalLinearLayout.addView(insertEditText) -// hideSettingVariableWhenSettingEdit( +// fun insert( +// editFragment: EditFragment, +// insertTextView: TextView, +// editParameters: EditParameters, +// ): LinearLayout { +// val textLabelIndex = culcSetVariableTypeMarkIndex( // editParameters, +// textAndLabelList, +// EditTextSupportViewName.VARIABLE_LABEL.str +// ) +// VariableLabelAdder.add( // insertTextView, -// horizontalLinearLayout, +// editParameters, +// textLabelIndex // ) - (variableTypeList.indices).forEach { - val variableTypeListUntilCurrent = variableTypeList.take(it + 1) - val currentComponentIndex = variableTypeListUntilCurrent.filter { - !noIndexTypeList.contains(it) - }.size - 1 - when(variableTypeList[it]){ - EditTextSupportViewName.CHECK_BOX.str -> { - val insertSpinner = SpinnerViewProducer.make( - context, - insertEditText, - editParameters, - currentComponentIndex, - otherComponentWeight, - ) - horizontalLinearLayout.addView(insertSpinner) - } - EditTextSupportViewName.EDITABLE_CHECK_BOX.str -> { - val insertSpinner = EditableSpinnerViewProducer.make( - editFragment, - insertEditText, - editParameters, - currentComponentIndex, - otherComponentWeight, - ) - horizontalLinearLayout.addView(insertSpinner) - } - EditTextSupportViewName.EDITABLE_FILE_SELECT_BOX.str -> { - val editableFileSelectSpinner = FileSelectSpinnerViewProducer.make( - editFragment, - insertEditText, - editParameters, - currentComponentIndex, - otherComponentWeight, - ) - horizontalLinearLayout.addView(editableFileSelectSpinner) - } - EditTextSupportViewName.LIST_CONTENTS_SELECT_BOX.str -> { - val insertListConSpinner = ListContentsSelectSpinnerViewProducer.make( - editFragment, - insertEditText, - editParameters, - currentComponentIndex, - otherComponentWeight, - ) - horizontalLinearLayout.addView(insertListConSpinner) - } - EditTextSupportViewName.EDITABLE_LIST_CONTENTS_SELECT_BOX.str -> { - val insertListConSpinner = EditableListContentsSelectSpinnerViewProducer.make( - editFragment, - insertEditText, - editParameters, - currentComponentIndex, - otherComponentWeight, - ) - horizontalLinearLayout.addView(insertListConSpinner) - } - EditTextSupportViewName.NUM_INDE_CREMENTER.str -> { - val incButton = InDeCrementerViewProducer.make( - editFragment, - insertEditText, - editParameters, - currentComponentIndex, - otherComponentWeight, - true, - ) - horizontalLinearLayout.addView(incButton) - val decButton = InDeCrementerViewProducer.make( - editFragment, - insertEditText, - editParameters, - currentComponentIndex, - otherComponentWeight, - false - ) - horizontalLinearLayout.addView(decButton) - } - EditTextSupportViewName.READ_ONLY_EDIT_TEXT.str -> { - insertEditText.isEnabled = false - } - EditTextSupportViewName.PASSWORD.str -> { - insertEditText.inputType = ( - InputType.TYPE_CLASS_TEXT or - InputType.TYPE_TEXT_VARIATION_PASSWORD - ) - } - else -> {} - } - } - return horizontalLinearLayout - } +// editParameters.variableTypeList = updateVariableTypeListByExcludeSupportView( +// editParameters, +// textLabelIndex, +// EditTextSupportViewName.VARIABLE_LABEL.str +// ) +// editParameters.setVariableMap = updateSetVariableMapByEditSupportViewNameIndex( +// editParameters, +// textLabelIndex, +// ) +// +// +// val editTextPropertyIndex = culcSetVariableTypeMarkIndex( +// editParameters, +// textAndLabelList, +// EditTextSupportViewName.EDIT_TEXT_PROPERTY.str +// ) +// val setVariableValueForEditText = SetVariableTypeValue.makeByReplace( +// editParameters +// ) +// val editTextPropertyMap = SetVariableTyper.getCertainSetValIndexMap( +// setVariableValueForEditText, +// editTextPropertyIndex +// ) +// val variableTypeList = updateVariableTypeListByExcludeSupportView( +// editParameters, +// editTextPropertyIndex, +// EditTextSupportViewName.EDIT_TEXT_PROPERTY.str +// ) +// editParameters.setVariableMap = updateSetVariableMapByEditSupportViewNameIndex( +// editParameters, +// editTextPropertyIndex, +// ) +// +// +// val editTextWeight = decideTextEditWeight( +// variableTypeList, +// ) +// val otherComponentWeight = decideOtherComponentWeight( +// editTextWeight, +// variableTypeList, +// ) +// val insertEditText = EditTextSetter.set( +// editFragment, +// editParameters, +// editTextPropertyMap, +// editTextWeight +// ) +// val context = editFragment.context +// val horizontalLinearLayout = makeHorizontalLayout(context) +// horizontalLinearLayout.addView(insertEditText) +//// hideSettingVariableWhenSettingEdit( +//// editParameters, +//// insertTextView, +//// horizontalLinearLayout, +//// ) +// (variableTypeList.indices).forEach { +// val variableTypeListUntilCurrent = variableTypeList.take(it + 1) +// val currentComponentIndex = variableTypeListUntilCurrent.filter { +// !noIndexTypeList.contains(it) +// }.size - 1 +// when(variableTypeList[it]){ +// EditTextSupportViewName.CHECK_BOX.str -> { +// val insertSpinner = SpinnerViewProducer.make( +// context, +// insertEditText, +// editParameters, +// currentComponentIndex, +// otherComponentWeight, +// ) +// horizontalLinearLayout.addView(insertSpinner) +// } +// EditTextSupportViewName.EDITABLE_CHECK_BOX.str -> { +// val insertSpinner = EditableSpinnerViewProducer.make( +// editFragment, +// insertEditText, +// editParameters, +// currentComponentIndex, +// otherComponentWeight, +// ) +// horizontalLinearLayout.addView(insertSpinner) +// } +// EditTextSupportViewName.EDITABLE_FILE_SELECT_BOX.str -> { +// val editableFileSelectSpinner = FileSelectSpinnerViewProducer.make( +// editFragment, +// insertEditText, +// editParameters, +// currentComponentIndex, +// otherComponentWeight, +// ) +// horizontalLinearLayout.addView(editableFileSelectSpinner) +// } +// EditTextSupportViewName.LIST_CONTENTS_SELECT_BOX.str -> { +// val insertListConSpinner = ListContentsSelectSpinnerViewProducer.make( +// editFragment, +// insertEditText, +// editParameters, +// currentComponentIndex, +// otherComponentWeight, +// ) +// horizontalLinearLayout.addView(insertListConSpinner) +// } +// EditTextSupportViewName.EDITABLE_LIST_CONTENTS_SELECT_BOX.str -> { +// val insertListConSpinner = EditableListContentsSelectSpinnerViewProducer.make( +// editFragment, +// insertEditText, +// editParameters, +// currentComponentIndex, +// otherComponentWeight, +// ) +// horizontalLinearLayout.addView(insertListConSpinner) +// } +// EditTextSupportViewName.NUM_INDE_CREMENTER.str -> { +// val incButton = InDeCrementerViewProducer.make( +// editFragment, +// insertEditText, +// editParameters, +// currentComponentIndex, +// otherComponentWeight, +// true, +// ) +// horizontalLinearLayout.addView(incButton) +// val decButton = InDeCrementerViewProducer.make( +// editFragment, +// insertEditText, +// editParameters, +// currentComponentIndex, +// otherComponentWeight, +// false +// ) +// horizontalLinearLayout.addView(decButton) +// } +// EditTextSupportViewName.READ_ONLY_EDIT_TEXT.str -> { +// insertEditText.isEnabled = false +// } +// EditTextSupportViewName.PASSWORD.str -> { +// insertEditText.inputType = ( +// InputType.TYPE_CLASS_TEXT or +// InputType.TYPE_TEXT_VARIATION_PASSWORD +// ) +// } +// else -> {} +// } +// } +// return horizontalLinearLayout +// } private fun makeHorizontalLayout( context: Context? diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/WithEditComponentListView.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/WithEditComponentListView.kt new file mode 100755 index 000000000..637111748 --- /dev/null +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/WithEditComponentListView.kt @@ -0,0 +1,775 @@ +package com.puutaro.commandclick.proccess.edit.edit_text_support_view + +import android.text.Editable +import android.text.TextWatcher +import android.util.TypedValue +import android.view.MotionEvent +import android.view.View +import android.widget.FrameLayout +import androidx.appcompat.widget.AppCompatEditText +import androidx.appcompat.widget.AppCompatImageView +import androidx.appcompat.widget.AppCompatTextView +import androidx.appcompat.widget.LinearLayoutCompat +import androidx.core.view.children +import androidx.core.view.isVisible +import androidx.fragment.app.Fragment +import androidx.recyclerview.widget.RecyclerView +import com.puutaro.commandclick.common.variable.path.UsePath +import com.puutaro.commandclick.common.variable.variables.CommandClickScriptVariable +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter +import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.ListViewToolForListIndexAdapter +import com.puutaro.commandclick.custom_view.OutlineTextView +import com.puutaro.commandclick.fragment.EditFragment +import com.puutaro.commandclick.fragment_lib.edit_fragment.common.EditComponent +import com.puutaro.commandclick.fragment_lib.edit_fragment.common.TitleImageAndViewSetter +import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.lib.list_index.ItemTouchHelperCallbackForListIndexAdapter +import com.puutaro.commandclick.proccess.edit.lib.ListSettingVariableListMaker +import com.puutaro.commandclick.proccess.js_macro_libs.common_libs.JsActionKeyManager +import com.puutaro.commandclick.proccess.js_macro_libs.common_libs.JsActionTool +import com.puutaro.commandclick.proccess.list_index_for_edit.EditFrameMaker +import com.puutaro.commandclick.proccess.list_index_for_edit.ListIndexEditConfig +import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.BkImageSettingsForEditList +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.tool_bar_button.libs.JsPathHandlerForToolbarButton +import com.puutaro.commandclick.proccess.ubuntu.BusyboxExecutor +import com.puutaro.commandclick.util.Keyboard +import com.puutaro.commandclick.util.file.FileSystems +import com.puutaro.commandclick.util.map.CmdClickMap +import com.puutaro.commandclick.util.state.FannelInfoTool +import com.puutaro.commandclick.util.str.PairListTool +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import java.io.File + + +object WithEditComponentListView{ + + fun keyboardHide( + fragment: Fragment, + ){ + when(fragment) { + is EditFragment -> { + fragment.binding.editListSearchEditText.setText(String()) + val listener = + fragment.context as? EditFragment.OnKeyboardVisibleListenerForEditFragment + + listener?.onKeyBoardVisibleChangeForEditFragment( + false, + true, + ) + } + else -> {} + } + Keyboard.hiddenKeyboardForFragment (fragment) + } + + const val settingSectionStart = CommandClickScriptVariable.SETTING_SEC_START + const val settingSectionEnd = CommandClickScriptVariable.SETTING_SEC_END + + fun create( + fragment: Fragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + busyboxExecutor: BusyboxExecutor?, + listIndexConfigMap: Map?, + editTextView: AppCompatTextView, + editTitleImage: AppCompatImageView, + editListRecyclerView: RecyclerView, + editListBkFrame: FrameLayout, + editListSearchEditText: AppCompatEditText, + editFooterLinearlayout: LinearLayoutCompat, + editToolbarLinearLayout: LinearLayoutCompat?, + fannelCenterButtonLayout: FrameLayout?, + fannelContentsList: List?, + ) { + val context = fragment.context ?: return + + CoroutineScope(Dispatchers.Main).launch{ + val titleSettingPath = listIndexConfigMap?.get( + ListIndexEditConfig.ListIndexConfigKey.TITLE_LAYOUT_PATH.key + ) ?: String() + val titleSettingMap = withContext(Dispatchers.IO){ + ListSettingVariableListMaker.makeFromSettingPath( + titleSettingPath, + fannelInfoMap, + setReplaceVariableMap, + ) + } + TitleImageAndViewSetter.set( + fragment, + editTextView, + fannelInfoMap, + setReplaceVariableMap, + busyboxExecutor, + editTitleImage, + titleSettingMap + ) + } + val editListBkPairs = ListIndexEditConfig.getConfigKeyConList( + listIndexConfigMap, + ListIndexEditConfig.ListIndexConfigKey.BK.key + ) + CoroutineScope(Dispatchers.Main).launch { +// withContext(Dispatchers.Main) { +// BkImageSettingsForEditList.makeBkImage( +// editListBkImage, +// editListBkPairs, +// ) +// } + val bkFrameLayout = withContext(Dispatchers.Main){ + BkImageSettingsForEditList.makeBkFrame( + context, + fannelInfoMap, + setReplaceVariableMap, + busyboxExecutor, + editListBkPairs, + ) + } + withContext(Dispatchers.Main) { + editListBkFrame.addView(bkFrameLayout) + } + } + val indexListMap = ListIndexEditConfig.getConfigKeyMap( + listIndexConfigMap, + ListIndexEditConfig.ListIndexConfigKey.LIST.key + ) +// FileSystems.writeFile( +// File(UsePath.cmdclickDefaultAppDirPath, "glistWith.txt").absolutePath, +// listOf( +// "tag: ${editFragment.tag}", +// "listIndexConfigMap: ${listIndexConfigMap}", +// "indexListMap: ${indexListMap}", +// "listIndexTypeKey: ${listIndexTypeKey.key}", +// ).joinToString("\n\n") +// ) + val lineMapList = ListSettingsForListIndex.ListIndexListMaker.makeLineMapListHandler( + fannelInfoMap, + setReplaceVariableMap, + indexListMap, + busyboxExecutor, + ) +// FileSystems.writeFile( +// File(UsePath.cmdclickDefaultAppDirPath, "lfileList.txt").absolutePath, +// listOf( +// "indexListMap: ${indexListMap}", +// "fileList: ${fileList}", +// ).joinToString("\n\n") +// ) +// FileSystems.writeFile( +// File(UsePath.cmdclickDefaultAppDirPath, "lfannelContentsList.txt").absolutePath, +// fannelContentsList?.joinToString("\n") ?: String() +// ) + val editComponentListAdapter = EditComponentListAdapter( + fragment, + fannelInfoMap, + setReplaceVariableMap, + listIndexConfigMap, + busyboxExecutor, + indexListMap, + lineMapList, + fannelContentsList + ) + val layoutConfigMap = LayoutSettingsForListIndex.getLayoutConfigMap( + listIndexConfigMap, + ) + ItemTouchHelperCallbackForListIndexAdapter.set( + fragment, + fannelInfoMap, + setReplaceVariableMap, + editListRecyclerView, + editComponentListAdapter, + layoutConfigMap + ) + + editListRecyclerView.adapter = editComponentListAdapter + + val isReverseLayout = LayoutSettingsForListIndex.howReverseLayout( + fannelInfoMap, + setReplaceVariableMap, + layoutConfigMap + ) + LayoutSettingsForListIndex.setLayout( + context, + editComponentListAdapter.getLayoutConfigMap(), + editListRecyclerView, + isReverseLayout, + ) + CoroutineScope(Dispatchers.Main).launch { + setToolbar( + fragment, + fannelInfoMap, + setReplaceVariableMap, + busyboxExecutor, + editListRecyclerView, + editToolbarLinearLayout, + fannelCenterButtonLayout, + listIndexConfigMap, + ) + } + CoroutineScope(Dispatchers.Main).launch { + setFooter( + fragment, + fannelInfoMap, + setReplaceVariableMap, + busyboxExecutor, + editFooterLinearlayout, + editListRecyclerView, + listIndexConfigMap, + ) + } + invokeItemSetClickListenerForFileList( + fragment, + fannelInfoMap, + setReplaceVariableMap, + busyboxExecutor, + editListRecyclerView + ) + invokeItemSetTouchListenerForFileList( + fragment, + fannelInfoMap, + setReplaceVariableMap, + busyboxExecutor, + editListRecyclerView, + ) + makeSearchEditText( + fragment, + fannelInfoMap, + editComponentListAdapter, + editListSearchEditText, + listIndexConfigMap + ) + } + + private suspend fun setFooter( + fragment: Fragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + busyboxExecutor: BusyboxExecutor?, + editFooterLinearlayout: LinearLayoutCompat, + editListRecyclerView: RecyclerView, + listIndexConfigMap: Map?, + ){ + setFooterOrToolbar( + fragment, + fannelInfoMap, + setReplaceVariableMap, + busyboxExecutor, + editFooterLinearlayout, + editListRecyclerView, + null, + null, + listIndexConfigMap, + ) + } + + + private suspend fun setToolbar( + fragment: Fragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + busyboxExecutor: BusyboxExecutor?, + editListRecyclerView: RecyclerView, + editToolbarLinearLayout: LinearLayoutCompat?, + fannelCentrButtonLayout: FrameLayout?, + listIndexConfigMap: Map?, + ){ + setFooterOrToolbar( + fragment, + fannelInfoMap, + setReplaceVariableMap, + busyboxExecutor, + null, + editListRecyclerView, + editToolbarLinearLayout, + fannelCentrButtonLayout, + listIndexConfigMap, + ) + } + + private suspend fun setFooterOrToolbar( + fragment: Fragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + busyboxExecutor: BusyboxExecutor?, + editFooterLinearlayout: LinearLayoutCompat?, + editListRecyclerView: RecyclerView, + editToolbarLinearLayout: LinearLayoutCompat?, + fannelCenterButtonLayout: FrameLayout?, + listIndexConfigMap: Map?, + + ) { + val context = fragment.context + ?: return + val isEditToolbar = editToolbarLinearLayout != null + val layoutKey = when(isEditToolbar){ + true -> ListIndexEditConfig.ListIndexConfigKey.TOOLBAR_LAYOUT_PATH + else -> ListIndexEditConfig.ListIndexConfigKey.FOOTER_LAYOUT_PATH + }.key + val footerLayoutPath = ListSettingsForListIndex.ViewLayoutPathManager.getViewLayoutPath( + fannelInfoMap, + setReplaceVariableMap, + listIndexConfigMap, + layoutKey, + ) + val frameMapListToLinearMapList = ListSettingsForListIndex.ViewLayoutPathManager.parse( + fannelInfoMap, + setReplaceVariableMap, + footerLayoutPath + ) + val frameMap = frameMapListToLinearMapList?.first ?: emptyMap() + val frameTagList = frameMap.keys + val frameTagToLinearKeysListMap = frameMapListToLinearMapList?.second ?: emptyMap() + + val tagKey = EditComponent.Template.EditComponentKey.TAG.key + val typeSeparator = EditComponent.Template.typeSeparator + val isConsecKey = EditComponent.Template.EditComponentKey.IS_CONSEC.key + withContext(Dispatchers.Main) { + frameTagList.forEach { frameTag -> + val linearKeysList = frameTagToLinearKeysListMap.get(frameTag)?.let { + linearKeysListSrc -> + when (isEditToolbar) { + true -> listOf(linearKeysListSrc.firstOrNull() ?: emptyList()) + else -> linearKeysListSrc + } + } + linearKeysList?.forEach { + linearKeys -> + val weightSumFloat = 1f + val linearLayout = when(isEditToolbar) { + true -> editToolbarLinearLayout + else -> LinearLayoutCompat(context).apply { + tag = frameTag + val linearParam = LinearLayoutCompat.LayoutParams( + LinearLayoutCompat.LayoutParams.MATCH_PARENT, + LinearLayoutCompat.LayoutParams.WRAP_CONTENT + ) + layoutParams = linearParam + weightSum = weightSumFloat + orientation = LinearLayoutCompat.HORIZONTAL + } + } + val layoutWeight = when(isEditToolbar) { + true -> weightSumFloat / (linearKeys.size + 1) + else -> weightSumFloat / linearKeys.size + } + if(isEditToolbar) { + let { + val layoutParam = + fannelCenterButtonLayout?.layoutParams as? LinearLayoutCompat.LayoutParams + if (layoutParam?.weight == layoutWeight) return@let + layoutParam?.weight = layoutWeight + fannelCenterButtonLayout?.layoutParams = layoutParam + } + } + val noIndexSign = - 1 + linearKeys.forEach setFrame@{ linearFrameKeyPairsListConSrc -> + val linearFrameKeyPairsListCon = withContext(Dispatchers.IO) { + EditComponent.Template.ReplaceHolder.replaceHolder( + linearFrameKeyPairsListConSrc, + frameTag, + frameTag, + frameTag, + noIndexSign, + ) + } + val linearFrameKeyPairsList = withContext(Dispatchers.IO) { + CmdClickMap.createMap( + linearFrameKeyPairsListCon, + typeSeparator + ) + } + val linearFrameTag = withContext(Dispatchers.IO) { + PairListTool.getValue( + linearFrameKeyPairsList, + tagKey, + ) ?: String() + } + val editComponentListAdapter = + editListRecyclerView.adapter as? EditComponentListAdapter + editComponentListAdapter?.footerKeyPairListConMap?.put( + linearFrameTag, + linearFrameKeyPairsListConSrc + ) + val linearFrameLayout = EditFrameMaker.make( + context, + fannelInfoMap, + setReplaceVariableMap, + busyboxExecutor, + linearFrameKeyPairsList, + 0, + layoutWeight, + linearFrameTag, + false, + editComponentListAdapter?.totalSettingValMap, + ) ?: return@setFrame + val linearKeyList = JsActionKeyManager.JsActionsKey.entries.map { + it.key + } + withContext(Dispatchers.IO) execClick@ { + if( + linearFrameKeyPairsListCon.isNullOrEmpty() + ) return@execClick + val isConsec = + PairListTool.getValue( + linearFrameKeyPairsList, + isConsecKey, + ) == EditComponent.Template.switchOn + linearKeyList.any { + !PairListTool.getValue( + linearFrameKeyPairsList, + it, + ).isNullOrEmpty() + }.let { isJsAc -> + if ( + !isJsAc + && linearFrameLayout.tag != null + ) { + linearFrameLayout.setBackgroundResource(0) + linearFrameLayout.isClickable = false + return@let + } + val outValue = TypedValue() + context.theme.resolveAttribute( + android.R.attr.selectableItemBackground, + outValue, + true + ) + linearFrameLayout.setBackgroundResource(outValue.resourceId) + linearFrameLayout.isClickable = true + if(!isConsec){ + linearFrameLayout.setOnClickListener { + execJsAction( + fragment, + fannelInfoMap, + setReplaceVariableMap, + editListRecyclerView, + linearFrameKeyPairsListCon + ) + } + return@execClick + } + with(linearFrameLayout) { + var consecutiveJob: Job? = null + setOnTouchListener(android.view.View.OnTouchListener { v, event -> + var execTouchJob: Job? = null + when (event.action) { + MotionEvent.ACTION_DOWN -> { + consecutiveJob?.cancel() + consecutiveJob = CoroutineScope(Dispatchers.IO).launch { + var roopTimes = 0 + while (true) { + execTouchJob = CoroutineScope(Dispatchers.Main).launch { + execJsAction( + fragment, + fannelInfoMap, + setReplaceVariableMap, + editListRecyclerView, + linearFrameKeyPairsListCon + ) + } + withContext(Dispatchers.IO){ + if( + roopTimes == 0 + ) delay(300) + else delay(60) + } + roopTimes++ + } + } + } + MotionEvent.ACTION_UP, + MotionEvent.ACTION_CANCEL, -> { + v.performClick() + execTouchJob?.cancel() + consecutiveJob?.cancel() + } + } + true + }) + } + } + } + linearLayout?.addView(linearFrameLayout) + } + editFooterLinearlayout?.addView(linearLayout) + } + } + } + } + + private fun execJsAction( + fragment: Fragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + editListRecyclerView: RecyclerView?, + jsAcCon: String, + ){ + val mainFannelPath = File( + UsePath.cmdclickDefaultAppDirPath, + FannelInfoTool.getCurrentFannelName(fannelInfoMap) + ).absolutePath + val editComponentListAdapter = editListRecyclerView?.adapter as? EditComponentListAdapter + EditComponentListAdapter.MainFannelUpdater.saveFannelCon( + editComponentListAdapter?.fannelContentsList, + fannelInfoMap, + jsAcCon + ) + val jsActionMap = JsActionTool.makeJsActionMap( + fragment, + fannelInfoMap, + jsAcCon, + setReplaceVariableMap, + mainFannelPath + ) + JsPathHandlerForToolbarButton.handle( + fragment, + String(), + null, + jsActionMap, + ) + } + + private fun invokeItemSetClickListenerForFileList( + fragment: Fragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + busyboxExecutor: BusyboxExecutor?, + editListRecyclerView: RecyclerView + ) { + val editComponentListAdapter = + editListRecyclerView.adapter as EditComponentListAdapter + editComponentListAdapter.editAdapterClickListener = + object: EditComponentListAdapter.OnEditAdapterClickListener { + override fun onEditAdapterClick( + itemView: View, + holder: EditComponentListAdapter.ListIndexListViewHolder, + listIndexPosition: Int, + ) { + val frameLayout = itemView as FrameLayout + val tag = frameLayout.tag as String? + ?: return +// FileSystems.writeFile( +// File(UsePath.cmdclickDefaultAppDirPath, "lclcik.txt").absolutePath, +// listOf( +// "bindingAdapterPosition: ${holder.bindingAdapterPosition}", +// "lineMapList: ${editComponentListAdapter.lineMapList}", +// ).joinToString("\n") +// ) + val selectedItemLineMap = + editComponentListAdapter.lineMapList.getOrNull(holder.bindingAdapterPosition) + ?: return + keyboardHide( + fragment, + ) + + val frameOrLinearCon = EditComponent.Template.ReplaceHolder.replaceHolder( + holder.keyPairListConMap.get(tag), + holder.srcTitle, + holder.srcCon, + holder.srcImage, + listIndexPosition, + ) ?: return + frameLayout.children.firstOrNull{ + it is OutlineTextView + }?.let { + val textView = it as OutlineTextView + val curSettingValue = textView.autofillHints?.firstOrNull() +// FileSystems.writeFile( +// File(UsePath.cmdclickDefaultAppDirPath, "lclickUpdate_inwithEdit.txt").absolutePath, +// listOf( +// "tag: ${tag}", +// "text: ${textView.text}", +// "settingValMap: ${editComponentListAdapter.initSettingValMap}", +// "cmdValMap: ${editComponentListAdapter.initCmdValMap}", +// "hint: ${textView.autofillHints?.firstOrNull()}" +// ).joinToString("\n") +// ) + editComponentListAdapter.handleClickEvent( + editListRecyclerView, + tag, + curSettingValue, + listIndexPosition, + frameOrLinearCon + ) + } + ListIndexEditConfig.handle( + fragment, + fannelInfoMap, + setReplaceVariableMap, + busyboxExecutor, + editListRecyclerView, +// false, + selectedItemLineMap, + frameOrLinearCon, + listIndexPosition + ) + } + } + } + + + private fun invokeItemSetTouchListenerForFileList( + fragment: Fragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + busyboxExecutor: BusyboxExecutor?, + editListRecyclerView: RecyclerView, + ) { + var execTouchJob: Job? = null + var consecutiveJob: Job? = null + val editComponentListAdapter = + editListRecyclerView.adapter as EditComponentListAdapter + editComponentListAdapter.editAdapterTouchUpListener = object: EditComponentListAdapter.OnEditAdapterTouchUpListener { + override fun onEditAdapterTouchUp( + itemView: View, + holder: EditComponentListAdapter.ListIndexListViewHolder, + listIndexPosition: Int + ) { + execTouchJob?.cancel() + consecutiveJob?.cancel() + return + } + } + + editComponentListAdapter.editAdapterTouchDownListener = object: EditComponentListAdapter.OnEditAdapterTouchDownListener { + override fun onEditAdapterTouchDown( + itemView: View, + holder: EditComponentListAdapter.ListIndexListViewHolder, + listIndexPosition: Int + ) { + val frameLayout = itemView as FrameLayout + val tag = itemView.tag as String? + ?: return + val selectedItemLineMap = + editComponentListAdapter.lineMapList.getOrNull(holder.bindingAdapterPosition) + ?: return + val frameOrLinearCon = holder.keyPairListConMap.get(tag) + ?: return + val textView = frameLayout.children.firstOrNull{ + it is OutlineTextView + } as? OutlineTextView + consecutiveJob?.cancel() + consecutiveJob = CoroutineScope(Dispatchers.IO).launch { + var roopTimes = 0 + while (true) { + execTouchJob = CoroutineScope(Dispatchers.Main).launch touch@ { + withContext(Dispatchers.Main) { + val curSettingValue = textView?.autofillHints?.firstOrNull() +// FileSystems.writeFile( +// File(UsePath.cmdclickDefaultAppDirPath, "lclickUpdate_inwithEdit.txt").absolutePath, +// listOf( +// "tag: ${tag}", +// "text: ${textView.text}", +// "settingValMap: ${editComponentListAdapter.initSettingValMap}", +// "cmdValMap: ${editComponentListAdapter.initCmdValMap}", +// "hint: ${textView.autofillHints?.firstOrNull()}" +// ).joinToString("\n") +// ) + editComponentListAdapter.handleClickEvent( + editListRecyclerView, + tag, + curSettingValue, + listIndexPosition, + frameOrLinearCon + ) + ListIndexEditConfig.handle( + fragment, + fannelInfoMap, + setReplaceVariableMap, + busyboxExecutor, + editListRecyclerView, +// true, + selectedItemLineMap, + frameOrLinearCon, + listIndexPosition + ) + } + } + withContext(Dispatchers.IO){ + if( + roopTimes == 0 + ) delay(300) + else delay(60) + } + roopTimes++ + } + } + return + } + } + + } + + private fun makeSearchEditText( + fragment: Fragment, + fannelInfoMap: Map, + editComponentListAdapter: EditComponentListAdapter, + searchText: AppCompatEditText, + listIndexConfigMap: Map? + ) { + val searchBoxMap = ListIndexEditConfig.getConfigKeyMap( + listIndexConfigMap, + ListIndexEditConfig.ListIndexConfigKey.SEARCH_BOX.key + ) + val inVisible = + searchBoxMap.get( + SearchBoxSettingsForListIndex.SearchBoxSettingKey.VISIBLE.key + ) == SearchBoxSettingsForListIndex.SearchBoxVisibleKey.OFF.name + if(inVisible){ + searchText.isVisible = false + return + } + searchText.hint = searchBoxMap.get( + SearchBoxSettingsForListIndex.SearchBoxSettingKey.HINT.key + ).let { + when(it.isNullOrEmpty()) { + false -> SearchBoxSettingsForListIndex.makeCurrentVariableValueInEditText( + fragment, + fannelInfoMap, + it + ) + else -> TitleImageAndViewSetter.makeDefaultTitle( + fragment, + fannelInfoMap, + ) + } + } + searchText.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {} + + override fun afterTextChanged(s: Editable?) { + if(!searchText.hasFocus()) return + val filteredUrlHistoryList = ListSettingsForListIndex.ListIndexListMaker.makeLineMapListHandler( + editComponentListAdapter.fannelInfoMap, + editComponentListAdapter.setReplaceVariableMap, + editComponentListAdapter.editListMap, + editComponentListAdapter.busyboxExecutor, + ).filter { + lineMap -> + val title = lineMap.get( + ListSettingsForListIndex.MapListPathManager.Key.SRC_TITLE.key + ) ?: String() + Regex( + searchText.text.toString() + .lowercase() + .replace("\n", "") + ).containsMatchIn( + title.lowercase() + ) + } + ListViewToolForListIndexAdapter.listIndexListUpdateFileList( + editComponentListAdapter, + filteredUrlHistoryList, + ) + } + }) + } +} + 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 deleted file mode 100755 index abe796255..000000000 --- a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/WithIndexListView.kt +++ /dev/null @@ -1,276 +0,0 @@ -package com.puutaro.commandclick.proccess.edit.edit_text_support_view - -import android.text.Editable -import android.text.TextWatcher -import android.view.View -import androidx.appcompat.widget.AppCompatEditText -import androidx.core.view.isVisible -import androidx.recyclerview.widget.RecyclerView -import com.puutaro.commandclick.common.variable.edit.EditParameters -import com.puutaro.commandclick.common.variable.variables.CommandClickScriptVariable -import com.puutaro.commandclick.component.adapter.ListIndexAdapter -import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.ListViewToolForListIndexAdapter -import com.puutaro.commandclick.fragment.EditFragment -import com.puutaro.commandclick.fragment_lib.edit_fragment.common.TitleImageAndViewSetter -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 -import com.puutaro.commandclick.util.Keyboard -import java.lang.ref.WeakReference - - -object WithIndexListView{ - - fun keyboardHide( - editFragment: EditFragment, - ){ - editFragment.binding.editListSearchEditText.setText(String()) - val listener = editFragment.context as? EditFragment.OnKeyboardVisibleListenerForEditFragment - listener?.onKeyBoardVisibleChangeForEditFragment( - false, - true, - ) - Keyboard.hiddenKeyboardForFragment(editFragment) - } - -// var languageType = LanguageTypeSelects.JAVA_SCRIPT -// var languageTypeToSectionHolderMap = -// CommandClickScriptVariable.LANGUAGE_TYPE_TO_SECTION_HOLDER_MAP.get( -// languageType -// ) -// var settingSectionStart = languageTypeToSectionHolderMap?.get( -// CommandClickScriptVariable.HolderTypeName.SETTING_SEC_START -// ) as String -// -// var settingSectionEnd = languageTypeToSectionHolderMap?.get( -// CommandClickScriptVariable.HolderTypeName.SETTING_SEC_END -// ) as String - val settingSectionStart = CommandClickScriptVariable.SETTING_SEC_START - val settingSectionEnd = CommandClickScriptVariable.SETTING_SEC_END - - fun create( - editFragment: EditFragment, - editParameters: EditParameters, - ) { - val context = editFragment.context ?: return - val binding = editFragment.binding - val editListSearchEditText = binding.editListSearchEditText - - binding.editListLinearLayout.isVisible = true - binding.editTextScroll.isVisible = false - val listIndexConfigMap = editFragment.listIndexConfigMap - val listIndexTypeKey = ListIndexEditConfig.getListIndexType( - editFragment - ) - val indexListMap = ListIndexEditConfig.getConfigKeyMap( - listIndexConfigMap, - ListIndexEditConfig.ListIndexConfigKey.LIST.key - ) -// FileSystems.writeFile( -// File(UsePath.cmdclickDefaultAppDirPath, "glistWith.txt").absolutePath, -// listOf( -// "tag: ${editFragment.tag}", -// "listIndexConfigMap: ${listIndexConfigMap}", -// "indexListMap: ${indexListMap}", -// "listIndexTypeKey: ${listIndexTypeKey.key}", -// ).joinToString("\n\n") -// ) - val fileList = ListSettingsForListIndex.ListIndexListMaker.makeFileListHandler( - editFragment, - indexListMap, - listIndexTypeKey - ) - - val editListRecyclerView = - binding.editListRecyclerView - val listIndexForEditAdapter = ListIndexAdapter( - WeakReference(editFragment), - fileList, - ) - ItemTouchHelperCallbackForListIndexAdapter.set( - editFragment, - editListRecyclerView, - listIndexForEditAdapter, - ) - - editListRecyclerView.adapter = listIndexForEditAdapter - - - val isReverseLayout = ListSettingsForListIndex.howReverseLayout( - editFragment, - indexListMap - ) - LayoutSettingsForListIndex.setLayout( - context, - listIndexForEditAdapter.getLayoutConfigMap(), - editListRecyclerView, - isReverseLayout, - ) - ListViewToolForListIndexAdapter.scrollToBottom( - editListRecyclerView, - listIndexForEditAdapter, - ) - invokeItemSetClickListenerForFileList( - editFragment, - binding.editListRecyclerView - ) - invokeQrLogoSetClickListenerForFileList( - editFragment, - binding.editListRecyclerView, - ) - invokeQrLogoSetLongClickListenerForFileList(editFragment) - invokeItemSetLongTimeClickListenerForIndexList( - editFragment, - editListRecyclerView, - ) - makeSearchEditText( - editFragment, - editListSearchEditText, - listIndexConfigMap - ) - } - - private fun invokeItemSetClickListenerForFileList( - editFragment: EditFragment, - editListRecyclerView: RecyclerView - ) { - val listIndexForEditAdapter = - editListRecyclerView.adapter as ListIndexAdapter - listIndexForEditAdapter.fileNameClickListener = - object: ListIndexAdapter.OnFileNameItemClickListener { - override fun onFileNameClick( - itemView: View, - holder: ListIndexAdapter.ListIndexListViewHolder, - listIndexPosition: Int, - ) { - keyboardHide( - editFragment, - ) - val selectedItem = holder.fileName - ListIndexEditConfig.handle( - editFragment, - false, - selectedItem, - holder, - listIndexPosition - ) - } - } - } - - private fun invokeQrLogoSetClickListenerForFileList( - editFragment: EditFragment, - editListRecyclerView: RecyclerView, - ) { - val listIndexForEditAdapter = - editListRecyclerView.adapter as ListIndexAdapter - listIndexForEditAdapter.fileQrLogoClickListener = object: ListIndexAdapter.OnFileQrLogoItemClickListener { - override fun onFileQrLogoClick( - itemView: View, - holder: ListIndexAdapter.ListIndexListViewHolder, - listIndexPosition: Int, - ) { - keyboardHide(editFragment) - QrDialogClickHandler.handle( - false, - editFragment, - holder.fileName, - holder.bindingAdapterPosition, - ) - } - } - } - - private fun invokeQrLogoSetLongClickListenerForFileList( - editFragment: EditFragment, - ) { - FannelLogoLongClickDoForListIndex.invoke( - editFragment, - ) - } - - private fun makeSearchEditText( - editFragment: EditFragment, - searchText: AppCompatEditText, - listIndexConfigMap: Map? - ) { - val searchBoxMap = ListIndexEditConfig.getConfigKeyMap( - listIndexConfigMap, - ListIndexEditConfig.ListIndexConfigKey.SEARCH_BOX.key - ) - val inVisible = - searchBoxMap.get( - SearchBoxSettingsForListIndex.SearchBoxSettingKey.VISIBLE.key - ) == SearchBoxSettingsForListIndex.SearchBoxVisibleKey.OFF.name - if(inVisible){ - searchText.isVisible = false - return - } - searchText.hint = searchBoxMap.get( - SearchBoxSettingsForListIndex.SearchBoxSettingKey.HINT.key - ).let { - when(it.isNullOrEmpty()) { - false -> SearchBoxSettingsForListIndex.makeCurrentVariableValueInEditText( - editFragment, - it - ) - else -> TitleImageAndViewSetter.makeDefaultTitle( - editFragment, - ) - } - } - searchText.addTextChangedListener(object : TextWatcher { - override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} - override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {} - - override fun afterTextChanged(s: Editable?) { - if(!searchText.hasFocus()) return - val filteredUrlHistoryList = ListSettingsForListIndex.ListIndexListMaker.makeFileListHandler( - editFragment, - ListIndexAdapter.indexListMap, - ListIndexAdapter.listIndexTypeKey - ).filter { - Regex( - searchText.text.toString() - .lowercase() - .replace("\n", "") - ).containsMatchIn( - it.lowercase() - ) - } - ListViewToolForListIndexAdapter.listIndexListUpdateFileList( - editFragment, - filteredUrlHistoryList, - ) - } - }) - } - - private fun invokeItemSetLongTimeClickListenerForIndexList( - editFragment: EditFragment, - editListRecyclerView: RecyclerView, - ){ - val indexForEditAdapter = editListRecyclerView.adapter as ListIndexAdapter - indexForEditAdapter.itemLongClickListener = object : ListIndexAdapter.OnItemLongClickListener { - override fun onItemLongClick( - itemView: View, - holder: ListIndexAdapter.ListIndexListViewHolder, - listIndexPosition: Int - ) { - val selectedItem = holder.fileName - ListIndexEditConfig.handle( - editFragment, - true, - selectedItem, - holder, - listIndexPosition, - ) - } - } - } -} - diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/ButtonViewProducer.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/ButtonViewProducer.kt index 2dcd05dd9..be026ba4f 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/ButtonViewProducer.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/ButtonViewProducer.kt @@ -14,11 +14,9 @@ import com.puutaro.commandclick.common.variable.path.UsePath import com.puutaro.commandclick.common.variable.edit.EditParameters import com.puutaro.commandclick.common.variable.broadcast.scheme.BroadCastIntentSchemeUbuntu import com.puutaro.commandclick.fragment.EditFragment -import com.puutaro.commandclick.fragment_lib.edit_fragment.processor.ScriptFileSaver import com.puutaro.commandclick.fragment_lib.edit_fragment.variable.EditTextSupportViewId import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.lib.ExecJsScriptInEdit import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.lib.GridDialogForButton -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.lib.SetVariableTypeValue import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.lib.button.JsPathForEditButton import com.puutaro.commandclick.proccess.edit.lib.ButtonSetter import com.puutaro.commandclick.proccess.edit.lib.EditVariableName @@ -68,15 +66,15 @@ object ButtonViewProducer { currentComponentIndex: Int, ): Button { val context = editFragment.context - val currentId = editParameters.currentId +// val currentId = editParameters.currentId - val currentSetVariableValue = SetVariableTypeValue.makeByReplace( - editParameters - ) +// val currentSetVariableValue = SetVariableTypeValue.makeByReplace( +// editParameters +// ) val buttonMap = getButtonMap( editFragment, - currentSetVariableValue, +// currentSetVariableValue, currentComponentIndex ) val linearParamsForButton = LinearLayoutCompat.LayoutParams( @@ -85,8 +83,8 @@ object ButtonViewProducer { ) linearParamsForButton.weight = weight val insertButton = Button(context) - insertButton.id = currentId + EditTextSupportViewId.BUTTON.id - insertButton.tag = "button${currentId + EditTextSupportViewId.BUTTON.id}" +// insertButton.id = currentId + EditTextSupportViewId.BUTTON.id +// insertButton.tag = "button${currentId + EditTextSupportViewId.BUTTON.id}" insertButton.layoutParams = linearParamsForButton insertButton.text = makeButtonLabel( getButtonLabel(buttonMap), @@ -97,15 +95,15 @@ object ButtonViewProducer { insertButton, buttonMap, ) - val currentVariableName = editParameters.currentVariableName +// val currentVariableName = editParameters.currentVariableName val buttonEventArgs = ButtonEventArgs( insertButton, editFragment, insertEditText, - currentVariableName, +// currentVariableName, editParameters, buttonMap, - currentSetVariableValue +// currentSetVariableValue ) when(getIsConsec(buttonMap)) { true -> buttonTouchListener(buttonEventArgs) @@ -181,7 +179,7 @@ object ButtonViewProducer { ButtonEditKey.tag.name ) - ScriptFileSaver.save(editFragment) +// ScriptFileSaver.save(editFragment) ListContentsSaverByTag.save( editFragment, listOf(currentButtonTag) @@ -274,11 +272,11 @@ object ButtonViewProducer { execCmdReplaceBlankList, buttonMap ) - ButtonCmdType.settingFrag - -> execSettingCmd( - buttonEventArgs, - execCmdReplaceBlankList, - ) +// ButtonCmdType.settingFrag +// -> execSettingCmd( +// buttonEventArgs, +// execCmdReplaceBlankList, +// ) ButtonCmdType.basht -> execShellScriptByTermux( editFragment, @@ -295,12 +293,13 @@ object ButtonViewProducer { editFragment, execCmdAfterTrimButtonEditExecVariant, ) - ButtonCmdType.jsCode - -> jsConExecutor( - editFragment, - buttonEventArgs, - innerExecCmd, - ) + else -> {} +// ButtonCmdType.jsCode +// -> jsConExecutor( +// editFragment, +// buttonEventArgs, +// innerExecCmd, +// ) // execShellHandler( // editFragment, // execCmdAfterTrimButtonEditExecVariant, @@ -539,31 +538,32 @@ object ButtonViewProducer { }.joinToString("") } - private fun execSettingCmd( - buttonEventArgs: ButtonEventArgs, - execCmdReplaceBlankList: List, - ){ - val setFOptionMap = getSetFOptionMap( - execCmdReplaceBlankList - ) ?: return - val settingArg = setFOptionMap.get(SET_F_OPTION_MAP_KEY.type) - ?: return - when(settingArg){ - SettingCmdArgs.ListAdd.name -> { - val listConSlSpiOptionsStr = getFromSetVariableValueByIndex( - buttonEventArgs.currentSetVariableValue, - 0 - ) - execListAddForSetting( - buttonEventArgs.editFragment, - buttonEventArgs.currentVariableName, - listConSlSpiOptionsStr, - setFOptionMap - ) - } - else -> {} - } - } +// private fun execSettingCmd( +// buttonEventArgs: ButtonEventArgs, +// execCmdReplaceBlankList: List, +// ){ +// val setFOptionMap = getSetFOptionMap( +// execCmdReplaceBlankList +// ) ?: return +// val settingArg = setFOptionMap.get(SET_F_OPTION_MAP_KEY.type) +// ?: return +// when(settingArg){ +// SettingCmdArgs.ListAdd.name -> { +// val listConSlSpiOptionsStr = String() +//// getFromSetVariableValueByIndex( +//// buttonEventArgs.currentSetVariableValue, +//// 0 +//// ) +// execListAddForSetting( +// buttonEventArgs.editFragment, +//// buttonEventArgs.currentVariableName, +// listConSlSpiOptionsStr, +// setFOptionMap +// ) +// } +// else -> {} +// } +// } private fun execListAddForSetting( editFragment: EditFragment, @@ -812,24 +812,24 @@ object ButtonViewProducer { ) Keyboard.hiddenKeyboardForFragment(editFragment) } - private fun jsConExecutor( - editFragment: EditFragment, - buttonEventArgs: ButtonEventArgs, - jsConSrc: String, - ){ - val currentEditTextConMark = "\${CURRENT_VAL_VALUE}" - val currentVariableName = buttonEventArgs.currentVariableName - val currentEditTextCon = currentVariableName?.let { - EditVariableName.getText(editFragment, it) - } ?: String() - ExecJsScriptInEdit.execJsConForEdit( - editFragment, - jsConSrc.replace( - currentEditTextConMark, - currentEditTextCon - ) - ) - } +// private fun jsConExecutor( +// editFragment: EditFragment, +// buttonEventArgs: ButtonEventArgs, +// jsConSrc: String, +// ){ +// val currentEditTextConMark = "\${CURRENT_VAL_VALUE}" +// val currentVariableName = buttonEventArgs.currentVariableName +// val currentEditTextCon = currentVariableName?.let { +// EditVariableName.getText(editFragment, it) +// } ?: String() +// ExecJsScriptInEdit.execJsConForEdit( +// editFragment, +// jsConSrc.replace( +// currentEditTextConMark, +// currentEditTextCon +// ) +// ) +// } private fun makeArgs( execCmdReplaceBlankList: List, @@ -893,7 +893,7 @@ object ButtonViewProducer { private fun getButtonMap( editFragment: EditFragment, - currentSetVariableValue: String?, +// currentSetVariableValue: String?, currentComponentIndex: Int ): Map { val fannelInfoMap = editFragment.fannelInfoMap @@ -903,32 +903,33 @@ object ButtonViewProducer { val currentFannelName = FannelInfoTool.getCurrentFannelName( fannelInfoMap ) - return currentSetVariableValue?.let { - if( - it.contains( - setVariableSetSeparator - ) - ) return@let QuoteTool.splitBySurroundedIgnore( - it, - setVariableSetSeparator - ) - .getOrNull(currentComponentIndex).let { - QuoteTool.trimBothEdgeQuote(it) - } - QuoteTool.trimBothEdgeQuote(it) - }?.let { - SetReplaceVariabler.execReplaceByReplaceVariables( - it, - editFragment.setReplaceVariableMap, -// currentAppDirPath, - currentFannelName - ) - }.let { - CmdClickMap.createMap( - it, - '?' - ).toMap() - } + return emptyMap() +// return currentSetVariableValue?.let { +// if( +// it.contains( +// setVariableSetSeparator +// ) +// ) return@let QuoteTool.splitBySurroundedIgnore( +// it, +// setVariableSetSeparator +// ) +// .getOrNull(currentComponentIndex).let { +// QuoteTool.trimBothEdgeQuote(it) +// } +// QuoteTool.trimBothEdgeQuote(it) +// }?.let { +// SetReplaceVariabler.execReplaceByReplaceVariables( +// it, +// editFragment.setReplaceVariableMap, +//// currentAppDirPath, +// currentFannelName +// ) +// }.let { +// CmdClickMap.createMap( +// it, +// '?' +// ).toMap() +// } } private fun getSetFOptionMap( @@ -996,10 +997,10 @@ object ButtonViewProducer { val insertButton: Button, val editFragment: EditFragment, val insertEditText: EditText, - val currentVariableName: String?, +// val currentVariableName: String?, val editParameters: EditParameters, val buttonMap: Map?, - val currentSetVariableValue: String? +// val currentSetVariableValue: String? ) private enum class ButtonCmdType( @@ -1009,8 +1010,9 @@ object ButtonViewProducer { jsActionFrag("jsa"), jsActionConFrag("jsac"), jsCode("jsCode"), - settingFrag("setf"), - basht("basht"), +// settingFrag("setf"), + basht( + "basht"), bashf("bashf"), bashb("bashb"), } diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/DirOrFileChooseProducer.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/DirOrFileChooseProducer.kt index fbb9c71cf..902cc52a6 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/DirOrFileChooseProducer.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/DirOrFileChooseProducer.kt @@ -14,83 +14,83 @@ import com.puutaro.commandclick.util.state.FannelInfoTool object DirOrFileChooseProducer { - fun make( - editFragment: EditFragment, - editParameters: EditParameters, - onDirectoryPick: Boolean, - insertEditText: EditText, - currentComponentIndex: Int, - weight: Float, - ): Button { - val context = editFragment.context - val chooseButtonStr = when(onDirectoryPick) { - true -> "dir" - else -> "file" - } - val insertButtonView = Button(context) - insertButtonView.text = chooseButtonStr - ButtonSetter.set( - context, - insertButtonView, - mapOf() - ) - val chooserMap = getChooserMap( - editParameters, - currentComponentIndex - ) - val fannelName = FannelInfoTool.getCurrentFannelName( - editFragment.fannelInfoMap - ) - val currentVariableName = - editParameters.currentVariableName - ?: String() - insertButtonView.setOnClickListener { view -> - val listener = context as? EditFragment.OnFileChooserListenerForEdit - listener?.onFileChooserListenerForEdit( - onDirectoryPick, - insertEditText, - chooserMap, - fannelName, - currentVariableName - ) - } - val insertButtonViewParam = LinearLayoutCompat.LayoutParams( - 0, - LinearLayoutCompat.LayoutParams.MATCH_PARENT, - ) - insertButtonViewParam.weight = weight - insertButtonView.layoutParams = insertButtonViewParam - return insertButtonView - } +// fun make( +// editFragment: EditFragment, +// editParameters: EditParameters, +// onDirectoryPick: Boolean, +// insertEditText: EditText, +// currentComponentIndex: Int, +// weight: Float, +// ): Button { +// val context = editFragment.context +// val chooseButtonStr = when(onDirectoryPick) { +// true -> "dir" +// else -> "file" +// } +// val insertButtonView = Button(context) +// insertButtonView.text = chooseButtonStr +// ButtonSetter.set( +// context, +// insertButtonView, +// mapOf() +// ) +// val chooserMap = getChooserMap( +// editParameters, +// currentComponentIndex +// ) +// val fannelName = FannelInfoTool.getCurrentFannelName( +// editFragment.fannelInfoMap +// ) +// val currentVariableName = +// editParameters.currentVariableName +// ?: String() +// insertButtonView.setOnClickListener { view -> +// val listener = context as? EditFragment.OnFileChooserListenerForEdit +// listener?.onFileChooserListenerForEdit( +// onDirectoryPick, +// insertEditText, +// chooserMap, +// fannelName, +// currentVariableName +// ) +// } +// val insertButtonViewParam = LinearLayoutCompat.LayoutParams( +// 0, +// LinearLayoutCompat.LayoutParams.MATCH_PARENT, +// ) +// insertButtonViewParam.weight = weight +// insertButtonView.layoutParams = insertButtonViewParam +// return insertButtonView +// } - private fun getChooserMap( - editParameters: EditParameters, - currentComponentIndex: Int - ): Map? { - val currentSetVariableMap = editParameters.setVariableMap - val fannelInfoMap = editParameters.fannelInfoMap -// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( +// private fun getChooserMap( +// editParameters: EditParameters, +// currentComponentIndex: Int +// ): Map? { +// val currentSetVariableMap = editParameters.setVariableMap +// val fannelInfoMap = editParameters.fannelInfoMap +//// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( +//// fannelInfoMap +//// ) +// val currentScriptName = FannelInfoTool.getCurrentFannelName( // fannelInfoMap // ) - val currentScriptName = FannelInfoTool.getCurrentFannelName( - fannelInfoMap - ) - return currentSetVariableMap?.get( - SetVariableTypeColumn.VARIABLE_TYPE_VALUE.name - )?.split('|') - ?.getOrNull(currentComponentIndex) - ?.let { - SetReplaceVariabler.execReplaceByReplaceVariables( - it, - editParameters.setReplaceVariableMap, -// currentAppDirPath, - currentScriptName, - ) - }?.let { - CmdClickMap.createMap( - it, - '?' - ) - }?.toMap() - } +// return currentSetVariableMap?.get( +// SetVariableTypeColumn.VARIABLE_TYPE_VALUE.name +// )?.split('|') +// ?.getOrNull(currentComponentIndex) +// ?.let { +// SetReplaceVariabler.execReplaceByReplaceVariables( +// it, +// editParameters.setReplaceVariableMap, +//// currentAppDirPath, +// currentScriptName, +// ) +// }?.let { +// CmdClickMap.createMap( +// it, +// '?' +// ) +// }?.toMap() +// } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/DragSortListViewProducer.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/DragSortListViewProducer.kt index 07fe046d1..9c9dc51eb 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/DragSortListViewProducer.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/DragSortListViewProducer.kt @@ -2,25 +2,14 @@ package com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib import android.app.Dialog import android.content.Context -import android.view.Gravity -import android.view.ViewGroup -import android.widget.Button -import androidx.appcompat.widget.AppCompatImageButton -import androidx.appcompat.widget.AppCompatTextView -import androidx.appcompat.widget.LinearLayoutCompat import androidx.fragment.app.Fragment import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView.ItemDecoration import com.puutaro.commandclick.R -import com.puutaro.commandclick.common.variable.edit.EditParameters import com.puutaro.commandclick.component.adapter.DragSortRecyclerAdapter import com.puutaro.commandclick.custom_manager.PreLoadLayoutManager -import com.puutaro.commandclick.fragment.EditFragment -import com.puutaro.commandclick.fragment_lib.edit_fragment.variable.EditTextSupportViewId -import com.puutaro.commandclick.proccess.edit.lib.ButtonSetter -import com.puutaro.commandclick.proccess.edit.lib.ListPathGetterForDragSort import com.puutaro.commandclick.proccess.edit.lib.ProducerMacro import com.puutaro.commandclick.util.file.FileSystems import com.puutaro.commandclick.util.file.ReadText @@ -35,138 +24,138 @@ object DragSortListViewProducer { val macroStrForDragSortGetListPathFromVar = ProducerMacro.macroStrForDragSortGetListPathFromVar - fun make( - editFragment: EditFragment, - editParameters: EditParameters, - currentComponentIndex: Int, - weight: Float, - ): Button { - - val context = editFragment.context - val currentId = editParameters.currentId - val linearParamsForDragSortListView = LinearLayoutCompat.LayoutParams( - 0, - LinearLayoutCompat.LayoutParams.MATCH_PARENT, - ) - linearParamsForDragSortListView.weight = weight - val elsbMap = ListContentsSelectSpinnerViewProducer.getElsbMap( - editParameters, - currentComponentIndex - ) - val currentVariableName = editParameters.currentVariableName - val listContentsFilePath = ListPathGetterForDragSort.get( - elsbMap, - editFragment, - currentVariableName ?: String(), - ) - - val fileObj = File(listContentsFilePath) - val parentDir = fileObj.parent ?: String() - FileSystems.createDirs(parentDir) - - val dragSortListViewButtonView = Button(context) - dragSortListViewButtonView.layoutParams = linearParamsForDragSortListView - dragSortListViewButtonView.id = currentId + EditTextSupportViewId.EDITABLE_GRID.id - dragSortListViewButtonView.tag = "gridEdit${currentId + EditTextSupportViewId.EDITABLE_GRID.id}" - dragSortListViewButtonView.text = dragSortButtonLabel - ButtonSetter.set( - context, - dragSortListViewButtonView, - mapOf() - ) - dragSortListViewButtonView.setOnClickListener { - buttonView -> - val buttonContext = buttonView.context - dragSortDialogObj = Dialog( - buttonContext - ) - dragSortDialogObj?.setContentView( - R.layout.drag_sort_dialog_layout - ) - val titleTextView = - dragSortDialogObj?.findViewById( - R.id.drag_sort_dialog_title - ) - titleTextView?.text = "Sort by drag, or remove by swipe" - setDragSortRecyclerView( - editFragment, - listContentsFilePath, - ) - dragSortDialogObj?.setOnCancelListener { - dragSortDialogObj?.dismiss() - dragSortDialogObj = null - } - val cancelButton = - dragSortDialogObj?.findViewById( - R.id.drag_sort_dialog_cancel - ) - cancelButton?.setOnClickListener { - dragSortDialogObj?.dismiss() - dragSortDialogObj = null - } - val okButton = - dragSortDialogObj?.findViewById( - R.id.drag_sort_dialog_ok - ) - okButton?.setOnClickListener { - val dragSortRecyclerView = dragSortDialogObj?.findViewById( - R.id.drag_sort_dialog_recycler_view - ) - val dragSortAdapter = - dragSortRecyclerView?.adapter as? DragSortRecyclerAdapter - dragSortDialogObj?.dismiss() - dragSortDialogObj = null - dragSortAdapter?.let { - FileSystems.writeFile( - listContentsFilePath, - dragSortAdapter.dratSortList.joinToString("\n") - ) - } - } - dragSortDialogObj?.window?.setLayout( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.WRAP_CONTENT - ) - dragSortDialogObj?.window?.setGravity(Gravity.BOTTOM) - dragSortDialogObj?.show() - } - return dragSortListViewButtonView - } - - private fun setDragSortRecyclerView( - currentFragment: Fragment, - listContentsFilePath: String, - ) { - val context = currentFragment.context - ?: return - val dragSortList = - makeDragSortList( - listContentsFilePath - ) - val recyclerView = dragSortDialogObj?.findViewById( - R.id.drag_sort_dialog_recycler_view - ) ?: return - recyclerView.setHasFixedSize(true) - val layoutManager: RecyclerView.LayoutManager - = PreLoadLayoutManager(context) - recyclerView.layoutManager = layoutManager - val dragSortRecyclerAdapter = DragSortRecyclerAdapter( - dragSortList.toMutableList() - ) - recyclerView.adapter = dragSortRecyclerAdapter - - val itemDecoration: ItemDecoration = - DividerItemDecoration( - context, - DividerItemDecoration.VERTICAL - ) - recyclerView.addItemDecoration(itemDecoration) - setItemTouchHelper( - context, - recyclerView, - dragSortRecyclerAdapter, - ) - } +// fun make( +// editFragment: EditFragment, +// editParameters: EditParameters, +// currentComponentIndex: Int, +// weight: Float, +// ): Button { +// +// val context = editFragment.context +// val currentId = editParameters.currentId +// val linearParamsForDragSortListView = LinearLayoutCompat.LayoutParams( +// 0, +// LinearLayoutCompat.LayoutParams.MATCH_PARENT, +// ) +// linearParamsForDragSortListView.weight = weight +// val elsbMap = ListContentsSelectSpinnerViewProducer.getElsbMap( +// editParameters, +// currentComponentIndex +// ) +// val currentVariableName = editParameters.currentVariableName +// val listContentsFilePath = ListPathGetterForDragSort.get( +// elsbMap, +// editFragment, +// currentVariableName ?: String(), +// ) +// +// val fileObj = File(listContentsFilePath) +// val parentDir = fileObj.parent ?: String() +// FileSystems.createDirs(parentDir) +// +// val dragSortListViewButtonView = Button(context) +// dragSortListViewButtonView.layoutParams = linearParamsForDragSortListView +// dragSortListViewButtonView.id = currentId + EditTextSupportViewId.EDITABLE_GRID.id +// dragSortListViewButtonView.tag = "gridEdit${currentId + EditTextSupportViewId.EDITABLE_GRID.id}" +// dragSortListViewButtonView.text = dragSortButtonLabel +// ButtonSetter.set( +// context, +// dragSortListViewButtonView, +// mapOf() +// ) +// dragSortListViewButtonView.setOnClickListener { +// buttonView -> +// val buttonContext = buttonView.context +// dragSortDialogObj = Dialog( +// buttonContext +// ) +// dragSortDialogObj?.setContentView( +// R.layout.drag_sort_dialog_layout +// ) +// val titleTextView = +// dragSortDialogObj?.findViewById( +// R.id.drag_sort_dialog_title +// ) +// titleTextView?.text = "Sort by drag, or remove by swipe" +// setDragSortRecyclerView( +// editFragment, +// listContentsFilePath, +// ) +// dragSortDialogObj?.setOnCancelListener { +// dragSortDialogObj?.dismiss() +// dragSortDialogObj = null +// } +// val cancelButton = +// dragSortDialogObj?.findViewById( +// R.id.drag_sort_dialog_cancel +// ) +// cancelButton?.setOnClickListener { +// dragSortDialogObj?.dismiss() +// dragSortDialogObj = null +// } +// val okButton = +// dragSortDialogObj?.findViewById( +// R.id.drag_sort_dialog_ok +// ) +// okButton?.setOnClickListener { +// val dragSortRecyclerView = dragSortDialogObj?.findViewById( +// R.id.drag_sort_dialog_recycler_view +// ) +// val dragSortAdapter = +// dragSortRecyclerView?.adapter as? DragSortRecyclerAdapter +// dragSortDialogObj?.dismiss() +// dragSortDialogObj = null +// dragSortAdapter?.let { +// FileSystems.writeFile( +// listContentsFilePath, +// dragSortAdapter.dratSortList.joinToString("\n") +// ) +// } +// } +// dragSortDialogObj?.window?.setLayout( +// ViewGroup.LayoutParams.MATCH_PARENT, +// ViewGroup.LayoutParams.WRAP_CONTENT +// ) +// dragSortDialogObj?.window?.setGravity(Gravity.BOTTOM) +// dragSortDialogObj?.show() +// } +// return dragSortListViewButtonView +// } + +// private fun setDragSortRecyclerView( +// currentFragment: Fragment, +// listContentsFilePath: String, +// ) { +// val context = currentFragment.context +// ?: return +// val dragSortList = +// makeDragSortList( +// listContentsFilePath +// ) +// val recyclerView = dragSortDialogObj?.findViewById( +// R.id.drag_sort_dialog_recycler_view +// ) ?: return +// recyclerView.setHasFixedSize(true) +// val layoutManager: RecyclerView.LayoutManager +// = PreLoadLayoutManager(context) +// recyclerView.layoutManager = layoutManager +// val dragSortRecyclerAdapter = DragSortRecyclerAdapter( +// dragSortList.toMutableList() +// ) +// recyclerView.adapter = dragSortRecyclerAdapter +// +// val itemDecoration: ItemDecoration = +// DividerItemDecoration( +// context, +// DividerItemDecoration.VERTICAL +// ) +// recyclerView.addItemDecoration(itemDecoration) +// setItemTouchHelper( +// context, +// recyclerView, +// dragSortRecyclerAdapter, +// ) +// } private fun makeDragSortList( listContentsFilePath: String, @@ -200,7 +189,7 @@ object DragSortListViewProducer { val to = target.bindingAdapterPosition adapter.notifyItemMoved(from, to) ListTool.switchList( - dragSortRecyclerAdapter.dratSortList, + dragSortRecyclerAdapter.dragSortList, from, to, ) @@ -213,7 +202,7 @@ object DragSortListViewProducer { ) return val position = viewHolder.layoutPosition dragSortRecyclerAdapter.notifyItemRemoved(position) - dragSortRecyclerAdapter.dratSortList.removeAt(position) + dragSortRecyclerAdapter.dragSortList.removeAt(position) } override fun onSelectedChanged(viewHolder: RecyclerView.ViewHolder?, actionState: Int) { diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/EditTextSetter.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/EditTextSetter.kt index 520aa13ee..1a7af09c6 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/EditTextSetter.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/EditTextSetter.kt @@ -28,27 +28,27 @@ object EditTextSetter { ): EditText { val editViewModel: EditViewModel by fragment.activityViewModels() val context = fragment.context - val currentId = editParameters.currentId - val currentVariableValue = editParameters.currentVariableValue - val currentVariableName = editParameters.currentVariableName +// val currentId = editParameters.currentId +// val currentVariableValue = editParameters.currentVariableValue +// val currentVariableName = editParameters.currentVariableName val insertEditText = EditText(context) insertEditText.clearFocus() - insertEditText.tag = currentVariableName - insertEditText.id = currentId +// insertEditText.tag = currentVariableName +// insertEditText.id = currentId insertEditText.backgroundTintList = context?.getColorStateList(R.color.gray_out) - editViewModel.variableNameToEditTextIdMap.put( - currentVariableName as String, - currentId - ) +// editViewModel.variableNameToEditTextIdMap.put( +// currentVariableName as String, +// currentId +// ) insertEditText.inputType = InputType.TYPE_CLASS_TEXT - val editTextCon = EditTextMaker.make( - fragment, - editTextPropertyMap, - currentVariableValue, - ) - insertEditText.setText(editTextCon) +// val editTextCon = EditTextMaker.make( +// fragment, +// editTextPropertyMap, +// currentVariableValue, +// ) +// insertEditText.setText(editTextCon) editTextPropertyMap?.get( EditTextPropertySettingKey.SIZE.key @@ -128,24 +128,24 @@ private object EditTextMaker { private const val argsSeparator = '&' - fun make( - fragment: Fragment, - editTextPropertyMap: Map?, - currentVariableValue: String?, - ): String { - val shellConText = makeByShellCon( - fragment, - editTextPropertyMap, - currentVariableValue, - ) - return when(shellConText.isNullOrEmpty()) { - false -> shellConText - else -> SearchBoxSettingsForListIndex.makeCurrentVariableValueInEditText( - fragment, - currentVariableValue - ) - } - } +// fun make( +// fragment: Fragment, +// editTextPropertyMap: Map?, +// currentVariableValue: String?, +// ): String { +// val shellConText = makeByShellCon( +// fragment, +// editTextPropertyMap, +// currentVariableValue, +// ) +// return when(shellConText.isNullOrEmpty()) { +// false -> shellConText +// else -> SearchBoxSettingsForListIndex.makeCurrentVariableValueInEditText( +// fragment, +// currentVariableValue +// ) +// } +// } private fun makeByShellCon( fragment: Fragment, editTextPropertyMap: Map?, diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/EditableListContentsMultiSelectGridViewProducer.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/EditableListContentsMultiSelectGridViewProducer.kt index f93904906..054955eb0 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/EditableListContentsMultiSelectGridViewProducer.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/EditableListContentsMultiSelectGridViewProducer.kt @@ -25,142 +25,142 @@ object EditableListContentsMultiSelectGridViewProducer { private var alertDialog: AlertDialog? = null private const val gridButtonLabel = "MGS" - fun make ( - editFragment: EditFragment, - insertEditText: EditText, - editParameters: EditParameters, - currentComponentIndex: Int, - weight: Float, - ): Button { - val context = editFragment.context - val linearParamsForGridButton = LinearLayoutCompat.LayoutParams( - 0, - LinearLayoutCompat.LayoutParams.MATCH_PARENT, - ) - linearParamsForGridButton.weight = weight - - val elcbMap = ListContentsSelectSpinnerViewProducer.getElsbMap( - editParameters, - currentComponentIndex - ) - val listContentsFilePath = elcbMap?.get( - ListContentsSelectSpinnerViewProducer.ListContentsEditKey.listPath.name - ) ?: String() - - val fileObj = File(listContentsFilePath) - val parentDir = fileObj.parent ?: String() - FileSystems.createDirs(parentDir) - val gridButtonView = Button(context) - gridButtonView.text = gridButtonLabel - ButtonSetter.set( - context, - gridButtonView, - mapOf() - ) - gridButtonView.setOnClickListener { - buttonView -> - val buttonContext = buttonView.context - val editableSpinnerList = ReadText( - listContentsFilePath - ).textToList().filter { - it.trim().isNotEmpty() - } - - val gridView = - GridView(buttonContext) - - gridView.numColumns = 2 - gridView.choiceMode = AbsListView.CHOICE_MODE_MULTIPLE - val multiSelectImageAdapter = MultiSelectImageAdapter( - buttonContext, - ) - - val linearLayoutForTotal = LinearLayoutForTotal.make( - context - ) - val searchTextWeight = SearchTextLinearWeight.calculate(editFragment.activity) - val listWeight = 1F - searchTextWeight - val linearLayoutForListView = NestLinearLayout.make( - context, - listWeight - ) - val linearLayoutForSearch = NestLinearLayout.make( - context, - searchTextWeight - ) - linearLayoutForListView.addView(gridView) - linearLayoutForTotal.addView(linearLayoutForListView) - linearLayoutForTotal.addView(linearLayoutForSearch) - - - multiSelectImageAdapter.addAll(editableSpinnerList.toMutableList()) - gridView.adapter = multiSelectImageAdapter - val editTextSelectedList = - insertEditText - .text - .split(",") - .filter { - editableSpinnerList.contains(it) - } - multiSelectImageAdapter - .selectedItemList - .addAll(editTextSelectedList) - multiSelectImageAdapter.notifyDataSetChanged() - - setGridViewItemClickListener( - editFragment, - gridView, - multiSelectImageAdapter, - ) - - alertDialog = AlertDialog.Builder( - buttonContext - ) - .setView(linearLayoutForTotal) - .setNegativeButton("NO", DialogInterface.OnClickListener{ - dialog, which -> - alertDialog?.dismiss() - alertDialog = null - }) - .setPositiveButton("OK", DialogInterface.OnClickListener{ - dialog, which -> - alertDialog?.dismiss() - alertDialog = null - val selectedItems = - multiSelectImageAdapter - .selectedItemList - .joinToString(",") - insertEditText.setText(selectedItems) - }) - .show() - alertDialog?.window?.setGravity(Gravity.BOTTOM) - alertDialog?.setOnCancelListener( - object : DialogInterface.OnCancelListener { - override fun onCancel(dialog: DialogInterface?) { - alertDialog?.dismiss() - alertDialog = null - } - }) - alertDialog?.getButton( - DialogInterface.BUTTON_POSITIVE - )?.setTextColor( - context?.getColor( - android.R.color.black - ) as Int - ) - alertDialog?.getButton( - DialogInterface.BUTTON_NEGATIVE - )?.setTextColor( - context?.getColor( - android.R.color.black - ) as Int - ) - } - - - gridButtonView.layoutParams = linearParamsForGridButton - return gridButtonView - } +// fun make ( +// editFragment: EditFragment, +// insertEditText: EditText, +// editParameters: EditParameters, +// currentComponentIndex: Int, +// weight: Float, +// ): Button { +// val context = editFragment.context +// val linearParamsForGridButton = LinearLayoutCompat.LayoutParams( +// 0, +// LinearLayoutCompat.LayoutParams.MATCH_PARENT, +// ) +// linearParamsForGridButton.weight = weight +// +// val elcbMap = ListContentsSelectSpinnerViewProducer.getElsbMap( +// editParameters, +// currentComponentIndex +// ) +// val listContentsFilePath = elcbMap?.get( +// ListContentsSelectSpinnerViewProducer.ListContentsEditKey.listPath.name +// ) ?: String() +// +// val fileObj = File(listContentsFilePath) +// val parentDir = fileObj.parent ?: String() +// FileSystems.createDirs(parentDir) +// val gridButtonView = Button(context) +// gridButtonView.text = gridButtonLabel +// ButtonSetter.set( +// context, +// gridButtonView, +// mapOf() +// ) +// gridButtonView.setOnClickListener { +// buttonView -> +// val buttonContext = buttonView.context +// val editableSpinnerList = ReadText( +// listContentsFilePath +// ).textToList().filter { +// it.trim().isNotEmpty() +// } +// +// val gridView = +// GridView(buttonContext) +// +// gridView.numColumns = 2 +// gridView.choiceMode = AbsListView.CHOICE_MODE_MULTIPLE +// val multiSelectImageAdapter = MultiSelectImageAdapter( +// buttonContext, +// ) +// +// val linearLayoutForTotal = LinearLayoutForTotal.make( +// context +// ) +// val searchTextWeight = SearchTextLinearWeight.calculate(editFragment.activity) +// val listWeight = 1F - searchTextWeight +// val linearLayoutForListView = NestLinearLayout.make( +// context, +// listWeight +// ) +// val linearLayoutForSearch = NestLinearLayout.make( +// context, +// searchTextWeight +// ) +// linearLayoutForListView.addView(gridView) +// linearLayoutForTotal.addView(linearLayoutForListView) +// linearLayoutForTotal.addView(linearLayoutForSearch) +// +// +// multiSelectImageAdapter.addAll(editableSpinnerList.toMutableList()) +// gridView.adapter = multiSelectImageAdapter +// val editTextSelectedList = +// insertEditText +// .text +// .split(",") +// .filter { +// editableSpinnerList.contains(it) +// } +// multiSelectImageAdapter +// .selectedItemList +// .addAll(editTextSelectedList) +// multiSelectImageAdapter.notifyDataSetChanged() +// +// setGridViewItemClickListener( +// editFragment, +// gridView, +// multiSelectImageAdapter, +// ) +// +// alertDialog = AlertDialog.Builder( +// buttonContext +// ) +// .setView(linearLayoutForTotal) +// .setNegativeButton("NO", DialogInterface.OnClickListener{ +// dialog, which -> +// alertDialog?.dismiss() +// alertDialog = null +// }) +// .setPositiveButton("OK", DialogInterface.OnClickListener{ +// dialog, which -> +// alertDialog?.dismiss() +// alertDialog = null +// val selectedItems = +// multiSelectImageAdapter +// .selectedItemList +// .joinToString(",") +// insertEditText.setText(selectedItems) +// }) +// .show() +// alertDialog?.window?.setGravity(Gravity.BOTTOM) +// alertDialog?.setOnCancelListener( +// object : DialogInterface.OnCancelListener { +// override fun onCancel(dialog: DialogInterface?) { +// alertDialog?.dismiss() +// alertDialog = null +// } +// }) +// alertDialog?.getButton( +// DialogInterface.BUTTON_POSITIVE +// )?.setTextColor( +// context?.getColor( +// android.R.color.black +// ) as Int +// ) +// alertDialog?.getButton( +// DialogInterface.BUTTON_NEGATIVE +// )?.setTextColor( +// context?.getColor( +// android.R.color.black +// ) as Int +// ) +// } +// +// +// gridButtonView.layoutParams = linearParamsForGridButton +// return gridButtonView +// } private fun setGridViewItemClickListener( currentFragment: Fragment, diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/EditableListContentsMultiSeletctSpinnerViewProducer.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/EditableListContentsMultiSeletctSpinnerViewProducer.kt index cf1df2a1b..b69a43afe 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/EditableListContentsMultiSeletctSpinnerViewProducer.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/EditableListContentsMultiSeletctSpinnerViewProducer.kt @@ -14,80 +14,80 @@ import java.io.File object EditableListContentsMultiSeletctSpinnerViewProducer { - fun make ( - editFragment: EditFragment, - insertTextView: TextView, - insertEditText: EditText, - editParameters: EditParameters, - currentComponentIndex: Int, - weight: Float, - isInsertTextViewVisible: Boolean = false - ): Button { - val context = editFragment.context - val currentId = editParameters.currentId - - val linearParamsForSpinner = LinearLayoutCompat.LayoutParams( - 0, - LinearLayoutCompat.LayoutParams.MATCH_PARENT, - ) - linearParamsForSpinner.weight = weight - val elcbMap = ListContentsSelectSpinnerViewProducer.getElsbMap( - editParameters, - currentComponentIndex - ) - val listContentsFilePath = elcbMap?.get( - ListContentsSelectSpinnerViewProducer.ListContentsEditKey.listPath.name - ) ?: String() - val fileObj = File(listContentsFilePath) - val parentDir = fileObj.parent ?: String() - FileSystems.createDirs(parentDir) - - val insertButton = Button(context) - insertButton.id = currentId + EditTextSupportViewId.BUTTON.id - insertButton.tag = "button${currentId + EditTextSupportViewId.BUTTON.id}" - val buttonLabel = "LSLs" - insertButton.text = buttonLabel - insertTextView.isVisible = isInsertTextViewVisible - ButtonSetter.set( - context, - insertButton, - mapOf() - ) - insertButton.setOnClickListener { - innerButtonView -> - val updatedEditableSpinnerList = ReadText( - listContentsFilePath - ).textToList().filter { - it.trim().isNotEmpty() - } - val updatedMultiModelArray = ArrayList( - (updatedEditableSpinnerList.indices).map { - MultiSelectModel(it, updatedEditableSpinnerList[it]) - } - ) - val currentSelectList = insertEditText.text.toString().split(',') - val preSelectedMultiModelIdArray = ArrayList( - (updatedEditableSpinnerList.indices).filter { - val currentItem = updatedEditableSpinnerList[it] - currentSelectList.contains(currentItem) - } - ) - val listener = context as? EditFragment.OnMultiSelectListenerForEdit - listener?.onMultiSelectForEdit( - insertTextView.text.toString(), - insertEditText.id, - updatedMultiModelArray, - preSelectedMultiModelIdArray - ) - } - - val linearParamsForButton = LinearLayoutCompat.LayoutParams( - 0, - LinearLayoutCompat.LayoutParams.MATCH_PARENT, - ) - linearParamsForButton.weight = weight - insertButton.layoutParams = linearParamsForButton - - return insertButton - } +// fun make ( +// editFragment: EditFragment, +// insertTextView: TextView, +// insertEditText: EditText, +// editParameters: EditParameters, +// currentComponentIndex: Int, +// weight: Float, +// isInsertTextViewVisible: Boolean = false +// ): Button { +// val context = editFragment.context +// val currentId = editParameters.currentId +// +// val linearParamsForSpinner = LinearLayoutCompat.LayoutParams( +// 0, +// LinearLayoutCompat.LayoutParams.MATCH_PARENT, +// ) +// linearParamsForSpinner.weight = weight +// val elcbMap = ListContentsSelectSpinnerViewProducer.getElsbMap( +// editParameters, +// currentComponentIndex +// ) +// val listContentsFilePath = elcbMap?.get( +// ListContentsSelectSpinnerViewProducer.ListContentsEditKey.listPath.name +// ) ?: String() +// val fileObj = File(listContentsFilePath) +// val parentDir = fileObj.parent ?: String() +// FileSystems.createDirs(parentDir) +// +// val insertButton = Button(context) +// insertButton.id = currentId + EditTextSupportViewId.BUTTON.id +// insertButton.tag = "button${currentId + EditTextSupportViewId.BUTTON.id}" +// val buttonLabel = "LSLs" +// insertButton.text = buttonLabel +// insertTextView.isVisible = isInsertTextViewVisible +// ButtonSetter.set( +// context, +// insertButton, +// mapOf() +// ) +// insertButton.setOnClickListener { +// innerButtonView -> +// val updatedEditableSpinnerList = ReadText( +// listContentsFilePath +// ).textToList().filter { +// it.trim().isNotEmpty() +// } +// val updatedMultiModelArray = ArrayList( +// (updatedEditableSpinnerList.indices).map { +// MultiSelectModel(it, updatedEditableSpinnerList[it]) +// } +// ) +// val currentSelectList = insertEditText.text.toString().split(',') +// val preSelectedMultiModelIdArray = ArrayList( +// (updatedEditableSpinnerList.indices).filter { +// val currentItem = updatedEditableSpinnerList[it] +// currentSelectList.contains(currentItem) +// } +// ) +// val listener = context as? EditFragment.OnMultiSelectListenerForEdit +// listener?.onMultiSelectForEdit( +// insertTextView.text.toString(), +// insertEditText.id, +// updatedMultiModelArray, +// preSelectedMultiModelIdArray +// ) +// } +// +// val linearParamsForButton = LinearLayoutCompat.LayoutParams( +// 0, +// LinearLayoutCompat.LayoutParams.MATCH_PARENT, +// ) +// linearParamsForButton.weight = weight +// insertButton.layoutParams = linearParamsForButton +// +// return insertButton +// } } diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/EditableListContentsSelectGridViewProducer.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/EditableListContentsSelectGridViewProducer.kt index 2c473ceca..0b37d3b2c 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/EditableListContentsSelectGridViewProducer.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/EditableListContentsSelectGridViewProducer.kt @@ -14,9 +14,6 @@ import androidx.fragment.app.Fragment import com.puutaro.commandclick.common.variable.edit.EditParameters import com.puutaro.commandclick.component.adapter.ImageAdapter import com.puutaro.commandclick.fragment.EditFragment -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.ListContentsSelectSpinnerViewProducer.getElsbMap -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.ListContentsSelectSpinnerViewProducer.getLimitNum -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.ListContentsSelectSpinnerViewProducer.getSelectJsPath import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.lib.SelectJsExecutor import com.puutaro.commandclick.proccess.edit.lib.ButtonSetter import com.puutaro.commandclick.util.file.FileSystems @@ -32,106 +29,106 @@ object EditableListContentsSelectGridViewProducer { private val defaultListLimit = 100 private val gridButtonLabel = "GSL" - fun make ( - editFragment: EditFragment, - insertEditText: EditText, - editParameters: EditParameters, - currentComponentIndex: Int, - weight: Float, - ): Button { - val context = editFragment.context - val linearParamsForGridButton = LinearLayoutCompat.LayoutParams( - 0, - LinearLayoutCompat.LayoutParams.MATCH_PARENT, - ) - linearParamsForGridButton.weight = weight - - val elcbMap = getElsbMap( - editParameters, - currentComponentIndex - ) - val listContentsFilePath = elcbMap?.get( - ListContentsSelectSpinnerViewProducer.ListContentsEditKey.listPath.name - ) ?: String() - val gridButtonView = Button(context) - gridButtonView.text = gridButtonLabel - ButtonSetter.set( - context, - gridButtonView, - mapOf() - ) - gridButtonView.setOnClickListener { - buttonView -> - val buttonContext = buttonView.context - gridDialogObj = Dialog( - buttonContext - ) - gridDialogObj?.setContentView( - com.puutaro.commandclick.R.layout.grid_dialog_layout - ) - setGridListView( - editFragment, - editParameters, - insertEditText, - listContentsFilePath, - elcbMap - ) - gridDialogObj?.setOnCancelListener { - gridDialogObj?.dismiss() - gridDialogObj = null - } - gridDialogObj?.window?.setLayout( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.WRAP_CONTENT - ) - gridDialogObj?.window?.setGravity(Gravity.BOTTOM) - gridDialogObj?.show() - } - gridButtonView.layoutParams = linearParamsForGridButton - return gridButtonView - } +// fun make ( +// editFragment: EditFragment, +// insertEditText: EditText, +// editParameters: EditParameters, +// currentComponentIndex: Int, +// weight: Float, +// ): Button { +// val context = editFragment.context +// val linearParamsForGridButton = LinearLayoutCompat.LayoutParams( +// 0, +// LinearLayoutCompat.LayoutParams.MATCH_PARENT, +// ) +// linearParamsForGridButton.weight = weight +// +// val elcbMap = getElsbMap( +// editParameters, +// currentComponentIndex +// ) +// val listContentsFilePath = elcbMap?.get( +// ListContentsSelectSpinnerViewProducer.ListContentsEditKey.listPath.name +// ) ?: String() +// val gridButtonView = Button(context) +// gridButtonView.text = gridButtonLabel +// ButtonSetter.set( +// context, +// gridButtonView, +// mapOf() +// ) +// gridButtonView.setOnClickListener { +// buttonView -> +// val buttonContext = buttonView.context +// gridDialogObj = Dialog( +// buttonContext +// ) +// gridDialogObj?.setContentView( +// com.puutaro.commandclick.R.layout.grid_dialog_layout +// ) +// setGridListView( +// editFragment, +// editParameters, +// insertEditText, +// listContentsFilePath, +// elcbMap +// ) +// gridDialogObj?.setOnCancelListener { +// gridDialogObj?.dismiss() +// gridDialogObj = null +// } +// gridDialogObj?.window?.setLayout( +// ViewGroup.LayoutParams.MATCH_PARENT, +// ViewGroup.LayoutParams.WRAP_CONTENT +// ) +// gridDialogObj?.window?.setGravity(Gravity.BOTTOM) +// gridDialogObj?.show() +// } +// gridButtonView.layoutParams = linearParamsForGridButton +// return gridButtonView +// } - private fun setGridListView( - currentFragment: Fragment, - editParameters: EditParameters, - insertEditText: EditText, - listContentsFilePath: String, - elcbMap: Map? - ) { - val context = currentFragment.context - ?: return - val listDialogSearchEditText = gridDialogObj?.findViewById( - com.puutaro.commandclick.R.id.grid_dialog_search_edit_text - ) ?: return - listDialogSearchEditText.hint = "search selectable list" - val editableSpinnerList = - makeGridList(listContentsFilePath) - val gridView = - gridDialogObj?.findViewById( - com.puutaro.commandclick.R.id.grid_dialog_grid_view - ) ?: return - val imageAdapter = ImageAdapter( - context, - ) - imageAdapter.clear() - imageAdapter.addAll( - editableSpinnerList.toMutableList() - ) - gridView.adapter = imageAdapter - makeSearchEditText( - gridView, - listDialogSearchEditText, - editableSpinnerList.joinToString("\n"), - ) - setGridViewItemClickListener( - currentFragment, - editParameters, - insertEditText, - listDialogSearchEditText, - gridView, - elcbMap, - ) - } +// private fun setGridListView( +// currentFragment: Fragment, +// editParameters: EditParameters, +// insertEditText: EditText, +// listContentsFilePath: String, +// elcbMap: Map? +// ) { +// val context = currentFragment.context +// ?: return +// val listDialogSearchEditText = gridDialogObj?.findViewById( +// com.puutaro.commandclick.R.id.grid_dialog_search_edit_text +// ) ?: return +// listDialogSearchEditText.hint = "search selectable list" +// val editableSpinnerList = +// makeGridList(listContentsFilePath) +// val gridView = +// gridDialogObj?.findViewById( +// com.puutaro.commandclick.R.id.grid_dialog_grid_view +// ) ?: return +// val imageAdapter = ImageAdapter( +// context, +// ) +// imageAdapter.clear() +// imageAdapter.addAll( +// editableSpinnerList.toMutableList() +// ) +// gridView.adapter = imageAdapter +// makeSearchEditText( +// gridView, +// listDialogSearchEditText, +// editableSpinnerList.joinToString("\n"), +// ) +// setGridViewItemClickListener( +// currentFragment, +// editParameters, +// insertEditText, +// listDialogSearchEditText, +// gridView, +// elcbMap, +// ) +// } private fun makeGridList( listContentsFilePath: String, @@ -146,86 +143,86 @@ object EditableListContentsSelectGridViewProducer { } } - private fun setGridViewItemClickListener( - currentFragment: Fragment, - editParameters: EditParameters, - insertEditText: EditText, - searchText: EditText, - gridView: GridView, - elcbMap: Map?, - ){ - val fannelInfoMap = editParameters.fannelInfoMap -// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( +// private fun setGridViewItemClickListener( +// currentFragment: Fragment, +// editParameters: EditParameters, +// insertEditText: EditText, +// searchText: EditText, +// gridView: GridView, +// elcbMap: Map?, +// ){ +// val fannelInfoMap = editParameters.fannelInfoMap +//// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( +//// fannelInfoMap +//// ) +// val scriptName = FannelInfoTool.getCurrentFannelName( // fannelInfoMap // ) - val scriptName = FannelInfoTool.getCurrentFannelName( - fannelInfoMap - ) - val listContentsFilePath = elcbMap?.get( - ListContentsSelectSpinnerViewProducer.ListContentsEditKey.listPath.name - ) ?: String() - val listLimit = getLimitNum( - elcbMap, - defaultListLimit, - ) - - val selectJsPath = getSelectJsPath( - elcbMap, -// currentAppDirPath, - scriptName, - ) - gridView.setOnItemClickListener { - parent, View, pos, id - -> - Keyboard.hiddenKeyboardForFragment( - currentFragment - ) - gridDialogObj?.dismiss() - gridDialogObj = null - val currentGridList = ReadText( - listContentsFilePath - ).textToList() - val selectedItem = currentGridList.filter { - Regex( - searchText.text.toString() - .lowercase() - .replace("\n", "") - ).containsMatchIn( - it.lowercase() - ) - }.filter { - it.trim().isNotEmpty() - }.get(pos) - - val updateListContents = - listOf(selectedItem) + - currentGridList.filter { - it != selectedItem - } - FileSystems.writeFile( - listContentsFilePath, - updateListContents - .take(listLimit) - .joinToString("\n") - ) - val selectUpdatedGridList = listOf( - selectedItem, - ) + currentGridList.filter { - it != selectedItem - } - val imageAdapter = gridView.adapter as ImageAdapter - imageAdapter.clear() - imageAdapter.addAll(selectUpdatedGridList.toMutableList()) - imageAdapter.notifyDataSetChanged() - gridView.setSelection(0) - insertEditText.setText(selectedItem) - SelectJsExecutor.exec( - currentFragment, - selectJsPath, - selectedItem - ) - } - } +// val listContentsFilePath = elcbMap?.get( +// ListContentsSelectSpinnerViewProducer.ListContentsEditKey.listPath.name +// ) ?: String() +// val listLimit = getLimitNum( +// elcbMap, +// defaultListLimit, +// ) +// +// val selectJsPath = getSelectJsPath( +// elcbMap, +//// currentAppDirPath, +// scriptName, +// ) +// gridView.setOnItemClickListener { +// parent, View, pos, id +// -> +// Keyboard.hiddenKeyboardForFragment( +// currentFragment +// ) +// gridDialogObj?.dismiss() +// gridDialogObj = null +// val currentGridList = ReadText( +// listContentsFilePath +// ).textToList() +// val selectedItem = currentGridList.filter { +// Regex( +// searchText.text.toString() +// .lowercase() +// .replace("\n", "") +// ).containsMatchIn( +// it.lowercase() +// ) +// }.filter { +// it.trim().isNotEmpty() +// }.get(pos) +// +// val updateListContents = +// listOf(selectedItem) + +// currentGridList.filter { +// it != selectedItem +// } +// FileSystems.writeFile( +// listContentsFilePath, +// updateListContents +// .take(listLimit) +// .joinToString("\n") +// ) +// val selectUpdatedGridList = listOf( +// selectedItem, +// ) + currentGridList.filter { +// it != selectedItem +// } +// val imageAdapter = gridView.adapter as ImageAdapter +// imageAdapter.clear() +// imageAdapter.addAll(selectUpdatedGridList.toMutableList()) +// imageAdapter.notifyDataSetChanged() +// gridView.setSelection(0) +// insertEditText.setText(selectedItem) +// SelectJsExecutor.exec( +// currentFragment, +// selectJsPath, +// selectedItem +// ) +// } +// } private fun makeSearchEditText( fannelListGridView: GridView, diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/EditableListContentsSelectOnlyImageGridViewProducer.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/EditableListContentsSelectOnlyImageGridViewProducer.kt index 351524780..04cf280ab 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/EditableListContentsSelectOnlyImageGridViewProducer.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/EditableListContentsSelectOnlyImageGridViewProducer.kt @@ -29,173 +29,173 @@ object EditableListContentsSelectOnlyImageGridViewProducer { private val defaultListLimit = 100 private val gridButtonLabel = "IGS" - fun make ( - editFragment: EditFragment, - insertEditText: EditText, - editParameters: EditParameters, - currentComponentIndex: Int, - weight: Float, - ): Button { - val context = editFragment.context - val linearParamsForGridButton = LinearLayoutCompat.LayoutParams( - 0, - LinearLayoutCompat.LayoutParams.MATCH_PARENT, - ) - linearParamsForGridButton.weight = weight - - val elcbMap = ListContentsSelectSpinnerViewProducer.getElsbMap( - editParameters, - currentComponentIndex - ) - val listContentsFilePath = elcbMap?.get( - ListContentsSelectSpinnerViewProducer.ListContentsEditKey.listPath.name - ) ?: String() - - val fileObj = File(listContentsFilePath) - val parentDir = fileObj.parent ?: String() - FileSystems.createDirs(parentDir) - val gridButtonView = Button(context) - gridButtonView.text = gridButtonLabel - ButtonSetter.set( - context, - gridButtonView, - mapOf() - ) - gridButtonView.setOnClickListener { - buttonView -> - val buttonContext = buttonView.context - val editableSpinnerList = ReadText( - listContentsFilePath - ).textToList().filter { - it.trim().isNotEmpty() - } - - val gridView = - GridView(buttonContext) - - gridView.numColumns = 2 - val adapter = OnlyImageAdapter( - buttonContext, - ) - - val linearLayoutForTotal = LinearLayoutForTotal.make( - context - ) - val searchTextWeight = SearchTextLinearWeight.calculate(editFragment.activity) - val listWeight = 1F - searchTextWeight - val linearLayoutForListView = NestLinearLayout.make( - context, - listWeight - ) - val linearLayoutForSearch = NestLinearLayout.make( - context, - searchTextWeight - ) - linearLayoutForListView.addView(gridView) - linearLayoutForTotal.addView(linearLayoutForListView) - linearLayoutForTotal.addView(linearLayoutForSearch) - - - adapter.addAll(editableSpinnerList.toMutableList()) - gridView.adapter = adapter - setGridViewItemClickListener( - editFragment, - editParameters, - insertEditText, - gridView, - adapter, - elcbMap, - ) - - alertDialog = AlertDialog.Builder( - buttonContext - ) - .setView(linearLayoutForTotal) - .create() - alertDialog?.window?.setGravity(Gravity.BOTTOM) - alertDialog?.show() - - alertDialog?.setOnCancelListener(object : DialogInterface.OnCancelListener { - override fun onCancel(dialog: DialogInterface?) { - alertDialog?.dismiss() - alertDialog = null - } - }) - } - - - gridButtonView.layoutParams = linearParamsForGridButton - return gridButtonView - } - - private fun setGridViewItemClickListener( - currentFragment: Fragment, - editParameters: EditParameters, - insertEditText: EditText, - gridView: GridView, - adapter: OnlyImageAdapter, - elcbMap: Map?, - ){ - val fannelInfoMap = editParameters.fannelInfoMap -// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( +// fun make ( +// editFragment: EditFragment, +// insertEditText: EditText, +// editParameters: EditParameters, +// currentComponentIndex: Int, +// weight: Float, +// ): Button { +// val context = editFragment.context +// val linearParamsForGridButton = LinearLayoutCompat.LayoutParams( +// 0, +// LinearLayoutCompat.LayoutParams.MATCH_PARENT, +// ) +// linearParamsForGridButton.weight = weight +// +// val elcbMap = ListContentsSelectSpinnerViewProducer.getElsbMap( +// editParameters, +// currentComponentIndex +// ) +// val listContentsFilePath = elcbMap?.get( +// ListContentsSelectSpinnerViewProducer.ListContentsEditKey.listPath.name +// ) ?: String() +// +// val fileObj = File(listContentsFilePath) +// val parentDir = fileObj.parent ?: String() +// FileSystems.createDirs(parentDir) +// val gridButtonView = Button(context) +// gridButtonView.text = gridButtonLabel +// ButtonSetter.set( +// context, +// gridButtonView, +// mapOf() +// ) +// gridButtonView.setOnClickListener { +// buttonView -> +// val buttonContext = buttonView.context +// val editableSpinnerList = ReadText( +// listContentsFilePath +// ).textToList().filter { +// it.trim().isNotEmpty() +// } +// +// val gridView = +// GridView(buttonContext) +// +// gridView.numColumns = 2 +// val adapter = OnlyImageAdapter( +// buttonContext, +// ) +// +// val linearLayoutForTotal = LinearLayoutForTotal.make( +// context +// ) +// val searchTextWeight = SearchTextLinearWeight.calculate(editFragment.activity) +// val listWeight = 1F - searchTextWeight +// val linearLayoutForListView = NestLinearLayout.make( +// context, +// listWeight +// ) +// val linearLayoutForSearch = NestLinearLayout.make( +// context, +// searchTextWeight +// ) +// linearLayoutForListView.addView(gridView) +// linearLayoutForTotal.addView(linearLayoutForListView) +// linearLayoutForTotal.addView(linearLayoutForSearch) +// +// +// adapter.addAll(editableSpinnerList.toMutableList()) +// gridView.adapter = adapter +// setGridViewItemClickListener( +// editFragment, +// editParameters, +// insertEditText, +// gridView, +// adapter, +// elcbMap, +// ) +// +// alertDialog = AlertDialog.Builder( +// buttonContext +// ) +// .setView(linearLayoutForTotal) +// .create() +// alertDialog?.window?.setGravity(Gravity.BOTTOM) +// alertDialog?.show() +// +// alertDialog?.setOnCancelListener(object : DialogInterface.OnCancelListener { +// override fun onCancel(dialog: DialogInterface?) { +// alertDialog?.dismiss() +// alertDialog = null +// } +// }) +// } +// +// +// gridButtonView.layoutParams = linearParamsForGridButton +// return gridButtonView +// } + +// private fun setGridViewItemClickListener( +// currentFragment: Fragment, +// editParameters: EditParameters, +// insertEditText: EditText, +// gridView: GridView, +// adapter: OnlyImageAdapter, +// elcbMap: Map?, +// ){ +// val fannelInfoMap = editParameters.fannelInfoMap +//// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( +//// fannelInfoMap +//// ) +// val scriptName = FannelInfoTool.getCurrentFannelName( // fannelInfoMap // ) - val scriptName = FannelInfoTool.getCurrentFannelName( - fannelInfoMap - ) - val listContentsFilePath = elcbMap?.get( - ListContentsSelectSpinnerViewProducer.ListContentsEditKey.listPath.name - ) ?: String() - val listLimit = ListContentsSelectSpinnerViewProducer.getLimitNum( - elcbMap, - defaultListLimit, - ) - - val selectJsPath = ListContentsSelectSpinnerViewProducer.getSelectJsPath( - elcbMap, -// currentAppDirPath, - scriptName, - ) - - gridView.setOnItemClickListener { - parent, View, pos, id - -> - Keyboard.hiddenKeyboardForFragment( - currentFragment - ) - alertDialog?.dismiss() - alertDialog = null - val currentGridList = ReadText( - listContentsFilePath - ).textToList() - val selectedItem = currentGridList.get(pos) - - val updateListContents = - listOf(selectedItem) + - currentGridList.filter { - it != selectedItem - } - FileSystems.writeFile( - listContentsFilePath, - updateListContents - .take(listLimit) - .joinToString("\n") - ) - val selectUpdatedGridList = listOf( - selectedItem, - ) + currentGridList.filter { - it != selectedItem - } - adapter.clear() - adapter.addAll(selectUpdatedGridList.toMutableList()) - adapter.notifyDataSetChanged() - gridView.setSelection(0) - insertEditText.setText(selectedItem) - SelectJsExecutor.exec( - currentFragment, - selectJsPath, - selectedItem - ) - } - } +// val listContentsFilePath = elcbMap?.get( +// ListContentsSelectSpinnerViewProducer.ListContentsEditKey.listPath.name +// ) ?: String() +// val listLimit = ListContentsSelectSpinnerViewProducer.getLimitNum( +// elcbMap, +// defaultListLimit, +// ) +// +// val selectJsPath = ListContentsSelectSpinnerViewProducer.getSelectJsPath( +// elcbMap, +//// currentAppDirPath, +// scriptName, +// ) +// +// gridView.setOnItemClickListener { +// parent, View, pos, id +// -> +// Keyboard.hiddenKeyboardForFragment( +// currentFragment +// ) +// alertDialog?.dismiss() +// alertDialog = null +// val currentGridList = ReadText( +// listContentsFilePath +// ).textToList() +// val selectedItem = currentGridList.get(pos) +// +// val updateListContents = +// listOf(selectedItem) + +// currentGridList.filter { +// it != selectedItem +// } +// FileSystems.writeFile( +// listContentsFilePath, +// updateListContents +// .take(listLimit) +// .joinToString("\n") +// ) +// val selectUpdatedGridList = listOf( +// selectedItem, +// ) + currentGridList.filter { +// it != selectedItem +// } +// adapter.clear() +// adapter.addAll(selectUpdatedGridList.toMutableList()) +// adapter.notifyDataSetChanged() +// gridView.setSelection(0) +// insertEditText.setText(selectedItem) +// SelectJsExecutor.exec( +// currentFragment, +// selectJsPath, +// selectedItem +// ) +// } +// } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/EditableListContentsSelectSpinnerViewProducer.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/EditableListContentsSelectSpinnerViewProducer.kt index a2b8b3bcf..89de8c2e9 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/EditableListContentsSelectSpinnerViewProducer.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/EditableListContentsSelectSpinnerViewProducer.kt @@ -9,7 +9,6 @@ import com.puutaro.commandclick.R import com.puutaro.commandclick.common.variable.edit.EditParameters import com.puutaro.commandclick.fragment.EditFragment import com.puutaro.commandclick.fragment_lib.edit_fragment.variable.EditTextSupportViewId -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.ListContentsSelectSpinnerViewProducer.setInitMarkToListContents import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.lib.SelectJsExecutor import com.puutaro.commandclick.proccess.edit.lib.SpinnerInstance import com.puutaro.commandclick.util.file.FileSystems @@ -20,167 +19,167 @@ import java.io.File object EditableListContentsSelectSpinnerViewProducer { - fun make ( - fragment: Fragment, - insertEditText: EditText, - editParameters: EditParameters, - currentComponentIndex: Int, - weight: Float, - ): Spinner { - val fannelInfoMap = editParameters.fannelInfoMap -// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( +// fun make ( +// fragment: Fragment, +// insertEditText: EditText, +// editParameters: EditParameters, +// currentComponentIndex: Int, +// weight: Float, +// ): Spinner { +// val fannelInfoMap = editParameters.fannelInfoMap +//// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( +//// fannelInfoMap +//// ) +// val scriptName = FannelInfoTool.getCurrentFannelName( // fannelInfoMap // ) - val scriptName = FannelInfoTool.getCurrentFannelName( - fannelInfoMap - ) - val defaultListLimit = 100 - val context = fragment.context - val currentId = editParameters.currentId - val throughMark = "-" - val linearParamsForSpinner = LinearLayoutCompat.LayoutParams( - 0, - LinearLayoutCompat.LayoutParams.MATCH_PARENT, - ) - linearParamsForSpinner.weight = weight - - val elcbMap = ListContentsSelectSpinnerViewProducer.getElsbMap( - editParameters, - currentComponentIndex - ) - when(fragment){ - is EditFragment -> fragment.listConSelectBoxMapList.add(elcbMap) - } - val listContentsFilePath = - elcbMap?.get( - ListContentsSelectSpinnerViewProducer.ListContentsEditKey.listPath.name) - ?: String() - val listLimit = ListContentsSelectSpinnerViewProducer.getLimitNum( - elcbMap, - defaultListLimit - ) - ListContentsSelectSpinnerViewProducer.execCompList( - editParameters, - elcbMap, - listContentsFilePath, - ) - val selectJsPath = ListContentsSelectSpinnerViewProducer.getSelectJsPath( - elcbMap, -// currentAppDirPath, - scriptName, - ) - val initMark = elcbMap?.get( - ListContentsSelectSpinnerViewProducer.ListContentsEditKey.initMark.name) - ?: String() - val initValue = elcbMap?.get( - ListContentsSelectSpinnerViewProducer.ListContentsEditKey.initValue.name) - ?: String() - setInitMarkToListContents( - elcbMap, -// currentAppDirPath, - ) - - val fileObj = File(listContentsFilePath) - val parentDir = fileObj.parent ?: String() - FileSystems.createDirs(parentDir) - val editableSpinnerList = ReadText( - listContentsFilePath - ).textToList().filter { - it.trim().isNotEmpty() - } - val updatedEditableSpinnerList = listOf(throughMark) + editableSpinnerList - - val insertSpinner = SpinnerInstance.make( - context, - updatedEditableSpinnerList, - editParameters.onFixNormalSpinner - ) - insertSpinner.id = currentId + EditTextSupportViewId.EDITABLE_SPINNER.id - insertSpinner.tag = "spinnerEdit${currentId + EditTextSupportViewId.EDITABLE_SPINNER.id}" - val adapter = ArrayAdapter( - context as Context, - R.layout.sppinner_layout, - ) - - adapter.addAll(updatedEditableSpinnerList) - insertSpinner.adapter = adapter - insertSpinner.setOnTouchListener(View.OnTouchListener { - v, event -> - val currentSpinnerList = ReadText( - listContentsFilePath - ).textToList().filter { - it.trim().isNotEmpty() - } - val currentEditableSpinnerList = listOf(throughMark) + currentSpinnerList - val arrayAdapter = insertSpinner.adapter as ArrayAdapter - arrayAdapter.clear() - arrayAdapter.addAll(currentEditableSpinnerList) - adapter.notifyDataSetChanged() - insertSpinner.setSelection(0) - v.performClick() - true - }) - insertSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { - override fun onItemSelected(parent: AdapterView<*>?, view: View?, pos: Int, id: Long) { - val selectedItem = adapter.getItem(pos) - ?: return - val currentSpinnerList = ReadText( - listContentsFilePath - ).textToList().filter { - it.trim().isNotEmpty() - } - val updateListContents = if(selectedItem == throughMark) { - currentSpinnerList.filter { - it != selectedItem - } - } else { - listOf(selectedItem) + currentSpinnerList.filter { - it != selectedItem - && it != throughMark - } - } - FileSystems.writeFile( - listContentsFilePath, - updateListContents - .take(listLimit) - .joinToString("\n") - ) - val selectUpdatedSpinnerList = if( - selectedItem == throughMark - ){ - listOf(throughMark) + currentSpinnerList - } else listOf( - throughMark, - selectedItem, - ) + currentSpinnerList.filter { - it != selectedItem - } - adapter.clear() - adapter.addAll(selectUpdatedSpinnerList) - adapter.notifyDataSetChanged() - insertSpinner.setSelection(0) - if( - selectedItem == throughMark - ) return - val isInit = selectedItem == initMark - when(isInit){ - true -> { - insertEditText.setText(initValue) - return - } - else -> insertEditText.setText(selectedItem) - } - SelectJsExecutor.exec( - fragment, - selectJsPath, - selectedItem - ) - } - - override fun onNothingSelected(parent: AdapterView<*>?) {} - } - insertSpinner.layoutParams = linearParamsForSpinner - return insertSpinner - } +// val defaultListLimit = 100 +// val context = fragment.context +// val currentId = editParameters.currentId +// val throughMark = "-" +// val linearParamsForSpinner = LinearLayoutCompat.LayoutParams( +// 0, +// LinearLayoutCompat.LayoutParams.MATCH_PARENT, +// ) +// linearParamsForSpinner.weight = weight +// +// val elcbMap = ListContentsSelectSpinnerViewProducer.getElsbMap( +// editParameters, +// currentComponentIndex +// ) +// when(fragment){ +// is EditFragment -> fragment.listConSelectBoxMapList.add(elcbMap) +// } +// val listContentsFilePath = +// elcbMap?.get( +// ListContentsSelectSpinnerViewProducer.ListContentsEditKey.listPath.name) +// ?: String() +// val listLimit = ListContentsSelectSpinnerViewProducer.getLimitNum( +// elcbMap, +// defaultListLimit +// ) +// ListContentsSelectSpinnerViewProducer.execCompList( +// editParameters, +// elcbMap, +// listContentsFilePath, +// ) +// val selectJsPath = ListContentsSelectSpinnerViewProducer.getSelectJsPath( +// elcbMap, +//// currentAppDirPath, +// scriptName, +// ) +// val initMark = elcbMap?.get( +// ListContentsSelectSpinnerViewProducer.ListContentsEditKey.initMark.name) +// ?: String() +// val initValue = elcbMap?.get( +// ListContentsSelectSpinnerViewProducer.ListContentsEditKey.initValue.name) +// ?: String() +// setInitMarkToListContents( +// elcbMap, +//// currentAppDirPath, +// ) +// +// val fileObj = File(listContentsFilePath) +// val parentDir = fileObj.parent ?: String() +// FileSystems.createDirs(parentDir) +// val editableSpinnerList = ReadText( +// listContentsFilePath +// ).textToList().filter { +// it.trim().isNotEmpty() +// } +// val updatedEditableSpinnerList = listOf(throughMark) + editableSpinnerList +// +// val insertSpinner = SpinnerInstance.make( +// context, +// updatedEditableSpinnerList, +// editParameters.onFixNormalSpinner +// ) +// insertSpinner.id = currentId + EditTextSupportViewId.EDITABLE_SPINNER.id +// insertSpinner.tag = "spinnerEdit${currentId + EditTextSupportViewId.EDITABLE_SPINNER.id}" +// val adapter = ArrayAdapter( +// context as Context, +// R.layout.sppinner_layout, +// ) +// +// adapter.addAll(updatedEditableSpinnerList) +// insertSpinner.adapter = adapter +// insertSpinner.setOnTouchListener(View.OnTouchListener { +// v, event -> +// val currentSpinnerList = ReadText( +// listContentsFilePath +// ).textToList().filter { +// it.trim().isNotEmpty() +// } +// val currentEditableSpinnerList = listOf(throughMark) + currentSpinnerList +// val arrayAdapter = insertSpinner.adapter as ArrayAdapter +// arrayAdapter.clear() +// arrayAdapter.addAll(currentEditableSpinnerList) +// adapter.notifyDataSetChanged() +// insertSpinner.setSelection(0) +// v.performClick() +// true +// }) +// insertSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { +// override fun onItemSelected(parent: AdapterView<*>?, view: View?, pos: Int, id: Long) { +// val selectedItem = adapter.getItem(pos) +// ?: return +// val currentSpinnerList = ReadText( +// listContentsFilePath +// ).textToList().filter { +// it.trim().isNotEmpty() +// } +// val updateListContents = if(selectedItem == throughMark) { +// currentSpinnerList.filter { +// it != selectedItem +// } +// } else { +// listOf(selectedItem) + currentSpinnerList.filter { +// it != selectedItem +// && it != throughMark +// } +// } +// FileSystems.writeFile( +// listContentsFilePath, +// updateListContents +// .take(listLimit) +// .joinToString("\n") +// ) +// val selectUpdatedSpinnerList = if( +// selectedItem == throughMark +// ){ +// listOf(throughMark) + currentSpinnerList +// } else listOf( +// throughMark, +// selectedItem, +// ) + currentSpinnerList.filter { +// it != selectedItem +// } +// adapter.clear() +// adapter.addAll(selectUpdatedSpinnerList) +// adapter.notifyDataSetChanged() +// insertSpinner.setSelection(0) +// if( +// selectedItem == throughMark +// ) return +// val isInit = selectedItem == initMark +// when(isInit){ +// true -> { +// insertEditText.setText(initValue) +// return +// } +// else -> insertEditText.setText(selectedItem) +// } +// SelectJsExecutor.exec( +// fragment, +// selectJsPath, +// selectedItem +// ) +// } +// +// override fun onNothingSelected(parent: AdapterView<*>?) {} +// } +// insertSpinner.layoutParams = linearParamsForSpinner +// return insertSpinner +// } } diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/EditableSpinnerViewProducer.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/EditableSpinnerViewProducer.kt index 5ebfd67c1..c2bed6d7a 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/EditableSpinnerViewProducer.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/EditableSpinnerViewProducer.kt @@ -12,85 +12,85 @@ import com.puutaro.commandclick.fragment_lib.edit_fragment.variable.EditTextSupp import com.puutaro.commandclick.proccess.edit.lib.SpinnerInstance object EditableSpinnerViewProducer { - fun make ( - fragment: Fragment, - insertEditText: EditText, - editParameters: EditParameters, - currentComponentIndex: Int, - weight: Float, - ): Spinner { - val context = fragment.context - val currentId = editParameters.currentId - val currentSetVariableMap = editParameters.setVariableMap - val throughMark = "-" - val linearParamsForSpinner = LinearLayoutCompat.LayoutParams( - 0, - LinearLayoutCompat.LayoutParams.MATCH_PARENT, - ) - linearParamsForSpinner.weight = weight - val adapter = ArrayAdapter( - context as Context, - R.layout.sppinner_layout, - ) - val editableSpinnerList = currentSetVariableMap?.get( - SetVariableTypeColumn.VARIABLE_TYPE_VALUE.name - ) - ?.split('|') - ?.getOrNull(currentComponentIndex) -// .let { -// ReplaceVariableMapReflecter.reflect( -// QuoteTool.trimBothEdgeQuote(it), -// editParameters -// ) +// fun make ( +// fragment: Fragment, +// insertEditText: EditText, +// editParameters: EditParameters, +// currentComponentIndex: Int, +// weight: Float, +// ): Spinner { +// val context = fragment.context +// val currentId = editParameters.currentId +// val currentSetVariableMap = editParameters.setVariableMap +// val throughMark = "-" +// val linearParamsForSpinner = LinearLayoutCompat.LayoutParams( +// 0, +// LinearLayoutCompat.LayoutParams.MATCH_PARENT, +// ) +// linearParamsForSpinner.weight = weight +// val adapter = ArrayAdapter( +// context as Context, +// R.layout.sppinner_layout, +// ) +// val editableSpinnerList = currentSetVariableMap?.get( +// SetVariableTypeColumn.VARIABLE_TYPE_VALUE.name +// ) +// ?.split('|') +// ?.getOrNull(currentComponentIndex) +//// .let { +//// ReplaceVariableMapReflecter.reflect( +//// QuoteTool.trimBothEdgeQuote(it), +//// editParameters +//// ) +//// } +// ?.split('?') +// ?: listOf() +// +// val updatedEditableSpinnerList = listOf(throughMark) + editableSpinnerList +// adapter.addAll(updatedEditableSpinnerList) +// +// val insertSpinner = SpinnerInstance.make( +// context, +// updatedEditableSpinnerList, +// editParameters.onFixNormalSpinner +// ) +// +// insertSpinner.id = currentId + EditTextSupportViewId.EDITABLE_SPINNER.id +// insertSpinner.tag = "spinnerEdit${currentId + EditTextSupportViewId.EDITABLE_SPINNER.id}" +// insertSpinner.adapter = adapter +// insertSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { +// override fun onItemSelected(parent: AdapterView<*>?, view: View?, pos: Int, id: Long) { +// val selectedItem = adapter.getItem(pos) +// val currentSpinnerList = (0 until adapter.count).map { +// adapter.getItem(it) +// } +// val selectUpdatedSpinnerList = if( +// selectedItem == throughMark +// ){ +// listOf(throughMark) + currentSpinnerList.filter { +// it != selectedItem +// } +// } else listOf( +// throughMark, +// selectedItem, +// ) + currentSpinnerList.filter { +// it != throughMark +// && it != selectedItem +// } +// adapter.clear() +// adapter.addAll(selectUpdatedSpinnerList) +// adapter.notifyDataSetChanged() +// insertSpinner.setSelection(0) +// if( +// selectedItem == throughMark +// ) return +// insertEditText.setText(selectedItem) // } - ?.split('?') - ?: listOf() - - val updatedEditableSpinnerList = listOf(throughMark) + editableSpinnerList - adapter.addAll(updatedEditableSpinnerList) - - val insertSpinner = SpinnerInstance.make( - context, - updatedEditableSpinnerList, - editParameters.onFixNormalSpinner - ) - - insertSpinner.id = currentId + EditTextSupportViewId.EDITABLE_SPINNER.id - insertSpinner.tag = "spinnerEdit${currentId + EditTextSupportViewId.EDITABLE_SPINNER.id}" - insertSpinner.adapter = adapter - insertSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { - override fun onItemSelected(parent: AdapterView<*>?, view: View?, pos: Int, id: Long) { - val selectedItem = adapter.getItem(pos) - val currentSpinnerList = (0 until adapter.count).map { - adapter.getItem(it) - } - val selectUpdatedSpinnerList = if( - selectedItem == throughMark - ){ - listOf(throughMark) + currentSpinnerList.filter { - it != selectedItem - } - } else listOf( - throughMark, - selectedItem, - ) + currentSpinnerList.filter { - it != throughMark - && it != selectedItem - } - adapter.clear() - adapter.addAll(selectUpdatedSpinnerList) - adapter.notifyDataSetChanged() - insertSpinner.setSelection(0) - if( - selectedItem == throughMark - ) return - insertEditText.setText(selectedItem) - } - - override fun onNothingSelected(parent: AdapterView<*>?) { - } - } - insertSpinner.layoutParams = linearParamsForSpinner - return insertSpinner - } +// +// override fun onNothingSelected(parent: AdapterView<*>?) { +// } +// } +// insertSpinner.layoutParams = linearParamsForSpinner +// return insertSpinner +// } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/FileSelectGridViewProducer.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/FileSelectGridViewProducer.kt index 69e9d466d..4320476fa 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/FileSelectGridViewProducer.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/FileSelectGridViewProducer.kt @@ -1,30 +1,8 @@ package com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib import android.app.Dialog -import android.text.Editable -import android.text.TextWatcher -import android.view.Gravity -import android.view.ViewGroup -import android.widget.Button -import android.widget.EditText -import android.widget.GridView -import androidx.appcompat.widget.AppCompatEditText -import androidx.appcompat.widget.LinearLayoutCompat -import androidx.fragment.app.Fragment -import com.puutaro.commandclick.common.variable.path.UsePath -import com.puutaro.commandclick.common.variable.edit.EditParameters -import com.puutaro.commandclick.component.adapter.ImageAdapter -import com.puutaro.commandclick.fragment.EditFragment -import com.puutaro.commandclick.fragment_lib.edit_fragment.variable.EditTextSupportViewId -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.FileSelectSpinnerViewProducer.getFcbMap -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.FileSelectSpinnerViewProducer.getFilterType -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.lib.SelectJsExecutor -import com.puutaro.commandclick.proccess.edit.lib.ButtonSetter -import com.puutaro.commandclick.proccess.js_macro_libs.edit_setting_extra.FilterPathTool -import com.puutaro.commandclick.util.str.QuoteTool -import com.puutaro.commandclick.util.file.FileSystems -import com.puutaro.commandclick.util.Keyboard -import java.io.File +//import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.FileSelectSpinnerViewProducer.getFcbMap +//import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.FileSelectSpinnerViewProducer.getFilterType object FileSelectGridViewProducer { // private const val noExtend = "NoExtend" @@ -32,353 +10,353 @@ object FileSelectGridViewProducer { private var gridDialogObj: Dialog? = null - fun make ( - editFragment: EditFragment, - insertEditText: EditText, - editParameters: EditParameters, - currentComponentIndex: Int, - weight: Float, - ): Button { - val context = editFragment.context - val currentId = editParameters.currentId - val linearParamsForGrid = LinearLayoutCompat.LayoutParams( - 0, - LinearLayoutCompat.LayoutParams.MATCH_PARENT, - ) - linearParamsForGrid.weight = weight - val fcbMap = getFcbMap( - editParameters, - currentComponentIndex - ) - val gridButtonView = Button(context) - gridButtonView.id = currentId + EditTextSupportViewId.EDITABLE_GRID.id - gridButtonView.tag = "gridEdit${currentId + EditTextSupportViewId.EDITABLE_GRID.id}" - gridButtonView.text = gridButtonLabel - ButtonSetter.set( - context, - gridButtonView, - mapOf() - ) - - gridButtonView.setOnClickListener { - buttonView -> - val buttonContext = buttonView.context - gridDialogObj = Dialog( - buttonContext - ) - gridDialogObj?.setContentView( - com.puutaro.commandclick.R.layout.grid_dialog_layout - ) - setGridListView( - editFragment, -// editParameters, - insertEditText, - fcbMap - ) - gridDialogObj?.setOnCancelListener { - gridDialogObj?.dismiss() - gridDialogObj = null - } - gridDialogObj?.window?.setLayout( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.WRAP_CONTENT - ) - gridDialogObj?.window?.setGravity(Gravity.BOTTOM) - gridDialogObj?.show() - } - gridButtonView.layoutParams = linearParamsForGrid - return gridButtonView - } - - private fun setGridListView( - currentFragment: EditFragment, -// editParameters: EditParameters, - insertEditText: EditText, - fcbMap: Map? - ) { - val context = currentFragment.context - ?: return - val filterDir = getSelectDirPath( - fcbMap, -// editParameters, - ) - val filterPrefix = getFilterPrefix( - fcbMap, - ) - val filterSuffix = getFilterSuffix( - fcbMap, - ) - val filterType = getFilterType( - fcbMap, - ) - val listDialogSearchEditText = gridDialogObj?.findViewById( - com.puutaro.commandclick.R.id.grid_dialog_search_edit_text - ) ?: return - listDialogSearchEditText.hint = "search selectable list" - val editableSpinnerList = - makeGridList( - filterDir, - filterPrefix, - filterSuffix, - filterType - ) - val gridView = - gridDialogObj?.findViewById( - com.puutaro.commandclick.R.id.grid_dialog_grid_view - ) ?: return - val imageAdapter = ImageAdapter( - context, - ) - imageAdapter.clear() - imageAdapter.addAll( - editableSpinnerList.toMutableList() - ) - gridView.adapter = imageAdapter - makeSearchEditText( - gridView, - listDialogSearchEditText, - editableSpinnerList.joinToString("\n"), - ) - setGridViewItemClickListener( - currentFragment, - insertEditText, - listDialogSearchEditText, - gridView, -// editParameters, - fcbMap, - ) - } - - private fun setGridViewItemClickListener( - editFragment: Fragment, - insertEditText: EditText, - searchText: EditText, - gridView: GridView, +// fun make ( +// editFragment: EditFragment, +// insertEditText: EditText, // editParameters: EditParameters, - fcbMap: Map? - ){ - Keyboard.hiddenKeyboardForFragment( - editFragment - ) -// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( -// editParameters.fannelInfoMap +// currentComponentIndex: Int, +// weight: Float, +// ): Button { +// val context = editFragment.context +// val currentId = editParameters.currentId +// val linearParamsForGrid = LinearLayoutCompat.LayoutParams( +// 0, +// LinearLayoutCompat.LayoutParams.MATCH_PARENT, // ) - val filterDir = getSelectDirPath( - fcbMap, +// linearParamsForGrid.weight = weight +// val fcbMap = getFcbMap( // editParameters, - ) - val filterPrefixListCon = getFilterPrefix( - fcbMap, - ) - val filterSuffixListCon = getFilterSuffix( - fcbMap, - ) - val filterType = getFilterType( - fcbMap, - ) - val selectJsPath = getSelectJsPath( - fcbMap - ) - gridView.setOnItemClickListener { - parent, View, pos, id - -> - gridDialogObj?.dismiss() - gridDialogObj = null - val currentGridList = makeGridList( - filterDir, - filterPrefixListCon, - filterSuffixListCon, - filterType - ) - val selectedItem = currentGridList.filter { - Regex( - searchText.text.toString() - .lowercase() - .replace("\n", "") - ).containsMatchIn( - it.lowercase() - ) - }.get(pos) - val selectedFileName = File(selectedItem).name -// if( -// currentAppDirPath != UsePath.cmdclickAppHistoryDirAdminPath -// ) { - FileSystems.updateLastModified( - File( - filterDir, - selectedFileName - ).absolutePath - ) +// currentComponentIndex +// ) +// val gridButtonView = Button(context) +// gridButtonView.id = currentId + EditTextSupportViewId.EDITABLE_GRID.id +// gridButtonView.tag = "gridEdit${currentId + EditTextSupportViewId.EDITABLE_GRID.id}" +// gridButtonView.text = gridButtonLabel +// ButtonSetter.set( +// context, +// gridButtonView, +// mapOf() +// ) +// +// gridButtonView.setOnClickListener { +// buttonView -> +// val buttonContext = buttonView.context +// gridDialogObj = Dialog( +// buttonContext +// ) +// gridDialogObj?.setContentView( +// com.puutaro.commandclick.R.layout.grid_dialog_layout +// ) +// setGridListView( +// editFragment, +//// editParameters, +// insertEditText, +// fcbMap +// ) +// gridDialogObj?.setOnCancelListener { +// gridDialogObj?.dismiss() +// gridDialogObj = null // } - val selectUpdatedGridList = listOf( - selectedItem, - ) + currentGridList.filter { - it != selectedItem - } - val imageAdapter = - gridView.adapter as ImageAdapter - imageAdapter.clear() - imageAdapter.addAll(selectUpdatedGridList.toMutableList()) - imageAdapter.notifyDataSetChanged() - gridView.setSelection(0) - insertEditText.setText(selectedFileName) - SelectJsExecutor.exec( - editFragment, - selectJsPath, - selectedItem, - ) - } - } - -// private fun judgeBySuffix( -// targetStr: String, -// filterSuffix: String, -// ): Boolean{ -// if(filterSuffix != noExtend) { -// return QuoteTool.splitBySurroundedIgnore( +// gridDialogObj?.window?.setLayout( +// ViewGroup.LayoutParams.MATCH_PARENT, +// ViewGroup.LayoutParams.WRAP_CONTENT +// ) +// gridDialogObj?.window?.setGravity(Gravity.BOTTOM) +// gridDialogObj?.show() +// } +// gridButtonView.layoutParams = linearParamsForGrid +// return gridButtonView +// } +// +// private fun setGridListView( +// currentFragment: EditFragment, +//// editParameters: EditParameters, +// insertEditText: EditText, +// fcbMap: Map? +// ) { +// val context = currentFragment.context +// ?: return +// val filterDir = getSelectDirPath( +// fcbMap, +//// editParameters, +// ) +// val filterPrefix = getFilterPrefix( +// fcbMap, +// ) +// val filterSuffix = getFilterSuffix( +// fcbMap, +// ) +// val filterType = getFilterType( +// fcbMap, +// ) +// val listDialogSearchEditText = gridDialogObj?.findViewById( +// com.puutaro.commandclick.R.id.grid_dialog_search_edit_text +// ) ?: return +// listDialogSearchEditText.hint = "search selectable list" +// val editableSpinnerList = +// makeGridList( +// filterDir, +// filterPrefix, // filterSuffix, -// '&' +// filterType // ) -//// filterSuffix.split("&") -// .any { -// targetStr.endsWith(it) +// val gridView = +// gridDialogObj?.findViewById( +// com.puutaro.commandclick.R.id.grid_dialog_grid_view +// ) ?: return +// val imageAdapter = ImageAdapter( +// context, +// ) +// imageAdapter.clear() +// imageAdapter.addAll( +// editableSpinnerList.toMutableList() +// ) +// gridView.adapter = imageAdapter +// makeSearchEditText( +// gridView, +// listDialogSearchEditText, +// editableSpinnerList.joinToString("\n"), +// ) +// setGridViewItemClickListener( +// currentFragment, +// insertEditText, +// listDialogSearchEditText, +// gridView, +//// editParameters, +// fcbMap, +// ) +// } +// +// private fun setGridViewItemClickListener( +// editFragment: Fragment, +// insertEditText: EditText, +// searchText: EditText, +// gridView: GridView, +//// editParameters: EditParameters, +// fcbMap: Map? +// ){ +// Keyboard.hiddenKeyboardForFragment( +// editFragment +// ) +//// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( +//// editParameters.fannelInfoMap +//// ) +// val filterDir = getSelectDirPath( +// fcbMap, +//// editParameters, +// ) +// val filterPrefixListCon = getFilterPrefix( +// fcbMap, +// ) +// val filterSuffixListCon = getFilterSuffix( +// fcbMap, +// ) +// val filterType = getFilterType( +// fcbMap, +// ) +// val selectJsPath = getSelectJsPath( +// fcbMap +// ) +// gridView.setOnItemClickListener { +// parent, View, pos, id +// -> +// gridDialogObj?.dismiss() +// gridDialogObj = null +// val currentGridList = makeGridList( +// filterDir, +// filterPrefixListCon, +// filterSuffixListCon, +// filterType +// ) +// val selectedItem = currentGridList.filter { +// Regex( +// searchText.text.toString() +// .lowercase() +// .replace("\n", "") +// ).containsMatchIn( +// it.lowercase() +// ) +// }.get(pos) +// val selectedFileName = File(selectedItem).name +//// if( +//// currentAppDirPath != UsePath.cmdclickAppHistoryDirAdminPath +//// ) { +// FileSystems.updateLastModified( +// File( +// filterDir, +// selectedFileName +// ).absolutePath +// ) +//// } +// val selectUpdatedGridList = listOf( +// selectedItem, +// ) + currentGridList.filter { +// it != selectedItem // } +// val imageAdapter = +// gridView.adapter as ImageAdapter +// imageAdapter.clear() +// imageAdapter.addAll(selectUpdatedGridList.toMutableList()) +// imageAdapter.notifyDataSetChanged() +// gridView.setSelection(0) +// insertEditText.setText(selectedFileName) +// SelectJsExecutor.exec( +// editFragment, +// selectJsPath, +// selectedItem, +// ) // } -// return !Regex("\\..*$").containsMatchIn(targetStr) // } - - private fun makeGridList( - filterDir: String, - filterPrefixListCon: String, - filterSuffixListCon: String, - filterType: String, - ): List { - val sortedList = FileSystems.sortedFiles( - filterDir, - "on" - ) - val isFile = filterType != FilterFileType.dir.name - return when(isFile){ - true -> { - sortedList.filter { - FilterPathTool.isFilterByFile( - it, - filterDir, - filterPrefixListCon, - filterSuffixListCon, - true, - "&" - ) -// val okSuffix = FilterPathTool.judgeBySuffix(it, filterSuffixListCon, "&") -// val isFile = File("$filterDir/$it").isFile -// it.startsWith(filterPrefixListCon) -// && okSuffix -// && isFile - }.map { - "$filterDir/$it" - } - } - false -> sortedList.filter { - FilterPathTool.isFilterByDir( - it, - filterDir, - filterPrefixListCon, - filterSuffixListCon, - true, - "&" - ) -// it.startsWith(filterPrefixListCon) -// && FilterPathTool.judgeBySuffix(it, filterSuffixListCon, "&") -// && File("$filterDir/$it").isDirectory - }.map { - "$filterDir/$it" - } - } - } - - private fun makeSearchEditText( - gridView: GridView, - searchText: EditText, - listCon: String, - ) { - searchText.addTextChangedListener(object : TextWatcher { - override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} - override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {} - - override fun afterTextChanged(s: Editable?) { - if (!searchText.hasFocus()) return - val filteredList = listCon.split("\n").filter { - Regex( - searchText.text.toString() - .lowercase() - .replace("\n", "") - ).containsMatchIn( - it.lowercase() - ) - } - val imageAdapter = gridView.adapter as ImageAdapter - imageAdapter.clear() - imageAdapter.addAll(filteredList.toMutableList()) - imageAdapter.notifyDataSetChanged() - } - }) - } - - private fun getSelectDirPath( - fcbMap: Map?, -// editParameters: EditParameters, - ): String { -// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( -// editParameters.fannelInfoMap +// +//// private fun judgeBySuffix( +//// targetStr: String, +//// filterSuffix: String, +//// ): Boolean{ +//// if(filterSuffix != noExtend) { +//// return QuoteTool.splitBySurroundedIgnore( +//// filterSuffix, +//// '&' +//// ) +////// filterSuffix.split("&") +//// .any { +//// targetStr.endsWith(it) +//// } +//// } +//// return !Regex("\\..*$").containsMatchIn(targetStr) +//// } +// +// private fun makeGridList( +// filterDir: String, +// filterPrefixListCon: String, +// filterSuffixListCon: String, +// filterType: String, +// ): List { +// val sortedList = FileSystems.sortedFiles( +// filterDir, +// "on" // ) - val cmdclickDefaultAppDirPath = UsePath.cmdclickDefaultAppDirPath - return fcbMap?.get( - FileSelectEditKey.dirPath.name - )?.let { - if ( - it.isEmpty() - ) return@let cmdclickDefaultAppDirPath - it - } ?: cmdclickDefaultAppDirPath - } - - private fun getFilterPrefix( - fcbMap: Map?, - ): String { - return fcbMap?.get(FileSelectEditKey.prefix.name)?.let { - QuoteTool.trimBothEdgeQuote(it) - } ?: String() - } - - private fun getFilterSuffix( - fcbMap: Map?, - ): String { - return fcbMap?.get(FileSelectEditKey.suffix.name)?.let { - QuoteTool.trimBothEdgeQuote(it) - } ?: String() - } - - private fun getSelectJsPath( - fcbMap: Map?, - ): String { - return fcbMap?.get(FileSelectEditKey.selectJs.name)?.let { - val trimType = QuoteTool.trimBothEdgeQuote(it) - if( - trimType.isEmpty() - ) return@let FilterFileType.file.name - trimType - } ?: FilterFileType.file.name - } - - private enum class FileSelectEditKey { - dirPath, - prefix, - suffix, - selectJs - } - - private enum class FilterFileType { - file, - dir, - } +// val isFile = filterType != FilterFileType.dir.name +// return when(isFile){ +// true -> { +// sortedList.filter { +// FilterPathTool.isFilterByFile( +// it, +// filterDir, +// filterPrefixListCon, +// filterSuffixListCon, +// true, +// "&" +// ) +//// val okSuffix = FilterPathTool.judgeBySuffix(it, filterSuffixListCon, "&") +//// val isFile = File("$filterDir/$it").isFile +//// it.startsWith(filterPrefixListCon) +//// && okSuffix +//// && isFile +// }.map { +// "$filterDir/$it" +// } +// } +// false -> sortedList.filter { +// FilterPathTool.isFilterByDir( +// it, +// filterDir, +// filterPrefixListCon, +// filterSuffixListCon, +// true, +// "&" +// ) +//// it.startsWith(filterPrefixListCon) +//// && FilterPathTool.judgeBySuffix(it, filterSuffixListCon, "&") +//// && File("$filterDir/$it").isDirectory +// }.map { +// "$filterDir/$it" +// } +// } +// } +// +// private fun makeSearchEditText( +// gridView: GridView, +// searchText: EditText, +// listCon: String, +// ) { +// searchText.addTextChangedListener(object : TextWatcher { +// override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} +// override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {} +// +// override fun afterTextChanged(s: Editable?) { +// if (!searchText.hasFocus()) return +// val filteredList = listCon.split("\n").filter { +// Regex( +// searchText.text.toString() +// .lowercase() +// .replace("\n", "") +// ).containsMatchIn( +// it.lowercase() +// ) +// } +// val imageAdapter = gridView.adapter as ImageAdapter +// imageAdapter.clear() +// imageAdapter.addAll(filteredList.toMutableList()) +// imageAdapter.notifyDataSetChanged() +// } +// }) +// } +// +// private fun getSelectDirPath( +// fcbMap: Map?, +//// editParameters: EditParameters, +// ): String { +//// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( +//// editParameters.fannelInfoMap +//// ) +// val cmdclickDefaultAppDirPath = UsePath.cmdclickDefaultAppDirPath +// return fcbMap?.get( +// FileSelectEditKey.dirPath.name +// )?.let { +// if ( +// it.isEmpty() +// ) return@let cmdclickDefaultAppDirPath +// it +// } ?: cmdclickDefaultAppDirPath +// } +// +// private fun getFilterPrefix( +// fcbMap: Map?, +// ): String { +// return fcbMap?.get(FileSelectEditKey.prefix.name)?.let { +// QuoteTool.trimBothEdgeQuote(it) +// } ?: String() +// } +// +// private fun getFilterSuffix( +// fcbMap: Map?, +// ): String { +// return fcbMap?.get(FileSelectEditKey.suffix.name)?.let { +// QuoteTool.trimBothEdgeQuote(it) +// } ?: String() +// } +// +// private fun getSelectJsPath( +// fcbMap: Map?, +// ): String { +// return fcbMap?.get(FileSelectEditKey.selectJs.name)?.let { +// val trimType = QuoteTool.trimBothEdgeQuote(it) +// if( +// trimType.isEmpty() +// ) return@let FilterFileType.file.name +// trimType +// } ?: FilterFileType.file.name +// } +// +// private enum class FileSelectEditKey { +// dirPath, +// prefix, +// suffix, +// selectJs +// } +// +// private enum class FilterFileType { +// file, +// dir, +// } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/FileSelectOnlyImageGridViewProducer.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/FileSelectOnlyImageGridViewProducer.kt index 394c62661..389ea249b 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/FileSelectOnlyImageGridViewProducer.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/FileSelectOnlyImageGridViewProducer.kt @@ -1,28 +1,6 @@ package com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib import android.app.AlertDialog -import android.content.DialogInterface -import android.view.Gravity -import android.widget.Button -import android.widget.EditText -import android.widget.GridView -import androidx.appcompat.widget.LinearLayoutCompat -import androidx.fragment.app.Fragment -import com.puutaro.commandclick.common.variable.path.UsePath -import com.puutaro.commandclick.common.variable.edit.EditParameters -import com.puutaro.commandclick.component.adapter.OnlyImageAdapter -import com.puutaro.commandclick.fragment.EditFragment -import com.puutaro.commandclick.fragment_lib.edit_fragment.variable.EditTextSupportViewId -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.lib.SelectJsExecutor -import com.puutaro.commandclick.proccess.edit.lib.ButtonSetter -import com.puutaro.commandclick.proccess.js_macro_libs.edit_setting_extra.FilterPathTool -import com.puutaro.commandclick.proccess.lib.LinearLayoutForTotal -import com.puutaro.commandclick.proccess.lib.NestLinearLayout -import com.puutaro.commandclick.proccess.lib.SearchTextLinearWeight -import com.puutaro.commandclick.util.file.FileSystems -import com.puutaro.commandclick.util.Keyboard -import com.puutaro.commandclick.util.str.QuoteTool -import java.io.File object FileSelectOnlyImageGridViewProducer { private val noExtend = "NoExtend" @@ -30,304 +8,304 @@ object FileSelectOnlyImageGridViewProducer { private var alertDialog: AlertDialog? = null - fun make ( - editFragment: EditFragment, - insertEditText: EditText, - editParameters: EditParameters, - currentComponentIndex: Int, - weight: Float, - ): Button { - val context = editFragment.context - val currentId = editParameters.currentId - val linearParamsForGrid = LinearLayoutCompat.LayoutParams( - 0, - LinearLayoutCompat.LayoutParams.MATCH_PARENT, - ) - linearParamsForGrid.weight = weight - val fcbMap = FileSelectSpinnerViewProducer.getFcbMap( - editParameters, - currentComponentIndex - ) - val filterDir = getSelectDirPath( - fcbMap, -// editParameters, - ) - val filterPrefix = getFilterPrefix( - fcbMap, - ) - val filterSuffix = getFilterSuffix( - fcbMap, - ) - val filterType = FileSelectSpinnerViewProducer.getFilterType( - fcbMap, - ) - - val gridButtonView = Button(context) - gridButtonView.id = currentId + EditTextSupportViewId.EDITABLE_GRID.id - gridButtonView.tag = "gridEdit${currentId + EditTextSupportViewId.EDITABLE_GRID.id}" - gridButtonView.text = gridButtonLabel - ButtonSetter.set( - context, - gridButtonView, - mapOf() - ) - - gridButtonView.setOnClickListener { - buttonView -> - val buttonContext = buttonView.context - val currentGridList = makeGridList( - filterDir, - filterPrefix, - filterSuffix, - filterType - ) - - val gridView = - GridView(buttonContext) - gridView.numColumns = 2 - val adapter = OnlyImageAdapter( - buttonContext, - ) - adapter.addAll( - currentGridList.toMutableList() - ) - gridView.adapter = adapter - - val linearLayoutForTotal = LinearLayoutForTotal.make( - context - ) - val searchTextWeight = SearchTextLinearWeight.calculate(editFragment.activity) - val listWeight = 1F - searchTextWeight - val linearLayoutForListView = NestLinearLayout.make( - context, - listWeight - ) - val linearLayoutForSearch = NestLinearLayout.make( - context, - searchTextWeight - ) - linearLayoutForListView.addView(gridView) - linearLayoutForTotal.addView(linearLayoutForListView) - linearLayoutForTotal.addView(linearLayoutForSearch) - - setGridViewItemClickListener( - editFragment, - insertEditText, - gridView, - adapter, -// editParameters, - fcbMap, - ) - - alertDialog = AlertDialog.Builder( - buttonContext - ) - .setView(linearLayoutForTotal) - .create() - alertDialog?.window?.setGravity(Gravity.BOTTOM) - alertDialog?.show() - - alertDialog?.setOnCancelListener(object : DialogInterface.OnCancelListener { - override fun onCancel(dialog: DialogInterface?) { - alertDialog?.dismiss() - alertDialog = null - } - }) - } - gridButtonView.layoutParams = linearParamsForGrid - return gridButtonView - } - - private fun setGridViewItemClickListener( - editFragment: Fragment, - insertEditText: EditText, - gridView: GridView, - adapter: OnlyImageAdapter, +// fun make ( +// editFragment: EditFragment, +// insertEditText: EditText, // editParameters: EditParameters, - fcbMap: Map? - ){ - Keyboard.hiddenKeyboardForFragment( - editFragment - ) -// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( -// editParameters.fannelInfoMap +// currentComponentIndex: Int, +// weight: Float, +// ): Button { +// val context = editFragment.context +// val currentId = editParameters.currentId +// val linearParamsForGrid = LinearLayoutCompat.LayoutParams( +// 0, +// LinearLayoutCompat.LayoutParams.MATCH_PARENT, // ) - val filterDir = getSelectDirPath( - fcbMap, +// linearParamsForGrid.weight = weight +// val fcbMap = FileSelectSpinnerViewProducer.getFcbMap( // editParameters, - ) - val filterPrefix = getFilterPrefix( - fcbMap, - ) - val filterSuffix = getFilterSuffix( - fcbMap, - ) - val filterType = FileSelectSpinnerViewProducer.getFilterType( - fcbMap, - ) - val selectJsPath = getSelectJsPath( - fcbMap - ) - gridView.setOnItemClickListener { - parent, View, pos, id - -> - alertDialog?.dismiss() - alertDialog = null - val currentGridList = makeGridList( - filterDir, - filterPrefix, - filterSuffix, - filterType - ) - val selectedItem = currentGridList.get(pos) - val selectedFileName = File(selectedItem).name -// if( -// currentAppDirPath != UsePath.cmdclickAppHistoryDirAdminPath -// ) { - FileSystems.updateLastModified( - File( - filterDir, - selectedFileName - ).absolutePath - ) +// currentComponentIndex +// ) +// val filterDir = getSelectDirPath( +// fcbMap, +//// editParameters, +// ) +// val filterPrefix = getFilterPrefix( +// fcbMap, +// ) +// val filterSuffix = getFilterSuffix( +// fcbMap, +// ) +// val filterType = FileSelectSpinnerViewProducer.getFilterType( +// fcbMap, +// ) +// +// val gridButtonView = Button(context) +// gridButtonView.id = currentId + EditTextSupportViewId.EDITABLE_GRID.id +// gridButtonView.tag = "gridEdit${currentId + EditTextSupportViewId.EDITABLE_GRID.id}" +// gridButtonView.text = gridButtonLabel +// ButtonSetter.set( +// context, +// gridButtonView, +// mapOf() +// ) +// +// gridButtonView.setOnClickListener { +// buttonView -> +// val buttonContext = buttonView.context +// val currentGridList = makeGridList( +// filterDir, +// filterPrefix, +// filterSuffix, +// filterType +// ) +// +// val gridView = +// GridView(buttonContext) +// gridView.numColumns = 2 +// val adapter = OnlyImageAdapter( +// buttonContext, +// ) +// adapter.addAll( +// currentGridList.toMutableList() +// ) +// gridView.adapter = adapter +// +// val linearLayoutForTotal = LinearLayoutForTotal.make( +// context +// ) +// val searchTextWeight = SearchTextLinearWeight.calculate(editFragment.activity) +// val listWeight = 1F - searchTextWeight +// val linearLayoutForListView = NestLinearLayout.make( +// context, +// listWeight +// ) +// val linearLayoutForSearch = NestLinearLayout.make( +// context, +// searchTextWeight +// ) +// linearLayoutForListView.addView(gridView) +// linearLayoutForTotal.addView(linearLayoutForListView) +// linearLayoutForTotal.addView(linearLayoutForSearch) +// +// setGridViewItemClickListener( +// editFragment, +// insertEditText, +// gridView, +// adapter, +//// editParameters, +// fcbMap, +// ) +// +// alertDialog = AlertDialog.Builder( +// buttonContext +// ) +// .setView(linearLayoutForTotal) +// .create() +// alertDialog?.window?.setGravity(Gravity.BOTTOM) +// alertDialog?.show() +// +// alertDialog?.setOnCancelListener(object : DialogInterface.OnCancelListener { +// override fun onCancel(dialog: DialogInterface?) { +// alertDialog?.dismiss() +// alertDialog = null +// } +// }) +// } +// gridButtonView.layoutParams = linearParamsForGrid +// return gridButtonView +// } +// +// private fun setGridViewItemClickListener( +// editFragment: Fragment, +// insertEditText: EditText, +// gridView: GridView, +// adapter: OnlyImageAdapter, +//// editParameters: EditParameters, +// fcbMap: Map? +// ){ +// Keyboard.hiddenKeyboardForFragment( +// editFragment +// ) +//// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( +//// editParameters.fannelInfoMap +//// ) +// val filterDir = getSelectDirPath( +// fcbMap, +//// editParameters, +// ) +// val filterPrefix = getFilterPrefix( +// fcbMap, +// ) +// val filterSuffix = getFilterSuffix( +// fcbMap, +// ) +// val filterType = FileSelectSpinnerViewProducer.getFilterType( +// fcbMap, +// ) +// val selectJsPath = getSelectJsPath( +// fcbMap +// ) +// gridView.setOnItemClickListener { +// parent, View, pos, id +// -> +// alertDialog?.dismiss() +// alertDialog = null +// val currentGridList = makeGridList( +// filterDir, +// filterPrefix, +// filterSuffix, +// filterType +// ) +// val selectedItem = currentGridList.get(pos) +// val selectedFileName = File(selectedItem).name +//// if( +//// currentAppDirPath != UsePath.cmdclickAppHistoryDirAdminPath +//// ) { +// FileSystems.updateLastModified( +// File( +// filterDir, +// selectedFileName +// ).absolutePath +// ) +//// } +// val selectUpdatedGridList = listOf( +// selectedItem, +// ) + currentGridList.filter { +// it != selectedItem // } - val selectUpdatedGridList = listOf( - selectedItem, - ) + currentGridList.filter { - it != selectedItem - } - adapter.clear() - adapter.addAll(selectUpdatedGridList.toMutableList()) - adapter.notifyDataSetChanged() - gridView.setSelection(0) - insertEditText.setText(selectedFileName) - SelectJsExecutor.exec( - editFragment, - selectJsPath, - selectedItem, - ) - } - } - - private fun judgeBySuffix( - targetStr: String, - filterSuffix: String, - ): Boolean{ - if(filterSuffix != noExtend) { - return QuoteTool.splitBySurroundedIgnore( - filterSuffix, - '&' - ) -// filterSuffix.split("&") - .any { - targetStr.endsWith(it) - } - } - return !Regex("\\..*$").containsMatchIn(targetStr) - } - - private fun makeGridList( - filterDir: String, - filterPrefixListCon: String, - filterSuffixListCon: String, - filterType: String, - ): List { - val sortedList = FileSystems.sortedFiles( - filterDir, - "on" - ) - val isFile = filterType != FilterFileType.dir.name - return when(isFile){ - true -> { - sortedList.filter { - FilterPathTool.isFilterByFile( - it, - filterDir, - filterPrefixListCon, - filterSuffixListCon, - true, - "&" - ) -// it.startsWith(filterPrefixListCon) -// && judgeBySuffix(it, filterSuffixListCon) -// && File("$filterDir/$it").isFile - }.map { - "$filterDir/$it" - } - } - false -> sortedList.filter { - FilterPathTool.isFilterByDir( - it, - filterDir, - filterPrefixListCon, - filterSuffixListCon, - true, - "&" - ) -// it.startsWith(filterPrefixListCon) -// && judgeBySuffix(it, filterSuffixListCon) -// && File("$filterDir/$it").isDirectory - }.map { - "$filterDir/$it" - } - } - } - - private fun getSelectDirPath( - fcbMap: Map?, -// editParameters: EditParameters, - ): String { -// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( -// editParameters.fannelInfoMap +// adapter.clear() +// adapter.addAll(selectUpdatedGridList.toMutableList()) +// adapter.notifyDataSetChanged() +// gridView.setSelection(0) +// insertEditText.setText(selectedFileName) +// SelectJsExecutor.exec( +// editFragment, +// selectJsPath, +// selectedItem, +// ) +// } +// } +// +// private fun judgeBySuffix( +// targetStr: String, +// filterSuffix: String, +// ): Boolean{ +// if(filterSuffix != noExtend) { +// return QuoteTool.splitBySurroundedIgnore( +// filterSuffix, +// '&' +// ) +//// filterSuffix.split("&") +// .any { +// targetStr.endsWith(it) +// } +// } +// return !Regex("\\..*$").containsMatchIn(targetStr) +// } +// +// private fun makeGridList( +// filterDir: String, +// filterPrefixListCon: String, +// filterSuffixListCon: String, +// filterType: String, +// ): List { +// val sortedList = FileSystems.sortedFiles( +// filterDir, +// "on" // ) - val cmdclickDefaultAppDirPath = UsePath.cmdclickDefaultAppDirPath - return fcbMap?.get( - FileSelectEditKey.dirPath.name - )?.let { - if ( - it.isEmpty() - ) return@let cmdclickDefaultAppDirPath - it - } ?: cmdclickDefaultAppDirPath - } - - private fun getFilterPrefix( - fcbMap: Map?, - ): String { - return fcbMap?.get(FileSelectEditKey.prefix.name)?.let { - QuoteTool.trimBothEdgeQuote(it) - } ?: String() - } - - private fun getFilterSuffix( - fcbMap: Map?, - ): String { - return fcbMap?.get(FileSelectEditKey.suffix.name)?.let { - QuoteTool.trimBothEdgeQuote(it) - } ?: String() - } - - private fun getSelectJsPath( - fcbMap: Map?, - ): String { - return fcbMap?.get(FileSelectEditKey.selectJs.name)?.let { - val trimType = QuoteTool.trimBothEdgeQuote(it) - if( - trimType.isEmpty() - ) return@let FilterFileType.file.name - trimType - } ?: FilterFileType.file.name - } - - private enum class FileSelectEditKey { - dirPath, - prefix, - suffix, - selectJs - } - - private enum class FilterFileType { - file, - dir, - } +// val isFile = filterType != FilterFileType.dir.name +// return when(isFile){ +// true -> { +// sortedList.filter { +// FilterPathTool.isFilterByFile( +// it, +// filterDir, +// filterPrefixListCon, +// filterSuffixListCon, +// true, +// "&" +// ) +//// it.startsWith(filterPrefixListCon) +//// && judgeBySuffix(it, filterSuffixListCon) +//// && File("$filterDir/$it").isFile +// }.map { +// "$filterDir/$it" +// } +// } +// false -> sortedList.filter { +// FilterPathTool.isFilterByDir( +// it, +// filterDir, +// filterPrefixListCon, +// filterSuffixListCon, +// true, +// "&" +// ) +//// it.startsWith(filterPrefixListCon) +//// && judgeBySuffix(it, filterSuffixListCon) +//// && File("$filterDir/$it").isDirectory +// }.map { +// "$filterDir/$it" +// } +// } +// } +// +// private fun getSelectDirPath( +// fcbMap: Map?, +//// editParameters: EditParameters, +// ): String { +//// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( +//// editParameters.fannelInfoMap +//// ) +// val cmdclickDefaultAppDirPath = UsePath.cmdclickDefaultAppDirPath +// return fcbMap?.get( +// FileSelectEditKey.dirPath.name +// )?.let { +// if ( +// it.isEmpty() +// ) return@let cmdclickDefaultAppDirPath +// it +// } ?: cmdclickDefaultAppDirPath +// } +// +// private fun getFilterPrefix( +// fcbMap: Map?, +// ): String { +// return fcbMap?.get(FileSelectEditKey.prefix.name)?.let { +// QuoteTool.trimBothEdgeQuote(it) +// } ?: String() +// } +// +// private fun getFilterSuffix( +// fcbMap: Map?, +// ): String { +// return fcbMap?.get(FileSelectEditKey.suffix.name)?.let { +// QuoteTool.trimBothEdgeQuote(it) +// } ?: String() +// } +// +// private fun getSelectJsPath( +// fcbMap: Map?, +// ): String { +// return fcbMap?.get(FileSelectEditKey.selectJs.name)?.let { +// val trimType = QuoteTool.trimBothEdgeQuote(it) +// if( +// trimType.isEmpty() +// ) return@let FilterFileType.file.name +// trimType +// } ?: FilterFileType.file.name +// } +// +// private enum class FileSelectEditKey { +// dirPath, +// prefix, +// suffix, +// selectJs +// } +// +// private enum class FilterFileType { +// file, +// dir, +// } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/FileSelectSpinnerViewProducer.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/FileSelectSpinnerViewProducer.kt index db623895b..704e0ed8e 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/FileSelectSpinnerViewProducer.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/FileSelectSpinnerViewProducer.kt @@ -1,316 +1,296 @@ package com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib -import android.content.Context -import android.view.View -import android.widget.* -import androidx.appcompat.widget.LinearLayoutCompat -import androidx.fragment.app.Fragment -import com.puutaro.commandclick.R -import com.puutaro.commandclick.common.variable.path.UsePath -import com.puutaro.commandclick.common.variable.edit.EditParameters -import com.puutaro.commandclick.common.variable.edit.SetVariableTypeColumn -import com.puutaro.commandclick.fragment_lib.edit_fragment.variable.EditTextSupportViewId -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.lib.SelectJsExecutor -import com.puutaro.commandclick.proccess.edit.lib.SpinnerInstance -import com.puutaro.commandclick.proccess.js_macro_libs.edit_setting_extra.FilterPathTool -import com.puutaro.commandclick.util.file.FileSystems -import com.puutaro.commandclick.util.map.CmdClickMap -import com.puutaro.commandclick.util.state.FannelInfoTool -import com.puutaro.commandclick.util.str.QuoteTool -import com.puutaro.commandclick.util.str.ScriptPreWordReplacer -import java.io.File - -object FileSelectSpinnerViewProducer { - - val noExtend = "NoExtend" - private val throughMark = "-" - - fun make ( - fragment: Fragment, - insertEditText: EditText, - editParameters: EditParameters, - currentComponentIndex: Int, - weight: Float, - ): Spinner { - val context = fragment.context - val currentId = editParameters.currentId -// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( -// editParameters.fannelInfoMap +//object FileSelectSpinnerViewProducer { +// +// val noExtend = "NoExtend" +// private val throughMark = "-" +// +// fun make ( +// fragment: Fragment, +// insertEditText: EditText, +// editParameters: EditParameters, +// currentComponentIndex: Int, +// weight: Float, +// ): Spinner { +// val context = fragment.context +// val currentId = editParameters.currentId +//// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( +//// editParameters.fannelInfoMap +//// ) +// +// val linearParamsForSpinner = LinearLayoutCompat.LayoutParams( +// 0, +// LinearLayoutCompat.LayoutParams.MATCH_PARENT, // ) - - val linearParamsForSpinner = LinearLayoutCompat.LayoutParams( - 0, - LinearLayoutCompat.LayoutParams.MATCH_PARENT, - ) - linearParamsForSpinner.weight = weight - val adapter = ArrayAdapter( - context as Context, - R.layout.sppinner_layout, - ) - val fcbMap = getFcbMap( - editParameters, - currentComponentIndex - ) - val filterDir = getSelectDirPath( - fcbMap, +// linearParamsForSpinner.weight = weight +// val adapter = ArrayAdapter( +// context as Context, +// R.layout.sppinner_layout, +// ) +// val fcbMap = getFcbMap( // editParameters, - ) - val filterPrefixListCon = getFilterPrefix( - fcbMap, - ) - val filterSuffixListCon = getFilterSuffix( - fcbMap, - ) - val filterType = getFilterType( - fcbMap, - ) - val selectJsPath = getSelectJsPath( - fcbMap - ) - val editableSpinnerList = makeSpinnerList( - filterDir, - filterPrefixListCon, - filterSuffixListCon, - filterType - ) - val updatedEditableSpinnerList = listOf(throughMark) + editableSpinnerList - adapter.addAll(updatedEditableSpinnerList) - - val insertSpinner = SpinnerInstance.make( - context, - updatedEditableSpinnerList, - editParameters.onFixNormalSpinner - ) - insertSpinner.id = currentId + EditTextSupportViewId.EDITABLE_SPINNER.id - insertSpinner.tag = "spinnerEdit${currentId + EditTextSupportViewId.EDITABLE_SPINNER.id}" - insertSpinner.adapter = adapter - insertSpinner.setOnTouchListener(View.OnTouchListener { - v, event -> - val currentSpinnerList = makeSpinnerList( - filterDir, - filterPrefixListCon, - filterSuffixListCon, - filterType - ) - val selectUpdatedSpinnerList = - listOf(throughMark) + currentSpinnerList - adapter.clear() - adapter.addAll(selectUpdatedSpinnerList) - adapter.notifyDataSetChanged() - insertSpinner.setSelection(0) - v.performClick() - false - }) - insertSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { - override fun onItemSelected(parent: AdapterView<*>?, view: View?, pos: Int, id: Long) { - val selectedItem = adapter.getItem(pos) - ?: return - if( - selectedItem != throughMark -// && currentAppDirPath != UsePath.cmdclickAppHistoryDirAdminPath - && File(selectedItem).isFile - ) { - FileSystems.updateLastModified( - File( - filterDir, - selectedItem - ).absolutePath - ) - } - val currentSpinnerList = makeSpinnerList( - filterDir, - filterPrefixListCon, - filterSuffixListCon, - filterType - ) - val selectUpdatedSpinnerList = if( - selectedItem == throughMark - ){ - listOf(throughMark) + currentSpinnerList - } else listOf( - throughMark, - selectedItem, - ) + currentSpinnerList.filter { - it != selectedItem - } - adapter.clear() - adapter.addAll(selectUpdatedSpinnerList) - adapter.notifyDataSetChanged() - insertSpinner.setSelection(0) - if( - selectedItem == throughMark - ) return - insertEditText.setText(selectedItem) - SelectJsExecutor.exec( - fragment, - selectJsPath, - selectedItem, - ) - } - - override fun onNothingSelected(parent: AdapterView<*>?) {} - } - insertSpinner.layoutParams = linearParamsForSpinner - return insertSpinner - } - - private fun judgeBySuffix( - targetStr: String, - filterSuffix: String, - ): Boolean{ - if(filterSuffix != noExtend) { - return QuoteTool.splitBySurroundedIgnore( - filterSuffix, - '&' - ) -// filterSuffix.split("&") - .any { - targetStr.endsWith(it) - } - } - return !Regex("\\..*$").containsMatchIn(targetStr) - } - - private fun makeSpinnerList( - filterDir: String, - filterPrefixListCon: String, - filterSuffixListCon: String, - filterType: String, - ): List { - val sortedList = FileSystems.sortedFiles( - filterDir, - "on" - ) - if ( - filterType != FilterFileType.dir.name - ) return sortedList.filter { - FilterPathTool.isFilterByFile( - it, - filterDir, - filterPrefixListCon, - filterSuffixListCon, - true, - "&" - ) -// it.startsWith(filterPrefixListCon) -// && judgeBySuffix(it, filterSuffixListCon) -// && File("$filterDir/$it").isFile - } - return sortedList.filter { - FilterPathTool.isFilterByDir( - it, - filterDir, - filterPrefixListCon, - filterSuffixListCon, - true, - "&" - ) -// it.startsWith(filterPrefixListCon) -// && judgeBySuffix(it, filterSuffixListCon) -// && File("$filterDir/$it").isDirectory - } - } - - private fun getSelectDirPath( - fcbMap: Map?, -// editParameters: EditParameters, - ): String { -// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( -// editParameters.fannelInfoMap +// currentComponentIndex // ) - val cmdclickDefaultAppDirPath = UsePath.cmdclickDefaultAppDirPath - return fcbMap?.get( - FileSelectEditKey.dirPath.name - )?.let { - if ( - it.isEmpty() - ) return@let cmdclickDefaultAppDirPath - it - } ?: cmdclickDefaultAppDirPath - } - - private fun getFilterPrefix( - fcbMap: Map?, - ): String { - return fcbMap?.get(FileSelectEditKey.prefix.name)?.let { - QuoteTool.trimBothEdgeQuote(it) - } ?: String() - } - - private fun getFilterSuffix( - fcbMap: Map?, - ): String { - return fcbMap?.get(FileSelectEditKey.suffix.name)?.let { - QuoteTool.trimBothEdgeQuote(it) - } ?: String() - } - - fun getFilterType( - fcbMap: Map?, - ): String { - return fcbMap?.get(FileSelectEditKey.type.name)?.let { - val trimType = QuoteTool.trimBothEdgeQuote(it) - if( - trimType.isEmpty() - ) return@let FilterFileType.file.name - trimType - } ?: FilterFileType.file.name - } - - private fun getSelectJsPath( - fcbMap: Map?, - ): String { - return fcbMap?.get(FileSelectEditKey.selectJs.name)?.let { - val trimType = QuoteTool.trimBothEdgeQuote(it) - if( - trimType.isEmpty() - ) return@let FilterFileType.file.name - trimType - } ?: FilterFileType.file.name - } +// val filterDir = getSelectDirPath( +// fcbMap, +//// editParameters, +// ) +// val filterPrefixListCon = getFilterPrefix( +// fcbMap, +// ) +// val filterSuffixListCon = getFilterSuffix( +// fcbMap, +// ) +// val filterType = getFilterType( +// fcbMap, +// ) +// val selectJsPath = getSelectJsPath( +// fcbMap +// ) +// val editableSpinnerList = makeSpinnerList( +// filterDir, +// filterPrefixListCon, +// filterSuffixListCon, +// filterType +// ) +// val updatedEditableSpinnerList = listOf(throughMark) + editableSpinnerList +// adapter.addAll(updatedEditableSpinnerList) +// +// val insertSpinner = SpinnerInstance.make( +// context, +// updatedEditableSpinnerList, +// editParameters.onFixNormalSpinner +// ) +// insertSpinner.id = currentId + EditTextSupportViewId.EDITABLE_SPINNER.id +// insertSpinner.tag = "spinnerEdit${currentId + EditTextSupportViewId.EDITABLE_SPINNER.id}" +// insertSpinner.adapter = adapter +// insertSpinner.setOnTouchListener(View.OnTouchListener { +// v, event -> +// val currentSpinnerList = makeSpinnerList( +// filterDir, +// filterPrefixListCon, +// filterSuffixListCon, +// filterType +// ) +// val selectUpdatedSpinnerList = +// listOf(throughMark) + currentSpinnerList +// adapter.clear() +// adapter.addAll(selectUpdatedSpinnerList) +// adapter.notifyDataSetChanged() +// insertSpinner.setSelection(0) +// v.performClick() +// false +// }) +// insertSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { +// override fun onItemSelected(parent: AdapterView<*>?, view: View?, pos: Int, id: Long) { +// val selectedItem = adapter.getItem(pos) +// ?: return +// if( +// selectedItem != throughMark +//// && currentAppDirPath != UsePath.cmdclickAppHistoryDirAdminPath +// && File(selectedItem).isFile +// ) { +// FileSystems.updateLastModified( +// File( +// filterDir, +// selectedItem +// ).absolutePath +// ) +// } +// val currentSpinnerList = makeSpinnerList( +// filterDir, +// filterPrefixListCon, +// filterSuffixListCon, +// filterType +// ) +// val selectUpdatedSpinnerList = if( +// selectedItem == throughMark +// ){ +// listOf(throughMark) + currentSpinnerList +// } else listOf( +// throughMark, +// selectedItem, +// ) + currentSpinnerList.filter { +// it != selectedItem +// } +// adapter.clear() +// adapter.addAll(selectUpdatedSpinnerList) +// adapter.notifyDataSetChanged() +// insertSpinner.setSelection(0) +// if( +// selectedItem == throughMark +// ) return +// insertEditText.setText(selectedItem) +// SelectJsExecutor.exec( +// fragment, +// selectJsPath, +// selectedItem, +// ) +// } +// +// override fun onNothingSelected(parent: AdapterView<*>?) {} +// } +// insertSpinner.layoutParams = linearParamsForSpinner +// return insertSpinner +// } +// +// private fun judgeBySuffix( +// targetStr: String, +// filterSuffix: String, +// ): Boolean{ +// if(filterSuffix != noExtend) { +// return QuoteTool.splitBySurroundedIgnore( +// filterSuffix, +// '&' +// ) +//// filterSuffix.split("&") +// .any { +// targetStr.endsWith(it) +// } +// } +// return !Regex("\\..*$").containsMatchIn(targetStr) +// } +// +// private fun makeSpinnerList( +// filterDir: String, +// filterPrefixListCon: String, +// filterSuffixListCon: String, +// filterType: String, +// ): List { +// val sortedList = FileSystems.sortedFiles( +// filterDir, +// "on" +// ) +// if ( +// filterType != FilterFileType.dir.name +// ) return sortedList.filter { +// FilterPathTool.isFilterByFile( +// it, +// filterDir, +// filterPrefixListCon, +// filterSuffixListCon, +// true, +// "&" +// ) +//// it.startsWith(filterPrefixListCon) +//// && judgeBySuffix(it, filterSuffixListCon) +//// && File("$filterDir/$it").isFile +// } +// return sortedList.filter { +// FilterPathTool.isFilterByDir( +// it, +// filterDir, +// filterPrefixListCon, +// filterSuffixListCon, +// true, +// "&" +// ) +//// it.startsWith(filterPrefixListCon) +//// && judgeBySuffix(it, filterSuffixListCon) +//// && File("$filterDir/$it").isDirectory +// } +// } +// +// private fun getSelectDirPath( +// fcbMap: Map?, +//// editParameters: EditParameters, +// ): String { +//// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( +//// editParameters.fannelInfoMap +//// ) +// val cmdclickDefaultAppDirPath = UsePath.cmdclickDefaultAppDirPath +// return fcbMap?.get( +// FileSelectEditKey.dirPath.name +// )?.let { +// if ( +// it.isEmpty() +// ) return@let cmdclickDefaultAppDirPath +// it +// } ?: cmdclickDefaultAppDirPath +// } +// +// private fun getFilterPrefix( +// fcbMap: Map?, +// ): String { +// return fcbMap?.get(FileSelectEditKey.prefix.name)?.let { +// QuoteTool.trimBothEdgeQuote(it) +// } ?: String() +// } +// +// private fun getFilterSuffix( +// fcbMap: Map?, +// ): String { +// return fcbMap?.get(FileSelectEditKey.suffix.name)?.let { +// QuoteTool.trimBothEdgeQuote(it) +// } ?: String() +// } +// +// fun getFilterType( +// fcbMap: Map?, +// ): String { +// return fcbMap?.get(FileSelectEditKey.type.name)?.let { +// val trimType = QuoteTool.trimBothEdgeQuote(it) +// if( +// trimType.isEmpty() +// ) return@let FilterFileType.file.name +// trimType +// } ?: FilterFileType.file.name +// } +// +// private fun getSelectJsPath( +// fcbMap: Map?, +// ): String { +// return fcbMap?.get(FileSelectEditKey.selectJs.name)?.let { +// val trimType = QuoteTool.trimBothEdgeQuote(it) +// if( +// trimType.isEmpty() +// ) return@let FilterFileType.file.name +// trimType +// } ?: FilterFileType.file.name +// } - fun getFcbMap( - editParameters: EditParameters, - currentComponentIndex: Int - ): Map? { - val currentSetVariableMap = editParameters.setVariableMap - val fannelInfoMap = editParameters.fannelInfoMap -// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( +// fun getFcbMap( +// editParameters: EditParameters, +// currentComponentIndex: Int +// ): Map? { +// val currentSetVariableMap = editParameters.setVariableMap +// val fannelInfoMap = editParameters.fannelInfoMap +//// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( +//// fannelInfoMap +//// ) +// val currentScriptName = FannelInfoTool.getCurrentFannelName( // fannelInfoMap // ) - val currentScriptName = FannelInfoTool.getCurrentFannelName( - fannelInfoMap - ) - return currentSetVariableMap?.get( - SetVariableTypeColumn.VARIABLE_TYPE_VALUE.name - )?.split('|') - ?.getOrNull(currentComponentIndex) - ?.let { - ScriptPreWordReplacer.replace( - it, -// currentAppDirPath, - currentScriptName - ) - }?.let{ - CmdClickMap.createMap( - it, - '?' - ) - }?.toMap() - } - - private enum class FileSelectEditKey { - dirPath, - prefix, - suffix, - type, - selectJs - } +// return currentSetVariableMap?.get( +// SetVariableTypeColumn.VARIABLE_TYPE_VALUE.name +// )?.split('|') +// ?.getOrNull(currentComponentIndex) +// ?.let { +// ScriptPreWordReplacer.replace( +// it, +//// currentAppDirPath, +// currentScriptName +// ) +// }?.let{ +// CmdClickMap.createMap( +// it, +// '?' +// ) +// }?.toMap() +// } - private enum class FilterFileType { - file, - dir, - } -} +// private enum class FileSelectEditKey { +// dirPath, +// prefix, +// suffix, +// type, +// selectJs +// } +// +// private enum class FilterFileType { +// file, +// dir, +// } +//} diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/FormDialogForListIndexOrButton.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/FormDialogForListIndexOrButton.kt index c0fbb9f24..7877861af 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/FormDialogForListIndexOrButton.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/FormDialogForListIndexOrButton.kt @@ -3,7 +3,6 @@ package com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib import android.app.Dialog import android.view.Gravity import android.view.ViewGroup -import android.widget.TextView import androidx.appcompat.widget.AppCompatImageButton import androidx.appcompat.widget.AppCompatTextView import androidx.appcompat.widget.LinearLayoutCompat @@ -12,15 +11,10 @@ import androidx.fragment.app.activityViewModels import com.puutaro.commandclick.common.variable.variables.CommandClickScriptVariable import com.puutaro.commandclick.common.variable.settings.FannelInfoSetting import com.puutaro.commandclick.common.variable.edit.EditParameters -import com.puutaro.commandclick.common.variable.edit.RecordNumToMapNameValueInHolderColumn.* -import com.puutaro.commandclick.common.variable.edit.SetVariableTypeColumn -import com.puutaro.commandclick.common.variable.edit.TypeVariable import com.puutaro.commandclick.fragment.EditFragment -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.WithEditComponentForListIndex import com.puutaro.commandclick.proccess.edit.lib.ListSettingVariableListMaker import com.puutaro.commandclick.proccess.edit.lib.ScriptContentsLister import com.puutaro.commandclick.proccess.edit.lib.SetReplaceVariabler -import com.puutaro.commandclick.proccess.edit.lib.SetVariableTyper import com.puutaro.commandclick.util.CommandClickVariables import com.puutaro.commandclick.util.file.FileSystems import com.puutaro.commandclick.util.file.ReadText @@ -40,7 +34,7 @@ object FormDialogForListIndexOrButton { private var returnValue = String() private val exitTextStartId = 110000 - private val variableTypeDefineListForMiniEdit = TypeVariable.variableTypeDefineListForMiniEdit +// private val variableTypeDefineListForMiniEdit = TypeVariable.variableTypeDefineListForMiniEdit // private val languageType = // LanguageTypeSelects.JAVA_SCRIPT @@ -84,285 +78,285 @@ object FormDialogForListIndexOrButton { ).absolutePath, ).textToList() terminalViewModel.onDialog = true - CoroutineScope(Dispatchers.Main).launch { - withContext(Dispatchers.Main) { - execCreate( - editFragment, - title, - parentDirPath, - selectedScriptName, - scriptContents, - onSetting - ) - } - withContext(Dispatchers.IO) { - for(i in 1..6000) { - delay(100) - if (!terminalViewModel.onDialog) break - } - } - } +// CoroutineScope(Dispatchers.Main).launch { +// withContext(Dispatchers.Main) { +// execCreate( +// editFragment, +// title, +// parentDirPath, +// selectedScriptName, +// scriptContents, +// onSetting +// ) +// } +// withContext(Dispatchers.IO) { +// for(i in 1..6000) { +// delay(100) +// if (!terminalViewModel.onDialog) break +// } +// } +// } } - private fun execCreate( - editFragment: EditFragment, - title: String, - parentDirPath: String, - selectedScriptName: String, - scriptContentsList: List, - onSetting: String - ) { - val context = editFragment.context - val terminalViewModel: TerminalViewModel by editFragment.activityViewModels() - if( - context == null - ) { - terminalViewModel.onDialog = false - returnValue = String() - return - } - - formDialog = Dialog( - context - ) - formDialog?.setContentView( - com.puutaro.commandclick.R.layout.form_dialog_laytout - ) - val confirmTitleTextView = - formDialog?.findViewById( - com.puutaro.commandclick.R.id.form_dialog_title - ) - if( - title.isNotEmpty() - ) confirmTitleTextView?.text = title - else confirmTitleTextView?.isVisible = false - val linearLayout = - formDialog?.findViewById( - com.puutaro.commandclick.R.id.form_dialog_contents_linear - ) ?: return - - - val virtualReadPreffrenceMap = mapOf( -// FannelInfoSetting.current_app_dir.name -// to parentDirPath, - FannelInfoSetting.current_fannel_name.name - to selectedScriptName - ) - - val recordNumToMapNameValueInCommandHolder = - RecordNumToMapNameValueInHolder.parse( - scriptContentsList, - commandSectionStart, - commandSectionEnd, - ) - val recordNumToMapNameValueInSettingHolder = - RecordNumToMapNameValueInHolder.parse( - scriptContentsList, - settingSectionStart, - settingSectionEnd, - true, - ) - val recordNumToSetVariableMaps = if( - onSetting.isEmpty() - ) { - val setVariableForCmdHolder = SetVariableTyper.makeSetVariableTypeList( - recordNumToMapNameValueInSettingHolder, -// parentDirPath, - selectedScriptName, - editFragment.setReplaceVariableMap - ) - SetVariableTyper.makeRecordNumToSetVariableMaps( - editFragment, - setVariableForCmdHolder, - recordNumToMapNameValueInCommandHolder, - null, - editFragment.busyboxExecutor, - ) - } else { - SetVariableTyper.makeRecordNumToSetVariableMaps( - editFragment, - CommandClickScriptVariable.setVariableForSettingHolder, - recordNumToMapNameValueInSettingHolder, - null, - editFragment.busyboxExecutor, - ) - } +// private fun execCreate( +// editFragment: EditFragment, +// title: String, +// parentDirPath: String, +// selectedScriptName: String, +// scriptContentsList: List, +// onSetting: String +// ) { +// val context = editFragment.context +// val terminalViewModel: TerminalViewModel by editFragment.activityViewModels() +// if( +// context == null +// ) { +// terminalViewModel.onDialog = false +// returnValue = String() +// return +// } +// +// formDialog = Dialog( +// context +// ) +// formDialog?.setContentView( +// com.puutaro.commandclick.R.layout.form_dialog_laytout +// ) +// val confirmTitleTextView = +// formDialog?.findViewById( +// com.puutaro.commandclick.R.id.form_dialog_title +// ) +// if( +// title.isNotEmpty() +// ) confirmTitleTextView?.text = title +// else confirmTitleTextView?.isVisible = false +// val linearLayout = +// formDialog?.findViewById( +// com.puutaro.commandclick.R.id.form_dialog_contents_linear +// ) ?: return +// +// +// val virtualReadPreffrenceMap = mapOf( +//// FannelInfoSetting.current_app_dir.name +//// to parentDirPath, +// FannelInfoSetting.current_fannel_name.name +// to selectedScriptName +// ) +// +// val recordNumToMapNameValueInCommandHolder = +// RecordNumToMapNameValueInHolder.parse( +// scriptContentsList, +// commandSectionStart, +// commandSectionEnd, +// ) +// val recordNumToMapNameValueInSettingHolder = +// RecordNumToMapNameValueInHolder.parse( +// scriptContentsList, +// settingSectionStart, +// settingSectionEnd, +// true, +// ) +//// val recordNumToSetVariableMaps = if( +//// onSetting.isEmpty() +//// ) { +//// val setVariableForCmdHolder = SetVariableTyper.makeSetVariableTypeList( +//// recordNumToMapNameValueInSettingHolder, +////// parentDirPath, +//// selectedScriptName, +//// editFragment.setReplaceVariableMap +//// ) +//// SetVariableTyper.makeRecordNumToSetVariableMaps( +//// editFragment, +//// setVariableForCmdHolder, +//// recordNumToMapNameValueInCommandHolder, +//// null, +//// editFragment.busyboxExecutor, +//// ) +//// } else { +//// SetVariableTyper.makeRecordNumToSetVariableMaps( +//// editFragment, +//// CommandClickScriptVariable.setVariableForSettingHolder, +//// recordNumToMapNameValueInSettingHolder, +//// null, +//// editFragment.busyboxExecutor, +//// ) +//// } +// +// val settingVariableList = CommandClickVariables.extractValListFromHolder( +// scriptContentsList, +// settingSectionStart, +// settingSectionEnd +// ) +// val setReplaceVariableMap = if( +// onSetting.isEmpty() +// ) { +// SetReplaceVariabler.makeSetReplaceVariableMap( +// context, +// settingVariableList, +//// parentDirPath, +// selectedScriptName, +// ) +// } else { +// mapOf() +// } +// +// val editParameters = if( +// onSetting.isEmpty() +// ) { +// EditParameters( +//// editFragment, +// scriptContentsList, +// recordNumToMapNameValueInCommandHolder, +// recordNumToMapNameValueInSettingHolder, +// virtualReadPreffrenceMap, +// setReplaceVariableMap, +// true, +// emptyList() +// ) +// } else { +// val hideSettingVariableList = ListSettingVariableListMaker.makeFromSettingVariableList( +// CommandClickScriptVariable.HIDE_SETTING_VARIABLES, +// virtualReadPreffrenceMap, +// editFragment.setReplaceVariableMap, +// settingVariableList, +// ) +// EditParameters( +//// editFragment, +// scriptContentsList, +// recordNumToMapNameValueInSettingHolder, +// null, +// virtualReadPreffrenceMap, +// setReplaceVariableMap, +// true, +// hideSettingVariableList +// ) +// } +// +//// execFormPartsAdd( +//// editFragment, +//// editParameters, +//// recordNumToSetVariableMaps, +//// exitTextStartId, +//// linearLayout +//// ) +// terminalViewModel.onDialog = true +// returnValue = String() +// +// val confirmCancelButton = +// formDialog?.findViewById( +// com.puutaro.commandclick.R.id.form_dialog_cancel +// ) +// confirmCancelButton?.setOnClickListener { +// terminalViewModel.onDialog = false +// returnValue = String() +// formDialog?.dismiss() +// formDialog = null +// } +// val confirmOkButton = +// formDialog?.findViewById( +// com.puutaro.commandclick.R.id.form_dialog_ok +// ) +// confirmOkButton?.setOnClickListener { +// formDialog?.dismiss() +// formDialog = null +// val recordNumToMapNameValueInHolder = if( +// onSetting.isEmpty() +// ) recordNumToMapNameValueInCommandHolder +// else recordNumToMapNameValueInSettingHolder +// val updateVirtualJsContentsList = if( +// recordNumToMapNameValueInHolder.isNullOrEmpty() +// ) scriptContentsList +// else { +//// ScriptContentsLister.update( +// listOf(linearLayout), +// recordNumToMapNameValueInHolder, +// scriptContentsList, +// exitTextStartId +// ) +// } +// FileSystems.writeFile( +// File( +// parentDirPath, +// selectedScriptName +// ).absolutePath, +// updateVirtualJsContentsList.joinToString("\n") +// ) +// terminalViewModel.onDialog = false +// } +// +// formDialog?.setOnCancelListener { +// terminalViewModel.onDialog = false +// returnValue = String() +// formDialog?.dismiss() +// formDialog = null +// } +// formDialog?.window?.setLayout( +// ViewGroup.LayoutParams.MATCH_PARENT, +// ViewGroup.LayoutParams.WRAP_CONTENT +// ) +// formDialog?.window?.setGravity( +// Gravity.BOTTOM +// ) +// formDialog?.show() +// } - val settingVariableList = CommandClickVariables.extractValListFromHolder( - scriptContentsList, - settingSectionStart, - settingSectionEnd - ) - val setReplaceVariableMap = if( - onSetting.isEmpty() - ) { - SetReplaceVariabler.makeSetReplaceVariableMap( - context, - settingVariableList, -// parentDirPath, - selectedScriptName, - ) - } else { - mapOf() - } - val editParameters = if( - onSetting.isEmpty() - ) { - EditParameters( -// editFragment, - scriptContentsList, - recordNumToMapNameValueInCommandHolder, - recordNumToMapNameValueInSettingHolder, - virtualReadPreffrenceMap, - setReplaceVariableMap, - true, - emptyList() - ) - } else { - val hideSettingVariableList = ListSettingVariableListMaker.makeFromSettingVariableList( - CommandClickScriptVariable.HIDE_SETTING_VARIABLES, - virtualReadPreffrenceMap, - editFragment.setReplaceVariableMap, - settingVariableList, - ) - EditParameters( +// private fun execFormPartsAdd( +// editFragment: EditFragment, +// editParameters: EditParameters, +// recordNumToSetVariableMaps: Map?>?, +// editTextStartId: Int, +// linearLayout: LinearLayoutCompat +// ){ +// val recordNumToNameToValueInHolderSize = +// editParameters.recordNumToMapNameValueInCommandHolder?.size ?: return +// (1..recordNumToNameToValueInHolderSize).forEach { seedNum -> +// val linearParams = LinearLayoutCompat.LayoutParams( +// ViewGroup.LayoutParams.MATCH_PARENT, +// ViewGroup.LayoutParams.WRAP_CONTENT, +// ) +// val currentOrder = seedNum - 1 +// val currentRecordNumToMapNameValueInHolder = +// editParameters.recordNumToMapNameValueInCommandHolder.entries.elementAt( +// currentOrder +// ) +// val currentRecordNumToNameToValueInHolder = +// currentRecordNumToMapNameValueInHolder.value +// val context = editFragment.context +// val insertTextView = TextView(context) +// val currentVariableName = currentRecordNumToNameToValueInHolder?.get( +// VARIABLE_NAME.name +// ) +// val currentVariableValue = currentRecordNumToNameToValueInHolder?.get( +// VARIABLE_VALUE.name +// ) +// val currentId = editTextStartId + currentOrder +// insertTextView.text = currentVariableName +// linearParams.weight = 1F +// insertTextView.layoutParams = linearParams +// linearLayout.addView(insertTextView) +// val currentRecordNum = +// currentRecordNumToMapNameValueInHolder.key +// editParameters.currentId = currentId +// editParameters.currentVariableName = currentVariableName +// editParameters.currentVariableValue = currentVariableValue +// editParameters.setVariableMap = recordNumToSetVariableMaps?.get( +// currentRecordNum +// ) +// val variableTypeList = editParameters.setVariableMap?.get( +// SetVariableTypeColumn.VARIABLE_TYPE.name +// )?.split(":")?.filter { +// variableTypeDefineListForMiniEdit.contains(it) +// } ?: emptyList() +// editParameters.variableTypeList = variableTypeList +// +// val horizontalLinearLayout = WithEditComponentForListIndex.insert( // editFragment, - scriptContentsList, - recordNumToMapNameValueInSettingHolder, - null, - virtualReadPreffrenceMap, - setReplaceVariableMap, - true, - hideSettingVariableList - ) - } - - execFormPartsAdd( - editFragment, - editParameters, - recordNumToSetVariableMaps, - exitTextStartId, - linearLayout - ) - terminalViewModel.onDialog = true - returnValue = String() - - val confirmCancelButton = - formDialog?.findViewById( - com.puutaro.commandclick.R.id.form_dialog_cancel - ) - confirmCancelButton?.setOnClickListener { - terminalViewModel.onDialog = false - returnValue = String() - formDialog?.dismiss() - formDialog = null - } - val confirmOkButton = - formDialog?.findViewById( - com.puutaro.commandclick.R.id.form_dialog_ok - ) - confirmOkButton?.setOnClickListener { - formDialog?.dismiss() - formDialog = null - val recordNumToMapNameValueInHolder = if( - onSetting.isEmpty() - ) recordNumToMapNameValueInCommandHolder - else recordNumToMapNameValueInSettingHolder - val updateVirtualJsContentsList = if( - recordNumToMapNameValueInHolder.isNullOrEmpty() - ) scriptContentsList - else { - ScriptContentsLister.update( - listOf(linearLayout), - recordNumToMapNameValueInHolder, - scriptContentsList, - exitTextStartId - ) - } - FileSystems.writeFile( - File( - parentDirPath, - selectedScriptName - ).absolutePath, - updateVirtualJsContentsList.joinToString("\n") - ) - terminalViewModel.onDialog = false - } - - formDialog?.setOnCancelListener { - terminalViewModel.onDialog = false - returnValue = String() - formDialog?.dismiss() - formDialog = null - } - formDialog?.window?.setLayout( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.WRAP_CONTENT - ) - formDialog?.window?.setGravity( - Gravity.BOTTOM - ) - formDialog?.show() - } - - - private fun execFormPartsAdd( - editFragment: EditFragment, - editParameters: EditParameters, - recordNumToSetVariableMaps: Map?>?, - editTextStartId: Int, - linearLayout: LinearLayoutCompat - ){ - val recordNumToNameToValueInHolderSize = - editParameters.recordNumToMapNameValueInCommandHolder?.size ?: return - (1..recordNumToNameToValueInHolderSize).forEach { seedNum -> - val linearParams = LinearLayoutCompat.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.WRAP_CONTENT, - ) - val currentOrder = seedNum - 1 - val currentRecordNumToMapNameValueInHolder = - editParameters.recordNumToMapNameValueInCommandHolder.entries.elementAt( - currentOrder - ) - val currentRecordNumToNameToValueInHolder = - currentRecordNumToMapNameValueInHolder.value - val context = editFragment.context - val insertTextView = TextView(context) - val currentVariableName = currentRecordNumToNameToValueInHolder?.get( - VARIABLE_NAME.name - ) - val currentVariableValue = currentRecordNumToNameToValueInHolder?.get( - VARIABLE_VALUE.name - ) - val currentId = editTextStartId + currentOrder - insertTextView.text = currentVariableName - linearParams.weight = 1F - insertTextView.layoutParams = linearParams - linearLayout.addView(insertTextView) - val currentRecordNum = - currentRecordNumToMapNameValueInHolder.key - editParameters.currentId = currentId - editParameters.currentVariableName = currentVariableName - editParameters.currentVariableValue = currentVariableValue - editParameters.setVariableMap = recordNumToSetVariableMaps?.get( - currentRecordNum - ) - val variableTypeList = editParameters.setVariableMap?.get( - SetVariableTypeColumn.VARIABLE_TYPE.name - )?.split(":")?.filter { - variableTypeDefineListForMiniEdit.contains(it) - } ?: emptyList() - editParameters.variableTypeList = variableTypeList - - val horizontalLinearLayout = WithEditComponentForListIndex.insert( - editFragment, - insertTextView, - editParameters, - ) - linearLayout.addView(horizontalLinearLayout) - } - } +// insertTextView, +// editParameters, +// ) +// linearLayout.addView(horizontalLinearLayout) +// } +// } } diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/InDeCrementerViewProducer.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/InDeCrementerViewProducer.kt index b54937392..b380d42fd 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/InDeCrementerViewProducer.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/InDeCrementerViewProducer.kt @@ -19,191 +19,191 @@ import kotlinx.coroutines.* import java.lang.Runnable object InDeCrementerViewProducer { - fun make( - fragment: Fragment, - insertEditText: EditText, - editParameters: EditParameters, - currentComponentIndex: Int, - weight: Float, - onIncrement: Boolean = true, - ): Button { - val context = fragment.context - val variableTypeValue = editParameters.setVariableMap?.get( - SetVariableTypeColumn.VARIABLE_TYPE_VALUE.name - ) - val numEntityMap = makeNumEntityMap( - variableTypeValue, - currentComponentIndex - ) - - val initMinNum = -1000000 - val initMaxNum = 1000000 - val initStepNum = 1 - - val minNum = stringToInt( - numEntityMap.get(numEntityMapColumn.MIN_NUM.name), - initMinNum - ) - val maxNum = stringToInt( - numEntityMap.get(numEntityMapColumn.MAX_NUM.name), - initMaxNum - ) - val incrementStepNum = stringToInt( - numEntityMap.get(numEntityMapColumn.STEP_NUM.name), - initStepNum - ) - - var incrementNum = incrementStepNum - - fun execIncDec(){ - val currentNumber = stringToInt( - insertEditText.text.toString() - ) - val crementedNumber = if (onIncrement) { - currentNumber + incrementNum - } else { - currentNumber - incrementNum - } - val filterdIncrementNumber = if(minNum > crementedNumber){ - minNum - } else if (crementedNumber > maxNum){ - maxNum - } else { - crementedNumber - } - insertEditText.setText(filterdIncrementNumber.toString()) - } - - fun inDeCrementRunner( - ): Runnable { - return kotlinx.coroutines.Runnable { - execIncDec() - } - } - - val insertButtonView = Button(context) - if (onIncrement) { - insertButtonView.text = "+" - } else { - insertButtonView.text = "-" - } - ButtonSetter.set( - context, - insertButtonView, - mapOf() - ) - - - - var job: Job? = null - with(insertButtonView) { - - setOnTouchListener(View.OnTouchListener { v, event -> - val crementHandler = Handler(Looper.getMainLooper()) - val crementRunner = inDeCrementRunner() - when (event.action) { - MotionEvent.ACTION_DOWN -> { - job = CoroutineScope(Dispatchers.IO).launch { - var roopTimes = 1 - var delayTime = 150L - incrementNum = incrementStepNum - while (true) { - incrementNum = roopTimes / 10 + incrementStepNum - crementHandler.post( - crementRunner - ) - withContext(Dispatchers.IO){ - if( - roopTimes == 1 - ) delay(300) - else delay(delayTime) - } - roopTimes++ - if(delayTime <= 100L) continue - delayTime -= roopTimes - } - } - } - MotionEvent.ACTION_CANCEL, - MotionEvent.ACTION_UP -> { - v.performClick() - job?.cancel() - crementHandler.removeCallbacksAndMessages(crementRunner); - } - - } - true - }) - } - val insertButtonViewParam = LinearLayoutCompat.LayoutParams( - 0, - LinearLayoutCompat.LayoutParams.MATCH_PARENT, - ) - insertButtonViewParam.weight = weight - insertButtonView.layoutParams = insertButtonViewParam - return insertButtonView - } - - fun makeNumEntityMap ( - variableTypeValue: String?, - currentComponentIndex: Int - ): Map{ - val variableValueList = variableTypeValue?.split('|') - ?.getOrNull(currentComponentIndex) - ?.split('?') - val minMaxElement = variableValueList?.firstOrNull { - it.contains("..") - } - val minMaxElementIndex = variableValueList?.indexOf(minMaxElement) - val minMaxElementList = minMaxElement?.split("..") - return mapOf( - numEntityMapColumn.INIT_NUM.name to if( - minMaxElementIndex == null || minMaxElementIndex <= 0 - ){ - null - } else { - checkIntHowString( - variableValueList.getOrNull(minMaxElementIndex - 1) - ) - }, - numEntityMapColumn.MIN_NUM.name to checkIntHowString( - minMaxElementList?.getOrNull(numEntityMapColumn.MIN_NUM.order) - ), - numEntityMapColumn.MAX_NUM.name to checkIntHowString( - minMaxElementList?.getOrNull(numEntityMapColumn.MAX_NUM.order), - ), - numEntityMapColumn.STEP_NUM.name to if( - minMaxElementIndex == null || minMaxElementIndex == -1 - ){ - null - } else { - checkIntHowString( - variableValueList.getOrNull(minMaxElementIndex + 1) - ) - }, - ) - } - - fun stringToInt( - str: String?, - initNum: Int = 0 - ): Int { - return try { - str?.toInt() ?: initNum - } catch (e :Exception) { - initNum - } - } - - private fun checkIntHowString ( - str: String? - ): String? { - return try { - str?.toInt().toString() - } catch (e: Exception){ - null - } - } +// fun make( +// fragment: Fragment, +// insertEditText: EditText, +// editParameters: EditParameters, +// currentComponentIndex: Int, +// weight: Float, +// onIncrement: Boolean = true, +// ): Button { +// val context = fragment.context +// val variableTypeValue = editParameters.setVariableMap?.get( +// SetVariableTypeColumn.VARIABLE_TYPE_VALUE.name +// ) +// val numEntityMap = makeNumEntityMap( +// variableTypeValue, +// currentComponentIndex +// ) +// +// val initMinNum = -1000000 +// val initMaxNum = 1000000 +// val initStepNum = 1 +// +// val minNum = stringToInt( +// numEntityMap.get(numEntityMapColumn.MIN_NUM.name), +// initMinNum +// ) +// val maxNum = stringToInt( +// numEntityMap.get(numEntityMapColumn.MAX_NUM.name), +// initMaxNum +// ) +// val incrementStepNum = stringToInt( +// numEntityMap.get(numEntityMapColumn.STEP_NUM.name), +// initStepNum +// ) +// +// var incrementNum = incrementStepNum +// +// fun execIncDec(){ +// val currentNumber = stringToInt( +// insertEditText.text.toString() +// ) +// val crementedNumber = if (onIncrement) { +// currentNumber + incrementNum +// } else { +// currentNumber - incrementNum +// } +// val filterdIncrementNumber = if(minNum > crementedNumber){ +// minNum +// } else if (crementedNumber > maxNum){ +// maxNum +// } else { +// crementedNumber +// } +// insertEditText.setText(filterdIncrementNumber.toString()) +// } +// +// fun inDeCrementRunner( +// ): Runnable { +// return kotlinx.coroutines.Runnable { +// execIncDec() +// } +// } +// +// val insertButtonView = Button(context) +// if (onIncrement) { +// insertButtonView.text = "+" +// } else { +// insertButtonView.text = "-" +// } +// ButtonSetter.set( +// context, +// insertButtonView, +// mapOf() +// ) +// +// +// +// var job: Job? = null +// with(insertButtonView) { +// +// setOnTouchListener(View.OnTouchListener { v, event -> +// val crementHandler = Handler(Looper.getMainLooper()) +// val crementRunner = inDeCrementRunner() +// when (event.action) { +// MotionEvent.ACTION_DOWN -> { +// job = CoroutineScope(Dispatchers.IO).launch { +// var roopTimes = 1 +// var delayTime = 150L +// incrementNum = incrementStepNum +// while (true) { +// incrementNum = roopTimes / 10 + incrementStepNum +// crementHandler.post( +// crementRunner +// ) +// withContext(Dispatchers.IO){ +// if( +// roopTimes == 1 +// ) delay(300) +// else delay(delayTime) +// } +// roopTimes++ +// if(delayTime <= 100L) continue +// delayTime -= roopTimes +// } +// } +// } +// MotionEvent.ACTION_CANCEL, +// MotionEvent.ACTION_UP -> { +// v.performClick() +// job?.cancel() +// crementHandler.removeCallbacksAndMessages(crementRunner); +// } +// +// } +// true +// }) +// } +// val insertButtonViewParam = LinearLayoutCompat.LayoutParams( +// 0, +// LinearLayoutCompat.LayoutParams.MATCH_PARENT, +// ) +// insertButtonViewParam.weight = weight +// insertButtonView.layoutParams = insertButtonViewParam +// return insertButtonView +// } +// +// fun makeNumEntityMap ( +// variableTypeValue: String?, +// currentComponentIndex: Int +// ): Map{ +// val variableValueList = variableTypeValue?.split('|') +// ?.getOrNull(currentComponentIndex) +// ?.split('?') +// val minMaxElement = variableValueList?.firstOrNull { +// it.contains("..") +// } +// val minMaxElementIndex = variableValueList?.indexOf(minMaxElement) +// val minMaxElementList = minMaxElement?.split("..") +// return mapOf( +// numEntityMapColumn.INIT_NUM.name to if( +// minMaxElementIndex == null || minMaxElementIndex <= 0 +// ){ +// null +// } else { +// checkIntHowString( +// variableValueList.getOrNull(minMaxElementIndex - 1) +// ) +// }, +// numEntityMapColumn.MIN_NUM.name to checkIntHowString( +// minMaxElementList?.getOrNull(numEntityMapColumn.MIN_NUM.order) +// ), +// numEntityMapColumn.MAX_NUM.name to checkIntHowString( +// minMaxElementList?.getOrNull(numEntityMapColumn.MAX_NUM.order), +// ), +// numEntityMapColumn.STEP_NUM.name to if( +// minMaxElementIndex == null || minMaxElementIndex == -1 +// ){ +// null +// } else { +// checkIntHowString( +// variableValueList.getOrNull(minMaxElementIndex + 1) +// ) +// }, +// ) +// } +// +// fun stringToInt( +// str: String?, +// initNum: Int = 0 +// ): Int { +// return try { +// str?.toInt() ?: initNum +// } catch (e :Exception) { +// initNum +// } +// } +// +// private fun checkIntHowString ( +// str: String? +// ): String? { +// return try { +// str?.toInt().toString() +// } catch (e: Exception){ +// null +// } +// } } enum class numEntityMapColumn( diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/ListContentsSelectSpinnerViewProducer.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/ListContentsSelectSpinnerViewProducer.kt index 28fa0ea31..f39648a50 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/ListContentsSelectSpinnerViewProducer.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/ListContentsSelectSpinnerViewProducer.kt @@ -25,234 +25,234 @@ import com.puutaro.commandclick.util.str.ScriptPreWordReplacer import java.io.File object ListContentsSelectSpinnerViewProducer { - fun make ( - fragment: Fragment, - insertEditText: EditText, - editParameters: EditParameters, - currentComponentIndex: Int, - weight: Float, - ): Spinner { - val defaultListLimit = 100 - val context = fragment.context - val currentId = editParameters.currentId - val fannelInfoMap = editParameters.fannelInfoMap -// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( +// fun make ( +// fragment: Fragment, +// insertEditText: EditText, +// editParameters: EditParameters, +// currentComponentIndex: Int, +// weight: Float, +// ): Spinner { +// val defaultListLimit = 100 +// val context = fragment.context +// val currentId = editParameters.currentId +// val fannelInfoMap = editParameters.fannelInfoMap +//// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( +//// fannelInfoMap +//// ) +// val scriptName = FannelInfoTool.getCurrentFannelName( // fannelInfoMap // ) - val scriptName = FannelInfoTool.getCurrentFannelName( - fannelInfoMap - ) - val linearParamsForSpinner = LinearLayoutCompat.LayoutParams( - 0, - LinearLayoutCompat.LayoutParams.MATCH_PARENT, - ) - linearParamsForSpinner.weight = weight - - val elcbMap = getElsbMap( - editParameters, - currentComponentIndex - ) - when(fragment){ - is EditFragment -> fragment.listConSelectBoxMapList.add(elcbMap) - } - val listContentsFilePath = elcbMap?.get(ListContentsEditKey.listPath.name) ?: String() - val listLimit = getLimitNum( - elcbMap, - defaultListLimit, - ) - execCompList( - editParameters, - elcbMap, - listContentsFilePath, - ) - - val selectJsPath = getSelectJsPath( - elcbMap, -// currentAppDirPath, - scriptName - ) - - val fileObj = File(listContentsFilePath) - val parentDir = fileObj.parent ?: String() - FileSystems.createDirs(parentDir) - val editableSpinnerList = ReadText( - listContentsFilePath - ).textToList().filter { - it.trim().isNotEmpty() - } - - val insertSpinner = SpinnerInstance.make( - context, - editableSpinnerList, - editParameters.onFixNormalSpinner - ) - insertSpinner.id = currentId + EditTextSupportViewId.EDITABLE_SPINNER.id - insertSpinner.tag = "spinnerEdit${currentId + EditTextSupportViewId.EDITABLE_SPINNER.id}" - val adapter = ArrayAdapter( - context as Context, - R.layout.sppinner_layout, - ) - - adapter.addAll(editableSpinnerList) - insertSpinner.adapter = adapter - insertSpinner.setOnTouchListener(View.OnTouchListener { - v, event -> - val currentEditableSpinnerList = ReadText( - listContentsFilePath - ).textToList().filter { - it.trim().isNotEmpty() - } - val arrayAdapter = insertSpinner.adapter as ArrayAdapter - arrayAdapter.clear() - arrayAdapter.addAll(currentEditableSpinnerList) - adapter.notifyDataSetChanged() - insertSpinner.setSelection(0) - v.performClick() - true - }) - insertSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { - override fun onItemSelected(parent: AdapterView<*>?, view: View?, pos: Int, id: Long) { - val selectedItem = adapter.getItem(pos) - ?: return - val currentSpinnerList = ReadText( - listContentsFilePath - ).textToList().filter { - it.trim().isNotEmpty() - } - val updateListContents = listOf(selectedItem) + currentSpinnerList.filter { - it != selectedItem - } - FileSystems.writeFile( - listContentsFilePath, - updateListContents - .take(listLimit) - .joinToString("\n") - ) - val selectUpdatedSpinnerList = listOf( - selectedItem, - ) + currentSpinnerList.filter { - it != selectedItem - } - adapter.clear() - adapter.addAll(selectUpdatedSpinnerList) - adapter.notifyDataSetChanged() - insertSpinner.setSelection(0) - insertEditText.setText(selectedItem) - SelectJsExecutor.exec( - fragment, - selectJsPath, - selectedItem - ) - } - - override fun onNothingSelected(parent: AdapterView<*>?) {} - } - insertSpinner.layoutParams = linearParamsForSpinner - return insertSpinner - } - - fun execCompList( - editParameters: EditParameters, - elcbMap: Map?, - targetListFilePath: String?, - ){ - if( - targetListFilePath.isNullOrEmpty() - ) return - val filePrefix = EditSettings.filePrefix - val separator = "&" - val compListOneLineCon = - elcbMap?.get(ListContentsEditKey.compList.name) - if( - compListOneLineCon.isNullOrEmpty() - ) return - val itemTextListCon = when(compListOneLineCon.startsWith(filePrefix)){ - true -> { - val fannelInfoMap = editParameters.fannelInfoMap - val setReplaceVariableMap = editParameters.setReplaceVariableMap -// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( +// val linearParamsForSpinner = LinearLayoutCompat.LayoutParams( +// 0, +// LinearLayoutCompat.LayoutParams.MATCH_PARENT, +// ) +// linearParamsForSpinner.weight = weight +// +// val elcbMap = getElsbMap( +// editParameters, +// currentComponentIndex +// ) +// when(fragment){ +// is EditFragment -> fragment.listConSelectBoxMapList.add(elcbMap) +// } +// val listContentsFilePath = elcbMap?.get(ListContentsEditKey.listPath.name) ?: String() +// val listLimit = getLimitNum( +// elcbMap, +// defaultListLimit, +// ) +// execCompList( +// editParameters, +// elcbMap, +// listContentsFilePath, +// ) +// +// val selectJsPath = getSelectJsPath( +// elcbMap, +//// currentAppDirPath, +// scriptName +// ) +// +// val fileObj = File(listContentsFilePath) +// val parentDir = fileObj.parent ?: String() +// FileSystems.createDirs(parentDir) +// val editableSpinnerList = ReadText( +// listContentsFilePath +// ).textToList().filter { +// it.trim().isNotEmpty() +// } +// +// val insertSpinner = SpinnerInstance.make( +// context, +// editableSpinnerList, +// editParameters.onFixNormalSpinner +// ) +// insertSpinner.id = currentId + EditTextSupportViewId.EDITABLE_SPINNER.id +// insertSpinner.tag = "spinnerEdit${currentId + EditTextSupportViewId.EDITABLE_SPINNER.id}" +// val adapter = ArrayAdapter( +// context as Context, +// R.layout.sppinner_layout, +// ) +// +// adapter.addAll(editableSpinnerList) +// insertSpinner.adapter = adapter +// insertSpinner.setOnTouchListener(View.OnTouchListener { +// v, event -> +// val currentEditableSpinnerList = ReadText( +// listContentsFilePath +// ).textToList().filter { +// it.trim().isNotEmpty() +// } +// val arrayAdapter = insertSpinner.adapter as ArrayAdapter +// arrayAdapter.clear() +// arrayAdapter.addAll(currentEditableSpinnerList) +// adapter.notifyDataSetChanged() +// insertSpinner.setSelection(0) +// v.performClick() +// true +// }) +// insertSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { +// override fun onItemSelected(parent: AdapterView<*>?, view: View?, pos: Int, id: Long) { +// val selectedItem = adapter.getItem(pos) +// ?: return +// val currentSpinnerList = ReadText( +// listContentsFilePath +// ).textToList().filter { +// it.trim().isNotEmpty() +// } +// val updateListContents = listOf(selectedItem) + currentSpinnerList.filter { +// it != selectedItem +// } +// FileSystems.writeFile( +// listContentsFilePath, +// updateListContents +// .take(listLimit) +// .joinToString("\n") +// ) +// val selectUpdatedSpinnerList = listOf( +// selectedItem, +// ) + currentSpinnerList.filter { +// it != selectedItem +// } +// adapter.clear() +// adapter.addAll(selectUpdatedSpinnerList) +// adapter.notifyDataSetChanged() +// insertSpinner.setSelection(0) +// insertEditText.setText(selectedItem) +// SelectJsExecutor.exec( +// fragment, +// selectJsPath, +// selectedItem +// ) +// } +// +// override fun onNothingSelected(parent: AdapterView<*>?) {} +// } +// insertSpinner.layoutParams = linearParamsForSpinner +// return insertSpinner +// } +// +// fun execCompList( +// editParameters: EditParameters, +// elcbMap: Map?, +// targetListFilePath: String?, +// ){ +// if( +// targetListFilePath.isNullOrEmpty() +// ) return +// val filePrefix = EditSettings.filePrefix +// val separator = "&" +// val compListOneLineCon = +// elcbMap?.get(ListContentsEditKey.compList.name) +// if( +// compListOneLineCon.isNullOrEmpty() +// ) return +// val itemTextListCon = when(compListOneLineCon.startsWith(filePrefix)){ +// true -> { +// val fannelInfoMap = editParameters.fannelInfoMap +// val setReplaceVariableMap = editParameters.setReplaceVariableMap +//// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( +//// fannelInfoMap +//// ) +// val currentFannelName = FannelInfoTool.getCurrentFannelName( // fannelInfoMap // ) - val currentFannelName = FannelInfoTool.getCurrentFannelName( - fannelInfoMap - ) - val compListFilePathObj = File(compListOneLineCon.removePrefix(filePrefix)) - ReadText( - compListFilePathObj.absolutePath - ).readText().let { - SetReplaceVariabler.execReplaceByReplaceVariables( - it, - setReplaceVariableMap, -// currentAppDirPath, - currentFannelName - ) - } - } - else -> compListOneLineCon.replace( - separator, - "\n" - ) - } - ListContentsSelectBoxTool.compListFile( - targetListFilePath, - itemTextListCon - ) - } - - fun getLimitNum( - elcbMap: Map?, - defaultListLimit: Int, - ): Int { - return try { - elcbMap - ?.get(ListContentsEditKey.limitNum.name) - ?.toInt() - } catch (e: Exception){ - defaultListLimit - } ?: defaultListLimit - } - - fun getSelectJsPath( - elcbMap: Map?, -// currentAppDirPath: String, - scriptName: String, - ): String { - return elcbMap?.get(ListContentsEditKey.selectJsPath.name) - ?.let { - if( - it.isEmpty() - ) return@let String() - ScriptPreWordReplacer.replace( - it, -// currentAppDirPath, - scriptName - ) - } ?: String() - } - - fun getElsbMap( - editParameters: EditParameters, - currentComponentIndex: Int, - ): Map? { - val currentSetVariableMap = editParameters.setVariableMap - return currentSetVariableMap?.get( - SetVariableTypeColumn.VARIABLE_TYPE_VALUE.name - ) - ?.let { - QuoteTool.splitBySurroundedIgnore( - it, - '|' - ) - } - ?.getOrNull(currentComponentIndex) - ?.let { - CmdClickMap.createMap( - it, - '?' - ) - }?.toMap() - } - +// val compListFilePathObj = File(compListOneLineCon.removePrefix(filePrefix)) +// ReadText( +// compListFilePathObj.absolutePath +// ).readText().let { +// SetReplaceVariabler.execReplaceByReplaceVariables( +// it, +// setReplaceVariableMap, +//// currentAppDirPath, +// currentFannelName +// ) +// } +// } +// else -> compListOneLineCon.replace( +// separator, +// "\n" +// ) +// } +// ListContentsSelectBoxTool.compListFile( +// targetListFilePath, +// itemTextListCon +// ) +// } +// +// fun getLimitNum( +// elcbMap: Map?, +// defaultListLimit: Int, +// ): Int { +// return try { +// elcbMap +// ?.get(ListContentsEditKey.limitNum.name) +// ?.toInt() +// } catch (e: Exception){ +// defaultListLimit +// } ?: defaultListLimit +// } +// +// fun getSelectJsPath( +// elcbMap: Map?, +//// currentAppDirPath: String, +// scriptName: String, +// ): String { +// return elcbMap?.get(ListContentsEditKey.selectJsPath.name) +// ?.let { +// if( +// it.isEmpty() +// ) return@let String() +// ScriptPreWordReplacer.replace( +// it, +//// currentAppDirPath, +// scriptName +// ) +// } ?: String() +// } +// +// fun getElsbMap( +// editParameters: EditParameters, +// currentComponentIndex: Int, +// ): Map? { +// val currentSetVariableMap = editParameters.setVariableMap +// return currentSetVariableMap?.get( +// SetVariableTypeColumn.VARIABLE_TYPE_VALUE.name +// ) +// ?.let { +// QuoteTool.splitBySurroundedIgnore( +// it, +// '|' +// ) +// } +// ?.getOrNull(currentComponentIndex) +// ?.let { +// CmdClickMap.createMap( +// it, +// '?' +// ) +// }?.toMap() +// } +// enum class ListContentsEditKey { listPath, limitNum, @@ -264,37 +264,37 @@ object ListContentsSelectSpinnerViewProducer { saveValName, compList, } - - fun setInitMarkToListContents( - elcbMap: Map?, -// currentAppDirPath: String, - ){ - val listContentsFilePath = elcbMap?.get(ListContentsEditKey.listPath.name) - if( - listContentsFilePath.isNullOrEmpty() - ) return - val deleteStr = elcbMap.get(ListContentsEditKey.initMark.name) - if( - deleteStr.isNullOrEmpty() - ) return - val cmdclickDefaultAppDirPath = UsePath.cmdclickDefaultAppDirPath - if( - !listContentsFilePath.startsWith(cmdclickDefaultAppDirPath) - || listContentsFilePath == cmdclickDefaultAppDirPath - ) return - val listContentsList = ReadText( - listContentsFilePath - ).textToList() - if( - listContentsList.contains(deleteStr) - ) return - val insertListConList = listOf(deleteStr) + listContentsList.filter { - it != deleteStr - } - FileSystems.writeFile( - listContentsFilePath, - insertListConList.joinToString("\n") - ) - } +// +// fun setInitMarkToListContents( +// elcbMap: Map?, +//// currentAppDirPath: String, +// ){ +// val listContentsFilePath = elcbMap?.get(ListContentsEditKey.listPath.name) +// if( +// listContentsFilePath.isNullOrEmpty() +// ) return +// val deleteStr = elcbMap.get(ListContentsEditKey.initMark.name) +// if( +// deleteStr.isNullOrEmpty() +// ) return +// val cmdclickDefaultAppDirPath = UsePath.cmdclickDefaultAppDirPath +// if( +// !listContentsFilePath.startsWith(cmdclickDefaultAppDirPath) +// || listContentsFilePath == cmdclickDefaultAppDirPath +// ) return +// val listContentsList = ReadText( +// listContentsFilePath +// ).textToList() +// if( +// listContentsList.contains(deleteStr) +// ) return +// val insertListConList = listOf(deleteStr) + listContentsList.filter { +// it != deleteStr +// } +// FileSystems.writeFile( +// listContentsFilePath, +// insertListConList.joinToString("\n") +// ) +// } } diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/MultiFileSelectGridViewProducer.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/MultiFileSelectGridViewProducer.kt index 09e55a7a3..d4b60a6d0 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/MultiFileSelectGridViewProducer.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/MultiFileSelectGridViewProducer.kt @@ -1,27 +1,14 @@ package com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib import android.app.AlertDialog -import android.content.DialogInterface -import android.view.Gravity -import android.widget.AbsListView -import android.widget.Button -import android.widget.EditText import android.widget.GridView -import androidx.appcompat.widget.LinearLayoutCompat import androidx.fragment.app.Fragment -import com.puutaro.commandclick.common.variable.edit.EditParameters import com.puutaro.commandclick.common.variable.path.UsePath import com.puutaro.commandclick.component.adapter.MultiSelectImageAdapter -import com.puutaro.commandclick.fragment_lib.edit_fragment.variable.EditTextSupportViewId -import com.puutaro.commandclick.proccess.edit.lib.ButtonSetter -import com.puutaro.commandclick.proccess.js_macro_libs.edit_setting_extra.FilterPathTool -import com.puutaro.commandclick.proccess.lib.LinearLayoutForTotal -import com.puutaro.commandclick.proccess.lib.NestLinearLayout -import com.puutaro.commandclick.proccess.lib.SearchTextLinearWeight +import com.puutaro.commandclick.proccess.js_macro_libs.edit_setting_extra.CcFilterTool import com.puutaro.commandclick.util.file.FileSystems import com.puutaro.commandclick.util.Keyboard import com.puutaro.commandclick.util.str.QuoteTool -import java.io.File object MultiFileSelectGridViewProducer { private val noExtend = "NoExtend" @@ -29,144 +16,144 @@ object MultiFileSelectGridViewProducer { private var alertDialog: AlertDialog? = null - fun make ( - fragment: Fragment, - insertEditText: EditText, - editParameters: EditParameters, - currentComponentIndex: Int, - weight: Float, - ): Button { - val context = fragment.context - val currentId = editParameters.currentId - val linearParamsForGrid = LinearLayoutCompat.LayoutParams( - 0, - LinearLayoutCompat.LayoutParams.MATCH_PARENT, - ) - linearParamsForGrid.weight = weight - val fcbMap = FileSelectSpinnerViewProducer.getFcbMap( - editParameters, - currentComponentIndex - ) - val filterDir = getSelectDirPath( - fcbMap, +// fun make ( +// fragment: Fragment, +// insertEditText: EditText, +// editParameters: EditParameters, +// currentComponentIndex: Int, +// weight: Float, +// ): Button { +// val context = fragment.context +// val currentId = editParameters.currentId +// val linearParamsForGrid = LinearLayoutCompat.LayoutParams( +// 0, +// LinearLayoutCompat.LayoutParams.MATCH_PARENT, +// ) +// linearParamsForGrid.weight = weight +// val fcbMap = FileSelectSpinnerViewProducer.getFcbMap( // editParameters, - ) - val filterPrefixListCon = getFilterPrefix( - fcbMap, - ) - val filterSuffixListCon = getFilterSuffix( - fcbMap, - ) - val filterType = FileSelectSpinnerViewProducer.getFilterType( - fcbMap, - ) - - val gridButtonView = Button(context) - gridButtonView.id = currentId + EditTextSupportViewId.EDITABLE_GRID.id - gridButtonView.tag = "gridEdit${currentId + EditTextSupportViewId.EDITABLE_GRID.id}" - gridButtonView.text = gridButtonLabel - ButtonSetter.set( - context, - gridButtonView, - mapOf() - ) - - gridButtonView.setOnClickListener { - buttonView -> - val buttonContext = buttonView.context - val currentGridList = makeGridList( - filterDir, - filterPrefixListCon, - filterSuffixListCon, - filterType - ) - - val gridView = - GridView(buttonContext) - gridView.numColumns = 2 - gridView.choiceMode = AbsListView.CHOICE_MODE_MULTIPLE - val multiSelectImageAdapter = MultiSelectImageAdapter( - buttonContext, - ) - multiSelectImageAdapter.addAll( - currentGridList.toMutableList() - ) - gridView.adapter = multiSelectImageAdapter - val editTextSelectedList = insertEditText.text.split(",") - val editTextSelectedListByFullPath = currentGridList.filter { - editTextSelectedList.contains( - File(it).name - ) - } - multiSelectImageAdapter - .selectedItemList - .addAll(editTextSelectedListByFullPath) - multiSelectImageAdapter.notifyDataSetChanged() - - val linearLayoutForTotal = LinearLayoutForTotal.make( - context - ) - val searchTextWeight = SearchTextLinearWeight.calculate(fragment.activity) - val listWeight = 1F - searchTextWeight - val linearLayoutForListView = NestLinearLayout.make( - context, - listWeight - ) - val linearLayoutForSearch = NestLinearLayout.make( - context, - searchTextWeight - ) - linearLayoutForListView.addView(gridView) - linearLayoutForTotal.addView(linearLayoutForListView) - linearLayoutForTotal.addView(linearLayoutForSearch) - - setGridViewItemClickListener( - fragment, - gridView, - ) - - alertDialog = AlertDialog.Builder( - buttonContext - ) - .setView(linearLayoutForTotal) - .setNegativeButton("NO", DialogInterface.OnClickListener{ - dialog, which -> - alertDialog?.dismiss() - alertDialog = null - }) - .setPositiveButton("OK", DialogInterface.OnClickListener{ - dialog, which -> - alertDialog?.dismiss() - alertDialog = null - val selectedItems = multiSelectImageAdapter.selectedItemList.map { - File(it).name - }.joinToString(",") - insertEditText.setText(selectedItems) - }) - .show() - alertDialog?.window?.setGravity(Gravity.BOTTOM) - - alertDialog?.setOnCancelListener( - object : DialogInterface.OnCancelListener { - override fun onCancel(dialog: DialogInterface?) { - alertDialog?.dismiss() - alertDialog = null - } - }) - alertDialog?.getButton( - DialogInterface.BUTTON_POSITIVE - )?.setTextColor( - context?.getColor(android.R.color.black) as Int - ) - alertDialog?.getButton( - DialogInterface.BUTTON_NEGATIVE - )?.setTextColor( - context?.getColor(android.R.color.black) as Int - ) - } - gridButtonView.layoutParams = linearParamsForGrid - return gridButtonView - } +// currentComponentIndex +// ) +// val filterDir = getSelectDirPath( +// fcbMap, +//// editParameters, +// ) +// val filterPrefixListCon = getFilterPrefix( +// fcbMap, +// ) +// val filterSuffixListCon = getFilterSuffix( +// fcbMap, +// ) +// val filterType = FileSelectSpinnerViewProducer.getFilterType( +// fcbMap, +// ) +// +// val gridButtonView = Button(context) +// gridButtonView.id = currentId + EditTextSupportViewId.EDITABLE_GRID.id +// gridButtonView.tag = "gridEdit${currentId + EditTextSupportViewId.EDITABLE_GRID.id}" +// gridButtonView.text = gridButtonLabel +// ButtonSetter.set( +// context, +// gridButtonView, +// mapOf() +// ) +// +// gridButtonView.setOnClickListener { +// buttonView -> +// val buttonContext = buttonView.context +// val currentGridList = makeGridList( +// filterDir, +// filterPrefixListCon, +// filterSuffixListCon, +// filterType +// ) +// +// val gridView = +// GridView(buttonContext) +// gridView.numColumns = 2 +// gridView.choiceMode = AbsListView.CHOICE_MODE_MULTIPLE +// val multiSelectImageAdapter = MultiSelectImageAdapter( +// buttonContext, +// ) +// multiSelectImageAdapter.addAll( +// currentGridList.toMutableList() +// ) +// gridView.adapter = multiSelectImageAdapter +// val editTextSelectedList = insertEditText.text.split(",") +// val editTextSelectedListByFullPath = currentGridList.filter { +// editTextSelectedList.contains( +// File(it).name +// ) +// } +// multiSelectImageAdapter +// .selectedItemList +// .addAll(editTextSelectedListByFullPath) +// multiSelectImageAdapter.notifyDataSetChanged() +// +// val linearLayoutForTotal = LinearLayoutForTotal.make( +// context +// ) +// val searchTextWeight = SearchTextLinearWeight.calculate(fragment.activity) +// val listWeight = 1F - searchTextWeight +// val linearLayoutForListView = NestLinearLayout.make( +// context, +// listWeight +// ) +// val linearLayoutForSearch = NestLinearLayout.make( +// context, +// searchTextWeight +// ) +// linearLayoutForListView.addView(gridView) +// linearLayoutForTotal.addView(linearLayoutForListView) +// linearLayoutForTotal.addView(linearLayoutForSearch) +// +// setGridViewItemClickListener( +// fragment, +// gridView, +// ) +// +// alertDialog = AlertDialog.Builder( +// buttonContext +// ) +// .setView(linearLayoutForTotal) +// .setNegativeButton("NO", DialogInterface.OnClickListener{ +// dialog, which -> +// alertDialog?.dismiss() +// alertDialog = null +// }) +// .setPositiveButton("OK", DialogInterface.OnClickListener{ +// dialog, which -> +// alertDialog?.dismiss() +// alertDialog = null +// val selectedItems = multiSelectImageAdapter.selectedItemList.map { +// File(it).name +// }.joinToString(",") +// insertEditText.setText(selectedItems) +// }) +// .show() +// alertDialog?.window?.setGravity(Gravity.BOTTOM) +// +// alertDialog?.setOnCancelListener( +// object : DialogInterface.OnCancelListener { +// override fun onCancel(dialog: DialogInterface?) { +// alertDialog?.dismiss() +// alertDialog = null +// } +// }) +// alertDialog?.getButton( +// DialogInterface.BUTTON_POSITIVE +// )?.setTextColor( +// context?.getColor(android.R.color.black) as Int +// ) +// alertDialog?.getButton( +// DialogInterface.BUTTON_NEGATIVE +// )?.setTextColor( +// context?.getColor(android.R.color.black) as Int +// ) +// } +// gridButtonView.layoutParams = linearParamsForGrid +// return gridButtonView +// } private fun setGridViewItemClickListener( editFragment: Fragment, @@ -218,7 +205,7 @@ object MultiFileSelectGridViewProducer { return when(isFile){ true -> { sortedList.filter { - FilterPathTool.isFilterByFile( + CcFilterTool.isFilterByFile( it, filterDir, filterPrefixListCon, @@ -234,7 +221,7 @@ object MultiFileSelectGridViewProducer { } } false -> sortedList.filter { - FilterPathTool.isFilterByDir( + CcFilterTool.isFilterByDir( it, filterDir, filterPrefixListCon, diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/MultiSelectSpinnerViewProducer.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/MultiSelectSpinnerViewProducer.kt index fb9888640..db604e7fe 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/MultiSelectSpinnerViewProducer.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/MultiSelectSpinnerViewProducer.kt @@ -13,85 +13,85 @@ import com.puutaro.commandclick.proccess.edit.lib.ButtonSetter object MultiSelectSpinnerViewProducer { - fun make( - fragment: Fragment, - insertTextView: TextView, - insertEditText: EditText, - editParameters: EditParameters, - currentComponentIndex: Int, - weight: Float, - isInsertTextViewVisible: Boolean = false - ): Button { - val context = fragment.context - val currentId = editParameters.currentId - val currentSetVariableMap = editParameters.setVariableMap - - val linearParamsForButton = LinearLayoutCompat.LayoutParams( - 0, - LinearLayoutCompat.LayoutParams.MATCH_PARENT, - ) - linearParamsForButton.weight = weight - val insertButton = Button(context) - insertButton.id = currentId + EditTextSupportViewId.BUTTON.id - insertButton.tag = "button${currentId + EditTextSupportViewId.BUTTON.id}" - ButtonSetter.set( - context, - insertButton, - mapOf() - ) - val buttonLabel = "SLs" - insertButton.setText(buttonLabel) - insertTextView.isVisible = isInsertTextViewVisible - - val sppinerList = currentSetVariableMap?.get( - SetVariableTypeColumn.VARIABLE_TYPE_VALUE.name - ) - ?.split('|') - ?.getOrNull(currentComponentIndex) -// .let { -// ReplaceVariableMapReflecter.reflect( -// QuoteTool.trimBothEdgeQuote(it), -// editParameters -// ) +// fun make( +// fragment: Fragment, +// insertTextView: TextView, +// insertEditText: EditText, +// editParameters: EditParameters, +// currentComponentIndex: Int, +// weight: Float, +// isInsertTextViewVisible: Boolean = false +// ): Button { +// val context = fragment.context +// val currentId = editParameters.currentId +// val currentSetVariableMap = editParameters.setVariableMap +// +// val linearParamsForButton = LinearLayoutCompat.LayoutParams( +// 0, +// LinearLayoutCompat.LayoutParams.MATCH_PARENT, +// ) +// linearParamsForButton.weight = weight +// val insertButton = Button(context) +// insertButton.id = currentId + EditTextSupportViewId.BUTTON.id +// insertButton.tag = "button${currentId + EditTextSupportViewId.BUTTON.id}" +// ButtonSetter.set( +// context, +// insertButton, +// mapOf() +// ) +// val buttonLabel = "SLs" +// insertButton.setText(buttonLabel) +// insertTextView.isVisible = isInsertTextViewVisible +// +// val sppinerList = currentSetVariableMap?.get( +// SetVariableTypeColumn.VARIABLE_TYPE_VALUE.name +// ) +// ?.split('|') +// ?.getOrNull(currentComponentIndex) +//// .let { +//// ReplaceVariableMapReflecter.reflect( +//// QuoteTool.trimBothEdgeQuote(it), +//// editParameters +//// ) +//// } +// ?.split('?') +// ?: listOf() +// val currentExistItem = insertEditText.text.toString() +// val updatedSppinerList = if( +// sppinerList.contains( +// insertEditText.text.toString() +// ) +// ){ +// listOf( +// currentExistItem, +// ) + sppinerList.filter { it != currentExistItem } +// } else { +// sppinerList +// } +// val updatedMultiModelArray = ArrayList( +// (updatedSppinerList.indices).map { +// MultiSelectModel(it, updatedSppinerList[it]) // } - ?.split('?') - ?: listOf() - val currentExistItem = insertEditText.text.toString() - val updatedSppinerList = if( - sppinerList.contains( - insertEditText.text.toString() - ) - ){ - listOf( - currentExistItem, - ) + sppinerList.filter { it != currentExistItem } - } else { - sppinerList - } - val updatedMultiModelArray = ArrayList( - (updatedSppinerList.indices).map { - MultiSelectModel(it, updatedSppinerList[it]) - } - ) - val currentSelectList = insertEditText.text.toString().split(',') - val preSelectedMultiModelIdArray = ArrayList( - (updatedSppinerList.indices).filter { - val currentItem = updatedSppinerList[it] - currentSelectList.contains(currentItem) - } - ) - insertButton.setOnClickListener { - innerButtonView -> - val listener = context as? EditFragment.OnMultiSelectListenerForEdit - listener?.onMultiSelectForEdit( - insertTextView.text.toString(), - insertEditText.id, - updatedMultiModelArray, - preSelectedMultiModelIdArray - ) - } - - insertButton.layoutParams = linearParamsForButton - return insertButton - } +// ) +// val currentSelectList = insertEditText.text.toString().split(',') +// val preSelectedMultiModelIdArray = ArrayList( +// (updatedSppinerList.indices).filter { +// val currentItem = updatedSppinerList[it] +// currentSelectList.contains(currentItem) +// } +// ) +// insertButton.setOnClickListener { +// innerButtonView -> +// val listener = context as? EditFragment.OnMultiSelectListenerForEdit +// listener?.onMultiSelectForEdit( +// insertTextView.text.toString(), +// insertEditText.id, +// updatedMultiModelArray, +// preSelectedMultiModelIdArray +// ) +// } +// +// insertButton.layoutParams = linearParamsForButton +// return insertButton +// } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/SpinnerViewProducer.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/SpinnerViewProducer.kt index b0a1a4747..be7001a2d 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/SpinnerViewProducer.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/SpinnerViewProducer.kt @@ -12,85 +12,85 @@ import com.puutaro.commandclick.proccess.edit.lib.SpinnerInstance object SpinnerViewProducer { - fun make( - context: Context?, - insertEditText: EditText, - editParameters: EditParameters, - currentComponentIndex: Int, - weight: Float, - ): Spinner { - val currentId = editParameters.currentId - val currentSetVariableMap = editParameters.setVariableMap - val linearParamsForSpinner = LinearLayoutCompat.LayoutParams( - 0, - LinearLayoutCompat.LayoutParams.MATCH_PARENT, - ) - linearParamsForSpinner.weight = weight - val adapter = ArrayAdapter( - context as Context, - R.layout.sppinner_layout, - ) - val sppinerList = - currentSetVariableMap?.get( - SetVariableTypeColumn.VARIABLE_TYPE_VALUE.name - ) - ?.split('|') - ?.getOrNull(currentComponentIndex) -// .let { -// ReplaceVariableMapReflecter.reflect( -// QuoteTool.trimBothEdgeQuote(it), -// editParameters -// ) -// } - ?.split('?') - ?: listOf() - val currentExistItem = insertEditText.text.toString() - val updatedSppinerList = if( - sppinerList.contains( - insertEditText.text.toString() - ) - ){ - listOf( - currentExistItem, - ) + sppinerList.filter { it != currentExistItem } - } else { - sppinerList - } - adapter.addAll(updatedSppinerList) - - val insertSpinner = SpinnerInstance.make( - context, - updatedSppinerList, - editParameters.onFixNormalSpinner - ) - insertSpinner.id = currentId + EditTextSupportViewId.SPINNER.id - insertSpinner.tag = "spinner${currentId + EditTextSupportViewId.SPINNER.id}" - insertSpinner.adapter = adapter - insertSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { - override fun onItemSelected( - parent: AdapterView<*>?, - view: View?, - pos: Int, - id: Long - ) { - val selectedItem = adapter.getItem(pos) - val currentSpinnerList = (0 until adapter.count).map { - adapter.getItem(it) - } - insertEditText.setText(selectedItem) - val selectUpdatedSpinnerList = listOf( - selectedItem, - ) + currentSpinnerList.filter { it != selectedItem } - adapter.clear() - adapter.addAll(selectUpdatedSpinnerList) - adapter.notifyDataSetChanged() - insertSpinner.setSelection(0) - } - - override fun onNothingSelected(parent: AdapterView<*>?) { - } - } - insertSpinner.layoutParams = linearParamsForSpinner - return insertSpinner - } +// fun make( +// context: Context?, +// insertEditText: EditText, +// editParameters: EditParameters, +// currentComponentIndex: Int, +// weight: Float, +// ): Spinner { +// val currentId = editParameters.currentId +// val currentSetVariableMap = editParameters.setVariableMap +// val linearParamsForSpinner = LinearLayoutCompat.LayoutParams( +// 0, +// LinearLayoutCompat.LayoutParams.MATCH_PARENT, +// ) +// linearParamsForSpinner.weight = weight +// val adapter = ArrayAdapter( +// context as Context, +// R.layout.sppinner_layout, +// ) +// val sppinerList = +// currentSetVariableMap?.get( +// SetVariableTypeColumn.VARIABLE_TYPE_VALUE.name +// ) +// ?.split('|') +// ?.getOrNull(currentComponentIndex) +//// .let { +//// ReplaceVariableMapReflecter.reflect( +//// QuoteTool.trimBothEdgeQuote(it), +//// editParameters +//// ) +//// } +// ?.split('?') +// ?: listOf() +// val currentExistItem = insertEditText.text.toString() +// val updatedSppinerList = if( +// sppinerList.contains( +// insertEditText.text.toString() +// ) +// ){ +// listOf( +// currentExistItem, +// ) + sppinerList.filter { it != currentExistItem } +// } else { +// sppinerList +// } +// adapter.addAll(updatedSppinerList) +// +// val insertSpinner = SpinnerInstance.make( +// context, +// updatedSppinerList, +// editParameters.onFixNormalSpinner +// ) +// insertSpinner.id = currentId + EditTextSupportViewId.SPINNER.id +// insertSpinner.tag = "spinner${currentId + EditTextSupportViewId.SPINNER.id}" +// insertSpinner.adapter = adapter +// insertSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { +// override fun onItemSelected( +// parent: AdapterView<*>?, +// view: View?, +// pos: Int, +// id: Long +// ) { +// val selectedItem = adapter.getItem(pos) +// val currentSpinnerList = (0 until adapter.count).map { +// adapter.getItem(it) +// } +// insertEditText.setText(selectedItem) +// val selectUpdatedSpinnerList = listOf( +// selectedItem, +// ) + currentSpinnerList.filter { it != selectedItem } +// adapter.clear() +// adapter.addAll(selectUpdatedSpinnerList) +// adapter.notifyDataSetChanged() +// insertSpinner.setSelection(0) +// } +// +// override fun onNothingSelected(parent: AdapterView<*>?) { +// } +// } +// insertSpinner.layoutParams = linearParamsForSpinner +// return insertSpinner +// } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/VariableLabelAdder.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/VariableLabelAdder.kt index 8577aa2c9..657400ca4 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/VariableLabelAdder.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/VariableLabelAdder.kt @@ -2,40 +2,38 @@ package com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib import android.widget.TextView import com.puutaro.commandclick.common.variable.edit.EditParameters -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.lib.SetVariableTypeValue -import com.puutaro.commandclick.proccess.edit.lib.SetVariableTyper object VariableLabelAdder { - fun add( - insertTextView: TextView, - editParameters: EditParameters, - textLabelIndex: Int, - ){ - if( - textLabelIndex < 0 - ) return - val currentSetVariableValue = SetVariableTypeValue.makeByReplace( - editParameters - ) - - val textViewMap = SetVariableTyper.getCertainSetValIndexMap( - currentSetVariableValue, - textLabelIndex - ) - val addLabel = textViewMap?.get( - TextVeiwLabelType.label.name - ) ?: return - if( - addLabel.isEmpty() - ) return - insertTextView.text = - when (addLabel) { - "this" -> editParameters.currentVariableName?.camelToLowerBlankNoRegex() - "THIS" -> editParameters.currentVariableName?.upperToLower() - else -> addLabel - } - } +// fun add( +// insertTextView: TextView, +// editParameters: EditParameters, +// textLabelIndex: Int, +// ){ +// if( +// textLabelIndex < 0 +// ) return +// val currentSetVariableValue = SetVariableTypeValue.makeByReplace( +// editParameters +// ) +// +// val textViewMap = SetVariableTyper.getCertainSetValIndexMap( +// currentSetVariableValue, +// textLabelIndex +// ) +// val addLabel = textViewMap?.get( +// TextVeiwLabelType.label.name +// ) ?: return +// if( +// addLabel.isEmpty() +// ) return +// insertTextView.text = +// when (addLabel) { +// "this" -> editParameters.currentVariableName?.camelToLowerBlankNoRegex() +// "THIS" -> editParameters.currentVariableName?.upperToLower() +// else -> addLabel +// } +// } enum class TextVeiwLabelType { label diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/lib/SetVariableTypeValue.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/lib/SetVariableTypeValue.kt index bb573e18e..e099f4180 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/lib/SetVariableTypeValue.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/lib/SetVariableTypeValue.kt @@ -3,13 +3,13 @@ package com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.lib import com.puutaro.commandclick.common.variable.edit.EditParameters import com.puutaro.commandclick.common.variable.edit.SetVariableTypeColumn -object SetVariableTypeValue { - fun makeByReplace( - editParameters: EditParameters, - ): String? { - val currentSetVariableMap = editParameters.setVariableMap - return currentSetVariableMap?.get( - SetVariableTypeColumn.VARIABLE_TYPE_VALUE.name - ) - } -} \ No newline at end of file +//object SetVariableTypeValue { +// fun makeByReplace( +// editParameters: EditParameters, +// ): String? { +// val currentSetVariableMap = editParameters.setVariableMap +// return currentSetVariableMap?.get( +// SetVariableTypeColumn.VARIABLE_TYPE_VALUE.name +// ) +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/lib/list_index/FannelLogoLongClickDoForListIndex.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/lib/list_index/FannelLogoLongClickDoForListIndex.kt index 5b90a8a42..c5c0f4a50 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/lib/list_index/FannelLogoLongClickDoForListIndex.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/lib/list_index/FannelLogoLongClickDoForListIndex.kt @@ -1,31 +1,32 @@ package com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.lib.list_index import androidx.appcompat.widget.AppCompatImageView -import com.puutaro.commandclick.component.adapter.ListIndexAdapter +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter import com.puutaro.commandclick.fragment.EditFragment import com.puutaro.commandclick.proccess.qr.qr_dialog_config.QrDialogClickHandler object FannelLogoLongClickDoForListIndex { - fun invoke( - editFragment: EditFragment, - ) { - val binding = editFragment.binding - val listIndexForEditAdapter = binding.editListRecyclerView.adapter as ListIndexAdapter - listIndexForEditAdapter.qrLongClickListener = - object: ListIndexAdapter.OnQrLogoLongClickListener { - override fun onQrLongClick( - imageView: AppCompatImageView, - holder: ListIndexAdapter.ListIndexListViewHolder, - position: Int - ) { - QrDialogClickHandler.handle( - true, - editFragment, - holder.fileName, - position - ) - } - } - } +// fun invoke( +// editFragment: EditFragment, +// ) { +// val binding = editFragment.binding +// val listIndexForEditAdapter = binding.editListRecyclerView.adapter as EditComponentListAdapter +// listIndexForEditAdapter.qrLongClickListener = +// object: EditComponentListAdapter.OnQrLogoLongClickListener { +// override fun onQrLongClick( +// imageView: AppCompatImageView, +// holder: EditComponentListAdapter.ListIndexListViewHolder, +// position: Int +// ) { +// val selectedItemLineMap = listIndexForEditAdapter.lineMapList[position] +// QrDialogClickHandler.handle( +// true, +// editFragment, +// selectedItemLineMap, +// position +// ) +// } +// } +// } } diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/lib/list_index/ItemTouchHelperCallbackForListIndexAdapter.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/lib/list_index/ItemTouchHelperCallbackForListIndexAdapter.kt index 35990981a..587935b50 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/lib/list_index/ItemTouchHelperCallbackForListIndexAdapter.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/edit_text_support_view/lib/lib/list_index/ItemTouchHelperCallbackForListIndexAdapter.kt @@ -1,30 +1,35 @@ package com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.lib.list_index +import android.text.Layout +import androidx.fragment.app.Fragment import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.ItemTouchHelper.ACTION_STATE_DRAG import androidx.recyclerview.widget.RecyclerView -import com.puutaro.commandclick.component.adapter.ListIndexAdapter +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.ExecSwitcherForListIndexAdapter import com.puutaro.commandclick.fragment.EditFragment 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.js_macro_libs.list_index_libs.ExecSimpleDelete -import com.puutaro.commandclick.util.file.FileSystems +import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.LayoutSettingsForListIndex import com.puutaro.commandclick.util.list.ListTool -import java.io.File object ItemTouchHelperCallbackForListIndexAdapter { fun set( - editFragment: EditFragment, +// editFragment: EditFragment, + fragment: Fragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, recyclerView: RecyclerView, - listIndexForEditAdapter: ListIndexAdapter, + editComponentListAdapter: EditComponentListAdapter, + layoutConfigMap: Map ){ - val editByDragMap = ListSettingsForListIndex.makeEditByDragMap( - editFragment.listIndexConfigMap, + val editByDragMap = LayoutSettingsForListIndex.makeEditByDragMap( + layoutConfigMap, ) - val enableEditByDrag = !ListSettingsForListIndex.howDisableEditByDrag( - editFragment, + val enableEditByDrag = !LayoutSettingsForListIndex.howDisableEditByDrag( + fannelInfoMap, + setReplaceVariableMap, editByDragMap ) if(!enableEditByDrag) return @@ -39,22 +44,23 @@ object ItemTouchHelperCallbackForListIndexAdapter { viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder ): Boolean { - val adapter = recyclerView.adapter as ListIndexAdapter + val adapter = recyclerView.adapter as EditComponentListAdapter val fromViewHolder = viewHolder as - ListIndexAdapter.ListIndexListViewHolder + EditComponentListAdapter.ListIndexListViewHolder val toViewHolder = target as - ListIndexAdapter.ListIndexListViewHolder + EditComponentListAdapter.ListIndexListViewHolder val from = fromViewHolder.bindingAdapterPosition val to = toViewHolder.bindingAdapterPosition adapter.notifyItemMoved(from, to) - ListTool.switchList( - listIndexForEditAdapter.listIndexList, + ListTool.switchMapList( + editComponentListAdapter.lineMapList, from, to, ) switchHandler( - editFragment, - listIndexForEditAdapter, + fannelInfoMap, + setReplaceVariableMap, + editComponentListAdapter, fromViewHolder, toViewHolder ) @@ -69,12 +75,12 @@ object ItemTouchHelperCallbackForListIndexAdapter { direction != ItemTouchHelper.LEFT ) return val listIndexViewHolder = - viewHolder as ListIndexAdapter.ListIndexListViewHolder + viewHolder as EditComponentListAdapter.ListIndexListViewHolder ExecSimpleDelete.removeController( - editFragment, + fragment, recyclerView, - listIndexForEditAdapter, - listIndexViewHolder.fileName, + editComponentListAdapter, + editComponentListAdapter.lineMapList[listIndexViewHolder.bindingAdapterPosition], listIndexViewHolder.bindingAdapterPosition, ) } @@ -101,38 +107,45 @@ object ItemTouchHelperCallbackForListIndexAdapter { } private fun switchHandler( - editFragment: EditFragment, - listIndexForEditAdapter: ListIndexAdapter, - fromViewHolder: ListIndexAdapter.ListIndexListViewHolder, - toViewHolder: ListIndexAdapter.ListIndexListViewHolder + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + editComponentListAdapter: EditComponentListAdapter, + fromViewHolder: EditComponentListAdapter.ListIndexListViewHolder, + toViewHolder: EditComponentListAdapter.ListIndexListViewHolder ){ - val listIndexTypeKey = ListIndexAdapter.listIndexTypeKey - when(listIndexTypeKey){ -// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL -> {} - TypeSettingsForListIndex.ListIndexTypeKey.NORMAL -> { - val fromFileName = fromViewHolder.fileName - val toFileName = toViewHolder.fileName - val fromMaterialCardView = fromViewHolder.materialCardView - val toMaterialCardView = toViewHolder.materialCardView - val fromChecked = fromMaterialCardView.isChecked - val toChecked = toMaterialCardView.isChecked - fromMaterialCardView.isChecked = toChecked - toMaterialCardView.isChecked = fromChecked - val parentDirPath = ListSettingsForListIndex.ListIndexListMaker.getFilterDir( - editFragment, - ListIndexAdapter.indexListMap, - ListIndexAdapter.listIndexTypeKey - ) - FileSystems.switchLastModify( - File(parentDirPath, fromFileName), - File(parentDirPath, toFileName) - ) - } - TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT -> - ExecSwitcherForListIndexAdapter.updateTsv( - editFragment, - listIndexForEditAdapter.listIndexList - ) - } + ExecSwitcherForListIndexAdapter.updateTsv( + fannelInfoMap, + setReplaceVariableMap, + editComponentListAdapter, + editComponentListAdapter.lineMapList + ) +// val listIndexTypeKey = ListIndexAdapter.listIndexTypeKey +// when(listIndexTypeKey){ +//// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL -> {} +// TypeSettingsForListIndex.ListIndexTypeKey.NORMAL -> { +// val fromFileName = fromViewHolder.fileName +// val toFileName = toViewHolder.fileName +// val fromMaterialCardView = fromViewHolder.materialCardView +// val toMaterialCardView = toViewHolder.materialCardView +// val fromChecked = fromMaterialCardView.isChecked +// val toChecked = toMaterialCardView.isChecked +// fromMaterialCardView.isChecked = toChecked +// toMaterialCardView.isChecked = fromChecked +// val parentDirPath = ListSettingsForListIndex.ListIndexListMaker.getFilterDir( +// editFragment, +// ListIndexAdapter.indexListMap, +// ListIndexAdapter.listIndexTypeKey +// ) +// FileSystems.switchLastModify( +// File(parentDirPath, fromFileName), +// File(parentDirPath, toFileName) +// ) +// } +// TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT -> +// ExecSwitcherForListIndexAdapter.updateTsv( +// editFragment, +// listIndexForEditAdapter.listIndexList +// ) +// } } } diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/lib/EditVariableName.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/lib/EditVariableName.kt index 483a56d4d..a58a0d4e2 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/edit/lib/EditVariableName.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/lib/EditVariableName.kt @@ -2,22 +2,21 @@ package com.puutaro.commandclick.proccess.edit.lib import androidx.fragment.app.activityViewModels import com.puutaro.commandclick.fragment.EditFragment -import com.puutaro.commandclick.util.edit_tool.CcEditComponent import com.puutaro.commandclick.view_model.activity.EditViewModel object EditVariableName { - fun getText( - editFragment: EditFragment, - targetVariableName: String, - ): String { - val editViewModel: EditViewModel by editFragment.activityViewModels() - val editTextId = editViewModel.variableNameToEditTextIdMap.get(targetVariableName) - ?: return String() - val editTextInEditFragment = CcEditComponent.findEditTextView( - editTextId, - CcEditComponent.makeEditLinearLayoutList(editFragment) - ) ?: return String() - return editTextInEditFragment.text.toString() - } +// fun getText( +// editFragment: EditFragment, +// targetVariableName: String, +// ): String { +// val editViewModel: EditViewModel by editFragment.activityViewModels() +// val editTextId = editViewModel.variableNameToEditTextIdMap.get(targetVariableName) +// ?: return String() +//// val editTextInEditFragment = CcEditComponent.findEditTextView( +//// editTextId, +//// CcEditComponent.makeEditLinearLayoutList(editFragment) +//// ) ?: return String() +//// return editTextInEditFragment.text.toString() +// } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/lib/LayoutSettingFile.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/lib/LayoutSettingFile.kt new file mode 100644 index 000000000..1109c4a81 --- /dev/null +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/lib/LayoutSettingFile.kt @@ -0,0 +1,35 @@ +package com.puutaro.commandclick.proccess.edit.lib + +import com.puutaro.commandclick.common.variable.path.UsePath +import com.puutaro.commandclick.util.file.FileSystems +import com.puutaro.commandclick.util.str.QuoteTool +import java.io.File + +object LayoutSettingFile { + + fun read( + settingFilePath: String, + fannelPath: String, + setReplaceVariableCompleteMap: Map?, + onImport: Boolean = true + ): List { + return SettingFile.readLayout( + settingFilePath, + fannelPath, + setReplaceVariableCompleteMap, + onImport + ).let { +// FileSystems.updateFile( +// File(UsePath.cmdclickDefaultAppDirPath, "layoutSettingFile.txt").absolutePath, +// listOf( +// "settingFile: ${it}", +// ).joinToString("\n") + "\n------\n" +// ) + QuoteTool.layoutSplitBySurroundedIgnore( + it, + ) + } + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/lib/ListContentsSaverByTag.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/lib/ListContentsSaverByTag.kt index 8e3209090..1aff9d5e1 100644 --- a/app/src/main/java/com/puutaro/commandclick/proccess/edit/lib/ListContentsSaverByTag.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/lib/ListContentsSaverByTag.kt @@ -12,95 +12,95 @@ object ListContentsSaverByTag { editFragment: EditFragment, currentButtonTagList: List ) { - if ( - currentButtonTagList.isEmpty() - ) return - val saveTagsKey = - ListContentsSelectSpinnerViewProducer.ListContentsEditKey.saveTags.name - val listContentsMap = editFragment.listConSelectBoxMapList.firstOrNull { - val saveTagName = it?.get(saveTagsKey) - ?: return@firstOrNull false - currentButtonTagList.contains(saveTagName) - } - if ( - listContentsMap.isNullOrEmpty() - ) return - val saveTargetListFilePath = - listContentsMap.get( - ListContentsSelectSpinnerViewProducer.ListContentsEditKey.listPath.name - ) - if ( - saveTargetListFilePath.isNullOrEmpty() - ) return - val saveValName = - listContentsMap.get( - ListContentsSelectSpinnerViewProducer.ListContentsEditKey.saveValName.name - ) - if ( - saveValName.isNullOrEmpty() - ) return - val saveFilterShellPath = - listContentsMap.get( - ListContentsSelectSpinnerViewProducer.ListContentsEditKey.saveFilterShellPath.name - ) - val filterSaveValue = when ( - saveFilterShellPath.isNullOrEmpty() - ) { - true -> EditVariableName.getText( - editFragment, - saveValName.trim() - ) - else -> makeShellConForListConSBFilter( - editFragment, - saveFilterShellPath, - saveValName, - ) - } - if ( - filterSaveValue.isNullOrEmpty() - ) return - ListContentsSelectBoxTool.updateListFileCon( - saveTargetListFilePath, - filterSaveValue - ) +// if ( +// currentButtonTagList.isEmpty() +// ) return +// val saveTagsKey = +// ListContentsSelectSpinnerViewProducer.ListContentsEditKey.saveTags.name +// val listContentsMap = editFragment.listConSelectBoxMapList.firstOrNull { +// val saveTagName = it?.get(saveTagsKey) +// ?: return@firstOrNull false +// currentButtonTagList.contains(saveTagName) +// } +// if ( +// listContentsMap.isNullOrEmpty() +// ) return +// val saveTargetListFilePath = +// listContentsMap.get( +// ListContentsSelectSpinnerViewProducer.ListContentsEditKey.listPath.name +// ) +// if ( +// saveTargetListFilePath.isNullOrEmpty() +// ) return +// val saveValName = +// listContentsMap.get( +// ListContentsSelectSpinnerViewProducer.ListContentsEditKey.saveValName.name +// ) +// if ( +// saveValName.isNullOrEmpty() +// ) return +// val saveFilterShellPath = +// listContentsMap.get( +// ListContentsSelectSpinnerViewProducer.ListContentsEditKey.saveFilterShellPath.name +// ) +// val filterSaveValue = when ( +// saveFilterShellPath.isNullOrEmpty() +// ) { +// true -> EditVariableName.getText( +// editFragment, +// saveValName.trim() +// ) +// else -> makeShellConForListConSBFilter( +// editFragment, +// saveFilterShellPath, +// saveValName, +// ) +// } +// if ( +// filterSaveValue.isNullOrEmpty() +// ) return +// ListContentsSelectBoxTool.updateListFileCon( +// saveTargetListFilePath, +// filterSaveValue +// ) } - private fun makeShellConForListConSBFilter( - editFragment: EditFragment, - saveFilterShellPath: String, - saveValName: String, - ): String? { - val saveTextCon = "\${CMDCLICK_TEXT_CONTENTS}" - val saveFilterShellPathObj = File(saveFilterShellPath) - val shellParentDirPath = saveFilterShellPathObj.parent - ?: return null - val fannelInfoMap = editFragment.fannelInfoMap -// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( +// private fun makeShellConForListConSBFilter( +// editFragment: EditFragment, +// saveFilterShellPath: String, +// saveValName: String, +// ): String? { +// val saveTextCon = "\${CMDCLICK_TEXT_CONTENTS}" +// val saveFilterShellPathObj = File(saveFilterShellPath) +// val shellParentDirPath = saveFilterShellPathObj.parent +// ?: return null +// val fannelInfoMap = editFragment.fannelInfoMap +//// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( +//// fannelInfoMap +//// ) +// val currentFannelName = FannelInfoTool.getCurrentFannelName( // fannelInfoMap // ) - val currentFannelName = FannelInfoTool.getCurrentFannelName( - fannelInfoMap - ) - val saveValue = EditVariableName.getText( - editFragment, - saveValName - ) - val shellCon = ReadText( - File( - shellParentDirPath, - saveFilterShellPathObj.name - ).absolutePath - ).readText().replace( - saveTextCon, - saveValue - ).let { - SetReplaceVariabler.execReplaceByReplaceVariables( - it, - editFragment.setReplaceVariableMap, -// currentAppDirPath, - currentFannelName - ) - } - return editFragment.busyboxExecutor?.getCmdOutput(shellCon) - } +// val saveValue = EditVariableName.getText( +// editFragment, +// saveValName +// ) +// val shellCon = ReadText( +// File( +// shellParentDirPath, +// saveFilterShellPathObj.name +// ).absolutePath +// ).readText().replace( +// saveTextCon, +// saveValue +// ).let { +// SetReplaceVariabler.execReplaceByReplaceVariables( +// it, +// editFragment.setReplaceVariableMap, +//// currentAppDirPath, +// currentFannelName +// ) +// } +// return editFragment.busyboxExecutor?.getCmdOutput(shellCon) +// } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/lib/ListContentsSelectBoxTool.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/lib/ListContentsSelectBoxTool.kt index 900f86ec8..779a88f36 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/edit/lib/ListContentsSelectBoxTool.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/lib/ListContentsSelectBoxTool.kt @@ -11,74 +11,74 @@ object ListContentsSelectBoxTool { private const val escapeCharHyphen = "-" private const val buttonTagSeparator = "&" - fun saveListContents( - editFragment: EditFragment, - currentButtonTag: String? - ){ - /* - Save [list contents select box]() on click button with tag - */ - val saveTextCon = "\${CMDCLICK_TEXT_CONTENTS}" - if( - currentButtonTag.isNullOrEmpty() - ) return - val saveTagsKey = ListContentsSelectSpinnerViewProducer.ListContentsEditKey.saveTags.name - val listContentsMap = editFragment.listConSelectBoxMapList.firstOrNull { - if( - it.isNullOrEmpty() - ) return@firstOrNull false - val saveTagKeyList = it.get(saveTagsKey)?.split(buttonTagSeparator) - if( - saveTagKeyList.isNullOrEmpty() - ) return@firstOrNull false - saveTagKeyList.contains(currentButtonTag) - } - if( - listContentsMap.isNullOrEmpty() - ) return - val saveTargetListFilePath = - listContentsMap.get( - ListContentsSelectSpinnerViewProducer.ListContentsEditKey.listPath.name - ) - if( - saveTargetListFilePath.isNullOrEmpty() - ) return - val saveValName = - listContentsMap.get( - ListContentsSelectSpinnerViewProducer.ListContentsEditKey.saveValName.name - ) - if( - saveValName.isNullOrEmpty() - ) return - val saveFilterShellPath = - listContentsMap.get( - ListContentsSelectSpinnerViewProducer.ListContentsEditKey.saveFilterShellPath.name - ) - val saveValue = EditVariableName.getText( - editFragment, - saveValName - ) - val filterSaveValue = when(saveFilterShellPath.isNullOrEmpty()) { - true -> return - else -> { - editFragment.busyboxExecutor?.getCmdOutput( - ReadText( - saveFilterShellPath - ).readText().replace( - saveTextCon, - saveValue - ) - ) - } - } - if( - filterSaveValue.isNullOrEmpty() - ) return - updateListFileCon( - saveTargetListFilePath, - filterSaveValue - ) - } +// fun saveListContents( +// editFragment: EditFragment, +// currentButtonTag: String? +// ){ +// /* +// Save [list contents select box]() on click button with tag +// */ +// val saveTextCon = "\${CMDCLICK_TEXT_CONTENTS}" +// if( +// currentButtonTag.isNullOrEmpty() +// ) return +// val saveTagsKey = ListContentsSelectSpinnerViewProducer.ListContentsEditKey.saveTags.name +// val listContentsMap = editFragment.listConSelectBoxMapList.firstOrNull { +// if( +// it.isNullOrEmpty() +// ) return@firstOrNull false +// val saveTagKeyList = it.get(saveTagsKey)?.split(buttonTagSeparator) +// if( +// saveTagKeyList.isNullOrEmpty() +// ) return@firstOrNull false +// saveTagKeyList.contains(currentButtonTag) +// } +// if( +// listContentsMap.isNullOrEmpty() +// ) return +// val saveTargetListFilePath = +// listContentsMap.get( +// ListContentsSelectSpinnerViewProducer.ListContentsEditKey.listPath.name +// ) +// if( +// saveTargetListFilePath.isNullOrEmpty() +// ) return +// val saveValName = +// listContentsMap.get( +// ListContentsSelectSpinnerViewProducer.ListContentsEditKey.saveValName.name +// ) +// if( +// saveValName.isNullOrEmpty() +// ) return +// val saveFilterShellPath = +// listContentsMap.get( +// ListContentsSelectSpinnerViewProducer.ListContentsEditKey.saveFilterShellPath.name +// ) +// val saveValue = EditVariableName.getText( +// editFragment, +// saveValName +// ) +// val filterSaveValue = when(saveFilterShellPath.isNullOrEmpty()) { +// true -> return +// else -> { +// editFragment.busyboxExecutor?.getCmdOutput( +// ReadText( +// saveFilterShellPath +// ).readText().replace( +// saveTextCon, +// saveValue +// ) +// ) +// } +// } +// if( +// filterSaveValue.isNullOrEmpty() +// ) return +// updateListFileCon( +// saveTargetListFilePath, +// filterSaveValue +// ) +// } fun updateListFileCon( targetListFilePath: String, diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/lib/ListSettingVariableListMaker.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/lib/ListSettingVariableListMaker.kt index 41eb57761..edb18ad3f 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/edit/lib/ListSettingVariableListMaker.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/lib/ListSettingVariableListMaker.kt @@ -6,6 +6,7 @@ import com.puutaro.commandclick.common.variable.settings.EditSettings import com.puutaro.commandclick.util.str.QuoteTool import com.puutaro.commandclick.util.str.ScriptPreWordReplacer import com.puutaro.commandclick.util.SettingVariableReader +import com.puutaro.commandclick.util.file.FileSystems import com.puutaro.commandclick.util.map.CmdClickMap import com.puutaro.commandclick.util.state.FannelInfoTool import java.io.File @@ -107,6 +108,40 @@ object ListSettingVariableListMaker { } } + fun makeFromSettingPath( + settingPath: String, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + ): Map { + val currentFannelName = FannelInfoTool.getCurrentFannelName(fannelInfoMap) + val configMapStr = SettingFile.read( + settingPath, + File(UsePath.cmdclickDefaultAppDirPath, currentFannelName).absolutePath, + setReplaceVariableMap, + true + ) +// FileSystems.writeFile( +// File(UsePath.cmdclickDefaultAppDirPath, "ltitleSetting.txt").absolutePath, +// listOf( +// "settingPath: ${settingPath}", +// "currentFannelName: ${currentFannelName}", +// "configMapStr: ${configMapStr}", +// "settingMap: ${createFromSettingVal( +// configMapStr, +// String(), +// fannelInfoMap, +// setReplaceVariableMap +// )}" +// ).joinToString("\n") +// ) + return createFromSettingVal( + configMapStr, + String(), + fannelInfoMap, + setReplaceVariableMap + ) + } + private fun createFromSettingVal( settingValConSrc: String, defaultConfigMapStr: String, @@ -246,11 +281,11 @@ object ListSettingVariableListMaker { UsePath.fannelSettingVariablsDirPath, UsePath.setVariableTypesConfig ).absolutePath - CommandClickScriptVariable.HIDE_SETTING_VARIABLES - -> File( - UsePath.fannelSettingVariablsDirPath, - UsePath.hideSettingVariablesConfig - ).absolutePath +// CommandClickScriptVariable.HIDE_SETTING_VARIABLES +// -> File( +// UsePath.fannelSettingVariablsDirPath, +// UsePath.hideSettingVariablesConfig +// ).absolutePath CommandClickScriptVariable.IGNORE_HISTORY_PATHS -> File( UsePath.fannelSettingVariablsDirPath, @@ -268,8 +303,8 @@ object ListSettingVariableListMaker { -> UsePath.listIndexForEditConfigPath CommandClickScriptVariable.FANNEL_STATE_CONFIG -> UsePath.fannelStateConfigPath - CommandClickScriptVariable.QR_DIALOG_CONFIG - -> UsePath.qrDialogConfigPath +// CommandClickScriptVariable.QR_DIALOG_CONFIG +// -> UsePath.qrDialogConfigPath CommandClickScriptVariable.EDIT_BOX_TITLE_CONFIG -> UsePath.editTitleConfigPath CommandClickScriptVariable.IMPORT_DISABLE_VAL_LIST diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/lib/ScriptContentsLister.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/lib/ScriptContentsLister.kt index ff4757778..00c8fd45b 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/edit/lib/ScriptContentsLister.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/lib/ScriptContentsLister.kt @@ -4,52 +4,51 @@ import android.widget.LinearLayout import androidx.appcompat.widget.LinearLayoutCompat import com.puutaro.commandclick.common.variable.edit.RecordNumToMapNameValueInHolderColumn import com.puutaro.commandclick.util.CompleteQuote -import com.puutaro.commandclick.util.edit_tool.CcEditComponent object ScriptContentsLister { - fun update( - editLinearLayoutList: List, - recordNumToMapNameValueInHolder: Map?>, - scriptContentsList: List, - startIdNum: Int - ): List { - val factRecordNumToNameToValueInHolderSize = recordNumToMapNameValueInHolder.size - 1 - if(factRecordNumToNameToValueInHolderSize <= -1) return scriptContentsList - val editedRecordNumToNameToValue = (0..factRecordNumToNameToValueInHolderSize).map { - val currentId = startIdNum + it - val editTextView = CcEditComponent.findEditTextView( - currentId, - editLinearLayoutList - ) ?: return@map String() to emptyMap() - val currentRecordNumToMapNameValue = - recordNumToMapNameValueInHolder.entries.elementAt(it) - val currentVriableValue = editTextView.text.toString() - currentRecordNumToMapNameValue.key to - mapOf( - RecordNumToMapNameValueInHolderColumn.VARIABLE_NAME.name - to editTextView.tag.toString(), - RecordNumToMapNameValueInHolderColumn.VARIABLE_VALUE.name - to CompleteQuote.comp(currentVriableValue) - ) - }.toMap() - val processScriptSize = scriptContentsList.size - 1 - if(processScriptSize <= -1) return scriptContentsList - return (0..processScriptSize).map { - currentOrder -> - val getReplaceValue = editedRecordNumToNameToValue.get(currentOrder) - if(getReplaceValue.isNullOrEmpty()){ - scriptContentsList[currentOrder] - } else { - val currentVariableName = getReplaceValue.get( - RecordNumToMapNameValueInHolderColumn.VARIABLE_NAME.name - ) - val currentVariableValue = getReplaceValue.get( - RecordNumToMapNameValueInHolderColumn.VARIABLE_VALUE.name - )?.let { - CompleteQuote.comp(it) - } - "${currentVariableName}=${currentVariableValue}" - } - } - } +// fun update( +// editLinearLayoutList: List, +// recordNumToMapNameValueInHolder: Map?>, +// scriptContentsList: List, +// startIdNum: Int +// ): List { +// val factRecordNumToNameToValueInHolderSize = recordNumToMapNameValueInHolder.size - 1 +// if(factRecordNumToNameToValueInHolderSize <= -1) return scriptContentsList +// val editedRecordNumToNameToValue = (0..factRecordNumToNameToValueInHolderSize).map { +// val currentId = startIdNum + it +// val editTextView = CcEditComponent.findEditTextView( +// currentId, +// editLinearLayoutList +// ) ?: return@map String() to emptyMap() +// val currentRecordNumToMapNameValue = +// recordNumToMapNameValueInHolder.entries.elementAt(it) +// val currentVriableValue = editTextView.text.toString() +// currentRecordNumToMapNameValue.key to +// mapOf( +// RecordNumToMapNameValueInHolderColumn.VARIABLE_NAME.name +// to editTextView.tag.toString(), +// RecordNumToMapNameValueInHolderColumn.VARIABLE_VALUE.name +// to CompleteQuote.comp(currentVriableValue) +// ) +// }.toMap() +// val processScriptSize = scriptContentsList.size - 1 +// if(processScriptSize <= -1) return scriptContentsList +// return (0..processScriptSize).map { +// currentOrder -> +// val getReplaceValue = editedRecordNumToNameToValue.get(currentOrder) +// if(getReplaceValue.isNullOrEmpty()){ +// scriptContentsList[currentOrder] +// } else { +// val currentVariableName = getReplaceValue.get( +// RecordNumToMapNameValueInHolderColumn.VARIABLE_NAME.name +// ) +// val currentVariableValue = getReplaceValue.get( +// RecordNumToMapNameValueInHolderColumn.VARIABLE_VALUE.name +// )?.let { +// CompleteQuote.comp(it) +// } +// "${currentVariableName}=${currentVariableValue}" +// } +// } +// } } diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/lib/SetVariableTyper.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/lib/SetVariableTyper.kt index 54799b2d8..166458021 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/edit/lib/SetVariableTyper.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/lib/SetVariableTyper.kt @@ -16,357 +16,357 @@ import com.puutaro.commandclick.util.str.ScriptPreWordReplacer import com.puutaro.commandclick.util.map.CmdClickMap import java.io.File -object SetVariableTyper { - - private val setValSeparator = '|' - private val typeSeparator = '?' - private val filePrefix = EditSettings.filePrefix - private val setVariableTypesConfigPathSrc = "${UsePath.fannelSettingVariablsDirPath}/${UsePath.setVariableTypesConfig}" - private val noIndexTypeList = TypeVariable.noIndexTypeList - - fun makeRecordNumToSetVariableMaps( - fragment: Fragment, - setVariableTypeList: List?, - recordNumToMapNameValueInCommandHolder: Map?>?, - replaceVariableMap: Map?, - busyboxExecutor: BusyboxExecutor?, - ): Map>? { - val context = fragment.context - ?: return null - if( - setVariableTypeList == null - ) return null - val usedRecordNumSet = mutableSetOf() - val setVariableTypeListLength = setVariableTypeList.size - 1 - if( - setVariableTypeListLength < 0 - ) return null -// val busyboxExecutor = BusyboxExecutor( -// context, -// UbuntuFiles(context) +//object SetVariableTyper { +// +// private val setValSeparator = '|' +// private val typeSeparator = '?' +// private val filePrefix = EditSettings.filePrefix +// private val setVariableTypesConfigPathSrc = "${UsePath.fannelSettingVariablsDirPath}/${UsePath.setVariableTypesConfig}" +// private val noIndexTypeList = TypeVariable.noIndexTypeList +// +// fun makeRecordNumToSetVariableMaps( +// fragment: Fragment, +// setVariableTypeList: List?, +// recordNumToMapNameValueInCommandHolder: Map?>?, +// replaceVariableMap: Map?, +// busyboxExecutor: BusyboxExecutor?, +// ): Map>? { +// val context = fragment.context +// ?: return null +// if( +// setVariableTypeList == null +// ) return null +// val usedRecordNumSet = mutableSetOf() +// val setVariableTypeListLength = setVariableTypeList.size - 1 +// if( +// setVariableTypeListLength < 0 +// ) return null +//// val busyboxExecutor = BusyboxExecutor( +//// context, +//// UbuntuFiles(context) +//// ) +// return (0..setVariableTypeListLength).map { +// val currentFetchSetVariableType = setVariableTypeList[it] +// val currentFetchSetVariableTypeLength = currentFetchSetVariableType.length +// val equalIndex = currentFetchSetVariableType.indexOf('=') +// if(equalIndex == -1) { +// LogSystems.stdErr( +// context, +// "not found '=': " + +// currentFetchSetVariableType +// ) +// return null +// } +// val variableNameAddType = currentFetchSetVariableType.substring( +// 0, equalIndex +// ) +// val variableNameAddTypeLength = variableNameAddType.length +// val colonIndex = variableNameAddType.indexOf(':') +// if(colonIndex == -1) { +// LogSystems.stdErr( +// context, +// "not found ':': " + +// currentFetchSetVariableType +// ) +// return null +// } +// val variableName = variableNameAddType.substring( +// 0, colonIndex +// ) +// val variableType = variableNameAddType.substring( +// colonIndex+1, variableNameAddTypeLength +// ) +// val variableTypeValueSrc = currentFetchSetVariableType.substring( +// equalIndex + 1, currentFetchSetVariableTypeLength +// ) +// val variableTypeValue = AlterToolForSetValType.makeVariableTypeValueByAlter( +// context, +// variableTypeValueSrc, +// busyboxExecutor, +// replaceVariableMap, +// ) +// val hitRecordNumList = recordNumToMapNameValueInCommandHolder?.filterValues { +// keyValueMap -> +// keyValueMap?.get( +// RecordNumToMapNameValueInHolderColumn.VARIABLE_NAME.name +// ) == variableName +// }?.keys?.toList() +// val aliveHitRecordNumList = hitRecordNumList?.filter { +// !usedRecordNumSet.contains(it) +// } +// val aliveHitRecordNumFirst = aliveHitRecordNumList?.firstOrNull() ?: -1 +// usedRecordNumSet.add(aliveHitRecordNumFirst) +// aliveHitRecordNumFirst to mapOf( +// SetVariableTypeColumn.VARIABLE_NAME.name +// to variableName, +// SetVariableTypeColumn.VARIABLE_TYPE.name +// to VisibleTool.reflectVisibleToType( +// variableType, +// variableTypeValue, +// ), +// SetVariableTypeColumn.VARIABLE_TYPE_VALUE.name +// to VisibleTool.reflectVisibleToTypeValue( +// variableTypeValue +// ) +// ) +// }.toMap().filterKeys { it >= 0 } +// } +// +// fun makeSetVariableTypeList( +// recordNumToMapNameValueInSettingHolder: Map?>?, +//// currentAppDirPath: String, +// currentShellFileName: String, +// setReplaceVariableMap: Map? +// ): List? { +// return recordNumToMapNameValueInSettingHolder?.filter { +// entry -> +// entry.value?.get( +// RecordNumToMapNameValueInHolderColumn.VARIABLE_NAME.name +// ) == CommandClickScriptVariable.SET_VARIABLE_TYPE +// }?.map { +// entry -> +// val entryValue = entry.value +// val setTargetVariableValueBeforeTrim = entryValue?.get( +// RecordNumToMapNameValueInHolderColumn.VARIABLE_VALUE.name +// ) +// val setTargetVariableValueSource = if(setTargetVariableValueBeforeTrim?.indexOf('"') == 0){ +// setTargetVariableValueBeforeTrim.trim('"') +// } else if(setTargetVariableValueBeforeTrim?.indexOf('\'') == 0){ +// setTargetVariableValueBeforeTrim.trim('\'') +// } else { +// setTargetVariableValueBeforeTrim +// } ?: String() +// if( +// !setTargetVariableValueSource.startsWith( +// filePrefix +// ) +// ) return@map setTargetVariableValueSource +// makeSetVariableValueFromConfigFile( +//// currentAppDirPath, +// currentShellFileName, +// setReplaceVariableMap +// ) +// }?.joinToString(",") +// ?.let { +// QuoteTool.splitBySurroundedIgnore( +// QuoteTool.trimBothEdgeQuote(it), +// ',' +// ) +// }?.filter { it.isNotEmpty() } +// } +// +// private fun makeSetVariableValueFromConfigFile( +//// currentAppDirPath: String, +// currentShellFileName: String, +// setReplaceVariableMap: Map? +// ): String { +// return makeSetVariableValueFromFilePath( +// setVariableTypesConfigPathSrc.removePrefix( +// filePrefix +// ), +//// currentAppDirPath, +// currentShellFileName, +// setReplaceVariableMap, // ) - return (0..setVariableTypeListLength).map { - val currentFetchSetVariableType = setVariableTypeList[it] - val currentFetchSetVariableTypeLength = currentFetchSetVariableType.length - val equalIndex = currentFetchSetVariableType.indexOf('=') - if(equalIndex == -1) { - LogSystems.stdErr( - context, - "not found '=': " + - currentFetchSetVariableType - ) - return null - } - val variableNameAddType = currentFetchSetVariableType.substring( - 0, equalIndex - ) - val variableNameAddTypeLength = variableNameAddType.length - val colonIndex = variableNameAddType.indexOf(':') - if(colonIndex == -1) { - LogSystems.stdErr( - context, - "not found ':': " + - currentFetchSetVariableType - ) - return null - } - val variableName = variableNameAddType.substring( - 0, colonIndex - ) - val variableType = variableNameAddType.substring( - colonIndex+1, variableNameAddTypeLength - ) - val variableTypeValueSrc = currentFetchSetVariableType.substring( - equalIndex + 1, currentFetchSetVariableTypeLength - ) - val variableTypeValue = AlterToolForSetValType.makeVariableTypeValueByAlter( - context, - variableTypeValueSrc, - busyboxExecutor, - replaceVariableMap, - ) - val hitRecordNumList = recordNumToMapNameValueInCommandHolder?.filterValues { - keyValueMap -> - keyValueMap?.get( - RecordNumToMapNameValueInHolderColumn.VARIABLE_NAME.name - ) == variableName - }?.keys?.toList() - val aliveHitRecordNumList = hitRecordNumList?.filter { - !usedRecordNumSet.contains(it) - } - val aliveHitRecordNumFirst = aliveHitRecordNumList?.firstOrNull() ?: -1 - usedRecordNumSet.add(aliveHitRecordNumFirst) - aliveHitRecordNumFirst to mapOf( - SetVariableTypeColumn.VARIABLE_NAME.name - to variableName, - SetVariableTypeColumn.VARIABLE_TYPE.name - to VisibleTool.reflectVisibleToType( - variableType, - variableTypeValue, - ), - SetVariableTypeColumn.VARIABLE_TYPE_VALUE.name - to VisibleTool.reflectVisibleToTypeValue( - variableTypeValue - ) - ) - }.toMap().filterKeys { it >= 0 } - } - - fun makeSetVariableTypeList( - recordNumToMapNameValueInSettingHolder: Map?>?, -// currentAppDirPath: String, - currentShellFileName: String, - setReplaceVariableMap: Map? - ): List? { - return recordNumToMapNameValueInSettingHolder?.filter { - entry -> - entry.value?.get( - RecordNumToMapNameValueInHolderColumn.VARIABLE_NAME.name - ) == CommandClickScriptVariable.SET_VARIABLE_TYPE - }?.map { - entry -> - val entryValue = entry.value - val setTargetVariableValueBeforeTrim = entryValue?.get( - RecordNumToMapNameValueInHolderColumn.VARIABLE_VALUE.name - ) - val setTargetVariableValueSource = if(setTargetVariableValueBeforeTrim?.indexOf('"') == 0){ - setTargetVariableValueBeforeTrim.trim('"') - } else if(setTargetVariableValueBeforeTrim?.indexOf('\'') == 0){ - setTargetVariableValueBeforeTrim.trim('\'') - } else { - setTargetVariableValueBeforeTrim - } ?: String() - if( - !setTargetVariableValueSource.startsWith( - filePrefix - ) - ) return@map setTargetVariableValueSource - makeSetVariableValueFromConfigFile( -// currentAppDirPath, - currentShellFileName, - setReplaceVariableMap - ) - }?.joinToString(",") - ?.let { - QuoteTool.splitBySurroundedIgnore( - QuoteTool.trimBothEdgeQuote(it), - ',' - ) - }?.filter { it.isNotEmpty() } - } - - private fun makeSetVariableValueFromConfigFile( -// currentAppDirPath: String, - currentShellFileName: String, - setReplaceVariableMap: Map? - ): String { - return makeSetVariableValueFromFilePath( - setVariableTypesConfigPathSrc.removePrefix( - filePrefix - ), -// currentAppDirPath, - currentShellFileName, - setReplaceVariableMap, - ) - } - - private fun makeSetVariableValueFromFilePath( - configFilePath: String, -// currentAppDirPath: String, - currentShellFileName: String, - setReplaceVariableMap: Map? - ): String { - val setVariableTypesConfigPath = - ScriptPreWordReplacer.replace( - configFilePath, -// currentAppDirPath, - currentShellFileName, - ) - return SettingFile.read( - File(UsePath.cmdclickDefaultAppDirPath, currentShellFileName).absolutePath, - setVariableTypesConfigPath, - setReplaceVariableMap, - ) - } - - fun getCertainSetValIndexMap( - currentSetVariableValue: String?, - currentComponentIndex: Int - ): Map? { - return currentSetVariableValue?.let { - if( - it.contains( - setValSeparator - ) - ) return@let QuoteTool.splitBySurroundedIgnore( - it, - setValSeparator - ) - .getOrNull(currentComponentIndex).let { - QuoteTool.trimBothEdgeQuote(it) - } - QuoteTool.trimBothEdgeQuote(it) - }?.let { - CmdClickMap.createMap( - it, - typeSeparator - ) - }?.toMap() - } - - private object VisibleTool { - const val visibleOffValue = "OFF" - - fun howDisableVisible( - variableTypeValue: String, - ): Boolean { - val onRemoveKey = SetValUniqKey.ON_PUT.key - val visibleOffStr = "${onRemoveKey}=${visibleOffValue}" - val visibleOffOnTheWayStr = "${typeSeparator}${onRemoveKey}=${visibleOffValue}" - return variableTypeValue.startsWith(visibleOffStr) - || variableTypeValue.contains(visibleOffOnTheWayStr) - } - fun reflectVisibleToType( - variableType: String, - variableTypeValue: String, - ): String { - val typeConcat = ":" - val noVisibleIndexList = - QuoteTool.splitBySurroundedIgnore( - variableTypeValue, - setValSeparator - ).mapIndexed { index, s -> - val disableVisible = howDisableVisible(s) - when(disableVisible){ - true -> index - false -> -1 - } - }.filter { it >= 0 } - var currentValidIndexSeed = 0 - return variableType.split(typeConcat).filter { - val isNoIndexType = - noIndexTypeList.contains(it) - if( - isNoIndexType - ) return@filter true - val isVisibleIndex = - !noVisibleIndexList.contains(currentValidIndexSeed) - currentValidIndexSeed++ - isVisibleIndex - }.joinToString(typeConcat) - } - - fun reflectVisibleToTypeValue( - variableTypeValue: String, - ): String { - return QuoteTool.splitBySurroundedIgnore( - variableTypeValue, - setValSeparator - ).filter { - val enableVisible = !howDisableVisible(it) - enableVisible - }.joinToString(setValSeparator.toString()) - } - } -} - -private object AlterToolForSetValType { - - private const val alterKeyName = JsAcAlterIfTool.alterKeyName - private const val setValSeparator = '|' - private const val typeSeparator = '?' - private const val ifArgsSeparator = '&' - - fun makeVariableTypeValueByAlter( - context: Context?, - variableTypeValue: String, - busyboxExecutor: BusyboxExecutor?, - replaceVariableMap: Map? - ): String { - if( - busyboxExecutor == null - ) return variableTypeValue - val varValueElList = QuoteTool.splitBySurroundedIgnore( - variableTypeValue, - setValSeparator - ) - val alterKeyEqualStr = "${alterKeyName}=" - return varValueElList.map { - varValueEl -> - val typeValueList = QuoteTool.splitBySurroundedIgnore( - varValueEl, - typeSeparator - ) - val alterTypeValue = typeValueList.firstOrNull { - it.startsWith(alterKeyEqualStr) - } - if( - alterTypeValue.isNullOrEmpty() - ) return@map varValueEl - val alterValue = QuoteTool.trimBothEdgeQuote( - alterTypeValue.removePrefix( - alterKeyEqualStr - ).trim() - ) - val alterKeyValuePairList = makeAlterKeyValuePairList( - alterValue, - replaceVariableMap - ) - val ifOutput = JsAcAlterIfTool.getIfOutput( - context, - busyboxExecutor, - alterKeyValuePairList, - replaceVariableMap, - ifArgsSeparator - ) - val disableAlter = ifOutput.isEmpty() - if( - disableAlter - ) return@map QuoteTool.splitBySurroundedIgnore( - varValueEl, - typeSeparator - ).filter { - !it.startsWith(alterKeyEqualStr) - }.joinToString(typeSeparator.toString()) - val updateTypeValue = JsAcAlterIfTool.execAlter( - typeValueList, - alterKeyValuePairList, - ifOutput, - typeSeparator - ) -// FileSystems.updateFile( -// File(UsePath.cmdclickDefaultAppDirPath, "setValMap_makeVariableTypeValueByalter.txt").absolutePath, -// listOf( -// "alterTypeValue: ${alterTypeValue}", -// "alterValue: ${alterValue}", -// "alterKeyValuePairList: ${alterKeyValuePairList}", -// "updateTypeValue: ${updateTypeValue}", -// ).joinToString("\n\n-------\n") +// } +// +// private fun makeSetVariableValueFromFilePath( +// configFilePath: String, +//// currentAppDirPath: String, +// currentShellFileName: String, +// setReplaceVariableMap: Map? +// ): String { +// val setVariableTypesConfigPath = +// ScriptPreWordReplacer.replace( +// configFilePath, +//// currentAppDirPath, +// currentShellFileName, // ) - updateTypeValue - }.joinToString(setValSeparator.toString()) - } - - private fun makeAlterKeyValuePairList( - alterValue: String, - replaceVariableMap: Map? - ): List> { - return SetReplaceVariabler.execReplaceByReplaceVariables( - alterValue, - replaceVariableMap, -// String(), - String() - ).let { - CmdClickMap.createMap( - it, - typeSeparator, - ) - } - } -} - -private enum class SetValUniqKey( - val key: String, -) { - ON_PUT("onPut"), -} \ No newline at end of file +// return SettingFile.read( +// File(UsePath.cmdclickDefaultAppDirPath, currentShellFileName).absolutePath, +// setVariableTypesConfigPath, +// setReplaceVariableMap, +// ) +// } +// +// fun getCertainSetValIndexMap( +// currentSetVariableValue: String?, +// currentComponentIndex: Int +// ): Map? { +// return currentSetVariableValue?.let { +// if( +// it.contains( +// setValSeparator +// ) +// ) return@let QuoteTool.splitBySurroundedIgnore( +// it, +// setValSeparator +// ) +// .getOrNull(currentComponentIndex).let { +// QuoteTool.trimBothEdgeQuote(it) +// } +// QuoteTool.trimBothEdgeQuote(it) +// }?.let { +// CmdClickMap.createMap( +// it, +// typeSeparator +// ) +// }?.toMap() +// } +// +// private object VisibleTool { +// const val visibleOffValue = "OFF" +// +// fun howDisableVisible( +// variableTypeValue: String, +// ): Boolean { +// val onRemoveKey = SetValUniqKey.ON_PUT.key +// val visibleOffStr = "${onRemoveKey}=${visibleOffValue}" +// val visibleOffOnTheWayStr = "${typeSeparator}${onRemoveKey}=${visibleOffValue}" +// return variableTypeValue.startsWith(visibleOffStr) +// || variableTypeValue.contains(visibleOffOnTheWayStr) +// } +// fun reflectVisibleToType( +// variableType: String, +// variableTypeValue: String, +// ): String { +// val typeConcat = ":" +// val noVisibleIndexList = +// QuoteTool.splitBySurroundedIgnore( +// variableTypeValue, +// setValSeparator +// ).mapIndexed { index, s -> +// val disableVisible = howDisableVisible(s) +// when(disableVisible){ +// true -> index +// false -> -1 +// } +// }.filter { it >= 0 } +// var currentValidIndexSeed = 0 +// return variableType.split(typeConcat).filter { +// val isNoIndexType = +// noIndexTypeList.contains(it) +// if( +// isNoIndexType +// ) return@filter true +// val isVisibleIndex = +// !noVisibleIndexList.contains(currentValidIndexSeed) +// currentValidIndexSeed++ +// isVisibleIndex +// }.joinToString(typeConcat) +// } +// +// fun reflectVisibleToTypeValue( +// variableTypeValue: String, +// ): String { +// return QuoteTool.splitBySurroundedIgnore( +// variableTypeValue, +// setValSeparator +// ).filter { +// val enableVisible = !howDisableVisible(it) +// enableVisible +// }.joinToString(setValSeparator.toString()) +// } +// } +//} +// +//private object AlterToolForSetValType { +// +// private const val alterKeyName = JsAcAlterIfTool.alterKeyName +// private const val setValSeparator = '|' +// private const val typeSeparator = '?' +// private const val ifArgsSeparator = '&' +// +// fun makeVariableTypeValueByAlter( +// context: Context?, +// variableTypeValue: String, +// busyboxExecutor: BusyboxExecutor?, +// replaceVariableMap: Map? +// ): String { +// if( +// busyboxExecutor == null +// ) return variableTypeValue +// val varValueElList = QuoteTool.splitBySurroundedIgnore( +// variableTypeValue, +// setValSeparator +// ) +// val alterKeyEqualStr = "${alterKeyName}=" +// return varValueElList.map { +// varValueEl -> +// val typeValueList = QuoteTool.splitBySurroundedIgnore( +// varValueEl, +// typeSeparator +// ) +// val alterTypeValue = typeValueList.firstOrNull { +// it.startsWith(alterKeyEqualStr) +// } +// if( +// alterTypeValue.isNullOrEmpty() +// ) return@map varValueEl +// val alterValue = QuoteTool.trimBothEdgeQuote( +// alterTypeValue.removePrefix( +// alterKeyEqualStr +// ).trim() +// ) +// val alterKeyValuePairList = makeAlterKeyValuePairList( +// alterValue, +// replaceVariableMap +// ) +// val ifOutput = JsAcAlterIfTool.getIfOutput( +// context, +// busyboxExecutor, +// alterKeyValuePairList, +// replaceVariableMap, +// ifArgsSeparator +// ) +// val disableAlter = ifOutput.isEmpty() +// if( +// disableAlter +// ) return@map QuoteTool.splitBySurroundedIgnore( +// varValueEl, +// typeSeparator +// ).filter { +// !it.startsWith(alterKeyEqualStr) +// }.joinToString(typeSeparator.toString()) +// val updateTypeValue = JsAcAlterIfTool.execAlter( +// typeValueList, +// alterKeyValuePairList, +// ifOutput, +// typeSeparator +// ) +//// FileSystems.updateFile( +//// File(UsePath.cmdclickDefaultAppDirPath, "setValMap_makeVariableTypeValueByalter.txt").absolutePath, +//// listOf( +//// "alterTypeValue: ${alterTypeValue}", +//// "alterValue: ${alterValue}", +//// "alterKeyValuePairList: ${alterKeyValuePairList}", +//// "updateTypeValue: ${updateTypeValue}", +//// ).joinToString("\n\n-------\n") +//// ) +// updateTypeValue +// }.joinToString(setValSeparator.toString()) +// } +// +// private fun makeAlterKeyValuePairList( +// alterValue: String, +// replaceVariableMap: Map? +// ): List> { +// return SetReplaceVariabler.execReplaceByReplaceVariables( +// alterValue, +// replaceVariableMap, +//// String(), +// String() +// ).let { +// CmdClickMap.createMap( +// it, +// typeSeparator, +// ) +// } +// } +//} +// +//private enum class SetValUniqKey( +// val key: String, +//) { +// ON_PUT("onPut"), +//} \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/edit/lib/SettingFile.kt b/app/src/main/java/com/puutaro/commandclick/proccess/edit/lib/SettingFile.kt index 38cd437d3..5b6be77ee 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/edit/lib/SettingFile.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/edit/lib/SettingFile.kt @@ -1,13 +1,15 @@ package com.puutaro.commandclick.proccess.edit.lib +import com.puutaro.commandclick.common.variable.path.UsePath import com.puutaro.commandclick.common.variable.variables.SettingFileVariables +import com.puutaro.commandclick.util.file.FileSystems import com.puutaro.commandclick.util.str.QuoteTool import com.puutaro.commandclick.util.file.ReadText import java.io.File object SettingFile { - private val importPreWord = SettingFileVariables.importPreWord + private const val importPreWord = SettingFileVariables.importPreWord fun read( settingFilePath: String, @@ -17,8 +19,6 @@ object SettingFile { ): String { val fannelPathObj = File(fannelPath) if (!fannelPathObj.isFile) return String() - val recentAppDirPath = fannelPathObj.parent - ?: String() val scriptFileName = fannelPathObj.name val firstSettingCon = ReadText( settingFilePath @@ -31,7 +31,41 @@ object SettingFile { ) return@map it importSetting( it, - recentAppDirPath, + scriptFileName, + setReplaceVariableCompleteMap + ) + }.let { + formSettingContents(it) + }.let { + SetReplaceVariabler.execReplaceByReplaceVariables( + it, + setReplaceVariableCompleteMap, +// recentAppDirPath, + scriptFileName + ) + } + } + + fun readLayout( + settingFilePath: String, + fannelPath: String, + setReplaceVariableCompleteMap: Map?, + onImport: Boolean = true + ): String { + val fannelPathObj = File(fannelPath) + if (!fannelPathObj.isFile) return String() + val scriptFileName = fannelPathObj.name + val firstSettingCon = ReadText( + settingFilePath + ).textToList() + return settingConFormatter( + firstSettingCon + ).map { + if( + !onImport + ) return@map it + importLayoutSetting( + it, scriptFileName, setReplaceVariableCompleteMap ) @@ -54,13 +88,10 @@ object SettingFile { ): String { val fannelPathObj = File(fannelPath) if (!fannelPathObj.isFile) return String() - val recentAppDirPath = fannelPathObj.parent - ?: String() val scriptFileName = fannelPathObj.name return settingConList.map { importSetting( it, - recentAppDirPath, scriptFileName, setReplaceVariableCompleteMap ) @@ -106,19 +137,77 @@ object SettingFile { }.joinToString("") } - private fun importSetting( + private fun importLayoutSetting( row: String, - recentAppDirPath: String, scriptFileName: String, setReplaceVariableCompleteMap: Map? ): String { - val trimRow = row + if ( + !row.contains(importPreWord) + ) return row + val trimRowSrc = row .trim() .trim(';') .trim(',') + val prefixLayoutSeparator = Regex("(^[-]+)").find( + trimRowSrc + )?.value ?: String() + + val suffixLayoutSeparator = Regex("([-]+)$").find( + trimRowSrc + )?.value ?: String() + val trimRow = trimRowSrc + .removePrefix(prefixLayoutSeparator) + .removeSuffix(suffixLayoutSeparator) +// FileSystems.updateFile( +// File(UsePath.cmdclickDefaultAppDirPath, "lImport00.txt").absolutePath, +// listOf( +// "row: ${row}", +// "trimRowSrc: ${trimRowSrc}", +// "prefixLayoutSeparator: ${prefixLayoutSeparator}", +// "suffixLayoutSeparator: ${suffixLayoutSeparator}", +// "trimRow: ${trimRow}" +// ).joinToString("\n") +// ) +// FileSystems.updateFile( +// File(UsePath.cmdclickDefaultAppDirPath, "lImport.txt").absolutePath, +// listOf( +// "row: ${row}", +// "trimRowSrc: ${trimRowSrc}", +// "trimRow: ${trimRow}" +// ).joinToString("\n") +// ) + return trimRow + .replace("${importPreWord}=", "") + .trim() + .let { + SetReplaceVariabler.execReplaceByReplaceVariables( + it, + setReplaceVariableCompleteMap, +// recentAppDirPath, + scriptFileName + ) + }.let { + QuoteTool.trimBothEdgeQuote(it) + }.let { + prefixLayoutSeparator + catImportContents( + it + ) + suffixLayoutSeparator + } + } + + private fun importSetting( + row: String, + scriptFileName: String, + setReplaceVariableCompleteMap: Map? + ): String { if ( - !trimRow.contains(importPreWord) + !row.contains(importPreWord) ) return row + val trimRow = row + .trim() + .trim(';') + .trim(',') return trimRow .replace("${importPreWord}=", "") .trim() diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/history/fannel_history/FannelHistoryButtonEvent.kt b/app/src/main/java/com/puutaro/commandclick/proccess/history/fannel_history/FannelHistoryButtonEvent.kt index 34fd1e334..d04f17df7 100644 --- a/app/src/main/java/com/puutaro/commandclick/proccess/history/fannel_history/FannelHistoryButtonEvent.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/history/fannel_history/FannelHistoryButtonEvent.kt @@ -75,11 +75,7 @@ object FannelHistoryButtonEvent { ) { HistoryCaptureTool.launchCapture(fragment) val context = fragment.context - val searchTextLinearWeight = SearchTextLinearWeight.calculate(fragment.activity) - val listLinearWeight = 1F - searchTextLinearWeight - if( - context == null - ) return + ?: return val fannelNameList = makeUpdateFannelNameList() val fannelInfoMap = when(fragment){ is CommandIndexFragment -> { @@ -97,25 +93,16 @@ object FannelHistoryButtonEvent { fannelNameList.toMutableList() ) fannelHistoryDialog = Dialog( - context + context, + R.style.BottomSheetDialogTheme ) fannelHistoryDialog?.setContentView( - R.layout.fannel_history_recycler_view - ) - val searchText = - fannelHistoryDialog?.findViewById( - R.id.fannel_history_search_edit_text + R.layout.fannel_history_recycler_view_layout ) - val searchTextLinearParams = - searchText?.layoutParams as LinearLayout.LayoutParams - searchTextLinearParams.weight = searchTextLinearWeight val fannelManageListView = fannelHistoryDialog?.findViewById( R.id.fannel_history_recycler_view - ) - val historyListViewLinearParams = - fannelManageListView?.layoutParams as LinearLayout.LayoutParams - historyListViewLinearParams.weight = listLinearWeight + ) ?: return fannelManageListView.layoutManager = GridLayoutManager( context, 2, @@ -127,6 +114,11 @@ object FannelHistoryButtonEvent { fannelManageListAdapter.itemCount - 1 ) fannelManageListView.setHasFixedSize(true) + + val searchText = + fannelHistoryDialog?.findViewById( + R.id.fannel_history_search_edit_text + ) ?: return SearchEditTextHideShow.monitor( fragment, fannelManageListView, @@ -146,7 +138,7 @@ object FannelHistoryButtonEvent { fannelHistoryDialog?.window ?.setLayout( ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.WRAP_CONTENT + ViewGroup.LayoutParams.MATCH_PARENT ) fannelHistoryDialog?.window ?.setGravity(Gravity.BOTTOM) @@ -284,9 +276,11 @@ object FannelHistoryButtonEvent { FactFannel.creatingToast() return } - FileSystems.updateLastModified( - File(cmdclickDefaultAppDirPath, fannelName).absolutePath - ) + CoroutineScope(Dispatchers.IO).launch { + FileSystems.updateLastModified( + File(cmdclickDefaultAppDirPath, fannelName).absolutePath + ) + } EditExecuteOrElse.handle( fragment, fannelName diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/history/url_history/UrlHistoryButtonEvent.kt b/app/src/main/java/com/puutaro/commandclick/proccess/history/url_history/UrlHistoryButtonEvent.kt index ed3d8a1c1..c7d0eeed5 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/history/url_history/UrlHistoryButtonEvent.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/history/url_history/UrlHistoryButtonEvent.kt @@ -11,6 +11,7 @@ import android.view.MotionEvent import android.view.ViewGroup import android.widget.LinearLayout import androidx.appcompat.widget.AppCompatEditText +import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.view.isVisible import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels @@ -72,8 +73,6 @@ object UrlHistoryButtonEvent{ HistoryCaptureTool.launchCapture(fragment) val context = fragment.context val terminalViewModel: TerminalViewModel by fragment.activityViewModels() - val searchTextLinearWeight = SearchTextLinearWeight.calculate(fragment.activity) - val listLinearWeight = 1F - searchTextLinearWeight if( context == null ) return @@ -94,25 +93,27 @@ object UrlHistoryButtonEvent{ terminalViewModel.onDialog = true urlHistoryDialog = Dialog( context, + R.style.BottomSheetDialogTheme +// R.style.extraMenuDialogStyle, ) urlHistoryDialog?.setContentView( R.layout.url_history_list_view_layout ) val urlHistoryListView = urlHistoryDialog?.findViewById( R.id.url_history_list_view - ) + ) ?: return // val catchSize = 50 * (context.resources?.displayMetrics?.heightPixels ?: 0) // urlHistoryListView?.setItemViewCacheSize(catchSize) - val urlHistoryListViewLinearParams = - urlHistoryListView?.layoutParams as LinearLayout.LayoutParams - urlHistoryListViewLinearParams.weight = listLinearWeight +// val urlHistoryListViewLinearParams = +// urlHistoryListView?.layoutParams as ConstraintLayout.LayoutParams +// urlHistoryListViewLinearParams.weight = listLinearWeight val urlHistoryList = makeUrlHistoryList() val searchText = urlHistoryDialog?.findViewById( R.id.url_history_search_edit_text - ) - val searchTextLinearParams = - searchText?.layoutParams as LinearLayout.LayoutParams - searchTextLinearParams.weight = searchTextLinearWeight + ) ?: return +// val searchTextLinearParams = +// searchText?.layoutParams as LinearLayout.LayoutParams +// searchTextLinearParams.weight = searchTextLinearWeight urlHistoryListView.layoutManager = GridLayoutManager( context, 2, @@ -164,7 +165,7 @@ object UrlHistoryButtonEvent{ urlHistoryDialog?.window ?.setLayout( ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.WRAP_CONTENT + ViewGroup.LayoutParams.MATCH_PARENT ) urlHistoryDialog?.window?.setGravity(Gravity.BOTTOM) urlHistoryDialog?.show() @@ -595,85 +596,6 @@ object UrlHistoryButtonEvent{ ) } -// private fun makeBottomScriptUrlList( -// ): List> { -// val fannelName = when(fragment) { -// is CommandIndexFragment -// -> String() -// else -// -> FannelInfoTool.getCurrentFannelName( -// fannelInfoMap -// ) -// } -// val replaceVariableMap = when( -// fannelName.isEmpty() -// ) { -// true -> null -// else -> SetReplaceVariabler.makeSetReplaceVariableMapFromSubFannel( -// context, -// "${cmdclickDefaultAppDirPath}/${fannelName}", -// ) -// } -// val bottomScriptUrlList = -// when(fragment){ -// is CommandIndexFragment -// -> fragment.bottomScriptUrlList -// is EditFragment -// -> fragment.bottomScriptUrlList -// else -// -> return emptyList() -// } -// return convertBottomScriptUrlListToUrlList( -// bottomScriptUrlList, -// replaceVariableMap, -// fannelName, -// ) -// } - -// private fun convertBottomScriptUrlListToUrlList( -// bottomScriptUrlList: List, -// replaceVariableMap: Map?, -// fannelName: String, -// ): List> { -// return execSetRepalceVariable( -// bottomScriptUrlList, -// replaceVariableMap, -// fannelName, -// ).map { -// url -> -// val replaceUrl = ScriptPreWordReplacer.replace( -// url, -//// cmdclickDefaultAppDirPath, -// String(), -// ) -// val title = url.split("/") -// .lastOrNull() -// ?: String() -// mapOf( -// titleKey to title, -// urlKey to replaceUrl, -// iconBase64Key to bottomFannelFileType.name -// ) -// }.filter { -// it.isNotEmpty() -// }.reversed() -// } - -// private fun execSetRepalceVariable( -// bottomScriptUrlList: List, -// replaceVariableMap: Map?, -// fannelName: String, -// ): List { -// return bottomScriptUrlList.joinToString("\n").let { -// SetReplaceVariabler.execReplaceByReplaceVariables( -// it, -// replaceVariableMap, -//// cmdclickDefaultAppDirPath, -// fannelName -// ) -// }.split("\n") -// } - private fun isNotDuplicate( titleAndUrlList: List, usedTitle: MutableSet, diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/intent/EditExecuteOrElse.kt b/app/src/main/java/com/puutaro/commandclick/proccess/intent/EditExecuteOrElse.kt index 594108907..ef2c62922 100644 --- a/app/src/main/java/com/puutaro/commandclick/proccess/intent/EditExecuteOrElse.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/intent/EditExecuteOrElse.kt @@ -8,6 +8,7 @@ import android.view.Gravity import android.view.ViewGroup import androidx.appcompat.widget.AppCompatImageView import androidx.fragment.app.Fragment +import com.blankj.utilcode.util.ToastUtils import com.bumptech.glide.Glide import com.bumptech.glide.RequestBuilder import com.puutaro.commandclick.R diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/intent/ExecJsLoad.kt b/app/src/main/java/com/puutaro/commandclick/proccess/intent/ExecJsLoad.kt index 8ddb64b7c..ecbd32047 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/intent/ExecJsLoad.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/intent/ExecJsLoad.kt @@ -242,12 +242,6 @@ object ExecJsLoad { jsContentsListSource, extraRepValMap = replaceMarkMap ) ?: return - FileSystems.writeFile( - File(UsePath.cmdclickDefaultAppDirPath, "wUrl.txt").absolutePath, - listOf( - "externalJsCon: ${externalJsCon}", - ).joinToString("\n") - ) JavascriptExecuter.jsUrlLaunchHandler( fragment, externalJsCon diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/intent/lib/JavascriptExecuter.kt b/app/src/main/java/com/puutaro/commandclick/proccess/intent/lib/JavascriptExecuter.kt index 70fd8437a..a8a2e071f 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/intent/lib/JavascriptExecuter.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/intent/lib/JavascriptExecuter.kt @@ -2,6 +2,7 @@ package com.puutaro.commandclick.proccess.intent.lib import android.webkit.WebView import androidx.fragment.app.Fragment +import com.blankj.utilcode.util.ToastUtils import com.puutaro.commandclick.R import com.puutaro.commandclick.common.variable.CheckTool import com.puutaro.commandclick.common.variable.variables.CommandClickScriptVariable @@ -29,6 +30,7 @@ import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import java.io.File +import java.time.LocalDateTime object JavascriptExecuter { fun exec( 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/CcFilterTool.kt similarity index 82% rename from app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/edit_setting_extra/FilterPathTool.kt rename to app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/edit_setting_extra/CcFilterTool.kt index 0158f956c..c8a93327f 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/CcFilterTool.kt @@ -3,10 +3,44 @@ package com.puutaro.commandclick.proccess.js_macro_libs.edit_setting_extra import com.blankj.utilcode.util.ToastUtils import java.io.File -object FilterPathTool { +object CcFilterTool { private const val noExtend = "NoExtend" + fun isFilterByStr( + targetFileNameOrPath: String, + filterPrefixListCon: String, + filterSuffixListCon: String, + onFilterToast: Boolean, + separator: String, + ): Boolean { + val okPrefix = judgeByPrefix( + targetFileNameOrPath, + filterPrefixListCon, + separator + ) + val targetFileName = File(targetFileNameOrPath).name + prefixFilterToast( + okPrefix, + onFilterToast, + filterPrefixListCon, + targetFileName, + ) + val okSuffix = judgeBySuffix( + targetFileNameOrPath, + filterSuffixListCon, + separator + ) + suffixFilterToast( + okSuffix, + onFilterToast, + filterSuffixListCon, + targetFileName, + ) + return okPrefix + && okSuffix + } + fun isFilterByFile( targetFileNameOrPath: String, dirPath: String, diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/exec_handler/ActionToolForQr.kt b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/exec_handler/ActionToolForQr.kt index 15c9124b1..6d671fe04 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/exec_handler/ActionToolForQr.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/exec_handler/ActionToolForQr.kt @@ -1,23 +1,20 @@ package com.puutaro.commandclick.proccess.js_macro_libs.exec_handler import android.content.Context -import com.puutaro.commandclick.component.adapter.ListIndexAdapter -import com.puutaro.commandclick.fragment.EditFragment -import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.ListSettingsForListIndex import com.puutaro.commandclick.util.file.ReadText import java.io.File object ActionToolForQr { - fun getParentDirPath( - editFragment: EditFragment - ): String { - return ListSettingsForListIndex.ListIndexListMaker.getFilterDir( - editFragment, - ListIndexAdapter.indexListMap, - ListIndexAdapter.listIndexTypeKey - ) - } +// fun getParentDirPath( +// editFragment: EditFragment +// ): String { +// return ListSettingsForListIndex.ListIndexListMaker.getFilterDir( +// editFragment, +// ListIndexAdapter.indexListMap, +// ListIndexAdapter.listIndexTypeKey +// ) +// } fun getContents( context: Context?, diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/exec_handler/ExecMacroHandlerForListIndex.kt b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/exec_handler/ExecMacroHandlerForListIndex.kt index d82f382aa..7158282ec 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/exec_handler/ExecMacroHandlerForListIndex.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/exec_handler/ExecMacroHandlerForListIndex.kt @@ -1,36 +1,41 @@ package com.puutaro.commandclick.proccess.js_macro_libs.exec_handler -import com.puutaro.commandclick.component.adapter.ListIndexAdapter -import com.puutaro.commandclick.fragment.EditFragment +import androidx.fragment.app.Fragment +import androidx.recyclerview.widget.RecyclerView +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter import com.puutaro.commandclick.proccess.js_macro_libs.common_libs.JsActionDataMapKeyObj import com.puutaro.commandclick.proccess.js_macro_libs.macros.JsPathMacroForListIndex -import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.ListSettingsForListIndex import com.puutaro.commandclick.proccess.list_index_for_edit.libs.ListIndexMenuLauncher import com.puutaro.commandclick.proccess.js_macro_libs.list_index_libs.ExecCopyFile import com.puutaro.commandclick.proccess.js_macro_libs.list_index_libs.ExecCopyFileHere import com.puutaro.commandclick.proccess.js_macro_libs.list_index_libs.ExecCopyFileSimple import com.puutaro.commandclick.proccess.js_macro_libs.list_index_libs.ExecCopyPath -import com.puutaro.commandclick.proccess.js_macro_libs.list_index_libs.ExecEditCmdVal -import com.puutaro.commandclick.proccess.js_macro_libs.list_index_libs.ExecEditSettingVal import com.puutaro.commandclick.proccess.js_macro_libs.list_index_libs.ExecItemCat -import com.puutaro.commandclick.proccess.js_macro_libs.list_index_libs.ExecItemDelete import com.puutaro.commandclick.proccess.js_macro_libs.list_index_libs.ExecRenameFile import com.puutaro.commandclick.proccess.js_macro_libs.list_index_libs.ExecShowDescription import com.puutaro.commandclick.proccess.js_macro_libs.list_index_libs.ExecSimpleDelete import com.puutaro.commandclick.proccess.js_macro_libs.list_index_libs.ExecSimpleEditItem import com.puutaro.commandclick.proccess.js_macro_libs.list_index_libs.ExecWriteItem +import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.ListSettingsForListIndex +import com.puutaro.commandclick.proccess.ubuntu.BusyboxExecutor object ExecMacroHandlerForListIndex { fun handle( - editFragment: EditFragment, + fragment: Fragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + busyboxExecutor: BusyboxExecutor?, + editListRecyclerView: RecyclerView?, jsActionMap: Map?, - selectedItem: String, + selectedItemLineMap: Map, listIndexPosition: Int, ){ if( jsActionMap.isNullOrEmpty() ) return + val context = fragment.context + ?: return val macroStr = jsActionMap.get( JsActionDataMapKeyObj.JsActionDataMapKey.JS_CON.key @@ -38,43 +43,43 @@ object ExecMacroHandlerForListIndex { val macro = JsPathMacroForListIndex.values().firstOrNull { it.name == macroStr } ?: return + val editComponentListAdapter = + editListRecyclerView?.adapter as EditComponentListAdapter when(macro){ JsPathMacroForListIndex.DELETE -> { - val filterDir = ListSettingsForListIndex.ListIndexListMaker.getFilterDir( - editFragment, - ListIndexAdapter.indexListMap, - ListIndexAdapter.listIndexTypeKey - ) - ExecItemDelete.execItemDelete( - editFragment, - filterDir, - selectedItem, - listIndexPosition, - ) +// val filterDir = ListSettingsForListIndex.ListIndexListMaker.getFilterDir( +// editFragment, +// ListIndexAdapter.indexListMap, +// ListIndexAdapter.listIndexTypeKey +// ) +// ExecItemDelete.execItemDelete( +// editFragment, +//// filterDir, +// selectedItem, +// listIndexPosition, +// ) } JsPathMacroForListIndex.SIMPLE_DELETE -> { - val binding = editFragment.binding - val editListRecyclerView = binding.editListRecyclerView - val listIndexForEditAdapter = - editListRecyclerView.adapter as ListIndexAdapter +// val binding = fragment.binding +// val editListRecyclerView = binding.editListRecyclerView ExecSimpleDelete.removeController( - editFragment, + fragment, editListRecyclerView, - listIndexForEditAdapter, - selectedItem, + editComponentListAdapter, + selectedItemLineMap, listIndexPosition, ) } JsPathMacroForListIndex.CAT -> ExecItemCat.cat( - editFragment, - selectedItem, + context, + editComponentListAdapter, listIndexPosition, ) JsPathMacroForListIndex.COPY_PATH -> ExecCopyPath.copyPath( - editFragment, - selectedItem, + context, + editComponentListAdapter, listIndexPosition, ) JsPathMacroForListIndex.COPY_FILE -> { @@ -82,68 +87,77 @@ object ExecMacroHandlerForListIndex { jsActionMap ) ?: emptyMap() ExecCopyFile.copyFile( - editFragment, - selectedItem, + fragment, + fannelInfoMap, listIndexPosition, argsMap ) } JsPathMacroForListIndex.COPY_FILE_HERE -> ExecCopyFileHere.copyFileHere( - editFragment, - selectedItem, + fragment, + fannelInfoMap, + setReplaceVariableMap, + editListRecyclerView, listIndexPosition, ) - JsPathMacroForListIndex.COPY_FILE_SIMPLE -> + JsPathMacroForListIndex.COPY_FILE_SIMPLE -> { + val selectedSrcPath = selectedItemLineMap.get( + ListSettingsForListIndex.MapListPathManager.Key.SRC_CON.key + ) ?: return ExecCopyFileSimple.copy( - editFragment, - selectedItem, + fragment, + selectedSrcPath, jsActionMap, ) + } // JsPathMacroForListIndex.COPY_APP_DIR -> // ExecCopyAppDir.copyAppDir( // editFragment, // selectedItem // ) - JsPathMacroForListIndex.EDIT_C -> - ExecEditCmdVal.edit( - editFragment, - selectedItem, - ) - JsPathMacroForListIndex.EDIT_S -> - ExecEditSettingVal.edit( - editFragment, - selectedItem, - ) +// JsPathMacroForListIndex.EDIT_C -> +// ExecEditCmdVal.edit( +// editFragment, +// selectedItemLineMap, +// ) +// JsPathMacroForListIndex.EDIT_S -> +// ExecEditSettingVal.edit( +// editFragment, +// selectedItemLineMap, +// ) JsPathMacroForListIndex.RENAME -> ExecRenameFile.rename( - editFragment, - selectedItem, + fragment, + editListRecyclerView, listIndexPosition, ) JsPathMacroForListIndex.MENU -> ListIndexMenuLauncher.launch( - editFragment, + fragment, + fannelInfoMap, + setReplaceVariableMap, + busyboxExecutor, + editListRecyclerView, jsActionMap, - selectedItem, + selectedItemLineMap, listIndexPosition, ) JsPathMacroForListIndex.DESC -> ExecShowDescription.desc( - editFragment, - selectedItem, + fragment, + editComponentListAdapter, listIndexPosition, ) JsPathMacroForListIndex.SIMPLE_EDIT -> ExecSimpleEditItem.edit( - editFragment, - selectedItem, + editComponentListAdapter, listIndexPosition, ) JsPathMacroForListIndex.WRITE -> ExecWriteItem.write( - editFragment, - selectedItem, + fragment.context, + editComponentListAdapter, listIndexPosition ) } diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/exec_handler/ExecMacroHandlerForQr.kt b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/exec_handler/ExecMacroHandlerForQr.kt index d742ea1ed..ccdc0ccc8 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/exec_handler/ExecMacroHandlerForQr.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/exec_handler/ExecMacroHandlerForQr.kt @@ -1,66 +1,71 @@ package com.puutaro.commandclick.proccess.js_macro_libs.exec_handler -import com.puutaro.commandclick.fragment.EditFragment +import androidx.fragment.app.Fragment import com.puutaro.commandclick.proccess.ScriptFileDescription -import com.puutaro.commandclick.proccess.qr.qr_dialog_config.QrLogoEditDialogLauncher import com.puutaro.commandclick.proccess.js_macro_libs.macros.JsMacroForQr import com.puutaro.commandclick.proccess.js_macro_libs.qr_libs.ExecQr +import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.ListSettingsForListIndex import com.puutaro.commandclick.util.dialog.DialogObject object ExecMacroHandlerForQr { fun handle( - editFragment: EditFragment, + fragment: Fragment, macroForQr: JsMacroForQr, - clickFileName: String, + selectedLineMap: Map, ){ - val context = editFragment.context + val context = fragment.context ?: return + val clickFileName = selectedLineMap.get( + ListSettingsForListIndex.MapListPathManager.Key.SRC_CON.key + ) ?: return when(macroForQr) { JsMacroForQr.EXEC_QR -> ExecQr.exec( - editFragment, + fragment, clickFileName, ) JsMacroForQr.DESC -> { - val parentDirPath = ActionToolForQr.getParentDirPath( - editFragment - ) + val parentDirPath = String() +// ActionToolForQr.getParentDirPath( +// editFragment +// ) val contents = ActionToolForQr.getContents( - editFragment.context, + fragment.context, parentDirPath, clickFileName ) ?: return ScriptFileDescription.show( - editFragment, + fragment, contents.split("\n"), // parentDirPath, clickFileName ) } - JsMacroForQr.EDIT_LOGO - -> { -// val parentDirPath = ActionToolForQr.getParentDirPath( -// editFragment +// JsMacroForQr.EDIT_LOGO +// -> { +//// val parentDirPath = ActionToolForQr.getParentDirPath( +//// editFragment +//// ) +// QrLogoEditDialogLauncher.launch( +// editFragment, +//// parentDirPath, +// clickFileName, +// editFragment.qrDialogConfig ?: emptyMap(), +//// qrDialogConfigMap // ) - QrLogoEditDialogLauncher.launch( - editFragment, -// parentDirPath, - clickFileName, - editFragment.qrDialogConfig ?: emptyMap(), -// qrDialogConfigMap - ) - } +// } JsMacroForQr.FILE_CONTENTS -> { - val parentDirPath = ActionToolForQr.getParentDirPath( - editFragment - ) + val parentDirPath = String() +// ActionToolForQr.getParentDirPath( +// editFragment +// ) val contents = ActionToolForQr.getContents( - editFragment.context, + fragment.context, parentDirPath, clickFileName ) ?: return diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/exec_handler/JsPathHandlerForQrAndListIndex.kt b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/exec_handler/JsPathHandlerForQrAndListIndex.kt index f8f0cea23..e9887f57a 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/exec_handler/JsPathHandlerForQrAndListIndex.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/exec_handler/JsPathHandlerForQrAndListIndex.kt @@ -1,18 +1,24 @@ package com.puutaro.commandclick.proccess.js_macro_libs.exec_handler -import com.puutaro.commandclick.fragment.EditFragment +import androidx.fragment.app.Fragment +import androidx.recyclerview.widget.RecyclerView import com.puutaro.commandclick.proccess.js_macro_libs.common_libs.JsActionDataMapKeyObj import com.puutaro.commandclick.proccess.intent.lib.JavascriptExecuter import com.puutaro.commandclick.proccess.list_index_for_edit.libs.ListIndexReplacer import com.puutaro.commandclick.proccess.qr.qr_dialog_config.MacroHandlerForQrAndListIndex +import com.puutaro.commandclick.proccess.ubuntu.BusyboxExecutor import com.puutaro.commandclick.util.JavaScriptLoadUrl object JsPathHandlerForQrAndListIndex { fun handle( - editFragment: EditFragment, + fragment: Fragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + busyboxExecutor: BusyboxExecutor?, + editListRecyclerView: RecyclerView?, jsActionMap: Map?, - selectedItem: String, + selectedItemLineMap: Map, listIndexPosition: Int ){ if( @@ -29,16 +35,20 @@ object JsPathHandlerForQrAndListIndex { when (jsActionType) { JsActionDataMapKeyObj.JsActionDataTypeKey.MACRO -> MacroHandlerForQrAndListIndex.handle( - editFragment, + fragment, + fannelInfoMap, + setReplaceVariableMap, + busyboxExecutor, + editListRecyclerView, jsActionMap, - selectedItem, + selectedItemLineMap, listIndexPosition, ) JsActionDataMapKeyObj.JsActionDataTypeKey.JS_CON -> execJs( - editFragment, + fragment, jsActionMap, - selectedItem, + selectedItemLineMap, listIndexPosition ) } @@ -46,9 +56,9 @@ object JsPathHandlerForQrAndListIndex { private fun execJs( - editFragment: EditFragment, + fragment: Fragment, jsActionMap: Map?, - selectedItem: String, + selectedItemLineMap: Map, listIndexListPosition: Int, ){ if( @@ -58,9 +68,9 @@ object JsPathHandlerForQrAndListIndex { JsActionDataMapKeyObj.JsActionDataMapKey.JS_CON.key ) val jsConSrc = ListIndexReplacer.replace( - editFragment, +// fragment, jsConSrcBeforeReplace, - selectedItem, + selectedItemLineMap, listIndexListPosition, ) ?: return val jsCon = jsConSrc @@ -70,7 +80,7 @@ object JsPathHandlerForQrAndListIndex { jsCon.isEmpty() ) return JavascriptExecuter.jsUrlLaunchHandler( - editFragment, + fragment, JavaScriptLoadUrl.makeLastJsCon(jsCon) ) } diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/DirectoryAndCopyGetter.kt b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/DirectoryAndCopyGetter.kt index f7311f729..a3f039bf9 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/DirectoryAndCopyGetter.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/DirectoryAndCopyGetter.kt @@ -3,16 +3,12 @@ package com.puutaro.commandclick.proccess.js_macro_libs.list_index_libs import com.anggrayudi.storage.SimpleStorageHelper import com.anggrayudi.storage.file.FileFullPath import com.anggrayudi.storage.file.getAbsolutePath -import com.blankj.utilcode.util.ToastUtils import com.puutaro.commandclick.common.variable.variables.CommandClickScriptVariable import com.puutaro.commandclick.common.variable.variant.RequestCode -import com.puutaro.commandclick.component.adapter.ListIndexAdapter -import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.ExecAddForListIndexAdapter -import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.ListViewToolForListIndexAdapter +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter import com.puutaro.commandclick.fragment.EditFragment import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.list_index.ItemPathMaker import com.puutaro.commandclick.proccess.edit.lib.FilePickerTool -import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.ListSettingsForListIndex import com.puutaro.commandclick.util.file.FileSystems import com.puutaro.commandclick.util.file.NoFileChecker import java.io.File @@ -23,7 +19,6 @@ class DirectoryAndCopyGetter( private val context = editFragment.context private val storageHelper = SimpleStorageHelper(editFragment) fun get( - selectedItem: String, listIndexPosition: Int, initialPath: String, pickerMacro: FilePickerTool.PickerMacro?, @@ -33,9 +28,10 @@ class DirectoryAndCopyGetter( if( context == null ) return + val editComponentListAdapter = + editFragment.binding.editListRecyclerView.adapter as EditComponentListAdapter val copySrcFilePath = ItemPathMaker.make( - editFragment, - selectedItem, + editComponentListAdapter, listIndexPosition, ) ?: return val copySrcFilePathObj = File(copySrcFilePath) @@ -98,19 +94,19 @@ class DirectoryAndCopyGetter( File(sourceScriptFilePath), File(targetScriptFilePath), ) - ExecAddForListIndexAdapter.sortInAddFile( - editFragment, - insertFilePath, - ) - ListViewToolForListIndexAdapter.listIndexListUpdateFileList( - editFragment, - ListSettingsForListIndex.ListIndexListMaker.makeFileListHandler( - editFragment, - ListIndexAdapter.indexListMap, - ListIndexAdapter.listIndexTypeKey - ) - ) - ToastUtils.showLong("copy file ok") +// ExecAddForListIndexAdapter.sortInAddFile( +// editFragment, +// insertFilePath, +// ) +// ListViewToolForListIndexAdapter.listIndexListUpdateFileList( +// editFragment, +// ListSettingsForListIndex.ListIndexListMaker.makeFileListHandler( +// editFragment, +// ListIndexAdapter.indexListMap, +// ListIndexAdapter.listIndexTypeKey +// ) +// ) +// ToastUtils.showLong("copy file ok") } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecCopyFile.kt b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecCopyFile.kt index ced81051a..69b88cad1 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecCopyFile.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecCopyFile.kt @@ -1,10 +1,10 @@ package com.puutaro.commandclick.proccess.js_macro_libs.list_index_libs +import androidx.fragment.app.Fragment +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter import com.puutaro.commandclick.fragment.EditFragment import com.puutaro.commandclick.proccess.edit.lib.FilePickerTool import com.puutaro.commandclick.proccess.js_macro_libs.edit_setting_extra.EditSettingExtraArgsTool -import com.puutaro.commandclick.proccess.list_index_for_edit.ListIndexEditConfig -import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.TypeSettingsForListIndex import com.puutaro.commandclick.util.state.FannelInfoTool import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -12,21 +12,24 @@ import kotlinx.coroutines.launch object ExecCopyFile { fun copyFile( - editFragment: EditFragment, - selectedItem: String, + fragment: Fragment, + fannelInfoMap: Map, listIndexPosition: Int, filterMap: Map, ){ - val type = ListIndexEditConfig.getListIndexType( - editFragment - ) - when(type){ -// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL, -// -> return - TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT, - TypeSettingsForListIndex.ListIndexTypeKey.NORMAL - -> {} - } + if( + fragment !is EditFragment + ) return +// val type = ListIndexEditConfig.getListIndexType( +// editFragment +// ) +// when(type){ +//// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL, +//// -> return +// TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT, +// TypeSettingsForListIndex.ListIndexTypeKey.NORMAL +// -> {} +// } val tag = filterMap.get( EditSettingExtraArgsTool.ExtraKey.TAG.key, ) ?: String() @@ -37,7 +40,7 @@ object ExecCopyFile { it.name == pickerMacroStr } val fannelName = FannelInfoTool.getCurrentFannelName( - editFragment.fannelInfoMap + fannelInfoMap ) val initialPath = FilePickerTool.makeInitialDirPath( filterMap, @@ -46,8 +49,7 @@ object ExecCopyFile { tag, ) CoroutineScope(Dispatchers.Main).launch { - editFragment.directoryAndCopyGetter?.get( - selectedItem, + fragment.directoryAndCopyGetter?.get( listIndexPosition, initialPath, pickerMacro, diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecCopyFileHere.kt b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecCopyFileHere.kt index 061c3897a..da05889c7 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecCopyFileHere.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecCopyFileHere.kt @@ -1,79 +1,101 @@ package com.puutaro.commandclick.proccess.js_macro_libs.list_index_libs +import androidx.fragment.app.Fragment +import androidx.recyclerview.widget.RecyclerView import com.blankj.utilcode.util.ToastUtils import com.puutaro.commandclick.common.variable.variables.CommandClickScriptVariable -import com.puutaro.commandclick.component.adapter.ListIndexAdapter -import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.ExecAddForListIndexAdapter -import com.puutaro.commandclick.fragment.EditFragment -import com.puutaro.commandclick.proccess.list_index_for_edit.ListIndexEditConfig +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter +import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.ExecAddForEditListAdapter 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 java.io.File object ExecCopyFileHere { fun copyFileHere( - editFragment: EditFragment, - selectedItem: String, + fragment: Fragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + editListRecyclerView: RecyclerView, +// editComponentListAdapter: EditComponentListAdapter, listIndexPosition: Int, ){ - val type = ListIndexEditConfig.getListIndexType( - editFragment +// val type = ListIndexEditConfig.getListIndexType( +// editFragment +// ) + execCopyHereForTsv( + fragment, + fannelInfoMap, + setReplaceVariableMap, + editListRecyclerView, + listIndexPosition, ) ToastUtils.showShort("Copy ok") - when(type){ -// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL -// -> {} - TypeSettingsForListIndex.ListIndexTypeKey.NORMAL - -> execCopyHereForNormal( - editFragment, - selectedItem, - ) - TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT - -> execCopyHereForTsv( - editFragment, - listIndexPosition, - ) - } +// when(type){ +//// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL +//// -> {} +// TypeSettingsForListIndex.ListIndexTypeKey.NORMAL +// -> execCopyHereForNormal( +// editFragment, +// selectedItem, +// ) +// TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT +// -> execCopyHereForTsv( +// editFragment, +// listIndexPosition, +// ) +// } } private fun execCopyHereForTsv( - editFragment: EditFragment, + fragment: Fragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + editListRecyclerView: RecyclerView, +// listIndexForEditAdapter: EditComponentListAdapter, listIndexPosition: Int, ){ val listIndexForEditAdapter = - editFragment.binding.editListRecyclerView.adapter as ListIndexAdapter - val addLine = - listIndexForEditAdapter.listIndexList[listIndexPosition].let { - val titleConList = it.split("\t") - val title = titleConList.firstOrNull()?.let { - "${it}_${CommandClickScriptVariable.makeRndPrefix()}" - } - val con = titleConList.lastOrNull() - listOf( - title, - con, - ).joinToString("\t") - } - ExecAddForListIndexAdapter.execAddForTsv( - editFragment, - addLine + editListRecyclerView.adapter as EditComponentListAdapter + val addLineMap = + listIndexForEditAdapter.lineMapList[listIndexPosition] +// .let { +// lineMap -> +//// val titleConList = it.split("\t") +// +// val title = lineMap.get( +// ListSettingsForListIndex.MapListPathManager.Key.SRC_TITLE.key +// )?.let { +// "${it}_${CommandClickScriptVariable.makeRndPrefix()}" +// } +// val con = lineMap.get( +// ListSettingsForListIndex.MapListPathManager.Key.SRC_CON.key +// ) +// listOf( +// title, +// con, +// ).joinToString("\t") +// } + ExecAddForEditListAdapter.execAddForEditList( + fragment.context, + fannelInfoMap, + setReplaceVariableMap, + editListRecyclerView, + addLineMap ) } - private fun execCopyHereForNormal( - editFragment: EditFragment, - selectedItem: String, - ){ - val parentDirPath = - ListSettingsForListIndex.ListIndexListMaker.getFilterDir( - editFragment, - ListIndexAdapter.indexListMap, - ListIndexAdapter.listIndexTypeKey - ) - val srcFilePath = File(parentDirPath, selectedItem).absolutePath - ExecAddForListIndexAdapter.execAddByCopyFileHere( - editFragment, - srcFilePath, - ) - } +// private fun execCopyHereForNormal( +// editFragment: EditFragment, +// selectedItem: String, +// ){ +// val parentDirPath = +// ListSettingsForListIndex.ListIndexListMaker.getFilterDir( +// editFragment, +// ListIndexAdapter.indexListMap, +// ListIndexAdapter.listIndexTypeKey +// ) +// val srcFilePath = File(parentDirPath, selectedItem).absolutePath +// ExecAddForListIndexAdapter.execAddByCopyFileHere( +// editFragment, +// srcFilePath, +// ) +// } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecCopyFileSimple.kt b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecCopyFileSimple.kt index 393fcbe2f..f24a7a26e 100644 --- a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecCopyFileSimple.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecCopyFileSimple.kt @@ -8,21 +8,17 @@ import android.widget.ListView import androidx.appcompat.widget.AppCompatEditText import androidx.appcompat.widget.AppCompatTextView import androidx.core.view.isVisible +import androidx.fragment.app.Fragment import com.blankj.utilcode.util.ToastUtils import com.puutaro.commandclick.R import com.puutaro.commandclick.common.variable.res.CmdClickIcons -import com.puutaro.commandclick.component.adapter.ListIndexAdapter import com.puutaro.commandclick.component.adapter.SubMenuAdapter import com.puutaro.commandclick.fragment.EditFragment import com.puutaro.commandclick.proccess.js_macro_libs.common_libs.JsActionDataMapKeyObj -import com.puutaro.commandclick.proccess.list_index_for_edit.ListIndexEditConfig -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.util.CcPathTool import com.puutaro.commandclick.util.file.FileSystems import com.puutaro.commandclick.util.file.ReadText import com.puutaro.commandclick.util.map.CmdClickMap -import com.puutaro.commandclick.util.map.FilePrefixGetter import com.puutaro.commandclick.util.tsv.TsvTool import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -35,7 +31,7 @@ object ExecCopyFileSimple { const val extraMapSeparator = '|' fun copy( - editFragment: EditFragment, + fragment: Fragment, selectedItem: String, jsActionMap: Map?, ){ @@ -51,7 +47,7 @@ object ExecCopyFileSimple { ).toMap() val onWithFile = WithCpFile.howWithFile(extraMap) ExecSimpleCopy.execCopy( - editFragment, + fragment, copyDirOrTsvPathToTypeCon, selectedItem, onWithFile, @@ -97,15 +93,16 @@ object ExecSimpleCopy { ) fun execCopy( - editFragment: EditFragment, + fragment: Fragment, copyDirOrTsvPathToTypeCon: String, selectedItem: String, onWithFile: Boolean, ) { - val srcItem = getCurrentItem( - editFragment, - selectedItem, - ) ?: return + val srcItem = selectedItem +// getCurrentItem( +// editFragment, +// selectedItem, +// ) ?: return // FileSystems.writeFile( // File(UsePath.cmdclickDefaultAppDirPath, "copy_execCopy.txt").absolutePath, // listOf( @@ -115,7 +112,7 @@ object ExecSimpleCopy { // ).joinToString("\n\n\n") // ) val copyDirOrTsvList = makeCopyDirOrTsvList( - editFragment, +// fragment, copyDirOrTsvPathToTypeCon, ) if ( @@ -135,7 +132,7 @@ object ExecSimpleCopy { CoroutineScope(Dispatchers.Main).launch { withContext(Dispatchers.Main) { CopyListDialog.launch( - editFragment, + fragment, copyDirOrTsvList, srcItem, onWithFile, @@ -157,31 +154,34 @@ object ExecSimpleCopy { editFragment: EditFragment, selectedItem: String, ): String? { - val type = ListIndexEditConfig.getListIndexType( - editFragment - ) - return when(type){ -// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL, -// -> null - TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT - -> selectedItem - TypeSettingsForListIndex.ListIndexTypeKey.NORMAL - -> { - val listDirPath = FilePrefixGetter.get( - editFragment, - ListIndexAdapter.indexListMap, - ListSettingsForListIndex.ListSettingKey.LIST_DIR.key, - ) - File(listDirPath, selectedItem).absolutePath - } - } + return selectedItem +// val type = ListIndexEditConfig.getListIndexType( +// editFragment +// ) +// return when(type){ +//// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL, +//// -> null +// TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT +// -> selectedItem +// TypeSettingsForListIndex.ListIndexTypeKey.NORMAL +// -> { +// val listDirPath = FilePrefixGetter.get( +// editFragment, +// ListIndexAdapter.indexListMap, +// ListSettingsForListIndex.ListSettingKey.LIST_DIR.key, +// ) +// File(listDirPath, selectedItem).absolutePath +// } +// } } private fun makeCopyDirOrTsvList( - editFragment: EditFragment, +// fragment: Fragment, copyDirOrTsvPathToTypeCon: String, ): List> { val defaultDirOrTsvType = - makeDefaultDirOrTsvType(editFragment) + makeDefaultDirOrTsvType( +// fragment + ) return copyDirOrTsvPathToTypeCon.split("\n").map { val dirOrTsvPathAndTypeList = it.split("\t") val dirOrTsvPath = dirOrTsvPathAndTypeList.firstOrNull() @@ -225,19 +225,20 @@ object ExecSimpleCopy { } private fun makeDefaultDirOrTsvType( - editFragment: EditFragment +// editFragment: EditFragment ): String { - val type = ListIndexEditConfig.getListIndexType( - editFragment - ) - return when(type){ - TypeSettingsForListIndex.ListIndexTypeKey.NORMAL - -> DirOrTsvType.DIR.type - TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT - -> DirOrTsvType.TSV.type -// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL -// -> String() - } +// val type = ListIndexEditConfig.getListIndexType( +// editFragment +// ) + return DirOrTsvType.TSV.type +// return when(type){ +// TypeSettingsForListIndex.ListIndexTypeKey.NORMAL +// -> DirOrTsvType.DIR.type +// TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT +// -> DirOrTsvType.TSV.type +//// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL +//// -> String() +// } } } object CopyListDialog { @@ -245,12 +246,12 @@ object CopyListDialog { private var copyListDialog: Dialog? = null fun launch( - editFragment: EditFragment, + fragment: Fragment, copyDirOrTsvList: List>, srcItem: String, onWithFile: Boolean, ) { - val context = editFragment.context + val context = fragment.context ?: return copyListDialog = Dialog( context @@ -269,7 +270,7 @@ object CopyListDialog { R.id.list_dialog_search_edit_text )?.isVisible = false setListView( - editFragment, + fragment, copyDirOrTsvList, srcItem, onWithFile, @@ -303,12 +304,12 @@ object CopyListDialog { } private fun setListView( - editFragment: EditFragment, + fragment: Fragment, copyDirOrTsvList: List>, srcItem: String, onWithFile: Boolean, ) { - val context = editFragment.context + val context = fragment.context ?: return val copyListView = copyListDialog?.findViewById( diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecCopyPath.kt b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecCopyPath.kt index 1c91e9d94..a9094527f 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecCopyPath.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecCopyPath.kt @@ -4,21 +4,21 @@ import android.content.ClipData import android.content.ClipboardManager import android.content.Context import com.blankj.utilcode.util.ToastUtils +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter import com.puutaro.commandclick.fragment.EditFragment import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.list_index.ItemPathMaker import java.io.File object ExecCopyPath { fun copyPath( - editFragment: EditFragment, - selectedItem: String, + context: Context, + editComponentListAdapter: EditComponentListAdapter, listIndexPosition: Int, ){ - val context = editFragment.context - ?: return +// val context = editFragment.context +// ?: return val copyPath = ItemPathMaker.make( - editFragment, - selectedItem, + editComponentListAdapter, listIndexPosition, ) ?: return if( diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecEditCmdVal.kt b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecEditCmdVal.kt index 832d258de..e7d1f2871 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecEditCmdVal.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecEditCmdVal.kt @@ -1,9 +1,6 @@ package com.puutaro.commandclick.proccess.js_macro_libs.list_index_libs -import com.puutaro.commandclick.component.adapter.ListIndexAdapter import com.puutaro.commandclick.fragment.EditFragment -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.FormDialogForListIndexOrButton -import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.ListSettingsForListIndex import com.puutaro.commandclick.util.file.NoFileChecker object ExecEditCmdVal { @@ -11,23 +8,23 @@ object ExecEditCmdVal { editFragment: EditFragment, selectedItem: String, ){ - val parentDirPath = ListSettingsForListIndex.ListIndexListMaker.getFilterDir( - editFragment, - ListIndexAdapter.indexListMap, - ListIndexAdapter.listIndexTypeKey - ) +// val parentDirPath = ListSettingsForListIndex.ListIndexListMaker.getFilterDir( +// editFragment, +// ListIndexAdapter.indexListMap, +// ListIndexAdapter.listIndexTypeKey +// ) if( NoFileChecker.isNoFile( - parentDirPath, +// parentDirPath, selectedItem, ) ) return - FormDialogForListIndexOrButton.create( - editFragment, - "edit command variable", - parentDirPath, - selectedItem, - String() - ) +// FormDialogForListIndexOrButton.create( +// editFragment, +// "edit command variable", +//// parentDirPath, +// selectedItem, +// String() +// ) } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecEditSettingVal.kt b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecEditSettingVal.kt index 71510dc91..001844348 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecEditSettingVal.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecEditSettingVal.kt @@ -1,9 +1,6 @@ package com.puutaro.commandclick.proccess.js_macro_libs.list_index_libs -import com.puutaro.commandclick.component.adapter.ListIndexAdapter import com.puutaro.commandclick.fragment.EditFragment -import com.puutaro.commandclick.proccess.edit.edit_text_support_view.lib.FormDialogForListIndexOrButton -import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.ListSettingsForListIndex import com.puutaro.commandclick.util.file.NoFileChecker object ExecEditSettingVal { @@ -11,23 +8,23 @@ object ExecEditSettingVal { editFragment: EditFragment, selectedItem: String, ){ - val parentDirPath = ListSettingsForListIndex.ListIndexListMaker.getFilterDir( - editFragment, - ListIndexAdapter.indexListMap, - ListIndexAdapter.listIndexTypeKey - ) +// val parentDirPath = ListSettingsForListIndex.ListIndexListMaker.getFilterDir( +// editFragment, +// ListIndexAdapter.indexListMap, +// ListIndexAdapter.listIndexTypeKey +// ) if( NoFileChecker.isNoFile( - parentDirPath, +// parentDirPath, selectedItem, ) ) return - FormDialogForListIndexOrButton.create( - editFragment, - "edit setting variable", - parentDirPath, - selectedItem, - "setting" - ) +// FormDialogForListIndexOrButton.create( +// editFragment, +// "edit setting variable", +// parentDirPath, +// selectedItem, +// "setting" +// ) } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecItemCat.kt b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecItemCat.kt index 7ee594705..cf51a745d 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecItemCat.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecItemCat.kt @@ -1,6 +1,8 @@ package com.puutaro.commandclick.proccess.js_macro_libs.list_index_libs -import com.puutaro.commandclick.fragment.EditFragment +import android.content.Context +import androidx.fragment.app.Fragment +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.list_index.ItemPathMaker import com.puutaro.commandclick.util.file.ReadText import com.puutaro.commandclick.util.dialog.DialogObject @@ -12,15 +14,15 @@ import kotlinx.coroutines.withContext object ExecItemCat { fun cat( - editFragment: EditFragment, - selectedItem: String, + context: Context?, + editComponentListAdapter: EditComponentListAdapter, listIndexPosition: Int, ){ - val context = editFragment.context - ?: return + if( + context == null + ) return val catPath = ItemPathMaker.make( - editFragment, - selectedItem, + editComponentListAdapter, listIndexPosition, ) ?: return val scriptContents = ReadText( diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecItemDelete.kt b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecItemDelete.kt index 02e8bd2b3..c390420da 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecItemDelete.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecItemDelete.kt @@ -1,143 +1,127 @@ package com.puutaro.commandclick.proccess.js_macro_libs.list_index_libs import android.app.Dialog -import android.view.Gravity -import android.view.ViewGroup -import androidx.appcompat.widget.AppCompatImageButton -import androidx.appcompat.widget.AppCompatTextView -import com.puutaro.commandclick.R -import com.puutaro.commandclick.common.variable.path.UsePath -import com.puutaro.commandclick.component.adapter.ListIndexAdapter -import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.ListViewToolForListIndexAdapter +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter 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.DeleteSettingsForListIndex -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.util.CcPathTool import com.puutaro.commandclick.util.file.FileSystems -import com.puutaro.commandclick.util.file.NoFileChecker -import com.puutaro.commandclick.util.file.ReadText -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext import java.io.File object ExecItemDelete { fun execItemDelete( editFragment: EditFragment, - parentDirPath: String, +// parentDirPath: String, selectedItem: String, listIndexPosition: Int, ){ - val type = ListIndexEditConfig.getListIndexType( - editFragment - ) - when(type){ -// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL, - TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT - -> return - TypeSettingsForListIndex.ListIndexTypeKey.NORMAL - -> {} - } - CoroutineScope(Dispatchers.Main).launch { - if ( - NoFileChecker.isNoFile( - parentDirPath, - selectedItem, - ) - ) return@launch - withContext(Dispatchers.Main) { - DeleteAfterConfirm.execDeleteByDialog( - editFragment, - parentDirPath, - selectedItem, - listIndexPosition, - ) - } - } + return +// val type = ListIndexEditConfig.getListIndexType( +// editFragment +// ) +// when(type){ +//// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL, +// TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT +// -> return +// TypeSettingsForListIndex.ListIndexTypeKey.NORMAL +// -> {} +// } +// CoroutineScope(Dispatchers.Main).launch { +// if ( +// NoFileChecker.isNoFile( +// parentDirPath, +// selectedItem, +// ) +// ) return@launch +// withContext(Dispatchers.Main) { +// DeleteAfterConfirm.execDeleteByDialog( +// editFragment, +// parentDirPath, +// selectedItem, +// listIndexPosition, +// ) +// } +// } } object DeleteAfterConfirm{ private var confirmDialog: Dialog? = null - fun execDeleteByDialog( - editFragment: EditFragment, - parentDirPath: String, - selectedItem: String, - listIndexPosition: Int, - ){ - val context = editFragment.context - ?: return - val scriptContents = ReadText( - File( - parentDirPath, - selectedItem - ).absolutePath - ).readText() - val displayContents = "\tpath: ${parentDirPath}/${selectedItem}" + - "\n---\n${scriptContents}" - confirmDialog = Dialog( - context - ) - confirmDialog?.setContentView( - R.layout.confirm_text_dialog - ) - val confirmTitleTextView = - confirmDialog?.findViewById( - R.id.confirm_text_dialog_title - ) - confirmTitleTextView?.text = "Delete bellow contents, ok?" - val confirmContentTextView = - confirmDialog?.findViewById( - R.id.confirm_text_dialog_text_view - ) - confirmContentTextView?.text = displayContents - val confirmCancelButton = - confirmDialog?.findViewById( - R.id.confirm_text_dialog_cancel - ) - confirmCancelButton?.setOnClickListener { - confirmDialog?.dismiss() - confirmDialog = null - } - val confirmOkButton = - confirmDialog?.findViewById( - R.id.confirm_text_dialog_ok - ) - confirmOkButton?.setOnClickListener { - confirmDialog?.dismiss() - confirmDialog = null - execDeleteAfterConfirm( - editFragment, - parentDirPath, - selectedItem, - ) - DeleteSettingsForListIndex.doWithJsAction( - editFragment, - selectedItem, - listIndexPosition, - ) - } - confirmDialog?.setOnCancelListener { - confirmDialog?.dismiss() - confirmDialog = null - } - confirmDialog?.window?.setLayout( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.WRAP_CONTENT - ) - confirmDialog?.window?.setGravity( - Gravity.BOTTOM - ) - confirmDialog?.show() - } +// fun execDeleteByDialog( +// editFragment: EditFragment, +// parentDirPath: String, +// selectedItem: String, +// listIndexPosition: Int, +// ){ +// val context = editFragment.context +// ?: return +// val scriptContents = ReadText( +// File( +// parentDirPath, +// selectedItem +// ).absolutePath +// ).readText() +// val displayContents = "\tpath: ${parentDirPath}/${selectedItem}" + +// "\n---\n${scriptContents}" +// confirmDialog = Dialog( +// context +// ) +// confirmDialog?.setContentView( +// R.layout.confirm_text_dialog +// ) +// val confirmTitleTextView = +// confirmDialog?.findViewById( +// R.id.confirm_text_dialog_title +// ) +// confirmTitleTextView?.text = "Delete bellow contents, ok?" +// val confirmContentTextView = +// confirmDialog?.findViewById( +// R.id.confirm_text_dialog_text_view +// ) +// confirmContentTextView?.text = displayContents +// val confirmCancelButton = +// confirmDialog?.findViewById( +// R.id.confirm_text_dialog_cancel +// ) +// confirmCancelButton?.setOnClickListener { +// confirmDialog?.dismiss() +// confirmDialog = null +// } +// val confirmOkButton = +// confirmDialog?.findViewById( +// R.id.confirm_text_dialog_ok +// ) +// confirmOkButton?.setOnClickListener { +// confirmDialog?.dismiss() +// confirmDialog = null +// execDeleteAfterConfirm( +// editFragment, +// parentDirPath, +// selectedItem, +// ) +// DeleteSettingsForListIndex.doWithJsAction( +// editFragment, +// selectedItem, +// listIndexPosition, +// ) +// } +// confirmDialog?.setOnCancelListener { +// confirmDialog?.dismiss() +// confirmDialog = null +// } +// confirmDialog?.window?.setLayout( +// ViewGroup.LayoutParams.MATCH_PARENT, +// ViewGroup.LayoutParams.WRAP_CONTENT +// ) +// confirmDialog?.window?.setGravity( +// Gravity.BOTTOM +// ) +// confirmDialog?.show() +// } fun execDeleteAfterConfirm( - editFragment: EditFragment, + editComponentListAdapter: EditComponentListAdapter, parentDirPath: String, selectedItem: String, ){ @@ -148,7 +132,7 @@ object ExecItemDelete { when(true){ removeTargetPathPbj.isFile -> deleteFile( - editFragment, + editComponentListAdapter, parentDirPath, selectedItem, ) @@ -161,7 +145,7 @@ object ExecItemDelete { } private fun deleteFile( - editFragment: EditFragment, + editComponentListAdapter: EditComponentListAdapter, parentDirPath: String, selectedItem: String, ){ @@ -178,18 +162,20 @@ object ExecItemDelete { FileSystems.removeDir( "${parentDirPath}/${deleteFannelDir}" ) - CoroutineScope(Dispatchers.Main).launch { - withContext(Dispatchers.Main) { - ListViewToolForListIndexAdapter.listIndexListUpdateFileList( - editFragment, - ListSettingsForListIndex.ListIndexListMaker.makeFileListHandler( - editFragment, - ListIndexAdapter.indexListMap, - ListIndexAdapter.listIndexTypeKey - ) - ) - } - } +// CoroutineScope(Dispatchers.Main).launch { +// withContext(Dispatchers.Main) { +// ListViewToolForListIndexAdapter.listIndexListUpdateFileList( +// editComponentListAdapter, +// ListSettingsForListIndex.ListIndexListMaker.makeLineMapListHandler( +// editComponentListAdapter.fannelInfoMap, +// editComponentListAdapter.setReplaceVariableMap, +// editComponentListAdapter.indexListMap, +// editComponentListAdapter.busyboxExecutor +//// ListIndexAdapter.listIndexTypeKey +// ) +// ) +// } +// } } } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecRenameFile.kt b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecRenameFile.kt index ed4f7d3c9..8c5ff585a 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecRenameFile.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecRenameFile.kt @@ -1,97 +1,112 @@ package com.puutaro.commandclick.proccess.js_macro_libs.list_index_libs +import androidx.fragment.app.Fragment +import androidx.recyclerview.widget.RecyclerView import com.blankj.utilcode.util.ToastUtils -import com.puutaro.commandclick.component.adapter.ListIndexAdapter -import com.puutaro.commandclick.fragment.EditFragment -import com.puutaro.commandclick.proccess.filer.FileRenamer -import com.puutaro.commandclick.proccess.list_index_for_edit.ListIndexEditConfig +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter 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.util.file.NoFileChecker +import com.puutaro.commandclick.util.file.MapListFileRenamer import com.puutaro.commandclick.util.file.ReadText +import com.puutaro.commandclick.util.map.CmdClickMap import com.puutaro.commandclick.util.map.FilePrefixGetter -import com.puutaro.commandclick.util.tsv.TsvLineRenamer import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch object ExecRenameFile { fun rename( - editFragment: EditFragment, - selectedItem: String, + fragment: Fragment, + editListRecyclerView: RecyclerView, listIndexPosition: Int, ){ - val type = ListIndexEditConfig.getListIndexType( - editFragment - ) +// val type = ListIndexEditConfig.getListIndexType( +// editFragment +// ) CoroutineScope(Dispatchers.Main).launch { - when (type) { -// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL, - TypeSettingsForListIndex.ListIndexTypeKey.NORMAL - -> execFileRename( - editFragment, - selectedItem, - ) - - TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT - -> execTsvLineFileRename( - editFragment, - listIndexPosition, - ) - } + execTsvLineFileRename( + fragment, + editListRecyclerView, + listIndexPosition, + ) +// when (type) { +//// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL, +// TypeSettingsForListIndex.ListIndexTypeKey.NORMAL +// -> execFileRename( +// editFragment, +// selectedItem, +// ) +// +// TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT +// -> execTsvLineFileRename( +// editFragment, +// listIndexPosition, +// ) +// } } } - private fun execFileRename( - editFragment: EditFragment, - selectedItem: String, - ){ - val parentDirPath = ListSettingsForListIndex.ListIndexListMaker.getFilterDir( - editFragment, - ListIndexAdapter.indexListMap, - ListIndexAdapter.listIndexTypeKey - ) - - if( - NoFileChecker.isNoFile( - parentDirPath, - selectedItem, - ) - ) return - FileRenamer.rename( - editFragment, -// parentDirPath, - selectedItem - ) - } +// private fun execFileRename( +// editFragment: EditFragment, +// selectedItem: String, +// ){ +//// val parentDirPath = ListSettingsForListIndex.ListIndexListMaker.getFilterDir( +//// editFragment, +//// ListIndexAdapter.indexListMap, +//// ListIndexAdapter.listIndexTypeKey +//// ) +// +// if( +// NoFileChecker.isNoFile( +//// parentDirPath, +// selectedItem, +// ) +// ) return +// FileRenamer.rename( +// editFragment, +//// parentDirPath, +// selectedItem +// ) +// } private fun execTsvLineFileRename( - editFragment: EditFragment, + fragment: Fragment, + editListRecyclerView: RecyclerView, +// editComponentListAdapter: EditComponentListAdapter, listIndexPosition: Int, ){ - val binding = editFragment.binding - val listIndexForEditAdapter = - binding.editListRecyclerView.adapter as ListIndexAdapter - val selectedTsvLine = - listIndexForEditAdapter.listIndexList.getOrNull( +// val binding = fragment.binding +// val listIndexForEditAdapter = +// blinding.editListRecycerView.adapter as EditComponentListAdapter + val editComponentListAdapter = + editListRecyclerView.adapter as EditComponentListAdapter + val mapListSeparator = ListSettingsForListIndex.MapListPathManager.mapListSeparator + val selectedLineMap = + editComponentListAdapter.lineMapList.getOrNull( listIndexPosition ) ?: return - val tsvPath = FilePrefixGetter.get( - editFragment, - ListIndexAdapter.indexListMap, - ListSettingsForListIndex.ListSettingKey.LIST_DIR.key, + val mapListPath = FilePrefixGetter.get( + editComponentListAdapter.fannelInfoMap, + editComponentListAdapter.setReplaceVariableMap, + editComponentListAdapter.editListMap, + ListSettingsForListIndex.ListSettingKey.MAP_LIST_PATH.key, ) ?: String() val isExist = ReadText( - tsvPath - ).textToList().contains(selectedTsvLine) + mapListPath + ).textToList().map { + CmdClickMap.createMap( + it, + mapListSeparator + ).toMap() + }.contains(selectedLineMap) if(!isExist){ ToastUtils.showShort("No exist") return } - TsvLineRenamer.rename( - editFragment, - tsvPath, - selectedTsvLine + MapListFileRenamer.rename( + fragment.context, + editListRecyclerView, + mapListPath, + selectedLineMap ) } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecShowDescription.kt b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecShowDescription.kt index 964554b60..eb937a9b8 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecShowDescription.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecShowDescription.kt @@ -1,6 +1,7 @@ package com.puutaro.commandclick.proccess.js_macro_libs.list_index_libs -import com.puutaro.commandclick.fragment.EditFragment +import androidx.fragment.app.Fragment +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter import com.puutaro.commandclick.fragment_lib.terminal_fragment.js_interface.list_index.ItemPathMaker import com.puutaro.commandclick.proccess.ScriptFileDescription import com.puutaro.commandclick.util.file.ReadText @@ -8,13 +9,12 @@ import java.io.File object ExecShowDescription { fun desc( - editFragment: EditFragment, - selectedItem: String, + fragment: Fragment, + editComponentListAdapter: EditComponentListAdapter, listIndexPosition: Int, ){ val showFilePath = ItemPathMaker.make( - editFragment, - selectedItem, + editComponentListAdapter, listIndexPosition, ) ?: return val showFilePathObj = File(showFilePath) @@ -22,7 +22,7 @@ object ExecShowDescription { // ?: return val showFileName = showFilePathObj.name ScriptFileDescription.show( - editFragment, + fragment, ReadText( File( showFilePath diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecSimpleDelete.kt b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecSimpleDelete.kt index 1a266a952..c76f4ff80 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecSimpleDelete.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecSimpleDelete.kt @@ -5,13 +5,12 @@ import android.view.Gravity import android.view.ViewGroup import androidx.appcompat.widget.AppCompatImageButton import androidx.appcompat.widget.AppCompatTextView +import androidx.fragment.app.Fragment import androidx.recyclerview.widget.RecyclerView -import com.puutaro.commandclick.component.adapter.ListIndexAdapter +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.ExecRemoveForListIndexAdapter -import com.puutaro.commandclick.fragment.EditFragment import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.DeleteSettingsForListIndex 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 kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay @@ -21,58 +20,64 @@ import kotlinx.coroutines.withContext object ExecSimpleDelete { fun removeController( - editFragment: EditFragment, + fragment: Fragment, recyclerView: RecyclerView, - listIndexForEditAdapter: ListIndexAdapter, - selectedItem: String, + editComponentListAdapter: EditComponentListAdapter, + selectedItemMap: Map, listIndexPosition: Int, ){ val enableDeleteConfirm = !DeleteSettingsForListIndex.howDisableDeleteConfirm( - ListIndexAdapter.deleteConfigMap + editComponentListAdapter.deleteConfigMap ) when(enableDeleteConfirm){ false -> removeItem( - editFragment, - listIndexForEditAdapter, - selectedItem, + fragment, + editComponentListAdapter, + selectedItemMap, listIndexPosition, ) else -> DeleteConfirmDialog.launch( - editFragment, + fragment, recyclerView, listIndexPosition, - selectedItem, - listIndexForEditAdapter, + selectedItemMap, + editComponentListAdapter, ) } } private fun removeItem( - editFragment: EditFragment, - listIndexForEditAdapter: ListIndexAdapter, - selectedItem: String, + fragment: Fragment, + editComponentListAdapter: EditComponentListAdapter, + selectedItemMap: Map, listIndexPosition: Int, ){ CoroutineScope(Dispatchers.IO).launch { - withContext(Dispatchers.Main) { - listIndexForEditAdapter.notifyItemRemoved(listIndexPosition) +// withContext(Dispatchers.Main) { +// editComponentListAdapter.notifyItemRemoved(listIndexPosition) +// } + val removeItemLineMap = withContext(Dispatchers.IO) { + editComponentListAdapter.lineMapList[listIndexPosition] + } + withContext(Dispatchers.IO) { + editComponentListAdapter.lineMapList.removeAt(listIndexPosition) } - val removeItemLine = withContext(Dispatchers.IO) { - listIndexForEditAdapter.listIndexList[listIndexPosition] + withContext(Dispatchers.Main) { + editComponentListAdapter.notifyItemRemoved(listIndexPosition) } - listIndexForEditAdapter.listIndexList.removeAt(listIndexPosition) withContext(Dispatchers.IO) { ExecRemoveForListIndexAdapter.removeCon( - editFragment, - ListIndexAdapter.listIndexTypeKey, - removeItemLine, + editComponentListAdapter, +// ListIndexAdapter.listIndexTypeKey, + removeItemLineMap, ) } withContext(Dispatchers.IO) { execRemoveItemHandler( - editFragment, - selectedItem, - removeItemLine, + fragment, + editComponentListAdapter, + selectedItemMap, + removeItemLineMap, listIndexPosition, ) } @@ -80,35 +85,41 @@ object ExecSimpleDelete { } private fun execRemoveItemHandler( - editFragment: EditFragment, - selectedItem: String, - removeItemLine: String, + fragment: Fragment, + editComponentListAdapter: EditComponentListAdapter, + selectedItemMap: Map, + removeItemLineMap: Map, listIndexPosition: Int, ){ - when(ListIndexAdapter.listIndexTypeKey){ -// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL -> {} - TypeSettingsForListIndex.ListIndexTypeKey.NORMAL -> { - val filterDir = ListSettingsForListIndex.ListIndexListMaker.getFilterDir( - editFragment, - ListIndexAdapter.indexListMap, - ListIndexAdapter.listIndexTypeKey - ) - ExecItemDelete.DeleteAfterConfirm.execDeleteAfterConfirm( - editFragment, - filterDir, - selectedItem, - ) - } - TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT -> - ExecRemoveForListIndexAdapter.updateTsv( - editFragment, - listOf(removeItemLine), - ) - } + ExecRemoveForListIndexAdapter.updateTsv( + editComponentListAdapter, + listOf(removeItemLineMap), + ) +// when(ListIndexAdapter.listIndexTypeKey){ +//// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL -> {} +// TypeSettingsForListIndex.ListIndexTypeKey.NORMAL -> { +// val filterDir = ListSettingsForListIndex.ListIndexListMaker.getFilterDir( +// editFragment, +// ListIndexAdapter.indexListMap, +// ListIndexAdapter.listIndexTypeKey +// ) +// ExecItemDelete.DeleteAfterConfirm.execDeleteAfterConfirm( +// editFragment, +// filterDir, +// selectedItem, +// ) +// } +// TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT -> +// ExecRemoveForListIndexAdapter.updateTsv( +// editFragment, +// listOf(removeItemLine), +// ) +// } DeleteSettingsForListIndex.doWithJsAction( - editFragment, - selectedItem, + fragment, + editComponentListAdapter, + selectedItemMap, listIndexPosition, ) } @@ -118,32 +129,32 @@ object ExecSimpleDelete { private var delteConfirmDialog: Dialog? = null fun launch( - editFragment: EditFragment, + fragment: Fragment, recyclerView: RecyclerView, listIndexPosition: Int, - selectedItem: String, - listIndexForEditAdapter: ListIndexAdapter + selectedItemMap: Map, + editComponentListAdapter: EditComponentListAdapter ){ CoroutineScope(Dispatchers.Main).launch { withContext(Dispatchers.Main) { execLaunch( - editFragment, + fragment, recyclerView, listIndexPosition, - selectedItem, - listIndexForEditAdapter + selectedItemMap, + editComponentListAdapter ) } } } private fun execLaunch( - editFragment: EditFragment, + fragment: Fragment, recyclerView: RecyclerView, listIndexPosition: Int, - selectedItem: String, - listIndexForEditAdapter: ListIndexAdapter + selectedItemMap: Map, + editComponentListAdapter: EditComponentListAdapter ){ - val context = editFragment.context + val context = fragment.context ?: return delteConfirmDialog = Dialog( context @@ -160,7 +171,9 @@ object ExecSimpleDelete { delteConfirmDialog?.findViewById( com.puutaro.commandclick.R.id.confirm_text_dialog_text_view ) - confirmContentTextView?.text = selectedItem + confirmContentTextView?.text = selectedItemMap.get( + ListSettingsForListIndex.MapListPathManager.Key.SRC_TITLE.key + ) val confirmCancelButton = delteConfirmDialog?.findViewById( com.puutaro.commandclick.R.id.confirm_text_dialog_cancel @@ -189,9 +202,9 @@ object ExecSimpleDelete { delteConfirmDialog?.dismiss() delteConfirmDialog = null removeItem( - editFragment, - listIndexForEditAdapter, - selectedItem, + fragment, + editComponentListAdapter, + selectedItemMap, listIndexPosition, ) } diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecSimpleEditItem.kt b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecSimpleEditItem.kt index 612a8bcaf..c76632bdf 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecSimpleEditItem.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecSimpleEditItem.kt @@ -3,41 +3,41 @@ package com.puutaro.commandclick.proccess.js_macro_libs.list_index_libs import android.content.Intent import com.blankj.utilcode.util.ToastUtils import com.puutaro.commandclick.common.variable.broadcast.scheme.BroadCastIntentSchemeForEdit -import com.puutaro.commandclick.component.adapter.ListIndexAdapter -import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.TitleFileNameAndPathConPairForListIndexAdapter +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter 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.ListSettingsForListIndex -import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.TypeSettingsForListIndex -import com.puutaro.commandclick.util.editor.EditorByEditText import com.puutaro.commandclick.util.file.NoFileChecker import com.puutaro.commandclick.util.file.ReadText +import com.puutaro.commandclick.util.map.CmdClickMap import com.puutaro.commandclick.util.map.FilePrefixGetter import java.io.File object ExecSimpleEditItem { fun edit( - editFragment: EditFragment, - selectedItem: String, + editComponentListAdapter: EditComponentListAdapter, listIndexPosition: Int, ){ - val type = ListIndexEditConfig.getListIndexType( - editFragment + writeFileInTsvLine( + editComponentListAdapter, + listIndexPosition ) - when(type){ -// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL, - TypeSettingsForListIndex.ListIndexTypeKey.NORMAL - -> writeFile( - editFragment, - selectedItem, - ) - TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT - -> writeFileInTsvLine( - editFragment, - listIndexPosition - ) - } +// val type = ListIndexEditConfig.getListIndexType( +// editFragment +// ) +// when(type){ +//// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL, +// TypeSettingsForListIndex.ListIndexTypeKey.NORMAL +// -> writeFile( +// editFragment, +// selectedItem, +// ) +// TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT +// -> writeFileInTsvLine( +// editFragment, +// listIndexPosition +// ) +// } } @@ -45,54 +45,66 @@ object ExecSimpleEditItem { editFragment: EditFragment, selectedItem: String, ){ - val parentDirPath = ListSettingsForListIndex.ListIndexListMaker.getFilterDir( - editFragment, - ListIndexAdapter.indexListMap, - ListIndexAdapter.listIndexTypeKey - ) +// val parentDirPath = ListSettingsForListIndex.ListIndexListMaker.getFilterDir( +// editFragment, +// ListIndexAdapter.indexListMap, +// ListIndexAdapter.listIndexTypeKey +// ) if( NoFileChecker.isNoFile( - parentDirPath, +// parentDirPath, selectedItem, ) ) return val listIndexUpdateIntent = Intent() listIndexUpdateIntent.action = BroadCastIntentSchemeForEdit.UPDATE_INDEX_LIST.action - execEdit( - editFragment, - parentDirPath, - selectedItem, - listIndexUpdateIntent - ) +// execEdit( +// editFragment, +//// parentDirPath, +// selectedItem, +// listIndexUpdateIntent +// ) } private fun writeFileInTsvLine( - editFragment: EditFragment, +// fragment: Fragment, + editComponentListAdapter: EditComponentListAdapter, listIndexPosition: Int, ){ - val binding = editFragment.binding - val listIndexForEditAdapter = - binding.editListRecyclerView.adapter as ListIndexAdapter - val selectedTsvLine = - listIndexForEditAdapter.listIndexList.getOrNull( +// val binding = fragment.binding +// val editComponentListAdapter = +// binding.editListRecyclerView.adapter as EditComponentListAdapter + val selectedLineMap = + editComponentListAdapter.lineMapList.getOrNull( listIndexPosition ) ?: return +// val editComponentListAdapter = +// binding.editListRecyclerView.adapter as EditComponentListAdapter val tsvPath = FilePrefixGetter.get( - editFragment, - ListIndexAdapter.indexListMap, - ListSettingsForListIndex.ListSettingKey.LIST_DIR.key, + editComponentListAdapter.fannelInfoMap, + editComponentListAdapter.setReplaceVariableMap, + editComponentListAdapter.editListMap, + ListSettingsForListIndex.ListSettingKey.MAP_LIST_PATH.key, ) ?: return + val mapListSeparator = ListSettingsForListIndex.MapListPathManager.mapListSeparator val isExist = ReadText( tsvPath - ).textToList().contains(selectedTsvLine) + ).textToList().map { + CmdClickMap.createMap( + it, + mapListSeparator + ).toMap() + }.contains(selectedLineMap) if(!isExist){ ToastUtils.showShort("No exist") return } - val titleFileNameAndPathConPair = - TitleFileNameAndPathConPairForListIndexAdapter.get(selectedTsvLine) - ?: return - val filePathOrCon = titleFileNameAndPathConPair.second +// val titleFileNameAndPathConPair = +// TitleFileNameAndPathConPairForListIndexAdapter.get(selectedLineMap) +// ?: return + val filePathOrCon = selectedLineMap.get( + ListSettingsForListIndex.MapListPathManager.Key.SRC_TITLE.key + ) ?: String() val filePathOrConObj = File(filePathOrCon) val isWithFileRename = filePathOrConObj.isFile if(!isWithFileRename) return @@ -100,32 +112,32 @@ object ExecSimpleEditItem { val fileName = filePathOrConObj.name val listIndexUpdateIntent = Intent() listIndexUpdateIntent.action = BroadCastIntentSchemeForEdit.UPDATE_INDEX_LIST.action - execEdit( - editFragment, - parentDirPath, - fileName, - null - ) +// execEdit( +// editFragment, +// parentDirPath, +// fileName, +// null +// ) } - private fun execEdit( - editFragment: EditFragment, - parentDirPath: String, - selectedItem: String, - listIndexUpdateIntent: Intent? - ){ - val firstCon = ReadText( - File( - parentDirPath, - selectedItem - ).absolutePath - ).readText() - EditorByEditText.byEditText( - editFragment, - parentDirPath, - selectedItem, - firstCon, - listIndexUpdateIntent - ) - } +// private fun execEdit( +// editFragment: EditFragment, +//// parentDirPath: String, +// selectedItem: String, +// listIndexUpdateIntent: Intent? +// ){ +// val firstCon = ReadText( +// File( +// parentDirPath, +// selectedItem +// ).absolutePath +// ).readText() +// EditorByEditText.byEditText( +// editFragment, +//// parentDirPath, +// selectedItem, +// firstCon, +// listIndexUpdateIntent +// ) +// } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecWriteItem.kt b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecWriteItem.kt index 418971c66..1e60b8f45 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecWriteItem.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/list_index_libs/ExecWriteItem.kt @@ -1,95 +1,111 @@ package com.puutaro.commandclick.proccess.js_macro_libs.list_index_libs +import android.content.Context import com.blankj.utilcode.util.ToastUtils -import com.puutaro.commandclick.component.adapter.ListIndexAdapter -import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.TitleFileNameAndPathConPairForListIndexAdapter -import com.puutaro.commandclick.fragment.EditFragment -import com.puutaro.commandclick.proccess.list_index_for_edit.ListIndexEditConfig +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter 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.util.editor.EditorByIntent -import com.puutaro.commandclick.util.file.NoFileChecker import com.puutaro.commandclick.util.file.ReadText +import com.puutaro.commandclick.util.map.CmdClickMap import com.puutaro.commandclick.util.map.FilePrefixGetter import java.io.File object ExecWriteItem { fun write( - editFragment: EditFragment, - selectedItem: String, + context: Context?, + editComponentListAdapter: EditComponentListAdapter, listIndexPosition: Int, ){ - val type = ListIndexEditConfig.getListIndexType( - editFragment +// val type = ListIndexEditConfig.getListIndexType( +// editFragment +// ) + writeFileInTsvLine( + context, + editComponentListAdapter, + listIndexPosition, ) - when(type){ -// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL, - TypeSettingsForListIndex.ListIndexTypeKey.NORMAL - -> writeFile( - editFragment, - selectedItem, - ) - TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT - -> writeFileInTsvLine( - editFragment, - listIndexPosition, - ) - } +// when(type){ +//// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL, +// TypeSettingsForListIndex.ListIndexTypeKey.NORMAL +// -> writeFile( +// editFragment, +// selectedItem, +// ) +// TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT +// -> writeFileInTsvLine( +// editFragment, +// listIndexPosition, +// ) +// } } - private fun writeFile( - editFragment: EditFragment, - selectedItem: String, - ){ - val context = editFragment.context - val parentDirPath = ListSettingsForListIndex.ListIndexListMaker.getFilterDir( - editFragment, - ListIndexAdapter.indexListMap, - ListIndexAdapter.listIndexTypeKey - ) - if( - NoFileChecker.isNoFile( - parentDirPath, - selectedItem, - ) - ) return - val editorByIntent = EditorByIntent( -// parentDirPath, - selectedItem, - context - ) - editorByIntent.byIntent() - } +// private fun writeFile( +// editFragment: EditFragment, +// selectedItem: String, +// ){ +// val context = editFragment.context +// val parentDirPath = ListSettingsForListIndex.ListIndexListMaker.getFilterDir( +// editFragment, +// ListIndexAdapter.indexListMap, +// ListIndexAdapter.listIndexTypeKey +// ) +// if( +// NoFileChecker.isNoFile( +// parentDirPath, +// selectedItem, +// ) +// ) return +// val editorByIntent = EditorByIntent( +//// parentDirPath, +// selectedItem, +// context +// ) +// editorByIntent.byIntent() +// } private fun writeFileInTsvLine( - editFragment: EditFragment, + context: Context?, + editComponentListAdapter: EditComponentListAdapter, listIndexPosition: Int, ){ - val context = editFragment.context ?: return - val binding = editFragment.binding - val listIndexForEditAdapter = - binding.editListRecyclerView.adapter as ListIndexAdapter - val selectedTsvLine = - listIndexForEditAdapter.listIndexList.getOrNull( + if( + context == null + ) return +// val context = fragment.context ?: return +// val binding = fragment.binding +// val listIndexForEditAdapter = +// binding.editListRecyclerView.adapter as EditComponentListAdapter + val selectedLineMap = + editComponentListAdapter.lineMapList.getOrNull( listIndexPosition ) ?: return +// val editComponentListAdapter = +// binding.editListRecyclerView.adapter as EditComponentListAdapter val tsvPath = FilePrefixGetter.get( - editFragment, - ListIndexAdapter.indexListMap, - ListSettingsForListIndex.ListSettingKey.LIST_DIR.key, + editComponentListAdapter.fannelInfoMap, + editComponentListAdapter.setReplaceVariableMap, + editComponentListAdapter.editListMap, + ListSettingsForListIndex.ListSettingKey.MAP_LIST_PATH.key, ) ?: return + val mapListSeparator = ListSettingsForListIndex.MapListPathManager.mapListSeparator val isExist = ReadText(tsvPath) - .textToList() - .contains(selectedTsvLine) + .textToList().map { + CmdClickMap.createMap( + it, + mapListSeparator + ).toMap() + }.contains(selectedLineMap) if(!isExist){ ToastUtils.showShort("No exist") return } - val titleFileNameAndPathConPair = - TitleFileNameAndPathConPairForListIndexAdapter.get(selectedTsvLine) - ?: return - val filePathOrCon = titleFileNameAndPathConPair.second +// val titleFileNameAndPathConPair = +// TitleFileNameAndPathConPairForListIndexAdapter.get(selectedLineMap) +// ?: return + val filePathOrCon = selectedLineMap.get( + ListSettingsForListIndex.MapListPathManager.Key.SRC_CON.key + ) ?: return val filePathOrConObj = File(filePathOrCon) val isWithFileRename = filePathOrConObj.isFile if(!isWithFileRename) return diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/macros/JsMacroForQr.kt b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/macros/JsMacroForQr.kt index f88a5898a..6c93540dc 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/macros/JsMacroForQr.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/macros/JsMacroForQr.kt @@ -4,6 +4,6 @@ package com.puutaro.commandclick.proccess.js_macro_libs.macros enum class JsMacroForQr { DESC, EXEC_QR, - EDIT_LOGO, +// EDIT_LOGO, FILE_CONTENTS, } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/macros/JsPathMacroForListIndex.kt b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/macros/JsPathMacroForListIndex.kt index 943c6bfab..56ec9f229 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/macros/JsPathMacroForListIndex.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/macros/JsPathMacroForListIndex.kt @@ -10,8 +10,8 @@ enum class JsPathMacroForListIndex( // COPY_APP_DIR, DELETE, DESC, - EDIT_C, - EDIT_S, +// EDIT_C, +// EDIT_S, MENU, // RENAME_APP_DIR, RENAME, diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/qr_libs/ExecQr.kt b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/qr_libs/ExecQr.kt index 79f2e0006..9abd822bc 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/qr_libs/ExecQr.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/qr_libs/ExecQr.kt @@ -1,6 +1,7 @@ package com.puutaro.commandclick.proccess.js_macro_libs.qr_libs import android.widget.LinearLayout +import androidx.fragment.app.Fragment import com.puutaro.commandclick.common.variable.path.UsePath import com.puutaro.commandclick.fragment.EditFragment import com.puutaro.commandclick.fragment.TerminalFragment @@ -17,18 +18,19 @@ import kotlinx.coroutines.withContext object ExecQr { fun exec( - editFragment: EditFragment, + fragment: Fragment, clickFileName: String ){ - val context = editFragment.context + val context = fragment.context // val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( // editFragment.fannelInfoMap // ) - val parentDirPath = ActionToolForQr.getParentDirPath( - editFragment - ) + val parentDirPath = String() +// ActionToolForQr.getParentDirPath( +// editFragment +// ) val contents = ActionToolForQr.getContents( - editFragment.context, + context, parentDirPath, clickFileName ) ?: return @@ -38,7 +40,7 @@ object ExecQr { withContext(Dispatchers.Main) { for (i in 1..10) { terminalFragment = - TargetFragmentInstance.getCurrentTerminalFragmentFromFrag(editFragment.activity) + TargetFragmentInstance.getCurrentTerminalFragmentFromFrag(fragment.activity) if (terminalFragment != null) break delay(100) } @@ -56,7 +58,7 @@ object ExecQr { // } withContext(Dispatchers.Main) { QrConfirmDialog.launch( - editFragment, + fragment, null, // useAppDirPath, QrDecodedTitle.makeTitle( diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/toolbar_libs/EditToolbarSwitcher.kt b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/toolbar_libs/EditToolbarSwitcher.kt index b2f81ae2c..3d02c6918 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/toolbar_libs/EditToolbarSwitcher.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/toolbar_libs/EditToolbarSwitcher.kt @@ -12,117 +12,117 @@ import com.puutaro.commandclick.util.state.FragmentTagPrefix import com.puutaro.commandclick.util.state.TargetFragmentInstance object EditToolbarSwitcher { - fun switch( - cmdEditFragment: EditFragment, - execPlayBtnLongPress: String, - ) { - if( - execPlayBtnLongPress.isEmpty() - ) return - val context = cmdEditFragment.context - val activity = cmdEditFragment.activity - val editExecuteTerminalTag = context?.getString( - R.string.edit_terminal_fragment - ) - val editExecuteTerminal = TargetFragmentInstance.getFromFragment( - activity, - editExecuteTerminalTag - ) ?: return - if( - !editExecuteTerminal.isVisible - ) return - val cmdEditFragmentConfirm = TargetFragmentInstance.getFromFragment( - activity, - cmdEditFragment.tag - ) ?: return - if( - !cmdEditFragmentConfirm.isVisible - ) return - if( - cmdEditFragmentConfirm.tag - ?.startsWith( - FragmentTagPrefix.Prefix.CMD_VAL_EDIT_PREFIX.str - ) != true - ) return - val binding = cmdEditFragment.binding - val editTextScroll = binding.editTextScroll - val pageSearch = binding.pageSearch - val cmdclickPageSearchToolBar = pageSearch.cmdclickPageSearchToolBar - - val cmdclickToolBar = binding.editToolBar - val webSearch = binding.webSearch - val webSearchToolbar = webSearch.webSearchToolbar - val cmdPageSearchEditText = pageSearch.cmdPageSearchEditText - val cmdWebSearchEditText = webSearch.cmdWebSearchEditText - - val linearLayoutParamPageSearchToolBar = LinearLayoutCompat.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - 0, - ) - cmdclickPageSearchToolBar.layoutParams = linearLayoutParamPageSearchToolBar - val linearLayoutParamPageWebSearchToolBar = LinearLayoutCompat.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - 0, - ) - webSearchToolbar.layoutParams = linearLayoutParamPageWebSearchToolBar - val linearLayoutParamToolbar = LinearLayoutCompat.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - 0, - ) - - cmdclickToolBar.layoutParams = linearLayoutParamToolbar - cmdPageSearchEditText.setText(String()) - cmdWebSearchEditText.setText(String()) - val onTermSizeLongListenerForEdit = - context as? EditFragment.OnTermSizeLongListenerForEdit - ?: return - val editLongPressType = EditLongPressType.values().firstOrNull { - it.jsMacro == execPlayBtnLongPress - } ?: return - when(editLongPressType){ - EditLongPressType.WEB_SEARCH -> { - onTermSizeLongListenerForEdit.onTermSizeLongForEdit(cmdEditFragment) - webSearchToolbar.isVisible = true - cmdclickPageSearchToolBar.isVisible = false - cmdclickToolBar.isVisible = false - editTextScroll.isVisible = false - linearLayoutParamPageWebSearchToolBar.weight = 1F - linearLayoutParamPageSearchToolBar.weight = 0F - linearLayoutParamToolbar.weight = 0F - cmdWebSearchEditText.requestFocus() - cmdPageSearchEditText.clearFocus() - } - EditLongPressType.PAGE_SEARCH -> { - onTermSizeLongListenerForEdit.onTermSizeLongForEdit(cmdEditFragment) - webSearchToolbar.isVisible = false - cmdclickPageSearchToolBar.isVisible = true - cmdclickToolBar.isVisible = false - editTextScroll.isVisible = false - linearLayoutParamPageWebSearchToolBar.weight = 0F - linearLayoutParamPageSearchToolBar.weight = 1F - linearLayoutParamToolbar.weight = 0F - cmdWebSearchEditText.clearFocus() - cmdPageSearchEditText.requestFocus() - } - EditLongPressType.NORMAL -> { - webSearchToolbar.isVisible = false - cmdclickPageSearchToolBar.isVisible = false - cmdclickToolBar.isVisible = true - editTextScroll.isVisible = true - linearLayoutParamPageWebSearchToolBar.weight = 0F - linearLayoutParamPageSearchToolBar.weight = 0F - linearLayoutParamToolbar.weight = 1F - cmdWebSearchEditText.clearFocus() - cmdPageSearchEditText.requestFocus() - } - } - } +// fun switch( +// cmdEditFragment: EditFragment, +// execPlayBtnLongPress: String, +// ) { +// if( +// execPlayBtnLongPress.isEmpty() +// ) return +// val context = cmdEditFragment.context +// val activity = cmdEditFragment.activity +// val editExecuteTerminalTag = context?.getString( +// R.string.edit_terminal_fragment +// ) +// val editExecuteTerminal = TargetFragmentInstance.getFromFragment( +// activity, +// editExecuteTerminalTag +// ) ?: return +// if( +// !editExecuteTerminal.isVisible +// ) return +// val cmdEditFragmentConfirm = TargetFragmentInstance.getFromFragment( +// activity, +// cmdEditFragment.tag +// ) ?: return +// if( +// !cmdEditFragmentConfirm.isVisible +// ) return +// if( +// cmdEditFragmentConfirm.tag +// ?.startsWith( +// FragmentTagPrefix.Prefix.CMD_VAL_EDIT_PREFIX.str +// ) != true +// ) return +// val binding = cmdEditFragment.binding +// val editTextScroll = binding.editTextScroll +// val pageSearch = binding.pageSearch +// val cmdclickPageSearchToolBar = pageSearch.cmdclickPageSearchToolBar +// +// val cmdclickToolBar = binding.editToolBar +// val webSearch = binding.webSearch +// val webSearchToolbar = webSearch.webSearchToolbar +// val cmdPageSearchEditText = pageSearch.cmdPageSearchEditText +// val cmdWebSearchEditText = webSearch.cmdWebSearchEditText +// +// val linearLayoutParamPageSearchToolBar = LinearLayoutCompat.LayoutParams( +// ViewGroup.LayoutParams.MATCH_PARENT, +// 0, +// ) +// cmdclickPageSearchToolBar.layoutParams = linearLayoutParamPageSearchToolBar +// val linearLayoutParamPageWebSearchToolBar = LinearLayoutCompat.LayoutParams( +// ViewGroup.LayoutParams.MATCH_PARENT, +// 0, +// ) +// webSearchToolbar.layoutParams = linearLayoutParamPageWebSearchToolBar +// val linearLayoutParamToolbar = LinearLayoutCompat.LayoutParams( +// ViewGroup.LayoutParams.MATCH_PARENT, +// 0, +// ) +// +// cmdclickToolBar.layoutParams = linearLayoutParamToolbar +// cmdPageSearchEditText.setText(String()) +// cmdWebSearchEditText.setText(String()) +// val onTermSizeLongListenerForEdit = +// context as? EditFragment.OnTermSizeLongListenerForEdit +// ?: return +// val editLongPressType = EditLongPressType.values().firstOrNull { +// it.jsMacro == execPlayBtnLongPress +// } ?: return +// when(editLongPressType){ +// EditLongPressType.WEB_SEARCH -> { +// onTermSizeLongListenerForEdit.onTermSizeLongForEdit(cmdEditFragment) +// webSearchToolbar.isVisible = true +// cmdclickPageSearchToolBar.isVisible = false +// cmdclickToolBar.isVisible = false +// editTextScroll.isVisible = false +// linearLayoutParamPageWebSearchToolBar.weight = 1F +// linearLayoutParamPageSearchToolBar.weight = 0F +// linearLayoutParamToolbar.weight = 0F +// cmdWebSearchEditText.requestFocus() +// cmdPageSearchEditText.clearFocus() +// } +// EditLongPressType.PAGE_SEARCH -> { +// onTermSizeLongListenerForEdit.onTermSizeLongForEdit(cmdEditFragment) +// webSearchToolbar.isVisible = false +// cmdclickPageSearchToolBar.isVisible = true +// cmdclickToolBar.isVisible = false +// editTextScroll.isVisible = false +// linearLayoutParamPageWebSearchToolBar.weight = 0F +// linearLayoutParamPageSearchToolBar.weight = 1F +// linearLayoutParamToolbar.weight = 0F +// cmdWebSearchEditText.clearFocus() +// cmdPageSearchEditText.requestFocus() +// } +// EditLongPressType.NORMAL -> { +// webSearchToolbar.isVisible = false +// cmdclickPageSearchToolBar.isVisible = false +// cmdclickToolBar.isVisible = true +// editTextScroll.isVisible = true +// linearLayoutParamPageWebSearchToolBar.weight = 0F +// linearLayoutParamPageSearchToolBar.weight = 0F +// linearLayoutParamToolbar.weight = 1F +// cmdWebSearchEditText.clearFocus() +// cmdPageSearchEditText.requestFocus() +// } +// } +// } } -enum class EditLongPressType( - val jsMacro: String -) { - WEB_SEARCH(MacroForToolbarButton.Macro.WEB_SEARCH.name), - PAGE_SEARCH(MacroForToolbarButton.Macro.PAGE_SEARCH.name), - NORMAL(MacroForToolbarButton.Macro.NORMAL.name), -} \ No newline at end of file +//enum class EditLongPressType( +// val jsMacro: String +//) { +// WEB_SEARCH(MacroForToolbarButton.Macro.WEB_SEARCH.name), +// PAGE_SEARCH(MacroForToolbarButton.Macro.PAGE_SEARCH.name), +// NORMAL(MacroForToolbarButton.Macro.NORMAL.name), +//} \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/toolbar_libs/OkButtonHandler.kt b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/toolbar_libs/OkButtonHandler.kt index 4de364326..ca45c8323 100644 --- a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/toolbar_libs/OkButtonHandler.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/toolbar_libs/OkButtonHandler.kt @@ -4,7 +4,6 @@ import com.puutaro.commandclick.common.variable.variables.CommandClickScriptVari import com.puutaro.commandclick.fragment.EditFragment import com.puutaro.commandclick.fragment_lib.edit_fragment.common.TerminalShowByTerminalDo import com.puutaro.commandclick.fragment_lib.edit_fragment.common.ToolbarButtonBariantForEdit -import com.puutaro.commandclick.fragment_lib.edit_fragment.processor.ScriptFileSaver import com.puutaro.commandclick.proccess.edit.lib.ListContentsSelectBoxTool import com.puutaro.commandclick.proccess.edit.lib.SaveTagForListContents import com.puutaro.commandclick.proccess.intent.ExecJsOrSellHandler @@ -28,31 +27,33 @@ object OkButtonHandler { val currentScriptFileName = FannelInfoTool.getCurrentFannelName( fannelInfoMap ) - val enableCmdEdit = editFragment.enableCmdEdit - val onPassCmdVariableEdit = - editFragment.passCmdVariableEdit == - CommandClickScriptVariable.PASS_CMDVARIABLE_EDIT_ON_VALUE - val buttonTag = SaveTagForListContents.OK.tag - ScriptFileSaver.save(editFragment) - val isCmdEditExecute = enableCmdEdit - && editFragment.enableEditExecute - && !onPassCmdVariableEdit - val isSettingEditByPass = enableCmdEdit - && editFragment.enableEditExecute - && onPassCmdVariableEdit - val isSettingEdit = !enableCmdEdit +// val enableCmdEdit = editFragment.enableCmdEdit +// val onPassCmdVariableEdit = +// editFragment.passCmdVariableEdit == +// CommandClickScriptVariable.PASS_CMDVARIABLE_EDIT_ON_VALUE +// val buttonTag = SaveTagForListContents.OK.tag +// ScriptFileSaver.save(editFragment) + val isCmdEditExecute = editFragment.enableEditExecute +// enableCmdEdit +// && editFragment.enableEditExecute +// && !onPassCmdVariableEdit +// val isSettingEditByPass = editFragment.enableEditExecute +// enableCmdEdit +// && editFragment.enableEditExecute +// && onPassCmdVariableEdit +// val isSettingEdit = !enableCmdEdit - val isOnlyCmdEditNoFdialog = enableCmdEdit - && !editFragment.enableEditExecute - when (true) { - isCmdEditExecute -> { +// val isOnlyCmdEditNoFdialog = enableCmdEdit +// && !editFragment.enableEditExecute + when (isCmdEditExecute) { + true -> { Keyboard.hiddenKeyboardForFragment( editFragment ) - ListContentsSelectBoxTool.saveListContents( - editFragment, - buttonTag - ) +// ListContentsSelectBoxTool.saveListContents( +// editFragment, +// buttonTag +// ) TerminalShowByTerminalDo.show( editFragment, ) @@ -62,10 +63,10 @@ object OkButtonHandler { currentScriptFileName, ) } - isSettingEditByPass, - isOnlyCmdEditNoFdialog, - isSettingEdit, - -> { +// isSettingEditByPass, +// isOnlyCmdEditNoFdialog, +// isSettingEdit, + else -> { val listener = context as? EditFragment.OnToolBarButtonClickListenerForEditFragment listener?.onToolBarButtonClickForEditFragment( @@ -75,7 +76,6 @@ object OkButtonHandler { false ) } - else -> {} } } @@ -84,9 +84,9 @@ object OkButtonHandler { ){ val context = editFragment.context CoroutineScope(Dispatchers.Main).launch { - withContext(Dispatchers.Main) { - ScriptFileSaver.save(editFragment) - } +// withContext(Dispatchers.Main) { +// ScriptFileSaver.save(editFragment) +// } withContext(Dispatchers.Main) { val listener = context as? EditFragment.OnToolBarButtonClickListenerForEditFragment diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/toolbar_libs/UrlHistoryAddToTsv.kt b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/toolbar_libs/UrlHistoryAddToTsv.kt index 0894f4000..c36f5a49e 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/toolbar_libs/UrlHistoryAddToTsv.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/js_macro_libs/toolbar_libs/UrlHistoryAddToTsv.kt @@ -11,12 +11,13 @@ import androidx.core.view.isVisible import com.puutaro.commandclick.common.variable.fannel.SystemFannel import com.puutaro.commandclick.common.variable.path.UsePath import com.puutaro.commandclick.component.adapter.SubMenuAdapter -import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.ExecAddForListIndexAdapter +import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.ExecAddForEditListAdapter import com.puutaro.commandclick.fragment.EditFragment import com.puutaro.commandclick.proccess.js_macro_libs.edit_setting_extra.EditSettingExtraArgsTool import com.puutaro.commandclick.proccess.js_macro_libs.edit_setting_extra.ShellTool import com.puutaro.commandclick.proccess.js_macro_libs.common_libs.JsActionDataMapKeyObj import com.puutaro.commandclick.proccess.intent.ExecJsLoad +import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.ListSettingsForListIndex import com.puutaro.commandclick.util.file.ReadText import com.puutaro.commandclick.util.tsv.TsvTool import java.io.File @@ -173,15 +174,26 @@ object UrlHistoryAddToTsv { val menuListAdapter = urlHistoryToTsvListView.adapter as SubMenuAdapter val selectedTitle = menuListAdapter.getItem(pos) ?: return@setOnItemClickListener - val selectedUrlHistoryLine = takeFromUrlHistoryList( + val selectedUrlHistoryLineMap = takeFromUrlHistoryList( editFragment, jsActionMap, ).find { it.startsWith(selectedTitle) + }?.let { + val titleAndConList = it.split("\t") + val title = titleAndConList.firstOrNull() ?: return@setOnItemClickListener + val con = titleAndConList.getOrNull(1) ?: return@setOnItemClickListener + mapOf( + ListSettingsForListIndex.MapListPathManager.Key.SRC_TITLE.key to title, + ListSettingsForListIndex.MapListPathManager.Key.SRC_CON.key to con + ) } ?: return@setOnItemClickListener - ExecAddForListIndexAdapter.execAddForTsv( - editFragment, - selectedUrlHistoryLine + ExecAddForEditListAdapter.execAddForEditList( + editFragment.context, + editFragment.fannelInfoMap, + editFragment.setReplaceVariableMap, + editFragment.binding.editListRecyclerView, + selectedUrlHistoryLineMap ) urlHistoryToTsvDialog?.dismiss() urlHistoryToTsvDialog = null diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/lib/MakeExecCmdForTermux.kt b/app/src/main/java/com/puutaro/commandclick/proccess/lib/MakeExecCmdForTermux.kt index fb7b0e288..90dacb94e 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/lib/MakeExecCmdForTermux.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/lib/MakeExecCmdForTermux.kt @@ -67,7 +67,7 @@ object MakeExecCmdForTermux { val execCmdSource = if( terminalDo == SettingVariableSelects.TerminalDoSelects.OFF.name || terminalOutputMode == SettingVariableSelects.TerminalOutPutModeSelects.NO.name - || terminalDo == SettingVariableSelects.TerminalDoSelects.TERMUX.name +// || terminalDo == SettingVariableSelects.TerminalDoSelects.TERMUX.name || !terminalViewModel.launchUrl.isNullOrEmpty() ) { "${beforeCommandSource};" + diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/EditFrameMaker.kt b/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/EditFrameMaker.kt new file mode 100644 index 000000000..8a0398d53 --- /dev/null +++ b/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/EditFrameMaker.kt @@ -0,0 +1,558 @@ +package com.puutaro.commandclick.proccess.list_index_for_edit + +import android.content.Context +import android.graphics.BitmapFactory +import android.graphics.drawable.AnimationDrawable +import android.graphics.drawable.BitmapDrawable +import android.graphics.drawable.Drawable +import android.view.Gravity +import android.view.LayoutInflater +import android.view.ViewGroup +import android.widget.FrameLayout +import androidx.appcompat.content.res.AppCompatResources +import androidx.appcompat.widget.AppCompatImageView +import androidx.appcompat.widget.LinearLayoutCompat +import androidx.core.view.isVisible +import com.bumptech.glide.Glide +import com.bumptech.glide.RequestBuilder +import com.bumptech.glide.load.engine.DiskCacheStrategy +import com.puutaro.commandclick.R +import com.puutaro.commandclick.activity_lib.event.lib.terminal.ExecSetToolbarButtonImage +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.custom_view.OutlineTextView +import com.puutaro.commandclick.fragment_lib.edit_fragment.common.EditComponent +import com.puutaro.commandclick.proccess.ubuntu.BusyboxExecutor +import com.puutaro.commandclick.util.file.AssetsFileManager +import com.puutaro.commandclick.util.file.FileSystems +import com.puutaro.commandclick.util.image_tools.BitmapTool +import com.puutaro.commandclick.util.image_tools.ScreenSizeCalculator +import com.puutaro.commandclick.util.str.PairListTool +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import java.io.File + +object EditFrameMaker { + + + private val valueSeparator = EditComponent.Template.valueSeparator + + private val tagKey = EditComponent.Template.EditComponentKey.TAG.key + private val imageKey = EditComponent.Template.EditComponentKey.IMAGE.key + private val imagePropertyKey = EditComponent.Template.EditComponentKey.IMAGE_PROPERTY.key + private val textKey = EditComponent.Template.EditComponentKey.TEXT.key + private val textPropertyKey = EditComponent.Template.EditComponentKey.TEXT_PROPERTY.key + private val heightKey = EditComponent.Template.EditComponentKey.HEIGHT.key + + + private val imagePathsKey = EditComponent.Template.ImageManager.ImageKey.PATHS.key + private val imageDelayKey = EditComponent.Template.ImageManager.ImageKey.DELAY.key + private val imageTagKey = EditComponent.Template.ImagePropertyManager.PropertyKey.TAG.key + private val imageColorKey = EditComponent.Template.ImagePropertyManager.PropertyKey.COLOR.key + private val imageAlphaKey = EditComponent.Template.ImagePropertyManager.PropertyKey.ALPHA.key + private val imageScaleKey = EditComponent.Template.ImagePropertyManager.PropertyKey.SCALE.key + + private val textSizeKey = EditComponent.Template.TextPropertyManager.Property.SIZE.key + private val textTagKey = EditComponent.Template.TextPropertyManager.Property.TAG.key + private val textColorKey = EditComponent.Template.TextPropertyManager.Property.COLOR.key + private val strokeColorKey = EditComponent.Template.TextPropertyManager.Property.STROKE_COLOR.key + private val strokeWidthKey = EditComponent.Template.TextPropertyManager.Property.STROKE_WIDTH.key + private val textAlphaKey = EditComponent.Template.TextPropertyManager.Property.ALPHA.key + private val textMaxLinesKey = EditComponent.Template.TextPropertyManager.Property.MAX_LINES.key +// private val disableTextSelectKey = EditComponent.Template.TextPropertyManager.Property.DISABLE_TEXT_SELECT.key + + private val switchOn = EditComponent.Template.switchOn + + suspend fun make( + context: Context?, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + busyboxExecutor: BusyboxExecutor?, + frameKeyPairList: List>?, + width: Int, + weight: Float?, + tag: String?, + isMarginZero: Boolean, + totalSettingValMap: Map? + ): FrameLayout? { + if( + context == null + ) return null + val inflater = LayoutInflater.from(context) + val buttonLayout = inflater.inflate( + R.layout.icon_caption_layout, + null + ) as FrameLayout + val height = withContext(Dispatchers.IO) { + PairListTool.getValue( + frameKeyPairList, + heightKey, + )?.let { + try { + ScreenSizeCalculator.toDp(context, it.toInt()) + } catch(e: Exception){ + null + } + } ?: ViewGroup.LayoutParams.MATCH_PARENT +// ,ScreenSizeCalculator.toDp(context, 50) + } + tag?.let { + buttonLayout.tag = it + } + val param = LinearLayoutCompat.LayoutParams( + width, + height, + ) + weight?.let { + param.weight = it + } + val marginDp = when(isMarginZero) { + true -> 0 + else -> ScreenSizeCalculator.toDp( + context, + context.resources?.getDimension(R.dimen.toolbar_button_horizon_margin) ?: 0 + ) + } + param.marginStart = marginDp + param.marginEnd = marginDp + param.gravity = Gravity.CENTER + buttonLayout.layoutParams = param + buttonLayout.foregroundGravity = Gravity.CENTER + + buttonLayout.findViewById(R.id.icon_caption_layout_image)?.let { + imageButtonView -> + val imageMap = withContext(Dispatchers.IO) { + PairListTool.getValue( + frameKeyPairList, + imageKey, + )?.let { + EditComponent.Template.makeKeyMap( + it, + ) + } + } + val imagePropertyMap = withContext(Dispatchers.IO) { + PairListTool.getValue( + frameKeyPairList, + imagePropertyKey, + )?.let { + EditComponent.Template.makeKeyMap( + it, + ) + } + } + setImageView( + imageButtonView, + imageMap, + imagePropertyMap, + ) + } + buttonLayout.findViewById(R.id.icon_caption_layout_caption)?.let { + captionTextView -> + val textMap = withContext(Dispatchers.IO) { + PairListTool.getPair( + frameKeyPairList, + textKey, + )?.let { + EditComponent.Template.TextManager.createTextMap( + it.second, + totalSettingValMap?.get( + tag + ) + ) + } + } + val textPropertyMap = withContext(Dispatchers.IO) { + PairListTool.getPair( + frameKeyPairList, + textPropertyKey, + )?.let { + EditComponent.Template.makeKeyMap( + it.second, + ) + } + } + setCaption( + fannelInfoMap, + setReplaceVariableMap, + busyboxExecutor, + captionTextView, + textMap, + textPropertyMap, + ) + } + return buttonLayout + } + + private suspend fun setImageView( + imageView: AppCompatImageView, + imageMap: Map?, + imagePropertyMap: Map?, + ) { + val context = imageView.context + val imagePathList = withContext(Dispatchers.IO) { + imageMap?.get( + imagePathsKey, + )?.split(valueSeparator) + } + val delay = withContext(Dispatchers.IO) { + imageMap?.get( + imageDelayKey, + )?.let { + try { + it.toInt() + } catch(e: Exception){ + null + } + } ?: 800 + } + val imageAlpha = withContext(Dispatchers.IO) { + imagePropertyMap?.get( + imageAlphaKey, + )?.let { + try { + it.toFloat() + } catch(e: Exception){ + null + } + } + } + val imageTag = withContext(Dispatchers.IO) { + imagePropertyMap?.get( + imageTagKey, + ) + } + val imageColor = withContext(Dispatchers.IO) { + imagePropertyMap?.get( + imageColorKey, + )?.let { + colorStr -> + CmdClickColor.values().firstOrNull { + it.str == colorStr + } + } + } + val imageScale = withContext(Dispatchers.IO) { + imagePropertyMap?.get( + imageScaleKey, + ).let { + scale -> + EditComponent.Template.ImagePropertyManager.ImageScale.values().firstOrNull { + it.str == scale + } ?: EditComponent.Template.ImagePropertyManager.ImageScale.FIT_CENTER + } + } + imageView.isVisible = !imagePathList.isNullOrEmpty() + if( + imagePathList.isNullOrEmpty() + ) { +// FileSystems.updateFile( +// File(UsePath.cmdclickDefaultAppDirPath, "licon0.txt").absolutePath, +// listOf( +// "imageTag: ${imageTag}", +// ).joinToString("\n") +// ) + return + } + when(imageColor == null){ + true -> imageView.imageTintList = null + else -> imageView.imageTintList = AppCompatResources.getColorStateList( + context, + imageColor.id + ) + } + imageTag?.let { + imageView.tag = imageTag + } + imageAlpha?.let { + imageView.alpha = imageAlpha + } + imageView.scaleType = imageScale.scale + + when(imagePathList.size == 1){ + false -> { + execSetMultipleImage( + imageView, + imagePathList, + delay, + ) + } + else -> { + execSetSingleImage( + imageView, + imagePathList.firstOrNull() + ) + } + } + } + + private suspend fun execSetSingleImage( + imageView: AppCompatImageView, + imagePathSrc: String?, + ){ + if( + imagePathSrc.isNullOrEmpty() + ) return + val imageViewContext = imageView.context + val requestBuilder: RequestBuilder = + Glide.with(imageViewContext) + .asDrawable() + .sizeMultiplier(0.1f) + val imagePathToIconType = EditComponent.Template.ImageManager.makeIconAndTypePair( + imagePathSrc + ) + val imagePath = + imagePathToIconType.first +// FileSystems.updateFile( +// File(UsePath.cmdclickDefaultAppDirPath, "licon.txt").absolutePath, +// listOf( +// "imagePath: ${imagePathSrc}", +// "icon: ${icon?.str}", +// ).joinToString("\n\n") +// ) + if(File(imagePathSrc).isFile){ +// FileSystems.updateFile( +// File(UsePath.cmdclickDefaultAppDirPath, "liconImagePath.txt").absolutePath, +// listOf( +// "imagePath: ${imagePathSrc}", +// "icon: ${icon?.str}", +// ).joinToString("\n\n") +// ) + Glide.with(imageViewContext) + .load(imagePathSrc) + .skipMemoryCache(true) + .diskCacheStrategy(DiskCacheStrategy.NONE) + .thumbnail(requestBuilder) + .into(imageView) + return + } + val iconType = imagePathToIconType.second.let { + iconTypeStr -> + EditComponent.Template.ImageManager.IconType.values().firstOrNull { + it.type == iconTypeStr + } ?: EditComponent.Template.ImageManager.IconType.IMAGE + } +// val iconId = icon?.id +// imageView.setAutofillHints(CmdClickIcons.values().firstOrNull { +// it.id == iconId +// }?.str) + val assetsPath = CmdClickIcons.values().firstOrNull { + it.str == imagePath + }?.assetsPath ?: return + val bitmap = when(iconType) { + EditComponent.Template.ImageManager.IconType.IMAGE -> { + val iconFile = ExecSetToolbarButtonImage.getImageFile( + assetsPath + ) + BitmapTool.convertFileToBitmap(iconFile.absolutePath) + } + EditComponent.Template.ImageManager.IconType.ICON -> { + AssetsFileManager.assetsByteArray( + imageViewContext, + assetsPath, + )?.let { + BitmapFactory.decodeByteArray(it, 0, it.size) + } + } + } + if(bitmap == null){ + imageView.isVisible = false + return + } + Glide.with(imageViewContext) + .load(bitmap) + .skipMemoryCache(true) + .diskCacheStrategy(DiskCacheStrategy.NONE) + .thumbnail(requestBuilder) + .into(imageView) + } + + private fun execSetMultipleImage( + imageView: AppCompatImageView, + imagePathList: List, + delay: Int, + ){ + val imageViewContext = imageView.context + val animationDrawable = AnimationDrawable() + val bitmapList = imagePathList.map { + imagePathSrc -> + if(File(imagePathSrc).isFile) { + return@map BitmapTool.convertFileToBitmap(imagePathSrc) + } + val imagePathToIconType = EditComponent.Template.ImageManager.makeIconAndTypePair( + imagePathSrc + ) + val imagePath = + imagePathToIconType.first + val iconType = imagePathToIconType.second.let { + iconTypeStr -> + EditComponent.Template.ImageManager.IconType.values().firstOrNull { + it.type == iconTypeStr + } ?: EditComponent.Template.ImageManager.IconType.IMAGE + } + val assetsPath = CmdClickIcons.values().firstOrNull { + it.str == imagePath + }?.assetsPath ?: return@map null + when(iconType) { + EditComponent.Template.ImageManager.IconType.IMAGE -> { + val iconFile = ExecSetToolbarButtonImage.getImageFile( + assetsPath + ) + BitmapTool.convertFileToBitmap(iconFile.absolutePath) + } + EditComponent.Template.ImageManager.IconType.ICON -> { + AssetsFileManager.assetsByteArray( + imageViewContext, + assetsPath, + )?.let { + BitmapFactory.decodeByteArray(it, 0, it.size) + } + } + } + } + bitmapList.forEach { + if(it == null) return@forEach + animationDrawable.addFrame( + BitmapDrawable(imageViewContext.resources, it), + delay + ) + } + animationDrawable.isOneShot = false + imageView.setImageDrawable(animationDrawable) + animationDrawable.start() + } + + + private suspend fun setCaption( + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + busyboxExecutor: BusyboxExecutor?, + captionTextView: OutlineTextView, + textMap: Map?, + textPropertyMap: Map?, + ) { + val settingValue = textMap?.get( + EditComponent.Template.TextManager.TextKey.SETTING_VALUE.key + ) + val text = withContext(Dispatchers.IO) { + EditComponent.Template.TextManager.makeText( + fannelInfoMap, + setReplaceVariableMap, + busyboxExecutor, + textMap, + settingValue + ) + } + val textTag = withContext(Dispatchers.IO) { + textPropertyMap?.get( + textTagKey, + ) + } + val textSize = withContext(Dispatchers.IO) { + textPropertyMap?.get( + textSizeKey, + )?.let { + try { + it.toFloat() + } catch(e: Exception){ + null + } + } + } + val textColorStr = withContext(Dispatchers.IO) { + textPropertyMap?.get( + textColorKey, + ) + } + val strokeColorStr = withContext(Dispatchers.IO) { + textPropertyMap?.get( + strokeColorKey, + ) + } + val strokeWidth = withContext(Dispatchers.IO) { + textPropertyMap?.get( + strokeWidthKey, + )?.let { + try { + it.toInt() + } catch(e: Exception){ + null + } + } + } + val textAlpha = withContext(Dispatchers.IO) { + textPropertyMap?.get( + textAlphaKey, + )?.let { + try { + it.toFloat() + } catch(e: Exception){ + null + } + } + } + val maxLines = withContext(Dispatchers.IO){ + textPropertyMap?.get( + textMaxLinesKey + )?.let { + try { + it.toInt() + }catch (e: Exception){ + null + } + } ?: 1 + } +// val enableTextSelect = withContext(Dispatchers.IO){ +// textPropertyMap?.get( +// disableTextSelectKey +// ) != switchOn +// } + withContext(Dispatchers.Main) { +// textTag?.let { + captionTextView.tag = textTag +// } + captionTextView.setAutofillHints(settingValue) +// captionTextView.autofillHints?.firstOrNull(0) +// captionTextView.hint = settingValue + captionTextView.text = text + captionTextView.maxLines = maxLines +// captionTextView.setTextIsSelectable(enableTextSelect) + CmdClickColor.values().firstOrNull { + it.str == textColorStr + }?.let { + captionTextView.setFillColor(it.id) + } ?: let { + captionTextView.setFillColor(R.color.fill_gray) + } + CmdClickColor.values().firstOrNull { + it.str == strokeColorStr + }?.let { + captionTextView.setStrokeColor(it.id) + } ?: let { + captionTextView.setStrokeColor(R.color.white) + } + strokeWidth?.let { + captionTextView.outlineWidthSrc = it + } ?: let { + captionTextView.outlineWidthSrc = 2 + } + textSize?.let { + captionTextView.textSize = textSize + } + textAlpha?.let { + captionTextView.alpha = textAlpha + } + } +// FileSystems.updateFile( +// File(UsePath.cmdclickDefaultAppDirPath, "lcapt.txt").absolutePath, +// listOf( +// "textMap: ${textMap}", +// "textPropertyMap: ${textPropertyMap}", +// "strokeWidth: ${strokeWidth}", +// "captionTextView.outlineWidthSrc: ${captionTextView.outlineWidthSrc}", +// +// ).joinToString("\n") +// ) + } +} \ 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 8d2ae5276..0dfb80c0f 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 @@ -3,22 +3,18 @@ package com.puutaro.commandclick.proccess.list_index_for_edit import androidx.appcompat.content.res.AppCompatResources import androidx.appcompat.widget.AppCompatTextView import androidx.core.view.isVisible +import androidx.fragment.app.Fragment +import androidx.recyclerview.widget.RecyclerView import com.google.android.material.card.MaterialCardView import com.puutaro.commandclick.R import com.puutaro.commandclick.common.variable.res.CmdClickIcons import com.puutaro.commandclick.common.variable.path.UsePath -import com.puutaro.commandclick.component.adapter.ListIndexAdapter -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.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 -import com.puutaro.commandclick.proccess.list_index_for_edit.libs.ListIndexArgsMaker 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.TypeSettingsForListIndex import com.puutaro.commandclick.proccess.ubuntu.BusyboxExecutor import com.puutaro.commandclick.util.CcPathTool import com.puutaro.commandclick.util.map.CmdClickMap @@ -32,23 +28,26 @@ object ListIndexEditConfig { private const val editTargetContents = "\${EDIT_TARGET_CONTENTS}" fun handle( - editFragment: EditFragment, - isLongClick: Boolean, - selectedItem: String, - holder: ListIndexAdapter.ListIndexListViewHolder, + fragment: Fragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + busyboxExecutor: BusyboxExecutor?, + editListRecyclerView: RecyclerView?, + selectedItemLineMap: Map, + jsAcCon: String, listIndexPosition: Int ){ - val clickConfigListCon = makeClickConfigListStr( - editFragment, - isLongClick, - ) +// val clickConfigListCon = makeClickConfigListStr( +// editFragment, +// isLongClick, +// ) // val filterDir = ListSettingsForListIndex.ListIndexListMaker.getFilterDir( // editFragment, // ListIndexForEditAdapter.indexListMap, // ListIndexForEditAdapter.listIndexTypeKey // ) - val fannelInfoMap = - editFragment.fannelInfoMap +// val fannelInfoMap = +// fragment.fannelInfoMap // val extraRepValMap = mapOf( // "ITEM_NAME" to selectedItem, // "INDEX_LIST_DIR_PATH" to filterDir, @@ -69,36 +68,42 @@ object ListIndexEditConfig { FannelInfoTool.getCurrentFannelName(fannelInfoMap) ).absolutePath val jsActionMap = JsActionTool.makeJsActionMap( - editFragment, + fragment, fannelInfoMap, - clickConfigListCon, - editFragment.setReplaceVariableMap, + jsAcCon, + setReplaceVariableMap, mainFannelPath ) - val clickConfigPairList = CmdClickMap.createMap( - clickConfigListCon, - '|' - ) - val listIndexArgsMaker = ListIndexArgsMaker( - editFragment.fannelInfoMap, - editFragment.setReplaceVariableMap, - clickConfigPairList, - ) - - ClickScriptSaver.save( - editFragment, - listIndexArgsMaker - ) - ExecClickUpdate.update( - editFragment, - listIndexArgsMaker, - holder, - ) +// val clickConfigPairList = CmdClickMap.createMap( +// jsAcCon, +// '|' +// ) +// val listIndexArgsMaker = ListIndexArgsMaker( +// fannelInfoMap, +// setReplaceVariableMap, +// clickConfigPairList, +// ) +// ClickScriptSaver.save( +// listIndexArgsMaker +// ) +// val editComponentListAdapter = editListRecyclerView.adapter as EditComponentListAdapter +// ExecClickUpdate.update( +// fragment, +// fannelInfoMap, +// setReplaceVariableMap, +// editComponentListAdapter, +// listIndexArgsMaker, +// listIndexPosition, +// ) JsPathHandlerForQrAndListIndex.handle( - editFragment, + fragment, + fannelInfoMap, + setReplaceVariableMap, + busyboxExecutor, + editListRecyclerView, jsActionMap, - selectedItem, + selectedItemLineMap, listIndexPosition, ) } @@ -108,6 +113,17 @@ object ListIndexEditConfig { configKey: String, ): Map { + return getConfigKeyConList( + listIndexConfigMap, + configKey, + ).toMap() + } + + fun getConfigKeyConList( + listIndexConfigMap: Map?, + configKey: String, + ): List> { + return listIndexConfigMap?.get( configKey ).let{ @@ -115,33 +131,33 @@ object ListIndexEditConfig { it, '|' ) - }.toMap() - } - - private fun makeClickConfigListStr( - editFragment: EditFragment, - isLongClick: Boolean, - ): String? { - val buttonClickMapKey = when( - isLongClick - ){ - true -> ListIndexConfigKey.LONG_CLICK.key - else -> ListIndexConfigKey.CLICK.key - } - return editFragment.listIndexConfigMap - ?.get(buttonClickMapKey) } - fun getListIndexType( - editFragment: EditFragment, - ): TypeSettingsForListIndex.ListIndexTypeKey { - val listIndexTypeStr = editFragment.listIndexConfigMap - ?.get(ListIndexConfigKey.TYPE.key) - return TypeSettingsForListIndex.ListIndexTypeKey.values().firstOrNull { - it.key == listIndexTypeStr - } ?: TypeSettingsForListIndex.ListIndexTypeKey.NORMAL - } +// private fun makeClickConfigListStr( +// editFragment: EditFragment, +// isLongClick: Boolean, +// ): String? { +// val buttonClickMapKey = when( +// isLongClick +// ){ +// true -> ListIndexConfigKey.LONG_CLICK.key +// else -> ListIndexConfigKey.CLICK.key +// +// } +// return editFragment.listIndexConfigMap +// ?.get(buttonClickMapKey) +// } + +// fun getListIndexType( +// editFragment: EditFragment, +// ): TypeSettingsForListIndex.ListIndexTypeKey { +// val listIndexTypeStr = editFragment.listIndexConfigMap +// ?.get(ListIndexConfigKey.TYPE.key) +// return TypeSettingsForListIndex.ListIndexTypeKey.values().firstOrNull { +// it.key == listIndexTypeStr +// } ?: TypeSettingsForListIndex.ListIndexTypeKey.NORMAL +// } fun setCheckToMaterialCardView( materialCardView: MaterialCardView, @@ -193,7 +209,7 @@ object ListIndexEditConfig { } fun makeFileNameText( - listIndexTypeKey: TypeSettingsForListIndex.ListIndexTypeKey, +// listIndexTypeKey: TypeSettingsForListIndex.ListIndexTypeKey, fileNameTextView: AppCompatTextView?, fileName: String, listIndexConfigMap: Map?, @@ -213,7 +229,7 @@ object ListIndexEditConfig { return null } val fileNameBeforeCut = makeFileName( - listIndexTypeKey, +// listIndexTypeKey, fileName, fileNameConfigMap, busyboxExecutor @@ -231,30 +247,36 @@ object ListIndexEditConfig { } private fun makeFileName( - listIndexTypeKey: TypeSettingsForListIndex.ListIndexTypeKey, +// listIndexTypeKey: TypeSettingsForListIndex.ListIndexTypeKey, fileNameSrc: String, fileNameConfigMap: Map?, busyboxExecutor: BusyboxExecutor?, ): String { - return when(listIndexTypeKey){ -// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL -// -> fileNameSrc - TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT - -> { - makeFannelName( - fileNameSrc.split("\t").firstOrNull() - ?: String(), - fileNameConfigMap, - busyboxExecutor, - ) - } - TypeSettingsForListIndex.ListIndexTypeKey.NORMAL - -> makeFannelName( - fileNameSrc, - fileNameConfigMap, - busyboxExecutor, - ) - } + return makeFannelName( + fileNameSrc.split("\t").firstOrNull() + ?: String(), + fileNameConfigMap, + busyboxExecutor, + ) +// return when(listIndexTypeKey){ +//// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL +//// -> fileNameSrc +// TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT +// -> { +// makeFannelName( +// fileNameSrc.split("\t").firstOrNull() +// ?: String(), +// fileNameConfigMap, +// busyboxExecutor, +// ) +// } +// TypeSettingsForListIndex.ListIndexTypeKey.NORMAL +// -> makeFannelName( +// fileNameSrc, +// fileNameConfigMap, +// busyboxExecutor, +// ) +// } } private fun makeFannelName( @@ -308,7 +330,7 @@ object ListIndexEditConfig { } class MakeFileDescArgsMaker( - val parentDirPath: String, +// val parentDirPath: String, val fileNameOrInstallFannelLine: String, val fileCon: String, val listIndexConfigMap: Map?, @@ -317,27 +339,34 @@ object ListIndexEditConfig { fun makeFileDesc( makeFileDescArgsMaker: MakeFileDescArgsMaker ): String? { - return when(ListIndexAdapter.listIndexTypeKey){ -// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL -> -// FannelListVariable.getDesc( -// makeFileDescArgsMaker.fileNameOrInstallFannelLine + return makeDescCon( + makeFileDescArgsMaker, + makeFileDescArgsMaker + .fileNameOrInstallFannelLine + .split("\t") + .lastOrNull() ?: String() + ) +// return when(ListIndexAdapter.listIndexTypeKey){ +//// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL -> +//// FannelListVariable.getDesc( +//// makeFileDescArgsMaker.fileNameOrInstallFannelLine +//// ) +// TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT -> { +// makeDescCon( +// makeFileDescArgsMaker, +// makeFileDescArgsMaker +// .fileNameOrInstallFannelLine +// .split("\t") +// .lastOrNull() ?: String() // ) - TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT -> { - makeDescCon( - makeFileDescArgsMaker, - makeFileDescArgsMaker - .fileNameOrInstallFannelLine - .split("\t") - .lastOrNull() ?: String() - ) - } - TypeSettingsForListIndex.ListIndexTypeKey.NORMAL -> { - makeDescCon( - makeFileDescArgsMaker, - makeFileDescArgsMaker.fileCon - ) - } - } +// } +// TypeSettingsForListIndex.ListIndexTypeKey.NORMAL -> { +// makeDescCon( +// makeFileDescArgsMaker, +// makeFileDescArgsMaker.fileCon +// ) +// } +// } } private fun makeDescCon( @@ -394,14 +423,18 @@ object ListIndexEditConfig { ) { TYPE("type"), LAYOUT("layout"), + FOOTER_LAYOUT_PATH("footerLayoutPath"), + TOOLBAR_LAYOUT_PATH("toolbarLayoutPath"), NAME("name"), DESC("desc"), + BK("bk"), CHECK_ITEM("checkItem"), CLICK("click"), - LONG_CLICK("longClick"), +// LONG_CLICK("longClick"), LIST("list"), + TITLE_LAYOUT_PATH("titleLayoutPath"), SEARCH_BOX("searchBox"), - PERFORM("perform"), +// PERFORM("perform"), DELETE("delete"), } } diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/config_settings/BkImageSettingsForEditList.kt b/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/config_settings/BkImageSettingsForEditList.kt new file mode 100644 index 000000000..41be80590 --- /dev/null +++ b/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/config_settings/BkImageSettingsForEditList.kt @@ -0,0 +1,124 @@ +package com.puutaro.commandclick.proccess.list_index_for_edit.config_settings + +import android.content.Context +import android.view.ViewGroup +import android.widget.FrameLayout +import androidx.appcompat.widget.AppCompatImageView +import com.puutaro.commandclick.common.variable.path.UsePath +import com.puutaro.commandclick.fragment_lib.edit_fragment.common.EditComponent +import com.puutaro.commandclick.proccess.list_index_for_edit.EditFrameMaker +import com.puutaro.commandclick.proccess.ubuntu.BusyboxExecutor +import com.puutaro.commandclick.util.file.FileSystems +import com.puutaro.commandclick.util.str.PairListTool +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import java.io.File + +object BkImageSettingsForEditList { + + private val tagKey = EditComponent.Template.EditComponentKey.TAG.key + +// private val imagePathsKey = EditComponent.Template.ImageManager.ImageKey.PATHS.key +// private val imageDelayKey = EditComponent.Template.ImageManager.ImageKey.DELAY.key +// private val imageTagKey = EditComponent.Template.ImagePropertyManager.PropertyKey.TAG.key +// private val imageAlphaKey = EditComponent.Template.ImagePropertyManager.PropertyKey.ALPHA.key +// private val imageScaleKey = EditComponent.Template.ImagePropertyManager.PropertyKey.SCALE.key + + +//// private val labelTagKey = EditComponent.Template.EditComponentKey.LABEL_TAG.key +// private val imageTagKey = EditComponent.Template.EditComponentKey.IMAGE_TAG.key +//// private val labelKey = EditComponent.Template.EditComponentKey.LABEL.key +// private val imagePATHPathKey = EditComponent.Template.EditComponentKey.IMAGE_PATH.key +//// private val heightKey = EditComponent.Template.EditComponentKey.HEIGHT.key +//// private val textSizeKey = EditComponent.Template.EditComponentKey.TEXT_SIZE.key +//// private val textColorKey = EditComponent.Template.EditComponentKey.TEXT_COLOR.key +//// private val strokeColorKey = EditComponent.Template.EditComponentKey.STROKE_COLOR.key +//// private val strokeWidthKey = EditComponent.Template.EditComponentKey.STROKE_WIDTH.key +//// private val textAlphaKey = EditComponent.Template.EditComponentKey.TEXT_ALPHA.key +// private val imageAlphaKey = EditComponent.Template.EditComponentKey.IMAGE_ALPHA.key +// private val imageScaleKey = EditComponent.Template.EditComponentKey.IMAGE_SCALE.key + + suspend fun makeBkFrame( + context: Context?, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + busyboxExecutor: BusyboxExecutor?, + editListBkPairs: List>?, + ): FrameLayout? { + val tag = withContext(Dispatchers.IO) { + PairListTool.getValue( + editListBkPairs, + tagKey + ) + } + return EditFrameMaker.make( + context, + fannelInfoMap, + setReplaceVariableMap, + busyboxExecutor, + editListBkPairs, + ViewGroup.LayoutParams.MATCH_PARENT, + null, + tag, + true, + null + ) + } + +// suspend fun makeBkImage( +// imageView: AppCompatImageView, +// editListBkPairs: List>, +// ) { +// val imageTag = withContext(Dispatchers.IO) { +// PairListTool.getValue( +// editListBkPairs, +// imageTagKey +// ) +// } +// val imagePath = withContext(Dispatchers.IO) { +// PairListTool.getValue( +// editListBkPairs, +// imagePATHPathKey +// ) +// } +// val imageAlpha = withContext(Dispatchers.IO) { +// PairListTool.getValue( +// editListBkPairs, +// imageAlphaKey +// )?.let { +// try { +// it.toFloat() +// } catch(e: Exception){ +// null +// } +// } +// } +// val imageScale = withContext(Dispatchers.IO) { +// PairListTool.getValue( +// editListBkPairs, +// imageScaleKey +// ).let { +// scale -> +// EditComponent.Template.ImageScale.values().firstOrNull { +// it.str == scale +// } ?: EditComponent.Template.ImageScale.FIT_CENTER +// } +// } +// FileSystems.writeFile( +// File(UsePath.cmdclickDefaultAppDirPath, "lImage.txt").absolutePath, +// listOf( +// "imageTag: ${imageTag}", +// "imagePath: ${imagePath}", +// "imageAlpha: ${imageAlpha}", +// "imageScale: ${imageScale}", +// ).joinToString("\n") +// ) +// EditFrameMaker.setImageView( +// imageView, +// imageTag, +// imagePath, +// imageAlpha, +// imageScale +// ) +// } +} \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/config_settings/ClickSettingsForListIndex.kt b/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/config_settings/ClickSettingsForListIndex.kt index a56ac0437..55b1cedc2 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/config_settings/ClickSettingsForListIndex.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/config_settings/ClickSettingsForListIndex.kt @@ -1,5 +1,7 @@ package com.puutaro.commandclick.proccess.list_index_for_edit.config_settings +import com.puutaro.commandclick.proccess.list_index_for_edit.ListIndexEditConfig +import com.puutaro.commandclick.util.map.CmdClickMap import com.puutaro.commandclick.util.str.QuoteTool object ClickSettingsForListIndex { @@ -25,28 +27,31 @@ object ClickSettingsForListIndex { ON, } + fun makeClickConfigMap( + listIndexConfigMap: Map? + ): Map { + return CmdClickMap.createMap( + listIndexConfigMap?.get(ListIndexEditConfig.ListIndexConfigKey.LIST.key), + '|' + ).toMap() + } + + fun howEnableClickUpdate( - clickConfigPairList: List>? + clickConfigMap: Map? ): Boolean { - val enableUpdateValue = clickConfigPairList?.firstOrNull { - val mainKey = it.first - mainKey == ClickSettingKey.ENABLE_UPDATE.key - }?.second.let { + return clickConfigMap?.get(ClickSettingKey.ENABLE_UPDATE.key)?.let { QuoteTool.trimBothEdgeQuote(it) - } - return enableUpdateValue == OnDisableUpdateValue.ON.name + } == OnDisableUpdateValue.ON.name } fun howEnableClickSave( - clickConfigPairList: List>? + clickConfigMap: Map? ): Boolean { - val onScriptSaveValue = clickConfigPairList?.firstOrNull { - val mainKey = it.first - mainKey == ClickSettingKey.ON_SCRIPT_SAVE.key - }?.second.let { - QuoteTool.trimBothEdgeQuote(it) - } - return onScriptSaveValue == OnScriptSave.ON.name + return clickConfigMap?.get(ClickSettingKey.ON_SCRIPT_SAVE.key) + ?.let { + QuoteTool.trimBothEdgeQuote(it) + } == OnScriptSave.ON.name } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/config_settings/DeleteSettingsForListIndex.kt b/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/config_settings/DeleteSettingsForListIndex.kt index 26e704d55..2e0d0933a 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/config_settings/DeleteSettingsForListIndex.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/config_settings/DeleteSettingsForListIndex.kt @@ -1,7 +1,7 @@ package com.puutaro.commandclick.proccess.list_index_for_edit.config_settings -import com.puutaro.commandclick.component.adapter.ListIndexAdapter -import com.puutaro.commandclick.fragment.EditFragment +import androidx.fragment.app.Fragment +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter import com.puutaro.commandclick.proccess.list_index_for_edit.libs.ListIndexReplacer import com.puutaro.commandclick.proccess.tool_bar_button.JsActionHandler @@ -11,12 +11,12 @@ object DeleteSettingsForListIndex { val key: String ){ DISABLE_DELETE_CONFIRM("disableDeleteConfirm"), - ON_DELETE_CON_FILE("onDeleteConFile"), + ON_DELETE_FILE("onDeleteFile"), WITH_JS_ACTION("withJsAction"), } enum class OnDeleteConFileValue { - OFF + ON } @@ -36,32 +36,32 @@ object DeleteSettingsForListIndex { deleteConfigMap: Map?, ): Boolean { return deleteConfigMap?.get( - DeleteKey.ON_DELETE_CON_FILE.key - ) != OnDeleteConFileValue.OFF.name + DeleteKey.ON_DELETE_FILE.key + ) == OnDeleteConFileValue.ON.name } fun doWithJsAction( - editFragment: EditFragment, - selectedItem: String, + fragment: Fragment, + editComponentListAdapter: EditComponentListAdapter, + selectedItemMap: Map, listIndexListPosition: Int, ){ - val jsActionConSrcBeforeReplace = ListIndexAdapter.deleteConfigMap.get( + val jsActionConSrcBeforeReplace = editComponentListAdapter.deleteConfigMap.get( DeleteKey.WITH_JS_ACTION.key ) val jsActionCon = ListIndexReplacer.replace( - editFragment, jsActionConSrcBeforeReplace, - selectedItem, + selectedItemMap, listIndexListPosition, ) if( jsActionCon.isNullOrEmpty() ) return JsActionHandler.handle( - editFragment, - editFragment.fannelInfoMap, + fragment, + editComponentListAdapter.fannelInfoMap, String(), - editFragment.setReplaceVariableMap, + editComponentListAdapter.setReplaceVariableMap, jsActionCon ) } 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 611b348cd..e8959d50c 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 @@ -3,25 +3,40 @@ 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 +import com.puutaro.commandclick.util.map.CmdClickMap +import com.puutaro.commandclick.util.map.FilePrefixGetter object LayoutSettingsForListIndex { enum class LayoutSettingKey( val key: String ) { - TYPE("type"), +// TYPE("type"), COL("col"), + ON_REVERSE_LAYOUT("onReverseLayout"), + EDIT_BY_DRAG("editByDrag"), + MARGIN("margin"), + ELEVATION("elevation"), + ON_CLICK_UPDATE("onClickUpdate"), +// TO_TOP("toTop") } - enum class LayoutTypeValueStr( - val valueStr: String + private val switchOn = "ON" + + enum class EditByDragKey( + val key: String, ){ - LINEAR("linear"), - GRID("grid"), + EDIT_BY_DRAG_DISABLE("editByDragDisable"), } +// enum class LayoutTypeValueStr( +// val valueStr: String +// ){ +// LINEAR("linear"), +// GRID("grid"), +// } + fun getLayoutConfigMap( listIndexConfigMap: Map?, ): Map { @@ -31,46 +46,101 @@ object LayoutSettingsForListIndex { ) } + fun howReverseLayout( + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + layoutMap: Map?, + ): Boolean { + return FilePrefixGetter.get( + fannelInfoMap, + setReplaceVariableMap, + layoutMap, + LayoutSettingKey.ON_REVERSE_LAYOUT.key + ) == switchOn + } + + fun howClickUpdate( + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + layoutMap: Map?, + ): Boolean { + return FilePrefixGetter.get( + fannelInfoMap, + setReplaceVariableMap, + layoutMap, + LayoutSettingKey.ON_CLICK_UPDATE.key + ) == switchOn + } + + fun makeEditByDragMap( + layoutMap: Map?, + ): Map { + return layoutMap?.get( + LayoutSettingKey.EDIT_BY_DRAG.key + ).let{ + CmdClickMap.createMap( + it, + '?' + ) + }.toMap() + } - 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 howDisableEditByDrag( + fannelInfoMap: Map, + setReplaceVariableMap: Map?, +// editFragment: EditFragment, + editByDragMap: Map + ): Boolean { + return FilePrefixGetter.get( + fannelInfoMap, + setReplaceVariableMap, +// editFragment, + editByDragMap, + EditByDragKey.EDIT_BY_DRAG_DISABLE.key + ) == switchOn } + + + +// 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 - ) - } + editListRecyclerView.layoutManager = PreLoadGridLayoutManager( + context, + decideColNum(layoutConfigMap), + isReverseLayout + ) } +// private fun howToTop( +// layoutConfigMap: Map?, +// ): Boolean { +// return layoutConfigMap?.get( +// LayoutSettingKey.TO_TOP.key +// ) == switchOn +// } + private fun decideColNum( layoutConfigMap: Map?, ): Int { - val defaultColNum = 2 + val defaultColNum = 1 val colNum = layoutConfigMap?.get( LayoutSettingKey.COL.key ) ?: return defaultColNum diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/config_settings/ListSettingsForListIndex.kt b/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/config_settings/ListSettingsForListIndex.kt index c67d578f7..6ac2de95b 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/config_settings/ListSettingsForListIndex.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/config_settings/ListSettingsForListIndex.kt @@ -2,47 +2,212 @@ package com.puutaro.commandclick.proccess.list_index_for_edit.config_settings import com.puutaro.commandclick.common.variable.path.UsePath import com.puutaro.commandclick.common.variable.variables.FannelListVariable -import com.puutaro.commandclick.fragment.EditFragment +import com.puutaro.commandclick.fragment_lib.edit_fragment.common.EditComponent +import com.puutaro.commandclick.proccess.edit.lib.LayoutSettingFile import com.puutaro.commandclick.proccess.edit.lib.SetReplaceVariabler -import com.puutaro.commandclick.proccess.js_macro_libs.edit_setting_extra.FilterPathTool +import com.puutaro.commandclick.proccess.js_macro_libs.edit_setting_extra.CcFilterTool import com.puutaro.commandclick.proccess.js_macro_libs.edit_setting_extra.ShellTool -import com.puutaro.commandclick.proccess.list_index_for_edit.ListIndexEditConfig import com.puutaro.commandclick.proccess.ubuntu.BusyboxExecutor import com.puutaro.commandclick.util.file.FileSystems +import com.puutaro.commandclick.util.file.MapListFileTool import com.puutaro.commandclick.util.file.ReadText import com.puutaro.commandclick.util.map.CmdClickMap import com.puutaro.commandclick.util.map.FilePrefixGetter import com.puutaro.commandclick.util.state.FannelInfoTool -import com.puutaro.commandclick.util.tsv.TsvTool +import com.puutaro.commandclick.util.str.QuoteTool import java.io.File object ListSettingsForListIndex { + + private val sectionSeparator = EditComponent.Template.sectionSeparator + private val typeSeparator = EditComponent.Template.typeSeparator + private val keySeparator = EditComponent.Template.keySeparator + private val valueSeparator = EditComponent.Template.valueSeparator + enum class ListSettingKey( val key: String ) { - LIST_DIR("listDir"), + MAP_LIST_PATH("mapListPath"), + VIEW_LAYOUT_PATH("viewLayoutPath"), + DEFAULT_FRAME_TAG("defaultFrameTag"), PREFIX("prefix"), SUFFIX("suffix"), FILTER_SHELL_PATH("filterShellPath"), - EDIT_BY_DRAG("editByDrag"), SORT_TYPE("sortType"), - COMP_PATH("compPath"), - ON_REVERSE_LAYOUT("onReverseLayout"), + COMP_MAP_LIST_PATH("compMapListPath"), ON_ONLY_EXIST_PATH("onOnlyExistPath"), } - enum class stackFromBottomValue { - ON - } - enum class EditByDragKey( - val key: String, - ){ - EDIT_BY_DRAG_DISABLE("editByDragDisable"), + object ViewLayoutPathManager{ + + fun getViewLayoutPath( + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + configMap: Map?, + keyName: String, + ): String { + return FilePrefixGetter.get( + fannelInfoMap, + setReplaceVariableMap, + configMap, + keyName, + ) ?: String() + } + + fun parse( + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + viewLayoutPath: String, + ): Pair< + Map, + Map > >, + >? + { + var curFrameTag = String() + val framePairsConList: MutableList< Pair > = mutableListOf() + val linearPairConList: MutableList< Pair > > = mutableListOf() + val viewLayoutPathObj = File(viewLayoutPath) + if( + !viewLayoutPathObj.isFile + ) return null + val fannelName = FannelInfoTool.getCurrentFannelName( + fannelInfoMap + ) + val fannelPath = File(UsePath.cmdclickDefaultAppDirPath, fannelName).absolutePath + val viewLayoutListSrc = LayoutSettingFile.read( + viewLayoutPathObj.absolutePath, + fannelPath, + setReplaceVariableMap, + ) +// FileSystems.updateFile( +// File(UsePath.cmdclickDefaultAppDirPath, "lviewLayout.txt").absolutePath, +// listOf( +//// "indexListMap: ${indexListMap}", +// "viewLayoutPath: ${viewLayoutPath}", +// "File(viewLayoutPath).isFile: ${File(viewLayoutPath).isFile}", +// "viewLayoutPath: ${viewLayoutPath}", +// "viewLayoutListSrc: ${viewLayoutListSrc.joinToString("####")}", +// ).joinToString("\n\n") + "\n\n-----------\n\n" +// ) + val typeSeparator = EditComponent.Template.typeSeparator + val frameTypeName = EditComponent.Template.LayoutKey.FRAME.key + val liearTypeName = EditComponent.Template.LayoutKey.LINEAR.key + val tagKey = EditComponent.Template.EditComponentKey.TAG.key + viewLayoutListSrc.forEachIndexed { index, + smallLayoutMapCon -> + val smallLayoutMapConList = smallLayoutMapCon.split("=") + val layoutKey = + smallLayoutMapConList.firstOrNull() + ?: return@forEachIndexed + val layoutTypePairConList = + smallLayoutMapConList + .filterIndexed { innerIndex, _ -> innerIndex > 0 } + .joinToString("=") + .let { + val trimSectionCon = QuoteTool.trimBothEdgeQuote(it) + QuoteTool.splitBySurroundedIgnore( + trimSectionCon, + sectionSeparator + ).filter { + it.isNotEmpty() + } + } +// FileSystems.updateFile( +// File(UsePath.cmdclickDefaultAppDirPath, "lviewLayout_parse.txt").absolutePath, +// listOf( +// "layoutKey: ${layoutKey}", +// "smallLayoutMapCon: ${smallLayoutMapCon}", +// "framePairsConList: ${framePairsConList}", +// "linearPairConList: ${linearPairConList}", +// ).joinToString("\n") + "\n----\n" +// ) + when (true) { + (layoutKey == frameTypeName) -> { + val frameLayoutKeyPairListCon = + layoutTypePairConList.firstOrNull() + ?: String() + val tag = + CmdClickMap.createMap( + frameLayoutKeyPairListCon, + typeSeparator + ).firstOrNull { + val key = it.first + key == tagKey + }?.second.let { + QuoteTool.trimBothEdgeQuote(it) + } + curFrameTag = tag + val frameTagToCon = Pair( + curFrameTag, + frameLayoutKeyPairListCon + ) + if ( + frameTagToCon.first.isEmpty() + ) return@forEachIndexed + framePairsConList.add(frameTagToCon) + } + + (layoutKey == liearTypeName) -> { + val frameTagToLinearKeyPairCon = Pair( + curFrameTag, + layoutTypePairConList + ) + if ( + frameTagToLinearKeyPairCon.first.isEmpty() + ) return@forEachIndexed + linearPairConList.add(frameTagToLinearKeyPairCon) + } + + else -> {} + } + } + + val frameTagList = mutableListOf() + linearPairConList.forEach { + val frameTag = it.first + if( + frameTag.isNotEmpty() + && !frameTagList.contains(frameTag) + ) frameTagList.add(frameTag) + } + val frameTagToLinearPairConListMap = frameTagList.map { + frameTag -> + frameTag to linearPairConList.filter { + it.first == frameTag + }.map { + it.second + } + }.toMap() +// FileSystems.writeFile( +// File(UsePath.cmdclickDefaultAppDirPath, "lviewLayout_parse_end.txt").absolutePath, +// listOf( +//// "layoutKey: ${layoutKey}", +// "framePairsConList: ${framePairsConList}", +// "linearPairConList: ${linearPairConList}", +// "\npair: ${Pair( +// framePairsConList.toMap(), +// frameTagToLinearPairConListMap, +// )}" +// ).joinToString("\n") + "\n----\n" +// ) + return Pair( + framePairsConList.toMap(), + frameTagToLinearPairConListMap, + ) + } } - enum class DisableValue { - ON + object MapListPathManager { + + const val mapListSeparator = ',' + + enum class Key(val key: String) { + SRC_TITLE("srcTitle"), + SRC_CON("srcCon"), + SRC_IMAGE("srcImage"), + VIEW_LAYOUT_TAG("viewLayoutTag"), + } } enum class OnOnlyExistPath { @@ -58,55 +223,39 @@ object ListSettingsForListIndex { } fun howExistPathForTsv( - editFragment: EditFragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, indexListMap: Map, - tsvConList: List - ): List { + mapList: List> + ): List> { val isOnlyExistPath = FilePrefixGetter.get( - editFragment, + fannelInfoMap, + setReplaceVariableMap, indexListMap, ListSettingKey.ON_ONLY_EXIST_PATH.key ) == OnOnlyExistPath.ON.name if( !isOnlyExistPath - ) return tsvConList - return tsvConList.filter { - val titleAndPathList = it.split("\t") - val path = titleAndPathList.lastOrNull() - ?: return@filter false - val pathObj = File(path) + ) return mapList + return mapList.filter { + map -> + val pathEntry = map.get( + MapListPathManager.Key.SRC_CON.key + ) ?: return@filter false + val pathObj = File(pathEntry) pathObj.isFile || pathObj.isDirectory } } - fun howDisableEditByDrag( - editFragment: EditFragment, - editByDragMap: Map - ): Boolean { - return FilePrefixGetter.get( - editFragment, - editByDragMap, - EditByDragKey.EDIT_BY_DRAG_DISABLE.key - ) == DisableValue.ON.name - } - - fun howReverseLayout( - editFragment: EditFragment, - indexListMap: Map?, - ): Boolean { - return FilePrefixGetter.get( - editFragment, - indexListMap, - ListSettingKey.ON_REVERSE_LAYOUT.key - ) == stackFromBottomValue.ON.name - } fun getSortType( - editFragment: EditFragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, indexListMap: Map?, ): SortByKey { val sortByKeyStr = FilePrefixGetter.get( - editFragment, + fannelInfoMap, + setReplaceVariableMap, indexListMap, ListSettingKey.SORT_TYPE.key ) @@ -115,44 +264,18 @@ object ListSettingsForListIndex { } ?: SortByKey.LAST_UPDATE } - fun makeEditByDragMap( - listIndexConfigMap: Map?, - ): Map { - val listConfigMap = ListIndexEditConfig.getConfigKeyMap( - listIndexConfigMap, - ListIndexEditConfig.ListIndexConfigKey.LIST.key - ) - return execMakeEditByDragMap( - listConfigMap, - ) - } - - private fun execMakeEditByDragMap( - listConfigMap: Map?, - ): Map { - - return listConfigMap?.get( - ListSettingKey.EDIT_BY_DRAG.key - ).let{ - CmdClickMap.createMap( - it, - '?' - ) - }.toMap() - } - object ListIndexListMaker { - private const val throughMark = "-" private const val blankListMark = "Let's press sync button at right bellow" private const val itemNameMark = "\${ITEM_NAME}" - fun makeFileListHandler( - editFragment: EditFragment, + fun makeLineMapListHandler( + fannelInfoMap: Map, + setReplaceVariableMap: Map?, indexListMap: Map, - listIndexTypeKey: TypeSettingsForListIndex.ListIndexTypeKey - ): MutableList { - val busyboxExecutor = editFragment.busyboxExecutor + busyboxExecutor: BusyboxExecutor? +// listIndexTypeKey: TypeSettingsForListIndex.ListIndexTypeKey + ): MutableList> { // FileSystems.writeFile( // File(UsePath.cmdclickDefaultAppDirPath, "list.txt").absolutePath, // listOf( @@ -162,244 +285,532 @@ object ListSettingsForListIndex { // "listIndexTypeKey: ${listIndexTypeKey.key}", // ).joinToString("\n\n") // ) - return when(listIndexTypeKey) { -// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL -// -> makeFannelListForListView().toMutableList() - TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT -> - makeTsvConList( - editFragment, - indexListMap, - busyboxExecutor, - ) - TypeSettingsForListIndex.ListIndexTypeKey.NORMAL - -> makeFileList( - editFragment, - indexListMap, - listIndexTypeKey, - ) - } - } - - fun getFilterDir( - editFragment: EditFragment, - indexListMap: Map?, - listIndexType : TypeSettingsForListIndex.ListIndexTypeKey, - ): String { - return when(listIndexType){ -// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL -// -> UsePath.cmdclickFannelItselfDirPath - TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT - -> String() - TypeSettingsForListIndex.ListIndexTypeKey.NORMAL -> - FilePrefixGetter.get( - editFragment, - indexListMap, - ListSettingKey.LIST_DIR.key, - ) ?: String() - } - } - - private fun makeFileList( - editFragment: EditFragment, - indexListMap: Map, - listIndexTypeKey: TypeSettingsForListIndex.ListIndexTypeKey - ): MutableList { - val busyboxExecutor = editFragment.busyboxExecutor - val filterDir = getFilterDir( - editFragment, - indexListMap, - listIndexTypeKey - ) - FileSystems.createDirs(filterDir) - val filterPrefixListCon = FilePrefixGetter.get( - editFragment, + return makeLineMapList( + fannelInfoMap, + setReplaceVariableMap, indexListMap, - ListSettingKey.PREFIX.key - ) ?: String() - val filterSuffixListCon = FilePrefixGetter.get( - editFragment, - indexListMap, - ListSettingKey.SUFFIX.key - ) ?: String() - val currentFileList = FileSystems.sortedFiles( - filterDir, - "on" - ).let { - CompPathManager.concatByCompConWhenNormal( - editFragment, - indexListMap, - filterDir, - it - ) - } - val filterShellCon = getFilterShellCon( - editFragment, - indexListMap, - ) - val fileListSource = makeFileListElement( - currentFileList, busyboxExecutor, - filterDir, - filterPrefixListCon, - filterSuffixListCon, - filterShellCon, - ) - if( - fileListSource.isEmpty() - ) return mutableListOf(throughMark) - val sortType = getSortType( - editFragment, - indexListMap - ) - return sortList( - sortType, - fileListSource, ) +// return when(listIndexTypeKey) { +//// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL +//// -> makeFannelListForListView().toMutableList() +// TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT -> +// makeTsvConList( +// editFragment, +// indexListMap, +// busyboxExecutor, +// ) +// TypeSettingsForListIndex.ListIndexTypeKey.NORMAL +// -> makeFileList( +// editFragment, +// indexListMap, +// listIndexTypeKey, +// ) +// } } - fun makeFileListElement( - fileList: List, +// fun getFilterDir( +// editFragment: EditFragment, +// indexListMap: Map?, +// listIndexType : TypeSettingsForListIndex.ListIndexTypeKey, +// ): String { +// return when(listIndexType){ +//// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL +//// -> UsePath.cmdclickFannelItselfDirPath +// TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT +// -> String() +// TypeSettingsForListIndex.ListIndexTypeKey.NORMAL -> +// FilePrefixGetter.get( +// editFragment, +// indexListMap, +// ListSettingKey.LIST_DIR.key, +// ) ?: String() +// } +// } + +// private fun makeFileList( +// editFragment: EditFragment, +// indexListMap: Map, +//// listIndexTypeKey: TypeSettingsForListIndex.ListIndexTypeKey +// ): MutableList { +// val busyboxExecutor = editFragment.busyboxExecutor +// val filterDir = String() +//// getFilterDir( +//// editFragment, +//// indexListMap, +//// listIndexTypeKey +//// ) +// FileSystems.createDirs(filterDir) +// val filterPrefixListCon = FilePrefixGetter.get( +// editFragment, +// indexListMap, +// ListSettingKey.PREFIX.key +// ) ?: String() +// val filterSuffixListCon = FilePrefixGetter.get( +// editFragment, +// indexListMap, +// ListSettingKey.SUFFIX.key +// ) ?: String() +// val currentFileList = FileSystems.sortedFiles( +// filterDir, +// "on" +// ).let { +// CompPathManager.concatByCompConWhenNormal( +// editFragment, +// indexListMap, +// filterDir, +// it +// ) +// } +// val filterShellCon = getFilterShellCon( +// editFragment, +// indexListMap, +// ) +// val fileListSource = makeFileListElement( +// currentFileList, +// busyboxExecutor, +// filterDir, +// filterPrefixListCon, +// filterSuffixListCon, +// filterShellCon, +// ) +// if( +// fileListSource.isEmpty() +// ) return mutableListOf(throughMark) +// val sortType = getSortType( +// editFragment, +// indexListMap +// ) +// return sortList( +// sortType, +// fileListSource, +// ) +// } + + private fun filterMapList( + lineMapList: List>, busyboxExecutor: BusyboxExecutor?, - filterDir: String, filterPrefixListCon: String, filterSuffixListCon: String, filterShellCon: String, - ): List { - return fileList.filter { - FilterPathTool.isFilterByFile( - it, - filterDir, + ): List> { + val srcLabelKey = MapListPathManager.Key.SRC_TITLE.key + val valueSeparatorStr = valueSeparator.toString() + return lineMapList.filter { + lineMap -> + val srcTitle = lineMap.get( + srcLabelKey + ) + if( + srcTitle.isNullOrEmpty() + ) return@filter false + CcFilterTool.isFilterByStr( + srcTitle, filterPrefixListCon, filterSuffixListCon, false, - "&" + valueSeparatorStr ) }.map { - makeFilterShellCon( - it, + lineMap -> + val srcTitle = lineMap.get( + srcLabelKey + ) ?: return@map lineMap + val filterTitle = makeFilterShellCon( + srcTitle, busyboxExecutor, filterShellCon, ) + lineMap + mapOf( + srcLabelKey to filterTitle + ) }.filter { - it.isNotEmpty() + lineMap -> + val srcTitle = lineMap.get( + srcLabelKey + ) ?: return@filter false + srcTitle.isNotEmpty() } } - private fun makeTsvConList( - editFragment: EditFragment, + private fun makeLineMapList( + fannelInfoMap: Map, + setReplaceVariableMap: Map?, indexListMap: Map, busyboxExecutor: BusyboxExecutor?, - ): MutableList { - val filterShellCon = getFilterShellCon( - editFragment, - indexListMap, - ) - val tsvFilePath = FilePrefixGetter.get( - editFragment, + ): MutableList> { + val mapListPath = FilePrefixGetter.get( + fannelInfoMap, + setReplaceVariableMap, indexListMap, - ListSettingKey.LIST_DIR.key, + ListSettingKey.MAP_LIST_PATH.key, ) ?: String() - val tsvFilePathObj = File(tsvFilePath) - val tsvConListSrc = ReadText( - tsvFilePath - ).textToList().let { - TsvTool.filterByColumnNum( + val fannelName = FannelInfoTool.getCurrentFannelName( + fannelInfoMap + ) + val tsvFilePathObj = File(mapListPath) + val lineMapListSrc = ReadText( + mapListPath + ).readText().let { + SetReplaceVariabler.execReplaceByReplaceVariables( it, - 2 + setReplaceVariableMap, + fannelName ) - }.map { - val titleAndConList = it.split("\t") - val con = titleAndConList.last() - val title = titleAndConList.first().let { - makeFilterShellCon( - it, - busyboxExecutor, - filterShellCon, - ) - } - "${title}\t${con}" + }.split("\n").map { + CmdClickMap.createMap( + it, + MapListPathManager.mapListSeparator + ).toMap() }.let { + mapList -> +// FileSystems.writeFile( +// File(UsePath.cmdclickDefaultAppDirPath, "lmapList.txt").absolutePath, +// listOf( +// "indexListMap: ${indexListMap}", +// "mapListPath: ${mapListPath}", +// "mapList: ${mapList}", +// ).joinToString("\n\n") +// ) howExistPathForTsv( - editFragment, + fannelInfoMap, + setReplaceVariableMap, indexListMap, - it, + mapList, ) } - val tsvConList = CompPathManager.concatByCompConWhenTsvEdit( - editFragment, + val lineMapListBeforeFilter = CompPathManager.concatByCompConWhenTsvEdit( + fannelInfoMap, + setReplaceVariableMap, indexListMap, - tsvConListSrc + lineMapListSrc + ) + + val filterPrefixListCon = indexListMap.get( + ListSettingKey.PREFIX.key + ) ?: String() + val filterSuffixListCon = indexListMap.get( + ListSettingKey.SUFFIX.key + ) ?: String() + + val filterShellCon = indexListMap.get( + ListSettingKey.FILTER_SHELL_PATH.key + ) ?: String() + + val lineMapList = filterMapList( + lineMapListBeforeFilter, + busyboxExecutor, + filterPrefixListCon, + filterSuffixListCon, + filterShellCon, ) val sortType = getSortType( - editFragment, + fannelInfoMap, + setReplaceVariableMap, indexListMap ) - val sortedTsvConList = sortList( +// val isReverseLayout = howReverseLayout( +// fannelInfoMap, +// setReplaceVariableMap, +// indexListMap +// ) + val sortedLineMapList = sortList( sortType, - tsvConList, + lineMapList, +// isReverseLayout ) - updateTsv( + updateMapListFile( sortType, tsvFilePathObj, - sortedTsvConList, + sortedLineMapList, ) - return sortedTsvConList + return sortedLineMapList.toMutableList() } + +// private fun makeTsvConList2( +// fannelInfoMap: Map, +// setReplaceVariableMap: Map?, +// indexListMap: Map, +// busyboxExecutor: BusyboxExecutor?, +// ): List>>>>> +//// List< +//// List< +//// Pair< +//// String, +//// List>>> +//// > +//// > +//// > +// { +//// val filterShellCon = getFilterShellCon( +//// fannelInfoMap, +//// setReplaceVariableMap, +//// indexListMap, +//// ) +// val tsvFilePath = FilePrefixGetter.get( +// fannelInfoMap, +// setReplaceVariableMap, +// indexListMap, +// ListSettingKey.TSV_PATH.key, +// ) ?: String() +// val fannelName = FannelInfoTool.getCurrentFannelName( +// fannelInfoMap +// ) +// val fannelPath = File(UsePath.cmdclickDefaultAppDirPath, fannelName).absolutePath +// val tsvFilePathObj = File(tsvFilePath) +// val blockLayoutKeyList = EditComponent.Template.blockLayoutKeyList +// val tsvConListSrc = LayoutSettingFile.read( +// tsvFilePathObj.absolutePath, +// fannelPath, +// setReplaceVariableMap, +// ) +// val layoutList = mutableListOf> >> >>() +// val smallLayoutList = mutableListOf< Pair> >> >() +// val tsvConListSrcLastIndex = tsvConListSrc.lastIndex +// tsvConListSrc.forEachIndexed { +// index, +// smallLayoutMapCon -> +// val smallLayoutMapConList = smallLayoutMapCon.split("=") +// val layoutKey = +// smallLayoutMapConList.firstOrNull() +// ?: return@forEachIndexed +// val layoutTypePairList = +// smallLayoutMapConList +// .filterIndexed { innerIndex, _ -> innerIndex > 0 } +// .joinToString(String()) +// .let { +// val trimSectionCon = QuoteTool.trimBothEdgeQuote(it) +// val sectionConList = QuoteTool.splitBySurroundedIgnore( +// trimSectionCon, +// sectionSeparator +// ) +// sectionConList.map { +// CmdClickMap.createMap( +// trimSectionCon, +// typeSeparator +// ) +// } +// } +// val isBlockLayoutKey = blockLayoutKeyList.contains(layoutKey) +// when(true) { +// isBlockLayoutKey -> { +// if( +// smallLayoutList.isNotEmpty() +// ) { +// layoutList.add(smallLayoutList) +// smallLayoutList.clear() +// } +// smallLayoutList.add( +// Pair( +// layoutKey, +// layoutTypePairList +// ) +// ) +// } +// else -> { +// smallLayoutList.add( +// Pair( +// layoutKey, +// layoutTypePairList +// ) +// ) +// if( +// index != tsvConListSrcLastIndex +// ) return@forEachIndexed +// layoutList.add(smallLayoutList) +// smallLayoutList.clear() +// } +// } +// } +//// return layoutList +//// val tsvConList = CompPathManager.concatByCompConWhenTsvEdit( +//// fannelInfoMap, +//// setReplaceVariableMap, +//// indexListMap, +//// tsvConListSrc +//// ) +// val sortType = getSortType( +// fannelInfoMap, +// setReplaceVariableMap, +// indexListMap +// ) +//// val sortTag = getSortTag( +//// fannelInfoMap, +//// setReplaceVariableMap, +//// indexListMap, +//// ) +// val sortedTsvConList = sortList( +// sortType, +// layoutList, +// ) +// updateTsv( +// sortType, +// tsvFilePathObj, +// sortedTsvConList, +// ) +// return sortedTsvConList +// } + +// private fun makeTsvConList2( +// fannelInfoMap: Map, +// setReplaceVariableMap: Map?, +// indexListMap: Map, +// busyboxExecutor: BusyboxExecutor?, +// ): MutableList { +// val filterShellCon = getFilterShellCon( +// fannelInfoMap: Map, +// setReplaceVariableMap: Map?,, +// indexListMap, +// ) +// val tsvFilePath = FilePrefixGetter.get( +// fannelInfoMap, +// setReplaceVariableMap, +// indexListMap, +// ListSettingKey.LIST_DIR.key, +// ) ?: String() +// val tsvFilePathObj = File(tsvFilePath) +// val tsvConListSrc = ReadText( +// tsvFilePath +// ).textToList().let { +// TsvTool.filterByColumnNum( +// it, +// 2 +// ) +// }.map { +// val titleAndConList = it.split("\t") +// val con = titleAndConList.last() +// val title = titleAndConList.first().let { +// makeFilterShellCon( +// it, +// busyboxExecutor, +// filterShellCon, +// ) +// } +// "${title}\t${con}" +// }.let { +// howExistPathForTsv( +// editFragment, +// indexListMap, +// it, +// ) +// } +// val tsvConList = CompPathManager.concatByCompConWhenTsvEdit( +// editFragment, +// indexListMap, +// tsvConListSrc +// ) +// val sortType = getSortType( +// editFragment, +// indexListMap +// ) +// val sortedTsvConList = sortList( +// sortType, +// tsvConList, +// ) +// updateTsv( +// sortType, +// tsvFilePathObj, +// sortedTsvConList, +// ) +// return sortedTsvConList +// } + fun sortList( sortType: SortByKey, - tsvConList: List, - ): MutableList { + lineMapList: List>, +// isReverseLayout: Boolean + ): List> { return when(sortType){ SortByKey.LAST_UPDATE -> { - tsvConList - .reversed() +// val sortedLineMapList = +// if(isReverseLayout) lineMapList.reversed() +// else lineMapList + lineMapList .toMutableList() } SortByKey.SORT -> { - tsvConList.sorted().reversed() - .toMutableList() + val sortedLineMapListSrc = lineMapList + .sortedWith( + compareBy { + map -> + map.get(MapListPathManager.Key.SRC_TITLE.key) + } + ) +// val sortedLineMapList = +// if(isReverseLayout) sortedLineMapListSrc.reversed() +// else sortedLineMapListSrc + sortedLineMapListSrc.toMutableList() } SortByKey.REVERSE -> { - tsvConList.sorted() - .toMutableList() + val sortedLineMapListSrc = lineMapList.sortedWith( + compareBy { + map -> + map.get(MapListPathManager.Key.SRC_TITLE.key) + } + ).reversed() +// val sortedLineMapList = +// if(isReverseLayout) sortedLineMapListSrc.reversed() +// else sortedLineMapListSrc + sortedLineMapListSrc.toMutableList() } } } - private fun updateTsv( + private fun updateMapListFile( sortType: SortByKey, tsvFilePathObj: File, - sortedTsvConList: List, + sortedLineMapList: List>, ){ val saveSortedTsvConList = sortListForTsvSave( sortType, - sortedTsvConList, + sortedLineMapList, ) - TsvTool.updateTsv( + MapListFileTool.update( tsvFilePathObj.absolutePath, - saveSortedTsvConList + saveSortedTsvConList, + MapListPathManager.mapListSeparator ) } fun sortListForTsvSave( sortType: SortByKey, - tsvConList: List, - ): MutableList { - return when(sortType){ + sortedLineMapList: List>, + ): MutableList> { + val sortedList = when(sortType){ SortByKey.LAST_UPDATE -> { - tsvConList - .reversed() + sortedLineMapList +// .reversed() .toMutableList() } SortByKey.SORT -> { - tsvConList.sorted() + sortedLineMapList.sortedWith( + compareBy { + map -> + map.get(MapListPathManager.Key.SRC_TITLE.key) + } + ) .toMutableList() } SortByKey.REVERSE -> { - tsvConList.sorted().reversed() + sortedLineMapList.sortedWith( + compareBy { + map -> + map.get(MapListPathManager.Key.SRC_TITLE.key) + } + ) + .reversed() .toMutableList() } } +// FileSystems.writeFile( +// File(UsePath.cmdclickDefaultAppDirPath, "lsort.txt").absolutePath, +// listOf( +// "sortType: ${sortType}", +// "sortedLineMapList: ${sortedLineMapList}", +// "sortedList: ${sortedList}", +// ).joinToString("\n") +// ) + return sortedList } private fun makeFilterShellCon( @@ -449,28 +860,31 @@ object ListSettingsForListIndex { } fun getFilterShellCon( - editFragment: EditFragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, indexListMap: Map?, ): String { val shellPath = FilePrefixGetter.get( - editFragment, + fannelInfoMap, + setReplaceVariableMap, indexListMap, ListSettingKey.FILTER_SHELL_PATH.key, ) ?: String() return execGetFilterShellCon( - editFragment, + fannelInfoMap, + setReplaceVariableMap, shellPath, ) } private fun execGetFilterShellCon( - editFragment: EditFragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, filterShellPath: String, ): String { if( filterShellPath.isEmpty() ) return String() - val fannelInfoMap = editFragment.fannelInfoMap // val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( // fannelInfoMap // ) @@ -482,7 +896,7 @@ object ListSettingsForListIndex { ).readText().let { SetReplaceVariabler.execReplaceByReplaceVariables( it, - editFragment.setReplaceVariableMap, + setReplaceVariableMap, // currentAppDirPath, currentFannelName ) @@ -495,119 +909,150 @@ object ListSettingsForListIndex { private object CompPathManager { - fun concatByCompConWhenNormal( - editFragment: EditFragment, - indexListMap: Map, - parentDirPath: String, - fileList: List - ): List { - val initFilePath = FilePrefixGetter.get( - editFragment, - indexListMap, - ListSettingsForListIndex.ListSettingKey.COMP_PATH.key - ) - if( - initFilePath.isNullOrEmpty() - ) return fileList - val initFilePathObj = File(initFilePath) - val initConList = when(true){ - initFilePathObj.isFile -> - makeInitConFromFile( - editFragment, - initFilePathObj, - ) - initFilePathObj.isDirectory -> { - val initFileConSrcDir = initFilePathObj.absolutePath - FileSystems.sortedFiles( - initFileConSrcDir, - "on" - ) - } - else -> return fileList - }.let { - TsvTool.filterByColumnNum( - it, - 1 - ) - } - return concatInitConAndConList( - fileList, - initConList, - parentDirPath, - ) - } +// fun concatByCompConWhenNormal( +// fannelInfoMap: Map, +// setReplaceVariableMap: Map?, +// indexListMap: Map, +// parentDirPath: String, +// fileList: List +// ): List { +// val initFilePath = FilePrefixGetter.get( +// fannelInfoMap, +// setReplaceVariableMap, +// indexListMap, +// ListSettingsForListIndex.ListSettingKey.COMP_TSV_PATH.key +// ) +// if( +// initFilePath.isNullOrEmpty() +// ) return fileList +// val initFilePathObj = File(initFilePath) +// val initConList = when(true){ +// initFilePathObj.isFile -> +// makeInitConFromFile( +// fannelInfoMap, +// setReplaceVariableMap, +// initFilePathObj, +// ) +// initFilePathObj.isDirectory -> { +// val initFileConSrcDir = initFilePathObj.absolutePath +// FileSystems.sortedFiles( +// initFileConSrcDir, +// "on" +// ) +// } +// else -> return fileList +// } +// return concatInitConAndConList( +// fileList, +// initConList, +// parentDirPath, +// ) +// } fun concatByCompConWhenTsvEdit( - editFragment: EditFragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, indexListMap: Map, - tsvConList: List - ): List { + lineMapListSrc: List> + ): List> { // if( // tsvConList.isNotEmpty() // ) return tsvConList - val initTsvPath = FilePrefixGetter.get( - editFragment, + val compMapListPath = FilePrefixGetter.get( + fannelInfoMap, + setReplaceVariableMap, indexListMap, - ListSettingsForListIndex.ListSettingKey.COMP_PATH.key + ListSettingsForListIndex.ListSettingKey.COMP_MAP_LIST_PATH.key ) +// FileSystems.writeFile( +// File(UsePath.cmdclickDefaultAppDirPath, "lComp.txt").absolutePath, +// listOf( +// "indexListMap: ${indexListMap}", +// "COMP_MAP_LIST_PATH: ${indexListMap.get( +// ListSettingsForListIndex.ListSettingKey.COMP_MAP_LIST_PATH.key +// )}", +// "compMapListPath: ${compMapListPath}", +// ).joinToString("\n") +// ) if( - initTsvPath.isNullOrEmpty() - ) return tsvConList - val initTsvPathObj = File(initTsvPath) - val initTsvConList = when(true){ - initTsvPathObj.isFile -> + compMapListPath.isNullOrEmpty() + ) return lineMapListSrc + val initMapListPathObj = File(compMapListPath) + val initMapList = when(true){ + initMapListPathObj.isFile -> makeInitConFromFile( - editFragment, - initTsvPathObj, + fannelInfoMap, + setReplaceVariableMap, + initMapListPathObj, ) - initTsvPathObj.isDirectory -> { - val initTsvConSrcDir = initTsvPathObj.absolutePath + initMapListPathObj.isDirectory -> { + val initTsvConSrcDir = initMapListPathObj.absolutePath +// FileSystems.writeFile( +// File(UsePath.cmdclickDefaultAppDirPath, "linitTsvConSrcDir.txt").absolutePath, +// listOf( +// "initTsvConSrcDir: ${initTsvConSrcDir}", +// "list: ${FileSystems.sortedFiles( +// initTsvConSrcDir +// ).map { +// val fileObj = File(initTsvConSrcDir, it) +// mapOf( +// ListSettingsForListIndex.MapListPathManager.Key.SRC_LABEL.key to fileObj.name, +// ListSettingsForListIndex.MapListPathManager.Key.SRC_CON.key to fileObj.absolutePath +// ) +// }}", +// ).joinToString("\n") +// ) FileSystems.sortedFiles( initTsvConSrcDir ).map { - "${it}\t${File(initTsvConSrcDir, it).absolutePath}" + val fileObj = File(initTsvConSrcDir, it) + mapOf( + ListSettingsForListIndex.MapListPathManager.Key.SRC_TITLE.key to fileObj.name, + ListSettingsForListIndex.MapListPathManager.Key.SRC_CON.key to fileObj.absolutePath + ) } } - else -> return tsvConList - }.let { - TsvTool.filterByColumnNum( - it, - 2 - ) + else -> return lineMapListSrc } return concatInitConAndConList( - tsvConList, - initTsvConList, + lineMapListSrc, + initMapList, ) } private fun makeInitConFromFile( - editFragment: EditFragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, initTsvPathObj: File, - ): List { - val fannelInfoMap = editFragment.fannelInfoMap + ): List> { // val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( // fannelInfoMap // ) val currentFannelName = FannelInfoTool.getCurrentFannelName( fannelInfoMap ) + val mapListSeparator = ListSettingsForListIndex.MapListPathManager.mapListSeparator return ReadText( initTsvPathObj.absolutePath ).readText().let { SetReplaceVariabler.execReplaceByReplaceVariables( it, - editFragment.setReplaceVariableMap, + setReplaceVariableMap, // currentAppDirPath, currentFannelName, - ).split("\n") + ) + }.split("\n").map { + CmdClickMap.createMap( + it, + mapListSeparator + ).toMap() } } private fun concatInitConAndConList( - conList: List, - initConList: List, + conList: List>, + initConList: List>, parentDirPath: String, - ): List { + ): List> { val concatConList = concatInitConAndConList( conList, initConList, @@ -616,9 +1061,13 @@ private object CompPathManager { !conList.contains(it) } insertInitConList.forEach { + map -> + val srcFileName = map.get( + ListSettingsForListIndex.MapListPathManager.Key.SRC_CON.key + ) ?: return@forEach val insertFilePath = File( parentDirPath, - it + srcFileName ).absolutePath FileSystems.writeFile( insertFilePath, @@ -629,13 +1078,13 @@ private object CompPathManager { } private fun concatInitConAndConList( - conList: List, - initConList: List, - ): List { + conList: List>, + initMapList: List>, + ): List> { if( - initConList.isEmpty() + initMapList.isEmpty() ) return conList - val insertInitTsvConList = initConList.filter { + val insertInitTsvConList = initMapList.filter { !conList.contains(it) } if( diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/config_settings/PerformSettingForListIndex.kt b/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/config_settings/PerformSettingForListIndex.kt index e7cb0f83e..257e809f8 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/config_settings/PerformSettingForListIndex.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/config_settings/PerformSettingForListIndex.kt @@ -14,20 +14,20 @@ object PerformSettingForListIndex { ON } - fun makePerformMap( - listIndexConfigMap: Map?, - ): Map { - return ListIndexEditConfig.getConfigKeyMap( - listIndexConfigMap, - ListIndexEditConfig.ListIndexConfigKey.PERFORM.key - ) - } +// fun makePerformMap( +// listIndexConfigMap: Map?, +// ): Map { +// return ListIndexEditConfig.getConfigKeyMap( +// listIndexConfigMap, +// ListIndexEditConfig.ListIndexConfigKey.PERFORM.key +// ) +// } - fun howFastMode( - performMap: Map?, - ): Boolean { - return performMap?.get( - PerformSettingKey.FAST.key - ) == FastModeKey.ON.name - } +// fun howFastMode( +// performMap: Map?, +// ): Boolean { +// return performMap?.get( +// PerformSettingKey.FAST.key +// ) == FastModeKey.ON.name +// } } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/config_settings/SearchBoxSettingsForListIndex.kt b/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/config_settings/SearchBoxSettingsForListIndex.kt index fbb3c0a31..7647d2e44 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/config_settings/SearchBoxSettingsForListIndex.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/config_settings/SearchBoxSettingsForListIndex.kt @@ -23,6 +23,7 @@ object SearchBoxSettingsForListIndex { fun makeCurrentVariableValueInEditText( fragment: Fragment, + fannelInfoMap: Map, currentVariableValue: String? ): String { if( @@ -31,7 +32,7 @@ object SearchBoxSettingsForListIndex { if( fragment !is EditFragment ) return currentVariableValue - val fannelInfoMap = fragment.fannelInfoMap +// val fannelInfoMap = fragment.fannelInfoMap // val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( // fannelInfoMap // ) diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/config_settings/TypeSettingsForListIndex.kt b/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/config_settings/TypeSettingsForListIndex.kt index c3fbb5a6f..3814470ed 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/config_settings/TypeSettingsForListIndex.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/config_settings/TypeSettingsForListIndex.kt @@ -1,11 +1,11 @@ package com.puutaro.commandclick.proccess.list_index_for_edit.config_settings -object TypeSettingsForListIndex { - enum class ListIndexTypeKey( - val key: String, - ) { -// INSTALL_FANNEL("installFannel"), - TSV_EDIT("tsvEdit"), - NORMAL("normal"), - } -} \ No newline at end of file +//object TypeSettingsForListIndex { +// enum class ListIndexTypeKey( +// val key: String, +// ) { +//// INSTALL_FANNEL("installFannel"), +// TSV_EDIT("tsvEdit"), +// NORMAL("normal"), +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/libs/ListIndexMenuLauncher.kt b/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/libs/ListIndexMenuLauncher.kt index 38fb89707..60f04493e 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/libs/ListIndexMenuLauncher.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/libs/ListIndexMenuLauncher.kt @@ -8,12 +8,15 @@ import android.widget.ListView import androidx.appcompat.widget.AppCompatEditText import androidx.appcompat.widget.AppCompatTextView import androidx.core.view.isVisible +import androidx.fragment.app.Fragment +import androidx.recyclerview.widget.RecyclerView import com.puutaro.commandclick.R import com.puutaro.commandclick.component.adapter.SubMenuAdapter -import com.puutaro.commandclick.fragment.EditFragment import com.puutaro.commandclick.proccess.js_macro_libs.common_libs.JsActionTool import com.puutaro.commandclick.proccess.js_macro_libs.exec_handler.JsPathHandlerForQrAndListIndex import com.puutaro.commandclick.proccess.js_macro_libs.menu_tool.MenuSettingTool +import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.ListSettingsForListIndex +import com.puutaro.commandclick.proccess.ubuntu.BusyboxExecutor object ListIndexMenuLauncher { @@ -21,29 +24,41 @@ object ListIndexMenuLauncher { private var listIndexMenuDialog: Dialog? = null fun launch( - editFragment: EditFragment, + fragment: Fragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + busyboxExecutor: BusyboxExecutor?, + editListRecyclerView: RecyclerView, jsActionMap: Map?, - selectedItem: String, + selectedItemLineMap: Map, position: Int, ){ createMenuDialogForListIndex( - editFragment, + fragment, + fannelInfoMap, + setReplaceVariableMap, + busyboxExecutor, + editListRecyclerView, jsActionMap, - selectedItem, + selectedItemLineMap, position, ) } private fun createMenuDialogForListIndex( - editFragment: EditFragment, + fragment: Fragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + busyboxExecutor: BusyboxExecutor?, + editListRecyclerView: RecyclerView, jsActionMap: Map?, - selectedItem: String, + selectedItemLineMap: Map, position: Int, ) { if( jsActionMap.isNullOrEmpty() ) return - val context = editFragment.context + val context = fragment.context ?: return listIndexMenuDialog = Dialog( context @@ -52,14 +67,20 @@ object ListIndexMenuLauncher { R.layout.list_dialog_layout ) setListView( - editFragment, + fragment, + fannelInfoMap, + setReplaceVariableMap, + busyboxExecutor, + editListRecyclerView, jsActionMap, - selectedItem, + selectedItemLineMap, position, ) listIndexMenuDialog?.findViewById( R.id.list_dialog_title - )?.text = selectedItem + )?.text = selectedItemLineMap.get( + ListSettingsForListIndex.MapListPathManager.Key.SRC_TITLE.key + ) listIndexMenuDialog?.findViewById( R.id.list_dialog_message )?.isVisible = false @@ -78,12 +99,16 @@ object ListIndexMenuLauncher { } private fun setListView( - editFragment: EditFragment, + fragment: Fragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + busyboxExecutor: BusyboxExecutor?, + editListRecyclerView: RecyclerView, jsActionMap: Map, - selectedItem: String, + selectedItemLineMap: Map, position: Int, ) { - val context = editFragment.context + val context = fragment.context ?: return val subMenuListView = listIndexMenuDialog?.findViewById( @@ -91,7 +116,7 @@ object ListIndexMenuLauncher { ) val menuPairList = MenuSettingTool.createListMenuListMap( ListIndexArgsMaker.makeListIndexClickMenuPairList( - editFragment, + fragment, jsActionMap ), ) @@ -101,10 +126,14 @@ object ListIndexMenuLauncher { ) subMenuListView?.adapter = subMenuAdapter subMenuItemClickListener( - editFragment, + fragment, + fannelInfoMap, + setReplaceVariableMap, + busyboxExecutor, + editListRecyclerView, jsActionMap, subMenuListView, - selectedItem, + selectedItemLineMap, position, ) } @@ -126,10 +155,14 @@ object ListIndexMenuLauncher { } private fun subMenuItemClickListener( - editFragment: EditFragment, + fragment: Fragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + busyboxExecutor: BusyboxExecutor?, + editListRecyclerView: RecyclerView, jsActionMap: Map, subMenuListView: ListView?, - selectedItem: String, + selectedItemLineMap: Map, listIndexPosition: Int, ){ subMenuListView?.setOnItemClickListener { @@ -140,10 +173,14 @@ object ListIndexMenuLauncher { val clickedMenuName = menuListAdapter.getItem(position) ?: return@setOnItemClickListener jsPathOrSubMenuHandlerForListIndex( - editFragment, + fragment, + fannelInfoMap, + setReplaceVariableMap, + busyboxExecutor, + editListRecyclerView, clickedMenuName, jsActionMap, - selectedItem, + selectedItemLineMap, listIndexPosition, ) } @@ -151,15 +188,19 @@ object ListIndexMenuLauncher { private fun jsPathOrSubMenuHandlerForListIndex( - editFragment: EditFragment, + fragment: Fragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + busyboxExecutor: BusyboxExecutor?, + editListRecyclerView: RecyclerView, clickedMenuName: String, jsActionMap: Map, - selectedItem: String, + selectedItemLineMap: Map, listIndexPosition: Int, ) { val settingButtonMenuPairList = ListIndexArgsMaker.makeListIndexClickMenuPairList( - editFragment, + fragment, jsActionMap, ) val hitMenuItemPairList = !MenuSettingTool.firstOrNullByParentMenuName( @@ -169,30 +210,38 @@ object ListIndexMenuLauncher { when (hitMenuItemPairList) { true -> ListIndexSubMenuDialog.launch( - editFragment, + fragment, + fannelInfoMap, + setReplaceVariableMap, + busyboxExecutor, + editListRecyclerView, jsActionMap, - selectedItem, + selectedItemLineMap, clickedMenuName, listIndexPosition, ) else -> { - val fannelInfoMap = - editFragment.fannelInfoMap +// val fannelInfoMap = +// fragment.fannelInfoMap val updateJsActionMap = JsActionTool.makeJsActionMap( - editFragment, + fragment, fannelInfoMap, MenuSettingTool.extractJsKeyToSubConByMenuNameFromMenuPairListList( settingButtonMenuPairList, clickedMenuName ), - editFragment.setReplaceVariableMap, + setReplaceVariableMap, String() ) JsPathHandlerForQrAndListIndex.handle( - editFragment, + fragment, + fannelInfoMap, + setReplaceVariableMap, + busyboxExecutor, + editListRecyclerView, updateJsActionMap, - selectedItem, + selectedItemLineMap, listIndexPosition, ) } diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/libs/ListIndexReplacer.kt b/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/libs/ListIndexReplacer.kt index e0a32c4c1..ec79456db 100644 --- a/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/libs/ListIndexReplacer.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/libs/ListIndexReplacer.kt @@ -1,41 +1,45 @@ package com.puutaro.commandclick.proccess.list_index_for_edit.libs -import com.puutaro.commandclick.component.adapter.ListIndexAdapter -import com.puutaro.commandclick.fragment.EditFragment import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.ListSettingsForListIndex object ListIndexReplacer { fun replace( - editFragment: EditFragment, jsOrAcCon: String?, - selectedItem: String, + selectedItemMap: Map, listIndexListPosition: Int, ): String? { - val selectedFileNameOrPath = - selectedItem - .split("\t") - .lastOrNull() - ?: String() - val selectedTitle = - selectedItem - .split("\t") - .firstOrNull() - ?: String() - val filterDir = ListSettingsForListIndex.ListIndexListMaker.getFilterDir( - editFragment, - ListIndexAdapter.indexListMap, - ListIndexAdapter.listIndexTypeKey - ) +// val selectedFileNameOrPath = +// selectedItemMap +// .split("\t") +// .lastOrNull() +// ?: String() + val selectedSRCTitle = + selectedItemMap.get( + ListSettingsForListIndex.MapListPathManager.Key.SRC_TITLE.key + ) ?: String() +// .split("\t") +// .firstOrNull() +// ?: String() +// val filterDir = ListSettingsForListIndex.ListIndexListMaker.getFilterDir( +// editFragment, +// ListIndexAdapter.indexListMap, +// ListIndexAdapter.listIndexTypeKey +// ) + val selectedFileNameOrPath = selectedItemMap.get( + ListSettingsForListIndex.MapListPathManager.Key.SRC_TITLE.key + ) ?: String() return jsOrAcCon?.replace( "\${ITEM_TITLE}", - selectedTitle, + selectedSRCTitle, )?.replace( "\${ITEM_NAME}", selectedFileNameOrPath, - )?.replace( - "\${INDEX_LIST_DIR_PATH}", - filterDir, - )?.replace( + ) +// ?.replace( +// "\${INDEX_LIST_DIR_PATH}", +// filterDir, +// ) + ?.replace( "\${POSITION}", listIndexListPosition.toString() ) diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/libs/ListIndexSubMenuDialog.kt b/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/libs/ListIndexSubMenuDialog.kt index c9a165fa5..a48f2718e 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/libs/ListIndexSubMenuDialog.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/list_index_for_edit/libs/ListIndexSubMenuDialog.kt @@ -8,28 +8,34 @@ import android.widget.ListView import androidx.appcompat.widget.AppCompatEditText import androidx.appcompat.widget.AppCompatTextView import androidx.core.view.isVisible +import androidx.fragment.app.Fragment +import androidx.recyclerview.widget.RecyclerView import com.puutaro.commandclick.R import com.puutaro.commandclick.component.adapter.SubMenuAdapter -import com.puutaro.commandclick.fragment.EditFragment import com.puutaro.commandclick.proccess.js_macro_libs.common_libs.JsActionTool import com.puutaro.commandclick.proccess.js_macro_libs.exec_handler.JsPathHandlerForQrAndListIndex import com.puutaro.commandclick.proccess.js_macro_libs.menu_tool.MenuSettingTool +import com.puutaro.commandclick.proccess.ubuntu.BusyboxExecutor object ListIndexSubMenuDialog { private var listIndexSubMenuDialog: Dialog? = null fun launch( - editFragment: EditFragment, + fragment: Fragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + busyboxExecutor: BusyboxExecutor?, + editListRecyclerView: RecyclerView, jsActionMap: Map?, - selectedItem: String, + selectedItemLineMap: Map, parentMenuName: String, position: Int, ){ if( jsActionMap.isNullOrEmpty() ) return - val context = editFragment.context + val context = fragment.context ?: return listIndexSubMenuDialog = Dialog( context @@ -38,7 +44,7 @@ object ListIndexSubMenuDialog { listIndexSubMenuDialog?.setContentView( R.layout.list_dialog_layout ) - val title = "${selectedItem}:${parentMenuName}" + val title = "${selectedItemLineMap}:${parentMenuName}" listIndexSubMenuDialog?.findViewById( R.id.list_dialog_title )?.text = title @@ -49,10 +55,14 @@ object ListIndexSubMenuDialog { R.id.list_dialog_search_edit_text )?.isVisible = false setListView( - editFragment, + fragment, + fannelInfoMap, + setReplaceVariableMap, + busyboxExecutor, + editListRecyclerView, jsActionMap, parentMenuName, - selectedItem, + selectedItemLineMap, position, ) setCancelListener() @@ -84,13 +94,17 @@ object ListIndexSubMenuDialog { } private fun setListView( - editFragment: EditFragment, + fragment: Fragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + busyboxExecutor: BusyboxExecutor?, + editListRecyclerView: RecyclerView, jsActionMap: Map, parentMenuName: String, - selectedItem: String, + selectedItemLineMap: Map, position: Int, ) { - val context = editFragment.context + val context = fragment.context ?: return val subMenuListView = listIndexSubMenuDialog?.findViewById( @@ -98,7 +112,7 @@ object ListIndexSubMenuDialog { ) val subMenuPairList = MenuSettingTool.createSubMenuListMap( ListIndexArgsMaker.makeListIndexClickMenuPairList( - editFragment, + fragment, jsActionMap ), parentMenuName, @@ -109,19 +123,27 @@ object ListIndexSubMenuDialog { ) subMenuListView?.adapter = subMenuAdapter subMenuItemClickListener( - editFragment, + fragment, + fannelInfoMap, + setReplaceVariableMap, + busyboxExecutor, + editListRecyclerView, jsActionMap, subMenuListView, - selectedItem, + selectedItemLineMap, position, ) } private fun subMenuItemClickListener( - editFragment: EditFragment, + fragment: Fragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + busyboxExecutor: BusyboxExecutor?, + editListRecyclerView: RecyclerView, jsActionMap: Map, subMenuListView: ListView?, - selectedItem: String, + selectedItemLineMap: Map, listIndexPosition: Int, ){ subMenuListView?.setOnItemClickListener { @@ -131,25 +153,29 @@ object ListIndexSubMenuDialog { val menuListAdapter = subMenuListView.adapter as SubMenuAdapter val clickedSubMenuName = menuListAdapter.getItem(position) ?: return@setOnItemClickListener - val fannelInfoMap = - editFragment.fannelInfoMap +// val fannelInfoMap = +// fragment.fannelInfoMap val updateJsActionMap = JsActionTool.makeJsActionMap( - editFragment, + fragment, fannelInfoMap, MenuSettingTool.extractJsKeyToSubConByMenuNameFromMenuPairListList( ListIndexArgsMaker.makeListIndexClickMenuPairList( - editFragment, + fragment, jsActionMap ), clickedSubMenuName ), - editFragment.setReplaceVariableMap, + setReplaceVariableMap, String() ) JsPathHandlerForQrAndListIndex.handle( - editFragment, + fragment, + fannelInfoMap, + setReplaceVariableMap, + busyboxExecutor, + editListRecyclerView, updateJsActionMap, - selectedItem, + selectedItemLineMap, listIndexPosition, ) } diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/monitor/MonitorSizeManager.kt b/app/src/main/java/com/puutaro/commandclick/proccess/monitor/MonitorSizeManager.kt index 96a964160..23e9d034c 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/monitor/MonitorSizeManager.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/monitor/MonitorSizeManager.kt @@ -1,8 +1,6 @@ package com.puutaro.commandclick.proccess.monitor -import android.widget.LinearLayout import androidx.appcompat.widget.LinearLayoutCompat -import androidx.core.view.isVisible import com.blankj.utilcode.util.ToastUtils import com.puutaro.commandclick.R import com.puutaro.commandclick.common.variable.variant.ReadLines @@ -11,7 +9,6 @@ import com.puutaro.commandclick.fragment.CommandIndexFragment import com.puutaro.commandclick.fragment.EditFragment import com.puutaro.commandclick.fragment_lib.command_index_fragment.variable.SearchSwichImage import com.puutaro.commandclick.fragment_lib.command_index_fragment.variable.ToolbarMenuCategoriesVariantForCmdIndex -import com.puutaro.commandclick.fragment_lib.edit_fragment.common.EditLayoutViewHideShow import com.puutaro.commandclick.proccess.ExistTerminalFragment import com.puutaro.commandclick.util.state.EditFragmentArgs @@ -94,10 +91,10 @@ object MonitorSizeManager { val linearLayoutParam = editFragment.binding.editFragment.layoutParams as LinearLayoutCompat.LayoutParams val isShow = linearLayoutParam.weight != ReadLines.LONGTH - EditLayoutViewHideShow.exec( - editFragment, - isShow - ) +// EditLayoutViewHideShow.exec( +// editFragment, +// isShow +// ) val listener = context as? EditFragment.OnToolbarMenuCategoriesListenerForEdit listener?.onToolbarMenuCategoriesForEdit( 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 27f969f68..400796d77 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 @@ -27,7 +27,7 @@ object QrDialogConfig { // val fragment: Fragment, val recentAppDirPath: String, val qrLogoConfigMap: Map, - val parentDirPath: String, +// val parentDirPath: String, val fileName: String, val fannelContentsQrLogoView: AppCompatImageView?, // val fileContentsQrLogoLinearLayout: LinearLayoutCompat? diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/qr/QrDialogMethod.kt b/app/src/main/java/com/puutaro/commandclick/proccess/qr/QrDialogMethod.kt index f9bbfe3fc..9a6c4add1 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/qr/QrDialogMethod.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/qr/QrDialogMethod.kt @@ -18,7 +18,7 @@ import com.puutaro.commandclick.common.variable.fannel.SystemFannel import com.puutaro.commandclick.common.variable.network.UsePort import com.puutaro.commandclick.common.variable.path.UsePath import com.puutaro.commandclick.common.variable.variables.QrLaunchType -import com.puutaro.commandclick.component.adapter.ListIndexAdapter +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.ListViewToolForListIndexAdapter import com.puutaro.commandclick.fragment.CommandIndexFragment import com.puutaro.commandclick.fragment.EditFragment @@ -305,12 +305,15 @@ object QrDialogMethod { context.sendBroadcast(indexfannelListUpdateIntent) } is EditFragment -> { + val editComponentListAdapter = fragment.binding.editListRecyclerView.adapter as EditComponentListAdapter ListViewToolForListIndexAdapter.listIndexListUpdateFileList( - fragment, - ListSettingsForListIndex.ListIndexListMaker.makeFileListHandler( - fragment, - ListIndexAdapter.indexListMap, - ListIndexAdapter.listIndexTypeKey + editComponentListAdapter, + ListSettingsForListIndex.ListIndexListMaker.makeLineMapListHandler( + fragment.fannelInfoMap, + fragment.setReplaceVariableMap, + editComponentListAdapter.editListMap, + fragment.busyboxExecutor +// ListIndexAdapter.listIndexTypeKey ) ) } @@ -385,12 +388,16 @@ object QrDialogMethod { // context.sendBroadcast(indexfannelListUpdateIntent) // } is EditFragment -> { + val editComponentListAdapter = + fragment.binding.editListRecyclerView.adapter as EditComponentListAdapter ListViewToolForListIndexAdapter.listIndexListUpdateFileList( - fragment, - ListSettingsForListIndex.ListIndexListMaker.makeFileListHandler( - fragment, - ListIndexAdapter.indexListMap, - ListIndexAdapter.listIndexTypeKey + editComponentListAdapter, + ListSettingsForListIndex.ListIndexListMaker.makeLineMapListHandler( + fragment.fannelInfoMap, + fragment.setReplaceVariableMap, + editComponentListAdapter.editListMap, + fragment.busyboxExecutor +// ListIndexAdapter.listIndexTypeKey ) ) } diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/qr/QrScanner.kt b/app/src/main/java/com/puutaro/commandclick/proccess/qr/QrScanner.kt index a288f09b4..d7c3357d8 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/qr/QrScanner.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/qr/QrScanner.kt @@ -29,14 +29,13 @@ import com.puutaro.commandclick.R import com.puutaro.commandclick.common.variable.broadcast.scheme.BroadCastIntentSchemeForEdit import com.puutaro.commandclick.common.variable.path.UsePath import com.puutaro.commandclick.component.adapter.SubMenuAdapter -import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.ExecAddForListIndexAdapter +import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.ExecAddForEditListAdapter import com.puutaro.commandclick.fragment.CommandIndexFragment import com.puutaro.commandclick.fragment.EditFragment import com.puutaro.commandclick.fragment.TerminalFragment import com.puutaro.commandclick.proccess.broadcast.BroadcastSender import com.puutaro.commandclick.proccess.js_macro_libs.edit_setting_extra.EditSettingExtraArgsTool -import com.puutaro.commandclick.proccess.list_index_for_edit.ListIndexEditConfig -import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.TypeSettingsForListIndex +import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.ListSettingsForListIndex import com.puutaro.commandclick.util.LogSystems import com.puutaro.commandclick.util.file.FileSystems import com.puutaro.commandclick.util.file.ReadText @@ -376,48 +375,80 @@ object QrScanner{ if( fragment !is EditFragment ) return - val type = ListIndexEditConfig.getListIndexType( - fragment +// val type = ListIndexEditConfig.getListIndexType( +// fragment +// ) + if( + stockDirAndCompMap == null + ) return + val parentDirPath = EditSettingExtraArgsTool.getParentDirPath( + stockDirAndCompMap, +// currentAppDirPath, ) - when(type){ -// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL -// -> return - TypeSettingsForListIndex.ListIndexTypeKey.NORMAL - -> addFile( - fragment, - currentAppDirPath, - fileName, - decodeText + val compFileName = EditSettingExtraArgsTool.makeCompFileName( + fragment, + fileName, + stockDirAndCompMap + ) + FileSystems.writeFile( + File( + parentDirPath, + compFileName + ).absolutePath, + decodeText, + ) + val insertLineMap = mapOf( + ListSettingsForListIndex.MapListPathManager.Key.SRC_TITLE.key to compFileName, + ListSettingsForListIndex.MapListPathManager.Key.SRC_CON.key to File(parentDirPath, compFileName).absolutePath + ) + withContext(Dispatchers.Main) { + ExecAddForEditListAdapter.execAddForEditList( + fragment.context, + fragment.fannelInfoMap, + fragment.setReplaceVariableMap, + fragment.binding.editListRecyclerView, + insertLineMap ) - TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT -> { - if( - stockDirAndCompMap == null - ) return - val parentDirPath = EditSettingExtraArgsTool.getParentDirPath( - stockDirAndCompMap, -// currentAppDirPath, - ) - val compFileName = EditSettingExtraArgsTool.makeCompFileName( - fragment, - fileName, - stockDirAndCompMap - ) - FileSystems.writeFile( - File( - parentDirPath, - compFileName - ).absolutePath, - decodeText, - ) - val insertLine = "${compFileName}\t${File(parentDirPath, compFileName).absolutePath}" - withContext(Dispatchers.Main) { - ExecAddForListIndexAdapter.execAddForTsv( - fragment, - insertLine - ) - } - } } +// when(type){ +//// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL +//// -> return +// TypeSettingsForListIndex.ListIndexTypeKey.NORMAL +// -> addFile( +// fragment, +// currentAppDirPath, +// fileName, +// decodeText +// ) +// TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT -> { +// if( +// stockDirAndCompMap == null +// ) return +// val parentDirPath = EditSettingExtraArgsTool.getParentDirPath( +// stockDirAndCompMap, +//// currentAppDirPath, +// ) +// val compFileName = EditSettingExtraArgsTool.makeCompFileName( +// fragment, +// fileName, +// stockDirAndCompMap +// ) +// FileSystems.writeFile( +// File( +// parentDirPath, +// compFileName +// ).absolutePath, +// decodeText, +// ) +// val insertLine = "${compFileName}\t${File(parentDirPath, compFileName).absolutePath}" +// withContext(Dispatchers.Main) { +// ExecAddForListIndexAdapter.execAddForTsv( +// fragment, +// insertLine +// ) +// } +// } +// } } private fun addFile( diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/qr/qr_dialog_config/JsActionCompleterForQr.kt b/app/src/main/java/com/puutaro/commandclick/proccess/qr/qr_dialog_config/JsActionCompleterForQr.kt index 2e5353494..537343abf 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/qr/qr_dialog_config/JsActionCompleterForQr.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/qr/qr_dialog_config/JsActionCompleterForQr.kt @@ -27,10 +27,11 @@ object JsActionCompleterForQr { editFragment.setReplaceVariableMap, mainFannelPath ) - val defaultMacroStr = when(isLongClick){ - true -> JsMacroForQr.EDIT_LOGO.name - else -> JsMacroForQr.FILE_CONTENTS.name - } + val defaultMacroStr = JsMacroForQr.FILE_CONTENTS.name +// when(isLongClick){ +// true -> JsMacroForQr.EDIT_LOGO.name +// else -> JsMacroForQr.FILE_CONTENTS.name +// } return JsActionTool.compJsActionMacro( jsActionMap, defaultMacroStr, diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/qr/qr_dialog_config/MacroHandlerForQrAndListIndex.kt b/app/src/main/java/com/puutaro/commandclick/proccess/qr/qr_dialog_config/MacroHandlerForQrAndListIndex.kt index 1065b1a1a..28ad0535b 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/qr/qr_dialog_config/MacroHandlerForQrAndListIndex.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/qr/qr_dialog_config/MacroHandlerForQrAndListIndex.kt @@ -1,18 +1,24 @@ package com.puutaro.commandclick.proccess.qr.qr_dialog_config -import com.puutaro.commandclick.fragment.EditFragment +import androidx.fragment.app.Fragment +import androidx.recyclerview.widget.RecyclerView import com.puutaro.commandclick.proccess.js_macro_libs.common_libs.JsActionDataMapKeyObj import com.puutaro.commandclick.proccess.js_macro_libs.macros.JsPathMacroForListIndex import com.puutaro.commandclick.proccess.js_macro_libs.exec_handler.ExecMacroHandlerForListIndex import com.puutaro.commandclick.proccess.js_macro_libs.exec_handler.ExecMacroHandlerForQr import com.puutaro.commandclick.proccess.js_macro_libs.macros.JsMacroForQr +import com.puutaro.commandclick.proccess.ubuntu.BusyboxExecutor object MacroHandlerForQrAndListIndex { fun handle( - editFragment: EditFragment, + fragment: Fragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, + busyboxExecutor: BusyboxExecutor?, + editListRecyclerView: RecyclerView?, jsActionMap: Map?, - clickFileName: String, + selectecdLineMap: Map, listIndexPosition: Int, ){ if( @@ -29,9 +35,9 @@ object MacroHandlerForQrAndListIndex { macroForQr != null ){ ExecMacroHandlerForQr.handle( - editFragment, + fragment, macroForQr, - clickFileName, + selectecdLineMap, ) return } @@ -42,9 +48,13 @@ object MacroHandlerForQrAndListIndex { macroForListIndex != null ){ ExecMacroHandlerForListIndex.handle( - editFragment, + fragment, + fannelInfoMap, + setReplaceVariableMap, + busyboxExecutor, + editListRecyclerView, jsActionMap, - clickFileName, + selectecdLineMap, listIndexPosition, ) return diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/qr/qr_dialog_config/QrDialogClickHandler.kt b/app/src/main/java/com/puutaro/commandclick/proccess/qr/qr_dialog_config/QrDialogClickHandler.kt index 80b980f0a..328202ae1 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/qr/qr_dialog_config/QrDialogClickHandler.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/qr/qr_dialog_config/QrDialogClickHandler.kt @@ -6,44 +6,44 @@ import com.puutaro.commandclick.proccess.qr.QrDialogConfig import com.puutaro.commandclick.proccess.qr.qr_dialog_config.config_settings.ClickSettingsForQrDialog object QrDialogClickHandler { - fun handle( - isLongClick: Boolean, - editFragment: EditFragment, - clickFileName: String, - listIndexPosition: Int - ){ - val clickKey = when(isLongClick){ - true -> QrDialogConfig.QrDialogConfigKey.LONG_CLICK.key - false -> QrDialogConfig.QrDialogConfigKey.CLICK.key - } - val qrDialogConfigMap = editFragment.qrDialogConfig - ?: emptyMap() - val isThisClickEnable = ClickSettingsForQrDialog.howEnableClick( - clickKey, - qrDialogConfigMap, - ) - if(!isThisClickEnable){ - return - } - - val clickConfigListCon = ClickSettingsForQrDialog.makeClickConfigListStr( - qrDialogConfigMap, - clickKey, - ) - val jsActionMap = JsActionCompleterForQr.makeJsActionMap( - editFragment, - clickConfigListCon, - isLongClick, - ) - if( - jsActionMap.isEmpty() - ) return - JsPathHandlerForQrAndListIndex.handle( - editFragment, - jsActionMap, - clickFileName, - listIndexPosition, - ) - editFragment.binding.editListSearchEditText.setText(String()) - } +// fun handle( +// isLongClick: Boolean, +// editFragment: EditFragment, +// selectedItemLineMap: Map, +// listIndexPosition: Int +// ){ +// val clickKey = when(isLongClick){ +// true -> QrDialogConfig.QrDialogConfigKey.LONG_CLICK.key +// false -> QrDialogConfig.QrDialogConfigKey.CLICK.key +// } +// val qrDialogConfigMap = editFragment.qrDialogConfig +// ?: emptyMap() +// val isThisClickEnable = ClickSettingsForQrDialog.howEnableClick( +// clickKey, +// qrDialogConfigMap, +// ) +// if(!isThisClickEnable){ +// return +// } +// +// val clickConfigListCon = ClickSettingsForQrDialog.makeClickConfigListStr( +// qrDialogConfigMap, +// clickKey, +// ) +// val jsActionMap = JsActionCompleterForQr.makeJsActionMap( +// editFragment, +// clickConfigListCon, +// isLongClick, +// ) +// if( +// jsActionMap.isEmpty() +// ) return +// JsPathHandlerForQrAndListIndex.handle( +// editFragment, +// jsActionMap, +// selectedItemLineMap, +// listIndexPosition, +// ) +// editFragment.binding.editListSearchEditText.setText(String()) +// } } \ 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 5a69ec5b2..1b1775160 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 @@ -15,10 +15,8 @@ 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.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 @@ -203,28 +201,34 @@ object QrLogoSettingsForQrDialog { materialCardView: MaterialCardView?, fileContentsQrLogoLinearLayout: RelativeLayout?, qrLogoConfigMap: Map, - layoutType: LayoutSettingsForListIndex.LayoutTypeValueStr, +// layoutType: LayoutSettingsForListIndex.LayoutTypeValueStr, ){ - 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 layoutParams = + baseLinearLayoutCompat?.layoutParams as ViewGroup.MarginLayoutParams + layoutParams.setMargins(0, 0, 0, 0) + baseLinearLayoutCompat.requestLayout() +// when(layoutType) { +// LayoutSettingsForListIndex.LayoutTypeValueStr.LINEAR +// -> {} +// LayoutSettingsForListIndex.LayoutTypeValueStr.GRID +// -> { +//// val layoutParams = +//// baseLinearLayoutCompat?.layoutParams as ViewGroup.MarginLayoutParams +//// layoutParams.setMargins(0, 0, 0, 0) +//// baseLinearLayoutCompat.requestLayout() +// } +// } + RelativeLayout.LayoutParams.MATCH_PARENT + val oneSideLength = RelativeLayout.LayoutParams.MATCH_PARENT +// when(layoutType) { +// LayoutSettingsForListIndex.LayoutTypeValueStr.LINEAR -> +// culc( +// fragment?.context, +// qrLogoConfigMap +// ) +// LayoutSettingsForListIndex.LayoutTypeValueStr.GRID -> +// RelativeLayout.LayoutParams.MATCH_PARENT +// } val linearLayoutParam = LinearLayoutCompat.LayoutParams( oneSideLength, oneSideLength @@ -236,359 +240,369 @@ object QrLogoSettingsForQrDialog { // "oneSideLength: ${oneSideLength}", // ).joinToString("\n\n") // ) - when(layoutType) { - LayoutSettingsForListIndex.LayoutTypeValueStr.LINEAR -> - linearLayoutParam.setMargins(10, 10, 0, 10) - LayoutSettingsForListIndex.LayoutTypeValueStr.GRID -> - linearLayoutParam.apply { - setMargins(0, 0, 0, 0) - } + linearLayoutParam.apply { + setMargins(0, 0, 0, 0) } +// 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 - 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 - ) - } - } + val cardViewLayoutParams = materialCardView?.layoutParams as ViewGroup.MarginLayoutParams + cardViewLayoutParams.setMargins(1, 1, 1, 1) + materialCardView.requestLayout() + fileContentsQrLogoLinearLayout?.setPadding( + 0, 0, 0, 0 + ) +// 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 +// ) +// } +// } } } - object QrIconSettingKeysForQrDialog { - - enum class QrIcon(val key: String){ - NAME("name"), - NAME_CONFIG_PATH("nameConfigPath"), - COLOR("color"), - BACKGROUND_COLOR("bkColor"), - DISABLE("disable"), - } - private val disableOn = "ON" - enum class ImageMacro( - val str: String, - val id: Int, - ) { - IMAGE_PATH("imagePath", -10) - } +// object QrIconSettingKeysForQrDialog { +// +// enum class QrIcon(val key: String){ +// NAME("name"), +// NAME_CONFIG_PATH("nameConfigPath"), +// COLOR("color"), +// BACKGROUND_COLOR("bkColor"), +// 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: RelativeLayout?, +// qrLogoConfigMap: Map, +// iconConfigMap: Map, +// itemNameToNameColorConfigMap: Map?, +// textImagePngBitMap: Bitmap, +// ): Boolean { +// if( +// context == null +// || fannelContentsQrLogoView == null +// || qrLogoConfigMap.isEmpty() +// || iconConfigMap.isEmpty() +// || itemNameToNameColorConfigMap.isNullOrEmpty() +// ) return false +// if( +// isDisable(iconConfigMap) +// ) return false +// val iconNameColorConfigMap = makeIconNameColorConfigMap( +// itemName, +// itemNameToNameColorConfigMap, +// ) +//// FileSystems.updateFile( +//// File(UsePath.cmdclickDefaultAppDirPath, "logo_icon.txt").absolutePath, +//// listOf( +//// "iconConfigMap: ${iconConfigMap}", +//// "iconNameConfigMap: ${itemNameToNameColorConfigMap}", +//// "iconNameColorConfigMap: ${iconNameColorConfigMap}", +//// "iconId: ${getIconId( +//// iconNameColorConfigMap +//// )}", +//// ).joinToString("\n\n\n") +//// ) +// val iconId = +// getIconId(iconNameColorConfigMap) +// ?: return false +// when(iconId){ +// ImageMacro.IMAGE_PATH.id -> setImagePath( +// context, +// fannelContentsQrLogoView, +// fileContentsQrLogoLinearLayout, +//// listIndexTypeKey, +// qrLogoConfigMap, +//// filterDir, +// itemName, +// textImagePngBitMap, +// iconNameColorConfigMap, +// ) +// else -> setIconOrQr( +// context, +// fannelContentsQrLogoView, +// fileContentsQrLogoLinearLayout, +// iconNameColorConfigMap, +// iconId, +// ) +// } +// return true +// } +// +// private fun setImagePath( +// context: Context, +// fannelContentsQrLogoView: AppCompatImageView?, +// fileContentsQrLogoLinearLayout: RelativeLayout?, +//// listIndexTypeKey: TypeSettingsForListIndex.ListIndexTypeKey, +// qrLogoConfigMap: Map, +//// filterDir: String, +// itemName: String, +// textImagePngBitMap: Bitmap, +// iconNameColorConfigMap: Map? +// ) { +// val itemPath = itemName +//// 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) +//// getIconColor(iconNameColorConfigMap).let { +//// fannelContentsQrLogoView?.imageTintList = +//// context.getColorStateList(it) +//// } +// getBkColor( +// iconNameColorConfigMap +// ).let { +// fileContentsQrLogoLinearLayout?.backgroundTintList = +// context.getColorStateList(it) +// } +//// 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 +// } - fun set( - context: Context?, - filterDir: String, - listIndexTypeKey: TypeSettingsForListIndex.ListIndexTypeKey, - itemName: String, - fannelContentsQrLogoView: AppCompatImageView?, - fileContentsQrLogoLinearLayout: RelativeLayout?, - qrLogoConfigMap: Map, - iconConfigMap: Map, - itemNameToNameColorConfigMap: Map?, - textImagePngBitMap: Bitmap, - ): Boolean { - if( - context == null - || fannelContentsQrLogoView == null - || qrLogoConfigMap.isEmpty() - || iconConfigMap.isEmpty() - || itemNameToNameColorConfigMap.isNullOrEmpty() - ) return false - if( - isDisable(iconConfigMap) - ) return false - val iconNameColorConfigMap = makeIconNameColorConfigMap( - itemName, - itemNameToNameColorConfigMap, - ) -// FileSystems.updateFile( -// File(UsePath.cmdclickDefaultAppDirPath, "logo_icon.txt").absolutePath, -// listOf( -// "iconConfigMap: ${iconConfigMap}", -// "iconNameConfigMap: ${itemNameToNameColorConfigMap}", -// "iconNameColorConfigMap: ${iconNameColorConfigMap}", -// "iconId: ${getIconId( -// iconNameColorConfigMap -// )}", -// ).joinToString("\n\n\n") +// 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(), // ) - val iconId = - getIconId(iconNameColorConfigMap) - ?: return false - when(iconId){ - ImageMacro.IMAGE_PATH.id -> setImagePath( - context, - fannelContentsQrLogoView, - fileContentsQrLogoLinearLayout, - listIndexTypeKey, - qrLogoConfigMap, - filterDir, - itemName, - textImagePngBitMap, - iconNameColorConfigMap, - ) - else -> setIconOrQr( - context, - fannelContentsQrLogoView, - fileContentsQrLogoLinearLayout, - iconNameColorConfigMap, - iconId, - ) - } - return true - } +//// FileSystems.updateFile( +//// File(UsePath.cmdclickDefaultAppDirPath, "log_bitmap.txt").absolutePath, +//// listOf( +//// "resizeBitmap: ${resizeBitmap.height}" +//// ).joinToString("\n\n") +//// ) +// return resizeBitmap +// } - private fun setImagePath( - context: Context, - fannelContentsQrLogoView: AppCompatImageView?, - fileContentsQrLogoLinearLayout: RelativeLayout?, - listIndexTypeKey: TypeSettingsForListIndex.ListIndexTypeKey, - qrLogoConfigMap: Map, - filterDir: String, - itemName: String, - textImagePngBitMap: Bitmap, - iconNameColorConfigMap: Map? - ) { - val itemPath = when(listIndexTypeKey){ -// TypeSettingsForListIndex.ListIndexTypeKey.INSTALL_FANNEL -// -> return - TypeSettingsForListIndex.ListIndexTypeKey.TSV_EDIT - -> itemName - TypeSettingsForListIndex.ListIndexTypeKey.NORMAL - -> File(filterDir, itemName).absolutePath - } +// private fun setIconOrQr( +// context: Context, +// fannelContentsQrLogoView: AppCompatImageView?, +// fileContentsQrLogoLinearLayout: RelativeLayout?, +// iconNameColorConfigMap: Map?, +// iconId: Int, +// ){ // fannelContentsQrLogoView?.load( -// itemPath +// AppCompatResources.getDrawable(context, iconId) // ) - val maxHeight = culc( - context, - qrLogoConfigMap - ) - val myBitmap = makeBitMap( - itemPath, - maxHeight, - textImagePngBitMap - ) - - fannelContentsQrLogoView?.setImageBitmap(myBitmap) // getIconColor(iconNameColorConfigMap).let { // fannelContentsQrLogoView?.imageTintList = // context.getColorStateList(it) // } - getBkColor( - iconNameColorConfigMap - ).let { - fileContentsQrLogoLinearLayout?.backgroundTintList = - context.getColorStateList(it) - } -// 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 = - context.getColorStateList(it) - } - getBkColor( - iconNameColorConfigMap - ).let { - fileContentsQrLogoLinearLayout?.backgroundTintList = - context.getColorStateList(it) - } - } - +// getBkColor( +// iconNameColorConfigMap +// ).let { +// fileContentsQrLogoLinearLayout?.backgroundTintList = +// context.getColorStateList(it) +// } +// } - private fun isDisable( - iconConfigMap: Map - ): Boolean { - val disableKey = QrIcon.DISABLE.key - if( - iconConfigMap.isEmpty() - ) return false - return iconConfigMap.get(disableKey) == disableOn - } - private fun makeIconNameColorConfigMap( - itemName: String, - itemNameToIconConfigMap: Map?, - ): Map? { - if( - itemNameToIconConfigMap.isNullOrEmpty() - ) return null - val mapSrc = - itemNameToIconConfigMap.get(itemName) - ?: itemNameToIconConfigMap.get(IconNameConfigKey.DEFAULT.key) - if( - mapSrc.isNullOrEmpty() - ) return null - return CmdClickMap.createMap( - mapSrc, - ',' - ).toMap() - } - private fun getIconId( - iconNameColorConfigMap: Map?, - ): Int? { - if( - iconNameColorConfigMap.isNullOrEmpty() - ) return null - val nameKey = QrIcon.NAME.key - val iconName = - iconNameColorConfigMap.get(nameKey) -// FileSystems.updateFile( -// File(UsePath.cmdclickDefaultAppDirPath, "logo_get_iconId").absolutePath, -// listOf( -// "itemname: ${iconNameColorConfigMap.get(nameKey)}", -// "default: ${iconNameColorConfigMap.get(IconNameConfigKey.DEFAULT.key)}", -// "iconName: ${iconName}", -// ).joinToString("\n\n\n") -// ) - if( - iconName.isNullOrEmpty() - ) return null - 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 isDisable( +// iconConfigMap: Map +// ): Boolean { +// val disableKey = QrIcon.DISABLE.key +// if( +// iconConfigMap.isEmpty() +// ) return false +// return iconConfigMap.get(disableKey) == disableOn +// } - private fun getIconColor( - iconNameColorConfigMap: Map?, - ): Int { - val defaultColor = CmdClickColor.LIGHT_GREEN.id - if( - iconNameColorConfigMap.isNullOrEmpty() - ) return defaultColor - val colorKey = QrIcon.COLOR.key - val colorName = - iconNameColorConfigMap.get(colorKey) - return CmdClickColor.values().firstOrNull { - it.str == colorName - }?.id ?: defaultColor - } +// private fun makeIconNameColorConfigMap( +// itemName: String, +// itemNameToIconConfigMap: Map?, +// ): Map? { +// if( +// itemNameToIconConfigMap.isNullOrEmpty() +// ) return null +// val mapSrc = +// itemNameToIconConfigMap.get(itemName) +// ?: itemNameToIconConfigMap.get(IconNameConfigKey.DEFAULT.key) +// if( +// mapSrc.isNullOrEmpty() +// ) return null +// return CmdClickMap.createMap( +// mapSrc, +// ',' +// ).toMap() +// } +// private fun getIconId( +// iconNameColorConfigMap: Map?, +// ): Int? { +// if( +// iconNameColorConfigMap.isNullOrEmpty() +// ) return null +// val nameKey = QrIcon.NAME.key +// val iconName = +// iconNameColorConfigMap.get(nameKey) +//// FileSystems.updateFile( +//// File(UsePath.cmdclickDefaultAppDirPath, "logo_get_iconId").absolutePath, +//// listOf( +//// "itemname: ${iconNameColorConfigMap.get(nameKey)}", +//// "default: ${iconNameColorConfigMap.get(IconNameConfigKey.DEFAULT.key)}", +//// "iconName: ${iconName}", +//// ).joinToString("\n\n\n") +//// ) +// if( +// iconName.isNullOrEmpty() +// ) return null +// 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 getBkColor( - iconNameColorConfigMap: Map?, - ): Int { - val defaultColor = CmdClickColor.LIGHT_GREEN.id - if( - iconNameColorConfigMap.isNullOrEmpty() - ) return defaultColor - val bkColorKey = QrIcon.BACKGROUND_COLOR.key - val colorName = - iconNameColorConfigMap.get(bkColorKey) - return CmdClickColor.values().firstOrNull { - it.str == colorName - }?.id ?: defaultColor - } +// private fun getIconColor( +// iconNameColorConfigMap: Map?, +// ): Int { +// val defaultColor = CmdClickColor.LIGHT_GREEN.id +// if( +// iconNameColorConfigMap.isNullOrEmpty() +// ) return defaultColor +// val colorKey = QrIcon.COLOR.key +// val colorName = +// iconNameColorConfigMap.get(colorKey) +// return CmdClickColor.values().firstOrNull { +// it.str == colorName +// }?.id ?: defaultColor +// } +// private fun getBkColor( +// iconNameColorConfigMap: Map?, +// ): Int { +// val defaultColor = CmdClickColor.LIGHT_GREEN.id +// if( +// iconNameColorConfigMap.isNullOrEmpty() +// ) return defaultColor +// val bkColorKey = QrIcon.BACKGROUND_COLOR.key +// val colorName = +// iconNameColorConfigMap.get(bkColorKey) +// return CmdClickColor.values().firstOrNull { +// it.str == colorName +// }?.id ?: defaultColor +// } - fun makeIconConfigMap( - qrLogoConfigMap: Map, - ): Map { - val iconKeyName = QrLogoSettingKey.ICON.key - return CmdClickMap.createMap( - qrLogoConfigMap.get(iconKeyName), - '?' - ).toMap() - } - fun makeIconNameConfigMap( - setReplaceVariableMap: Map?, - fannelInfoMap: Map?, - iconConfigMap: Map, - ): Map { - val nameConfigPathKey = QrIcon.NAME_CONFIG_PATH.key - val iconNameConfigPath = iconConfigMap.get(nameConfigPathKey) - if( - !iconNameConfigPath.isNullOrEmpty() - ) { -// val fannelInfoMap = editFragment.fannelInfoMap -// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath(fannelInfoMap) - val currentFannelName = FannelInfoTool.getCurrentFannelName(fannelInfoMap) - val iconNameMapTsvCon = - SetReplaceVariabler.execReplaceByReplaceVariables( - ReadText(iconNameConfigPath).readText(), - setReplaceVariableMap, -// currentAppDirPath, - currentFannelName, - ) - return CmdClickMap.createMapFromTsv( - iconNameMapTsvCon, - '\n' - ).toMap() - } - val iconConfigMapStr = iconConfigMap.map { - "${it.key}=${it.value}" - }.joinToString(",") - return mapOf( - IconNameConfigKey.DEFAULT.key to iconConfigMapStr - ) +// fun makeIconConfigMap( +// qrLogoConfigMap: Map, +// ): Map { +// val iconKeyName = QrLogoSettingKey.ICON.key +// return CmdClickMap.createMap( +// qrLogoConfigMap.get(iconKeyName), +// '?' +// ).toMap() +// } - } +// fun makeIconNameConfigMap( +// setReplaceVariableMap: Map?, +// fannelInfoMap: Map?, +// iconConfigMap: Map, +// ): Map { +// val nameConfigPathKey = QrIcon.NAME_CONFIG_PATH.key +// val iconNameConfigPath = iconConfigMap.get(nameConfigPathKey) +// if( +// !iconNameConfigPath.isNullOrEmpty() +// ) { +//// val fannelInfoMap = editFragment.fannelInfoMap +//// val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath(fannelInfoMap) +// val currentFannelName = FannelInfoTool.getCurrentFannelName(fannelInfoMap) +// val iconNameMapTsvCon = +// SetReplaceVariabler.execReplaceByReplaceVariables( +// ReadText(iconNameConfigPath).readText(), +// setReplaceVariableMap, +//// currentAppDirPath, +// currentFannelName, +// ) +// return CmdClickMap.createMapFromTsv( +// iconNameMapTsvCon, +// '\n' +// ).toMap() +// } +// val iconConfigMapStr = iconConfigMap.map { +// "${it.key}=${it.value}" +// }.joinToString(",") +// return mapOf( +// IconNameConfigKey.DEFAULT.key to iconConfigMapStr +// ) +// +// } - enum class IconNameConfigKey( - val key: String - ){ - DEFAULT("default"), - } - } +// enum class IconNameConfigKey( +// val key: String +// ){ +// DEFAULT("default"), +// } +// } private fun culc( context: Context?, diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/setting_menu_for_cmdindex/ExtraMenuForCmdIndex.kt b/app/src/main/java/com/puutaro/commandclick/proccess/setting_menu_for_cmdindex/ExtraMenuForCmdIndex.kt index 6f0fcd7dc..0cabe5713 100644 --- a/app/src/main/java/com/puutaro/commandclick/proccess/setting_menu_for_cmdindex/ExtraMenuForCmdIndex.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/setting_menu_for_cmdindex/ExtraMenuForCmdIndex.kt @@ -131,6 +131,7 @@ object ExtraMenuForCmdIndex { ?: return@setOnClickListener imageDialogObj = Dialog( context, +// R.style.BottomSheetDialogTheme R.style.extraMenuDialogStyle, ) imageDialogObj?.requestWindowFeature(Window.FEATURE_NO_TITLE) diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/shape/GradientAnimationDrawable.kt b/app/src/main/java/com/puutaro/commandclick/proccess/shape/GradientAnimationDrawable.kt new file mode 100644 index 000000000..badf7d5a0 --- /dev/null +++ b/app/src/main/java/com/puutaro/commandclick/proccess/shape/GradientAnimationDrawable.kt @@ -0,0 +1,43 @@ +package com.puutaro.commandclick.proccess.shape + +import android.graphics.Color +import android.graphics.drawable.AnimationDrawable +import android.graphics.drawable.GradientDrawable + +class GradientAnimationDrawable( + start: Int = Color.rgb(0, 143, 209), + center: Int = Color.rgb(1, 106, 154), + end: Int = Color.rgb(28, 179, 249), + frameDuration: Int = 3000, + enterFadeDuration: Int = 0, + exitFadeDuration: Int = 3000 +) : AnimationDrawable() { + + private val gradientStart = GradientDrawable(GradientDrawable.Orientation.RIGHT_LEFT, intArrayOf(start, center, end)) + .apply { + shape = GradientDrawable.RECTANGLE + gradientType = GradientDrawable.LINEAR_GRADIENT + } + + private val gradientCenter = GradientDrawable(GradientDrawable.Orientation.RIGHT_LEFT, intArrayOf(center, end, start)) + .apply { + shape = GradientDrawable.RECTANGLE + gradientType = GradientDrawable.LINEAR_GRADIENT + } + + private val gradientEnd = GradientDrawable(GradientDrawable.Orientation.RIGHT_LEFT, intArrayOf(end, start, center)) + .apply { + shape = GradientDrawable.RECTANGLE + gradientType = GradientDrawable.LINEAR_GRADIENT + } + + init { + addFrame(gradientStart, frameDuration) + addFrame(gradientCenter, frameDuration) + addFrame(gradientEnd, frameDuration) + setEnterFadeDuration(enterFadeDuration) + setExitFadeDuration(exitFadeDuration) + isOneShot = false + } + +} diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/shape/PolygonLapsDrawable.kt b/app/src/main/java/com/puutaro/commandclick/proccess/shape/PolygonLapsDrawable.kt new file mode 100644 index 000000000..ab0373c98 --- /dev/null +++ b/app/src/main/java/com/puutaro/commandclick/proccess/shape/PolygonLapsDrawable.kt @@ -0,0 +1,158 @@ +package com.puutaro.commandclick.proccess.shape + +import android.graphics.Canvas +import android.graphics.ColorFilter +import android.graphics.ComposePathEffect +import android.graphics.CornerPathEffect +import android.graphics.DashPathEffect +import android.graphics.Paint +import android.graphics.Paint.ANTI_ALIAS_FLAG +import android.graphics.Paint.Style.FILL +import android.graphics.Paint.Style.STROKE +import android.graphics.Path +import android.graphics.PathDashPathEffect +import android.graphics.PathDashPathEffect.Style.TRANSLATE +import android.graphics.PathMeasure +import android.graphics.PixelFormat +import android.graphics.drawable.Drawable +import android.util.FloatProperty +import java.lang.Math.PI + +class PolygonLapsDrawable : Drawable() { + + var progress = 1f + set(value) { + field = value.coerceIn(0f, 1f) + callback?.invalidateDrawable(this) + } + + var dotProgress = 0f + set(value) { + field = value.coerceIn(0f, 1f) + callback?.invalidateDrawable(this) + } + + private val polygons = listOf( + Polygon(15, 0xffe84c65.toInt(), 362f, 2), + Polygon(14, 0xffe84c65.toInt(), 338f, 3), + Polygon(13, 0xffd554d9.toInt(), 314f, 4), + Polygon(12, 0xffaf6eee.toInt(), 292f, 5), + Polygon(11, 0xff4a4ae6.toInt(), 268f, 6), + Polygon(10, 0xff4294e7.toInt(), 244f, 7), + Polygon(9, 0xff6beeee.toInt(), 220f, 8), + Polygon(8, 0xff42e794.toInt(), 196f, 9), + Polygon(7, 0xff5ae75a.toInt(), 172f, 10), + Polygon(6, 0xffade76b.toInt(), 148f, 11), + Polygon(5, 0xffefefbb.toInt(), 128f, 12), + Polygon(4, 0xffe79442.toInt(), 106f, 13), + Polygon(3, 0xffe84c65.toInt(), 90f, 14) + ) + + private val cornerEffect = CornerPathEffect(8f) + + private val linePaint = Paint(ANTI_ALIAS_FLAG).apply { + style = STROKE + strokeWidth = 4f + pathEffect = cornerEffect + } + + private val dotPaint = Paint(ANTI_ALIAS_FLAG).apply { + color = 0xff0e0d0e.toInt() + style = FILL + } + + private val pathDot = Path().apply { + addCircle(0f, 0f, 8f, Path.Direction.CW) + } + + override fun draw(canvas: Canvas) { + polygons.forEach { polygon -> + linePaint.color = polygon.color + if (progress < 1f) { + val progressEffect = DashPathEffect( + floatArrayOf(0f, (1f - progress) * polygon.length, progress * polygon.length, 0f), + polygon.initialPhase) + linePaint.pathEffect = ComposePathEffect(progressEffect, cornerEffect) + } + canvas.drawPath(polygon.path, linePaint) + } + // loop separately to ensure the dots are on top + polygons.forEach { polygon -> + val phase = polygon.initialPhase + dotProgress * polygon.length * polygon.laps + dotPaint.pathEffect = PathDashPathEffect(pathDot, polygon.length, phase, TRANSLATE) + canvas.drawPath(polygon.path, dotPaint) + } + } + + override fun setAlpha(alpha: Int) { + linePaint.alpha = alpha + dotPaint.alpha = alpha + } + +// override fun setColorFilter(p0: ColorFilter?) { +// TODO("Not yet implemented") +// } + + override fun getOpacity() = PixelFormat.TRANSLUCENT + + override fun setColorFilter(colorFilter: ColorFilter?) { + linePaint.colorFilter = colorFilter + dotPaint.colorFilter = colorFilter + } + + override fun getIntrinsicWidth() = width + + override fun getIntrinsicHeight() = height + + private class Polygon(val sides: Int, val color: Int, radius: Float, val laps: Int) { + val path = createPath(sides, radius) + val length by lazy(LazyThreadSafetyMode.NONE) { + pathMeasure.setPath(path, false) + pathMeasure.length + } + val initialPhase by lazy(LazyThreadSafetyMode.NONE) { + (1f - (1f / (2 * sides))) * length + } + + private fun createPath(sides: Int, radius: Float): Path { + val path = Path() + val angle = 2.0 * PI / sides + val startAngle = PI / 2.0 + Math.toRadians(360.0 / (2 * sides)) + path.moveTo( + cx + (radius * Math.cos(startAngle)).toFloat(), + cy + (radius * Math.sin(startAngle)).toFloat()) + for (i in 1 until sides) { + path.lineTo( + cx + (radius * Math.cos(startAngle - angle * i)).toFloat(), + cy + (radius * Math.sin(startAngle - angle * i)).toFloat()) + } + path.close() + return path + } + } + + companion object { + private const val width = 1080 + private const val height = 1080 + private const val cx = (width / 2).toFloat() + private const val cy = (height / 2).toFloat() + private val pathMeasure = PathMeasure() + } + + object PROGRESS : FloatProperty("progress") { + override fun setValue(drawable: PolygonLapsDrawable, progress: Float) { + drawable.progress = progress + } + + override fun get(drawable: PolygonLapsDrawable) = drawable.progress + } + + object DOT_PROGRESS : FloatProperty("dotProgress") { + override fun setValue(drawable: PolygonLapsDrawable, dotProgress: Float) { + drawable.dotProgress = dotProgress + } + + override fun get(drawable: PolygonLapsDrawable) = drawable.dotProgress + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/shape/PolygonLapsDrawable2.kt b/app/src/main/java/com/puutaro/commandclick/proccess/shape/PolygonLapsDrawable2.kt new file mode 100644 index 000000000..726f59cba --- /dev/null +++ b/app/src/main/java/com/puutaro/commandclick/proccess/shape/PolygonLapsDrawable2.kt @@ -0,0 +1,235 @@ +package com.puutaro.commandclick.proccess.shape + +import android.graphics.Canvas +import android.graphics.Color +import android.graphics.ColorFilter +import android.graphics.ComposePathEffect +import android.graphics.CornerPathEffect +import android.graphics.DashPathEffect +import android.graphics.Paint +import android.graphics.Paint.ANTI_ALIAS_FLAG +import android.graphics.Paint.Style.FILL +import android.graphics.Paint.Style.STROKE +import android.graphics.Path +import android.graphics.PathDashPathEffect +import android.graphics.PathDashPathEffect.Style.TRANSLATE +import android.graphics.PathMeasure +import android.graphics.PixelFormat +import android.graphics.Rect +import android.graphics.Typeface +import android.graphics.drawable.Drawable +import android.util.FloatProperty +import java.lang.Math.PI + + +class PolygonLapsDrawable2( + private val displayText: String, + private val xyPosiTripleList: List> +) : Drawable() { + + var progress = 1f + set(value) { + field = value.coerceIn(0f, 1f) + callback?.invalidateDrawable(this) + } + + var dotProgress = 0f + set(value) { + field = value.coerceIn(0f, 1f) + callback?.invalidateDrawable(this) + } + + + private val polygons = listOf( + Polygon(15, 0xffe84c65.toInt(), 362f, 2, xyPosiTripleList), +// Polygon(14, 0xffe84c65.toInt(), 338f, 3), +// Polygon(13, 0xffd554d9.toInt(), 314f, 4), +// Polygon(12, 0xffaf6eee.toInt(), 292f, 5), +// Polygon(11, 0xff4a4ae6.toInt(), 268f, 6), +// Polygon(10, 0xff4294e7.toInt(), 244f, 7), +// Polygon(9, 0xff6beeee.toInt(), 220f, 8), +// Polygon(8, 0xff42e794.toInt(), 196f, 9), +// Polygon(7, 0xff5ae75a.toInt(), 172f, 10), +// Polygon(6, 0xffade76b.toInt(), 148f, 11), +// Polygon(5, 0xffefefbb.toInt(), 128f, 12), +// Polygon(4, 0xffe79442.toInt(), 106f, 13), +// Polygon(3, 0xffe84c65.toInt(), 90f, 14) + ) + + private val cornerEffect = CornerPathEffect(8f) + + private val linePaint = Paint(ANTI_ALIAS_FLAG).apply { + style = STROKE + strokeWidth = 10f + pathEffect = cornerEffect + } + + private val dotPaint = Paint(ANTI_ALIAS_FLAG).apply { + color = 0xff0e0d0e.toInt() + style = FILL + } + + private val pathDot = Path().apply { + addCircle(0f, 0f, 8f, Path.Direction.CW) + } + + override fun draw(canvas: Canvas) { + polygons.forEach { polygon -> + linePaint.color = polygon.color + if (progress < 1f) { + val progressEffect = DashPathEffect( + floatArrayOf(0f, (1f - progress) * polygon.length, progress * polygon.length, 0f), + polygon.initialPhase) + linePaint.pathEffect = ComposePathEffect(progressEffect, cornerEffect) + } + canvas.drawPath(polygon.path, linePaint) + + + val normalTextSize = 200f + xyPosiTripleList.forEachIndexed { + index, xyPair -> + if( + xyPosiTripleList[index].third.isEmpty() + ) return@forEachIndexed + val paint = Paint() + paint.style = Paint.Style.STROKE + paint.strokeWidth = 5f + paint.color = Color.WHITE + paint.isAntiAlias = false + paint.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.BOLD)); +// .setTypeface(Typeface.SERIF) + val textSizeFloat = 400f / (index + 1) + paint.textSize = when(textSizeFloat < normalTextSize){ + true -> normalTextSize + else -> textSizeFloat + } + + // min. rect of text + val textBounds: Rect = Rect() + val drawTextStr = xyPosiTripleList[index].third + paint.getTextBounds(drawTextStr, 0, drawTextStr.length, textBounds) + canvas.drawText(drawTextStr, xyPair.first, xyPair.second, paint); //instead of textBounds.height() + + } + xyPosiTripleList.forEachIndexed { + index, xyPair -> + if( + xyPosiTripleList[index].third.isEmpty() + ) return@forEachIndexed + val paint = Paint() + paint.style = Paint.Style.FILL + paint.color = Color.DKGRAY + paint.isAntiAlias = false + paint.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.BOLD)); +// .setTypeface(Typeface.SERIF) + val textSizeFloat = 400f / (index + 1) + paint.textSize = when(textSizeFloat < normalTextSize){ + true -> normalTextSize + else -> textSizeFloat + } + + // min. rect of text + val textBounds: Rect = Rect() + val drawTextStr = xyPosiTripleList[index].third + paint.getTextBounds(drawTextStr, 0, drawTextStr.length, textBounds) + canvas.drawText(drawTextStr, xyPair.first, xyPair.second, paint); //instead of textBounds.height() + + } + } + // loop separately to ensure the dots are on top + polygons.forEach { polygon -> + val phase = polygon.initialPhase + dotProgress * polygon.length * polygon.laps + dotPaint.pathEffect = PathDashPathEffect(pathDot, polygon.length, phase, TRANSLATE) + canvas.drawPath(polygon.path, dotPaint) + } + } + + override fun setAlpha(alpha: Int) { + linePaint.alpha = alpha + dotPaint.alpha = alpha + } + +// override fun setColorFilter(p0: ColorFilter?) { +// TODO("Not yet implemented") +// } + + override fun getOpacity() = PixelFormat.TRANSLUCENT + + override fun setColorFilter(colorFilter: ColorFilter?) { + linePaint.colorFilter = colorFilter + dotPaint.colorFilter = colorFilter + } + + override fun getIntrinsicWidth() = width + + override fun getIntrinsicHeight() = height + + private class Polygon( + val sides: Int, + val color: Int, + radius: Float, + val laps: Int, + val xyPosiTripleList: List>, + ) { + val path = createPath(sides, radius) + val length by lazy(LazyThreadSafetyMode.NONE) { + pathMeasure.setPath(path, false) + pathMeasure.length + } + val initialPhase by lazy(LazyThreadSafetyMode.NONE) { + (1f - (1f / (2 * sides))) * length + } + + private fun createPath(sides: Int, radius: Float): Path { + val path = Path() + val angle = 2.0 * PI / sides + val startAngle = PI / 2.0 + Math.toRadians(360.0 / (2 * sides)) + path.moveTo( + xyPosiTripleList.first().first, + xyPosiTripleList.first().second + ) +// cx + (radius * Math.cos(startAngle)).toFloat(), +// cy + (radius * Math.sin(startAngle)).toFloat()) +// for (i in 1 until sides) { + xyPosiTripleList.forEachIndexed { + index, xyPair -> + if(index <= 0) return@forEachIndexed + path.lineTo( + xyPosiTripleList[index].first, + xyPosiTripleList[index].second, + ) + } +// cx + (radius * Math.cos(startAngle - angle * i)).toFloat(), +// cy + (radius * Math.sin(startAngle - angle * i)).toFloat()) +// } + path.close() + return path + } + } + + companion object { + private const val width = 1080 + private const val height = 1080 + private const val cx = (width / 2).toFloat() + private const val cy = (height / 2).toFloat() + private val pathMeasure = PathMeasure() +// private val oneSideLength = 362 + } + + object PROGRESS : FloatProperty("progress") { + override fun setValue(drawable: PolygonLapsDrawable2, progress: Float) { + drawable.progress = progress + } + + override fun get(drawable: PolygonLapsDrawable2) = drawable.progress + } + + object DOT_PROGRESS : FloatProperty("dotProgress") { + override fun setValue(drawable: PolygonLapsDrawable2, dotProgress: Float) { + drawable.dotProgress = dotProgress + } + + override fun get(drawable: PolygonLapsDrawable2) = drawable.dotProgress + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/shell_macro/ShellMacroHandler.kt b/app/src/main/java/com/puutaro/commandclick/proccess/shell_macro/ShellMacroHandler.kt index 558dd8e7e..36518743e 100644 --- a/app/src/main/java/com/puutaro/commandclick/proccess/shell_macro/ShellMacroHandler.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/shell_macro/ShellMacroHandler.kt @@ -219,7 +219,7 @@ object ShellMacroHandler { private enum class JudgeTsvKey( val str: String ){ - LIST_DIR(ListSettingsForListIndex.ListSettingKey.LIST_DIR.key) + LIST_DIR(ListSettingsForListIndex.ListSettingKey.MAP_LIST_PATH.key) } fun getStrByListDirValue( diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/tool_bar_button/ToolbarButtonHandler.kt b/app/src/main/java/com/puutaro/commandclick/proccess/tool_bar_button/ToolbarButtonHandler.kt index 2bc835393..1d5aff716 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/tool_bar_button/ToolbarButtonHandler.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/tool_bar_button/ToolbarButtonHandler.kt @@ -1,10 +1,9 @@ package com.puutaro.commandclick.proccess.tool_bar_button import android.widget.FrameLayout -import androidx.appcompat.widget.LinearLayoutCompat +import com.puutaro.commandclick.component.adapter.EditComponentListAdapter import com.puutaro.commandclick.fragment.EditFragment import com.puutaro.commandclick.fragment_lib.edit_fragment.common.ToolbarButtonBariantForEdit -import com.puutaro.commandclick.fragment_lib.edit_fragment.processor.ScriptFileSaver import com.puutaro.commandclick.proccess.edit.lib.ListContentsSaverByTag import com.puutaro.commandclick.proccess.lib.ExecSetTermSizeForIntent import com.puutaro.commandclick.proccess.tool_bar_button.config_settings.ClickSettingsForToolbarButton @@ -113,7 +112,7 @@ private object ScriptSaver{ clickConfigMapStr, '|' ).toMap() val onScriptStr = clickJsPathMap.get( - ClickSettingsForToolbarButton.ClickConfigMapKey.ON_SCRIPT_SAVE.key + ClickSettingsForToolbarButton.ClickConfigMapKey.ON_SAVE.key ) if( onScriptStr.isNullOrEmpty() @@ -121,7 +120,10 @@ private object ScriptSaver{ onScriptStr } == ClickSettingsForToolbarButton.OnScriptSave.ON.name if (!isScriptSave) return - ScriptFileSaver.save(editFragment) + val editComponentListAdapter = + editFragment.binding.editListRecyclerView.adapter as EditComponentListAdapter + editComponentListAdapter.saveFannelCon() +// ScriptFileSaver.save(editFragment) } } diff --git a/app/src/main/java/com/puutaro/commandclick/proccess/tool_bar_button/config_settings/ClickSettingsForToolbarButton.kt b/app/src/main/java/com/puutaro/commandclick/proccess/tool_bar_button/config_settings/ClickSettingsForToolbarButton.kt index 59e23acb6..001d9dedf 100755 --- a/app/src/main/java/com/puutaro/commandclick/proccess/tool_bar_button/config_settings/ClickSettingsForToolbarButton.kt +++ b/app/src/main/java/com/puutaro/commandclick/proccess/tool_bar_button/config_settings/ClickSettingsForToolbarButton.kt @@ -4,7 +4,7 @@ object ClickSettingsForToolbarButton { enum class ClickConfigMapKey( val key: String ){ - ON_SCRIPT_SAVE("onScriptSave"), + ON_SAVE("onSave"), MONITOR_SIZE("monitorSize"), } diff --git a/app/src/main/java/com/puutaro/commandclick/util/CommandClickVariables.kt b/app/src/main/java/com/puutaro/commandclick/util/CommandClickVariables.kt index 7d9eb82d1..5fe86fd05 100755 --- a/app/src/main/java/com/puutaro/commandclick/util/CommandClickVariables.kt +++ b/app/src/main/java/com/puutaro/commandclick/util/CommandClickVariables.kt @@ -274,22 +274,22 @@ object CommandClickVariables { } fun replaceVariableInHolder( - scriptContents: String, + scriptContentsList: List, replaceNewlineSepaCon: String, startHolder: String?, endHolder: String?, - ): String { + ): List { var countStartHolder = 0 var countEndHolder = 0 if( startHolder.isNullOrEmpty() - ) return scriptContents + ) return scriptContentsList if( endHolder.isNullOrEmpty() - ) return scriptContents + ) return scriptContentsList if( replaceNewlineSepaCon.isEmpty() - ) return scriptContents + ) return scriptContentsList val replaceMap = replaceNewlineSepaCon.split("\n").map { val keyValueList = it.split("=") val keyValueListSize = keyValueList.size @@ -304,8 +304,8 @@ object CommandClickVariables { }.toMap().filterKeys { it.isNotEmpty() } if( replaceMap.isEmpty() - ) return scriptContents - return scriptContents.split('\n').map { + ) return scriptContentsList + return scriptContentsList.map { if( it.startsWith(startHolder) && it.endsWith(startHolder) @@ -321,13 +321,24 @@ object CommandClickVariables { val keyValueList = it.split("=") val keyValueListSize = keyValueList.size val key = keyValueList.first() + val compQuoteTemplate = keyValueList.filterIndexed { innerIndex, _ -> + innerIndex > 0 + }.joinToString("=").let { + valueLine -> + QuoteTool.extractBothQuote(valueLine) + }.let { + compQuote -> + "${compQuote}%s${compQuote}" + } + val replaceValue = replaceMap.get(key)?.let{ QuoteTool.trimBothEdgeQuote(it) } ?: return@map it if( keyValueListSize < 2 ) return@map it - "${key}=\"${replaceValue}\"" - }.joinToString("\n") + + "${key}=${compQuoteTemplate.format(replaceValue)}" + } } } diff --git a/app/src/main/java/com/puutaro/commandclick/util/EnableTerminalWebView.kt b/app/src/main/java/com/puutaro/commandclick/util/EnableTerminalWebView.kt index ed21a4425..ab030623e 100755 --- a/app/src/main/java/com/puutaro/commandclick/util/EnableTerminalWebView.kt +++ b/app/src/main/java/com/puutaro/commandclick/util/EnableTerminalWebView.kt @@ -3,16 +3,29 @@ package com.puutaro.commandclick.util import androidx.core.view.isVisible import androidx.fragment.app.Fragment import com.puutaro.commandclick.fragment.TerminalFragment +import com.puutaro.commandclick.util.datetime.LocalDatetimeTool import com.puutaro.commandclick.util.state.TargetFragmentInstance import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.withContext +import java.time.LocalDateTime object EnableTerminalWebView { + + private var beforeTime = LocalDateTime.parse("2020-02-15T21:30:50") suspend fun check( currentFragment: Fragment, fragmentTag: String? ): Boolean { + val currentDatetime = LocalDateTime.now() + val isSaveSec = LocalDatetimeTool.getDurationSec( + beforeTime, + currentDatetime + ) <= 2 + if(isSaveSec){ + beforeTime = currentDatetime + return true + } return withContext(Dispatchers.Main) { var hitTimes = 0 for (i in 1..10) { @@ -28,7 +41,10 @@ object EnableTerminalWebView { } if( hitTimes > 2 - ) return@withContext true + ) { + beforeTime = LocalDateTime.now() + return@withContext true + } delay(100) } return@withContext false diff --git a/app/src/main/java/com/puutaro/commandclick/util/RecordNumToMapNameValueInHolder.kt b/app/src/main/java/com/puutaro/commandclick/util/RecordNumToMapNameValueInHolder.kt index 1aa33620f..671ba46ec 100755 --- a/app/src/main/java/com/puutaro/commandclick/util/RecordNumToMapNameValueInHolder.kt +++ b/app/src/main/java/com/puutaro/commandclick/util/RecordNumToMapNameValueInHolder.kt @@ -8,7 +8,47 @@ object RecordNumToMapNameValueInHolder { val valNameKey = RecordNumToMapNameValueInHolderColumn.VARIABLE_NAME.name val valValueKey = RecordNumToMapNameValueInHolderColumn.VARIABLE_VALUE.name + fun parse( + scriptContentsList: List?, + startHolderName: String, + endHolderName: String, + ): Map? { + if( + scriptContentsList.isNullOrEmpty() + ) return null + val commandPromptStartNum = scriptContentsList.indexOf( + startHolderName + ) + val commandPromptEndNum = scriptContentsList.indexOf( + endHolderName + ) + val substituteCmdStartEndContentList = if( + commandPromptStartNum > 0 + && commandPromptEndNum > 0 + && commandPromptStartNum < commandPromptEndNum + ) { + scriptContentsList.slice( + commandPromptStartNum..commandPromptEndNum + ) + } else { + return null + } + val cmdclickVariableRegex = Regex("^[a-zA-Z0-9_-]*=") + return substituteCmdStartEndContentList.map { + substituteCmdStartEndContentStr -> + val result = cmdclickVariableRegex.containsMatchIn( + substituteCmdStartEndContentStr + ) + if( + !result + ) return@map String() to String() + makeResultEntryMap( + substituteCmdStartEndContentStr, + ) + }.filter { it.first.isNotEmpty() }.toMap().toMutableMap() + } + fun parse2( scriptContentsList: List, startHolderName: String, endHolderName: String, @@ -54,7 +94,7 @@ object RecordNumToMapNameValueInHolder { val result = cmdclickVariableRegex.containsMatchIn( substituteCmdStartEndContentStr ) - makeResultEntryMap( + makeResultEntryMap2( result, recordNum, substituteCmdStartEndContentStr, @@ -114,6 +154,24 @@ object RecordNumToMapNameValueInHolder { } private fun makeResultEntryMap( + substituteCmdStartEndContentStr: String, + ): Pair { + + val substituteCmdStartEndContentList = substituteCmdStartEndContentStr.split("=") + if( + substituteCmdStartEndContentList.size < 2 + ) return String() to String() + val variableName = + substituteCmdStartEndContentList.firstOrNull() + ?: return String() to String() + val variableValue = substituteCmdStartEndContentList.filterIndexed { index, s -> + index > 0 + }.joinToString("=") + return variableName to variableValue + } + + + private fun makeResultEntryMap2( result: Boolean, recordNum: Int, substituteCmdStartEndContentStr: String, diff --git a/app/src/main/java/com/puutaro/commandclick/util/datetime/LocalDatetimeTool.kt b/app/src/main/java/com/puutaro/commandclick/util/datetime/LocalDatetimeTool.kt index 541d8caa4..0e1be6a33 100644 --- a/app/src/main/java/com/puutaro/commandclick/util/datetime/LocalDatetimeTool.kt +++ b/app/src/main/java/com/puutaro/commandclick/util/datetime/LocalDatetimeTool.kt @@ -1,6 +1,7 @@ package com.puutaro.commandclick.util.datetime import java.time.Duration +import java.time.LocalDate import java.time.LocalDateTime import java.time.format.DateTimeFormatter @@ -28,5 +29,11 @@ object LocalDatetimeTool { return summerVacationDuration.seconds } + fun convertStrToLocalDatetime( + datetimeStr: String + ): LocalDateTime { + return LocalDateTime.parse(datetimeStr, DateTimeFormatter.ISO_LOCAL_DATE_TIME); + } + } \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/util/edit_tool/CcEditComponent.kt b/app/src/main/java/com/puutaro/commandclick/util/edit_tool/CcEditComponent.kt index 600b886a4..c58522047 100755 --- a/app/src/main/java/com/puutaro/commandclick/util/edit_tool/CcEditComponent.kt +++ b/app/src/main/java/com/puutaro/commandclick/util/edit_tool/CcEditComponent.kt @@ -7,52 +7,52 @@ import androidx.appcompat.widget.LinearLayoutCompat import com.puutaro.commandclick.fragment.EditFragment import com.puutaro.commandclick.util.LogSystems -object CcEditComponent { - - fun makeEditLinearLayoutList( - editFragment: EditFragment, - ): List { - val binding = editFragment.binding - return when(editFragment.existIndexList){ - true -> listOf( - binding.editListInnerTopLinearLayout, - binding.editListInnerBottomLinearLayout, - ) - else -> listOf( - binding.editLinearLayout, - ) - } - } - - fun findEditTextView( - currentId: Int, - editLinearLayoutList: List, - ): EditText? { - editLinearLayoutList.forEach { - val extractedEditText = it.findViewById(currentId) - if( - extractedEditText != null - ) return extractedEditText - } - LogSystems.stdWarn( - "no exist editText id: ${currentId}" - ) - return null - } - - fun findSpinnerView( - currentId: Int, - editLinearLayoutList: List, - ): Spinner? { - editLinearLayoutList.forEach { - val extractedSpinner = it.findViewById(currentId) - if( - extractedSpinner != null - ) return extractedSpinner - } - LogSystems.stdWarn( - "no exist editText id: ${currentId}" - ) - return null - } -} \ No newline at end of file +//object CcEditComponent { +// +//// fun makeEditLinearLayoutList( +//// editFragment: EditFragment, +//// ): List { +//// val binding = editFragment.binding +//// return when(editFragment.existIndexList){ +//// true -> listOf( +//// binding.editListInnerTopLinearLayout, +//// binding.editListInnerBottomLinearLayout, +//// ) +//// else -> listOf( +//// binding.editLinearLayout, +//// ) +//// } +//// } +// +//// fun findEditTextView( +//// currentId: Int, +//// editLinearLayoutList: List, +//// ): EditText? { +//// editLinearLayoutList.forEach { +//// val extractedEditText = it.findViewById(currentId) +//// if( +//// extractedEditText != null +//// ) return extractedEditText +//// } +//// LogSystems.stdWarn( +//// "no exist editText id: ${currentId}" +//// ) +//// return null +//// } +//// +//// fun findSpinnerView( +//// currentId: Int, +//// editLinearLayoutList: List, +//// ): Spinner? { +//// editLinearLayoutList.forEach { +//// val extractedSpinner = it.findViewById(currentId) +//// if( +//// extractedSpinner != null +//// ) return extractedSpinner +//// } +//// LogSystems.stdWarn( +//// "no exist editText id: ${currentId}" +//// ) +//// return null +//// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/util/file/AssetsFileManager.kt b/app/src/main/java/com/puutaro/commandclick/util/file/AssetsFileManager.kt index a974e6844..a7e0e9725 100755 --- a/app/src/main/java/com/puutaro/commandclick/util/file/AssetsFileManager.kt +++ b/app/src/main/java/com/puutaro/commandclick/util/file/AssetsFileManager.kt @@ -20,6 +20,11 @@ object AssetsFileManager { const val firstUrlCapPngPath = "${urlPngDirPath}/first_url_cap.png" const val extraMenuDirPath = "${resPngDirPath}/extra_menu" const val textViewDecoDirPath = "${resPngDirPath}/text_view_deco" + const val gridDialogDirPath = "${resPngDirPath}/grid_dialog" + const val sibukiPngPath = "${gridDialogDirPath}/sibuki.png" + const val confirmDialogDirPath = "${resPngDirPath}/confirm_dialog" + const val xPngPath = "${confirmDialogDirPath}/x.png" + const val oPngPath = "${confirmDialogDirPath}/o.png" const val underLinePngPath = "${textViewDecoDirPath}/under_line.png" const val resGifDirPath = "res/gif" const val urlHistoryGifPath = "${resGifDirPath}/url_history.gif" diff --git a/app/src/main/java/com/puutaro/commandclick/util/file/ButtonAssetsImage.kt b/app/src/main/java/com/puutaro/commandclick/util/file/ButtonAssetsImage.kt index 9c9d2f802..0605900e5 100644 --- a/app/src/main/java/com/puutaro/commandclick/util/file/ButtonAssetsImage.kt +++ b/app/src/main/java/com/puutaro/commandclick/util/file/ButtonAssetsImage.kt @@ -9,6 +9,7 @@ object ButtonAssetsImage { const val downPingPath = "${resButtonPngDirPath}/down.png" const val topPingPath = "${resButtonPngDirPath}/top.png" const val aboutPingPath = "${resButtonPngDirPath}/about.png" + const val cPingPath = "${resButtonPngDirPath}/c.png" const val cancelPingPath = "${resButtonPngDirPath}/cancel.png" const val copyPingPath = "${resButtonPngDirPath}/copy.png" const val backPingPath = "${resButtonPngDirPath}/back.png" diff --git a/app/src/main/java/com/puutaro/commandclick/util/file/MapListFileRenamer.kt b/app/src/main/java/com/puutaro/commandclick/util/file/MapListFileRenamer.kt new file mode 100644 index 000000000..a84946aa1 --- /dev/null +++ b/app/src/main/java/com/puutaro/commandclick/util/file/MapListFileRenamer.kt @@ -0,0 +1,246 @@ +package com.puutaro.commandclick.util.file + +import android.app.Dialog +import android.content.Context +import android.view.Gravity +import android.view.ViewGroup +import android.widget.AutoCompleteTextView +import androidx.appcompat.widget.AppCompatImageButton +import androidx.appcompat.widget.AppCompatTextView +import androidx.core.view.isVisible +import androidx.recyclerview.widget.RecyclerView +import com.blankj.utilcode.util.ToastUtils +import com.puutaro.commandclick.R +import com.puutaro.commandclick.common.variable.path.UsePath +import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.ExecReWriteForListIndexAdapter +import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.ListIndexDuplicate +import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.ListSettingsForListIndex +import com.puutaro.commandclick.util.CcPathTool +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import java.io.File + +object MapListFileRenamer { + private var renamePromptDialog: Dialog? = null + + fun rename( + context: Context?, + editListRecyclerView: RecyclerView, + mapListPath: String, + lineMap: Map, + ){ + CoroutineScope(Dispatchers.Main).launch { + withContext(Dispatchers.Main) { + execRename( + context, + editListRecyclerView, + mapListPath, + lineMap, + ) + } + } + } + + private fun execRename( + context: Context?, + editListRecyclerView: RecyclerView, + mapListPath: String, + lineMap: Map, + ){ + if( + context == null + ) return +// fragment.disableKeyboardFragmentChange = true +// val context = fragment.context +// ?: return + + renamePromptDialog = Dialog( + context + ) + renamePromptDialog?.setContentView( + R.layout.prompt_dialog_layout + ) + val promptTitleTextView = + renamePromptDialog?.findViewById( + R.id.prompt_dialog_title + ) + promptTitleTextView?.text = "Rename title" + val promptMessageTextView = + renamePromptDialog?.findViewById( + R.id.prompt_dialog_message + ) + promptMessageTextView?.isVisible = false + val promptEditText = + renamePromptDialog?.findViewById( + R.id.prompt_dialog_input + ) +// val titleFileNameAndPathConPair = +// TitleFileNameAndPathConPairForListIndexAdapter.get(lineMap) +// ?: return + val fileNameOrSrcTitle = lineMap.get( + ListSettingsForListIndex.MapListPathManager.Key.SRC_TITLE.key + ) +// titleFileNameAndPathConPair.first + + promptEditText?.setText( + fileNameOrSrcTitle + ) + val promptCancelButton = + renamePromptDialog?.findViewById( + R.id.prompt_dialog_cancel + ) + promptCancelButton?.setOnClickListener { + dismissProcess( +// fragment + ) + } + val promptOkButtonView = + renamePromptDialog?.findViewById( + R.id.prompt_dialog_ok + ) + promptOkButtonView?.setOnClickListener { + CoroutineScope(Dispatchers.Main).launch { + withContext(Dispatchers.Main) { + ExecRenameProcess.rename( + editListRecyclerView, + mapListPath, + lineMap, + promptEditText, + ) + } + withContext(Dispatchers.Main) { + dismissProcess( +// fragment + ) + } + } + } + renamePromptDialog?.setOnCancelListener { + dismissProcess( +// fragment + ) + } + renamePromptDialog?.window?.setLayout( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT + ) + renamePromptDialog?.window?.setGravity( + Gravity.BOTTOM + ) + renamePromptDialog?.show() + } + + private object ExecRenameProcess { + fun rename( + editListRecyclerView: RecyclerView, + mapListPath: String, + lineMap: Map, + promptEditText: AutoCompleteTextView?, + + ) { + val inputEditable = promptEditText?.text + if ( + inputEditable.isNullOrEmpty() + ) { + ToastUtils.showShort("No type item name") + return + } +// val titleFileNameAndPathConPair = +// TitleFileNameAndPathConPairForListIndexAdapter.get(lineMap) +// ?: return + val srcTitleKey = ListSettingsForListIndex.MapListPathManager.Key.SRC_TITLE.key + val fileNameOrTitle = lineMap.get( + srcTitleKey + ) ?: String() +// titleFileNameAndPathConPair.first + val compExtend = CcPathTool.subExtend(fileNameOrTitle) + val renamedFileNameOrTitle = UsePath.compExtend( + inputEditable.toString().trim(), + compExtend + ) + if ( + fileNameOrTitle == renamedFileNameOrTitle + ) return + val srcConKey = ListSettingsForListIndex.MapListPathManager.Key.SRC_CON.key + val filePathOrCon = lineMap.get( + srcConKey + ) ?: String() + val filePathOrConObj = File(filePathOrCon) + val isTitleEqualPathOrCon = + fileNameOrTitle == filePathOrConObj.name + val isWithFileRename = + filePathOrConObj.isFile + && isTitleEqualPathOrCon + val renameFilePathOrCon = renameConOrPath( + renamedFileNameOrTitle, + filePathOrCon, + isWithFileRename, + ) + ListIndexDuplicate.isTsvDetect( + mapListPath, + renamedFileNameOrTitle, + renameFilePathOrCon + ).let { + isDetect -> + if( + isDetect + ) return + } + val viewLayoutPathKey = ListSettingsForListIndex.MapListPathManager.Key.VIEW_LAYOUT_TAG.key + val renameLineMap = mapOf( + srcTitleKey to renamedFileNameOrTitle, + srcConKey to renameFilePathOrCon, + viewLayoutPathKey to (lineMap.get(viewLayoutPathKey) ?: String()) + ) + val srcAndRepLinePairMapList = listOf( + lineMap to renameLineMap, + ) + MapListFileTool.updateMapListFileByReplace( + mapListPath, + srcAndRepLinePairMapList + ) + if (isWithFileRename) { + FileSystems.moveFile( + filePathOrCon, + renameFilePathOrCon + ) + } + ExecReWriteForListIndexAdapter.replaceListElementForTsv( +// fragment, + editListRecyclerView, + srcAndRepLinePairMapList + ) + } + + private fun renameConOrPath( + renamedFileNameOrTitle: String, + filePathOrCon: String, + isWithFileRename: Boolean, + ): String { + val filePathOrConObj = File(filePathOrCon) + return when (isWithFileRename) { + true -> { + val tsvParentDirPath = filePathOrConObj.parent + ?: return String() + File(tsvParentDirPath, renamedFileNameOrTitle).absolutePath + } + else -> filePathOrCon + } + } + } + + private fun dismissProcess( +// editFragment: EditFragment + ){ + renamePromptDialog?.dismiss() + renamePromptDialog = null +// CoroutineScope(Dispatchers.IO).launch { +// withContext(Dispatchers.IO) { +// delay(200) +// editFragment.disableKeyboardFragmentChange = false +// } +// } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/util/file/MapListFileTool.kt b/app/src/main/java/com/puutaro/commandclick/util/file/MapListFileTool.kt new file mode 100644 index 000000000..36b1f50e3 --- /dev/null +++ b/app/src/main/java/com/puutaro/commandclick/util/file/MapListFileTool.kt @@ -0,0 +1,179 @@ +package com.puutaro.commandclick.util.file + +import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.ListSettingsForListIndex +import com.puutaro.commandclick.util.map.CmdClickMap +import java.io.File + +object MapListFileTool { + fun update( + mapListFilePath: String?, + mapList: List>, + separator: Char, + ) { + if ( + mapListFilePath.isNullOrEmpty() + ) return + val saveMapListCon = mapList.map { lineMap -> + convertLineMapToLine( + lineMap, + separator + ) + }.joinToString("\n") + val curMapListCon = ReadText(mapListFilePath).readText() + if ( + curMapListCon.isNotEmpty() + && saveMapListCon == curMapListCon + ) return + FileSystems.writeFile( + mapListFilePath, + saveMapListCon + ) + } + + fun insertMapFileInFirst( + mapListPath: String?, + recentUpdateMap: Map, + curLineMapList: List>? = null + ) { + if ( + mapListPath.isNullOrEmpty() + ) return + val mapListPathObj = File(mapListPath) + if ( + !mapListPathObj.isFile + ) return + val mapListSeparator = + ListSettingsForListIndex.MapListPathManager.mapListSeparator + val srcMapList = when (curLineMapList.isNullOrEmpty()) { + false -> curLineMapList + else -> ReadText(mapListPath).textToList().map { + CmdClickMap.createMap( + it, + mapListSeparator, + ).toMap() + } + } + val updateMapList = listOf(recentUpdateMap) + srcMapList.filter { lineMap -> + lineMap != recentUpdateMap + } + val updateMapListCon = updateMapList.map { + lineMap -> + convertLineMapToLine( + lineMap, + mapListSeparator + ) + }.joinToString("\n") + FileSystems.writeFile( + mapListPath, + updateMapListCon + ) + } + + fun updateMapListFileByReplace( + mapListPath: String?, + srcAndRepLinePairMapList: List, Map>> + ) { + if ( + mapListPath.isNullOrEmpty() + ) return + val tsvPathObj = File(mapListPath) + if (!tsvPathObj.isFile) return + val mapListSeparator = ListSettingsForListIndex.MapListPathManager.mapListSeparator + val srcLineMapList = ReadText(mapListPath).textToList().map { + CmdClickMap.createMap( + it, + mapListSeparator + ).toMap() + } + val replaceTsvConList = srcLineMapList.map { srcLineMap -> + val hitLineMap = srcAndRepLinePairMapList.find { + it.first == srcLineMap + } + when (hitLineMap == null) { + true -> srcLineMap + else -> hitLineMap.second + } + } + if ( + srcLineMapList == replaceTsvConList + ) return + FileSystems.writeFile( + mapListPath, + replaceTsvConList.map { lineMap -> + convertLineMapToLine( + lineMap, + mapListSeparator + ) + }.joinToString("\n") + ) + } + + fun updateMapListFileByRemove( + tsvPath: String?, + removeItemLineMapList: List>, + ){ + if( + tsvPath.isNullOrEmpty() + ) return + val tsvPathObj = File(tsvPath) + if(!tsvPathObj.isFile) return + val mapListSeparator = ListSettingsForListIndex.MapListPathManager.mapListSeparator + val removeTsvCon = ReadText(tsvPath).textToList().map{ + CmdClickMap.createMap( + it, + mapListSeparator + ).toMap() + }.filter { + !removeItemLineMapList.contains(it) + }.map{ + lineMap -> + convertLineMapToLine( + lineMap, + mapListSeparator + ) + }.joinToString("\n") +// FileSystems.writeFile( +// File(UsePath.cmdclickDefaultAppDirPath, "remove.txt").absolutePath, +// listOf( +// "removeItemLineList: ${removeItemLineList}", +// "tsvPath: ${tsvPath}", +// "tsvCon: ${ReadText(tsvPath).readText()}", +// "removeTsvCon: ${removeTsvCon}" +// ).joinToString("\n\n") +// ) + FileSystems.writeFile( + tsvPath, + removeTsvCon + ) + } + + fun insertByLastUpdate( + mapListPath: String, + insertLineMap: Map, + ){ + val mapListSeparator = ListSettingsForListIndex.MapListPathManager.mapListSeparator + val insertLine = convertLineMapToLine( + insertLineMap, + mapListSeparator + ) + val updateTsvCon = listOf( + insertLine, + ReadText(mapListPath).readText(), + ).joinToString("\n") + FileSystems.writeFile( + mapListPath, + updateTsvCon + ) + } + + fun convertLineMapToLine( + lineMap: Map, + separator: Char, + ): String { + val separatorStr = separator.toString() + return lineMap.map { + lineMapEntry -> + "${lineMapEntry.key}=${lineMapEntry.value}" + }.joinToString(separatorStr) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/util/file/NoFileChecker.kt b/app/src/main/java/com/puutaro/commandclick/util/file/NoFileChecker.kt index 9ffde2f24..380c96a75 100755 --- a/app/src/main/java/com/puutaro/commandclick/util/file/NoFileChecker.kt +++ b/app/src/main/java/com/puutaro/commandclick/util/file/NoFileChecker.kt @@ -9,13 +9,13 @@ object NoFileChecker { private val blankListMark = "Let's press sync button at right bellow" fun isNoFile( - parentDirPath: String, +// parentDirPath: String, selectedItem: String, message: String = "No file" ): Boolean { val isNoFile = selectedItem == throughMark || selectedItem.trim() == blankListMark - || !File(parentDirPath, selectedItem).isFile +// || !File(parentDirPath, selectedItem).isFile if(isNoFile){ noFileToast(message) } 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 f92a9c8a2..98ca5419c 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 @@ -2,28 +2,52 @@ package com.puutaro.commandclick.util.image_tools import android.R import android.app.Activity +import android.content.Context +import android.content.res.Resources import android.graphics.Bitmap import android.graphics.BitmapFactory import android.graphics.Canvas import android.graphics.Color +import android.graphics.LinearGradient import android.graphics.Matrix import android.graphics.Paint +import android.graphics.Path import android.graphics.PorterDuff import android.graphics.PorterDuffXfermode +import android.graphics.Rect +import android.graphics.RectF +import android.graphics.Shader +import android.graphics.Typeface +import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.GradientDrawable +import android.text.Layout +import android.text.SpannableString +import android.text.Spanned +import android.text.StaticLayout +import android.text.TextPaint +import android.text.TextUtils +import android.text.style.RelativeSizeSpan import android.util.Base64 import android.view.View import androidx.core.graphics.drawable.toBitmap +import com.bumptech.glide.load.resource.bitmap.TransformationUtils.PAINT_FLAGS import com.puutaro.commandclick.common.variable.path.UsePath -import com.puutaro.commandclick.common.variable.res.CmdClickColorStr import com.puutaro.commandclick.util.file.FileSystems -import java.io.BufferedOutputStream +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.async +import kotlinx.coroutines.channels.Channel +import kotlinx.coroutines.sync.Semaphore +import kotlinx.coroutines.sync.withPermit +import kotlinx.coroutines.withContext import java.io.ByteArrayOutputStream import java.io.File import java.io.FileInputStream import java.io.FileOutputStream import java.nio.ByteBuffer import java.util.Arrays +import java.util.Locale +import kotlin.math.max +import kotlin.random.Random object BitmapTool { @@ -127,6 +151,12 @@ object BitmapTool { }*/return cs } + fun convertBitmapToDrawable( + context: Context, + bitmap: Bitmap?): BitmapDrawable { + return BitmapDrawable(context.getResources(), bitmap); + } + fun convertFileToBitmap(path: String): Bitmap? { return try { BitmapFactory.decodeFile(path) @@ -136,29 +166,76 @@ object BitmapTool { } object GradientBitmap { - private val gradientOrientationList = listOf( + + enum class GradOrient{ + LINEAR, + DIAGONAL, + BOTH, + VERTICAL_BOTTOM_TO_TOP, + + } + + private val linearGradOrientList = listOf( GradientDrawable.Orientation.TOP_BOTTOM, GradientDrawable.Orientation.BOTTOM_TOP, GradientDrawable.Orientation.LEFT_RIGHT, GradientDrawable.Orientation.RIGHT_LEFT, + ) + + private val diagonalGradOrientList = listOf( GradientDrawable.Orientation.BL_TR, GradientDrawable.Orientation.TR_BL, GradientDrawable.Orientation.TL_BR, GradientDrawable.Orientation.BR_TL, ) + private val bottomTopGradOrientList = listOf( + GradientDrawable.Orientation.BOTTOM_TOP, + ) + fun addGradient(originalBitmap: Bitmap, startColor: Int, endColor: Int): Bitmap { + val width = originalBitmap.width + val height = originalBitmap.height + val updatedBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888) + val canvas = Canvas(updatedBitmap) + + canvas.drawBitmap(originalBitmap, 0f, 0f, null) + + val paint = Paint() + val shader: LinearGradient = + LinearGradient( + 0f, + 0f, + 0f, + height.toFloat(), + startColor, //-0xf2dae, + endColor, //-0xf8cfb, + Shader.TileMode.CLAMP + ) + paint.setShader(shader) + paint.setXfermode(PorterDuffXfermode(PorterDuff.Mode.SRC_IN)) + canvas.drawRect(0f, 0f, width.toFloat(), height.toFloat(), paint) + + return updatedBitmap + } fun makeGradientBitmap2( width: Int, height: Int, - startColor: String, - endColor: String, + colorIntArray: IntArray, + gradOrient: GradOrient +// startColor: String, +// endColor: String, ): Bitmap { - val color = intArrayOf( - Color.parseColor(startColor), - Color.parseColor(endColor), - ) - - val gradient = GradientDrawable(gradientOrientationList.random(), color) +// val color = intArrayOf( +// Color.parseColor(startColor), +// Color.parseColor(endColor), +// ) + val gradientOrientationList = when(gradOrient){ + GradOrient.BOTH -> linearGradOrientList + diagonalGradOrientList + GradOrient.LINEAR -> linearGradOrientList + GradOrient.DIAGONAL -> diagonalGradOrientList + GradOrient.VERTICAL_BOTTOM_TO_TOP -> bottomTopGradOrientList + } + val gradient = GradientDrawable(gradientOrientationList.random(), colorIntArray) gradient.cornerRadius = 0f return gradient.toBitmap(width, height) } @@ -269,7 +346,415 @@ object BitmapTool { return screenshot } - object ImageRemaker { + object DrawText { + + fun drawTextToBitmap( + text: String, + imageWidth: Float, + imageHeight: Float, + bkColor: Int?, + fontSize: Float?, + fillColorInt: Int?, + strokeColorInt: Int?, + strokeSize: Float?, + firstCharRate: Float?, + ): Bitmap { +// val imgWidth = 200f // 画像幅 +// val imgHeight = 200f // 画像高さ +// val rectWidth = imageWidth //- 10f // 矩形幅 + val rectHeight = imageHeight - 10f // 矩形高さ +// val x = (imageWidth - rectWidth) / 2 // 矩形左上x座標 +// val y = (imageHeight - rectHeight) / 2 // 矩形左上y座標 + + val bmp = Bitmap.createBitmap(imageWidth.toInt(), imageHeight.toInt(), Bitmap.Config.ARGB_8888) + val canvas = Canvas(bmp) + val paint = Paint() + + // 全体を塗りつぶし + paint.color = bkColor ?: Color.TRANSPARENT + paint.style = Paint.Style.FILL + + canvas.drawRect( + 0f, + 0f, + imageWidth, + imageHeight, + paint + ) + +// // 矩形描画 +// paint.color = Color.TRANSPARENT +// paint.style = Paint.Style.STROKE +// canvas.drawRect(x, y, x + rectWidth, y + rectHeight, paint) + val spacingMilti = 0.85f +// val spacingMilti = ( +// ((fontSize ?: 80f) * spacingMiltiBase) / 80f +// ).let { +// spacintMultiSrc -> +// val baseMulti = 0.75f +// if( +// spacintMultiSrc > baseMulti +// ) return@let spacintMultiSrc +// baseMulti +// } + + val staticLayoutForStroke = makeStaticsLayout( + text, + imageWidth, + fontSize, + strokeSize ?: 8f, + strokeColorInt ?: Color.WHITE, + Paint.Style.STROKE, + spacingMilti, + firstCharRate + ) + canvas.translate( + ((canvas.width / 2) - (staticLayoutForStroke.width / 2)).toFloat(), + ((canvas.height / 2) - ((staticLayoutForStroke.height / 2))).toFloat(), + ) + staticLayoutForStroke.draw(canvas) + + + val staticLayout = makeStaticsLayout( + text, + imageWidth, + fontSize, + 0f, + fillColorInt, + Paint.Style.FILL, + spacingMilti, + firstCharRate + ) +// builder.build() +// canvas.translate(x, y) +// canvas.translate( +// 0f, +// 0f, +// ) +// canvas.translate( +// ((canvas.width / 2) - (staticLayout.width / 2)).toFloat(), +// ((canvas.height / 2) - ((staticLayout.height / 2))).toFloat(), +// ) + staticLayout.draw(canvas) + + return bmp + } + + private fun makeStaticsLayout( + text: String, + imageWidth: Float, + fontSize: Float?, + strokeSize: Float?, + fillColorInt: Int?, + paintStyle: Paint. Style, + spacingMulti: Float?, + firstCharRate: Float?, + ): StaticLayout { + // 文字列描画 + val textPaint = TextPaint() + textPaint.color = fillColorInt ?: Color.BLACK + textPaint.style = paintStyle + textPaint.strokeWidth = strokeSize ?: 2f + textPaint.textSize = fontSize ?: 30f +// textPaint.setLea(lineSpacingMultiplier * paint.getFontSpacing()); +// textPaint.textAlign = Paint.Align.CENTER + textPaint.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.BOLD)) +// textPaint.isAntiAlias = true + + val alignment = Layout.Alignment.ALIGN_CENTER +// val spacingAdd = 4f +// val spacingMulti = 1.1f +// val maxLines = (rectHeight / (textPaint.getFontMetrics(null) * spacingMulti + spacingAdd)).toInt() + + //Change first character to capital letter + val tempStr = text.first().uppercase(Locale.getDefault()) + text.substring(1) + + +//Change font size of the first character. You can change 2f as you want + val spannableString = SpannableString(tempStr) + spannableString.setSpan( + RelativeSizeSpan(firstCharRate ?: 1f), + 0, + 1, + Spanned.SPAN_EXCLUSIVE_EXCLUSIVE + ) + + val builder = StaticLayout.Builder.obtain( + spannableString, + 0, + text.length, + textPaint, + imageWidth.toInt() + ) + .setAlignment(alignment) +// .setMaxLines(2) + .setLineSpacing(0f, spacingMulti ?: 0.5f) + .setEllipsize(TextUtils.TruncateAt.END) + return builder.build() + } + + fun drawTextToBitmapByRandom( + text: String, + imageWidth: Float, + imageHeight: Float, + fontSize: Float?, + fillColorInt: Int?, +// strokeColorInt: Int?, + ): Bitmap { +// val imgWidth = 200f // 画像幅 +// val imgHeight = 200f // 画像高さ +// val rectWidth = imageWidth //- 10f // 矩形幅 + val rectHeight = imageHeight - 10f // 矩形高さ +// val x = (imageWidth - rectWidth) / 2 // 矩形左上x座標 +// val y = (imageHeight - rectHeight) / 2 // 矩形左上y座標 + + val bmp = Bitmap.createBitmap(imageWidth.toInt(), imageHeight.toInt(), Bitmap.Config.ARGB_8888) + val canvas = Canvas(bmp) + val paint = Paint() + + // 全体を塗りつぶし + paint.color = Color.TRANSPARENT + paint.style = Paint.Style.FILL + val randomWidthOffset = (1..20).random().toFloat() + val randomHeightOffset = (1..20).random().toFloat() + + canvas.drawRect( + -200 + randomWidthOffset, + -200 + randomHeightOffset, + imageWidth + randomWidthOffset, + imageHeight + randomHeightOffset, paint + ) + + + // 文字列描画 + val textPaint = TextPaint() + textPaint.color = fillColorInt ?: Color.BLACK + textPaint.strokeWidth = 1f + textPaint.style = Paint.Style.FILL + textPaint.textSize = fontSize ?: 30f +// textPaint.setLea(lineSpacingMultiplier * paint.getFontSpacing()); +// textPaint.textAlign = Paint.Align.CENTER + textPaint.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.BOLD)); +// textPaint.isAntiAlias = true + + val alignment = Layout.Alignment.ALIGN_CENTER +// val spacingAdd = 4f +// val spacingMulti = 1.1f +// val maxLines = (rectHeight / (textPaint.getFontMetrics(null) * spacingMulti + spacingAdd)).toInt() + + val staticLayout: StaticLayout + val builder = StaticLayout.Builder.obtain(text, 0, text.length, textPaint, imageWidth.toInt()) + .setAlignment(alignment) +// .setMaxLines(2) + .setLineSpacing(0f, 0.5f) + .setEllipsize(TextUtils.TruncateAt.END) + staticLayout = builder.build() +// canvas.translate(x, y) + canvas.translate( + ((canvas.width / 2) - (staticLayout.width / 2)).toFloat(), + ((canvas.height / 2) - ((staticLayout.height / 2))).toFloat(), + ) + staticLayout.draw(canvas) + + return bmp + } + + fun drawTextToBitmapOld( + mContext: Context, + mText: String + ): Bitmap? { + try { + val resources: Resources = mContext.resources + val scale = resources.displayMetrics.density +// val bitmapSrc = BitmapFactory.decodeResource(resources, resourceId) +// val bitmapConfig = bitmapSrc.config + // set default bitmap config if none +// if (bitmapConfig == null) { +// bitmapConfig = Bitmap.Config.ARGB_8888 +// } + // resource bitmaps are imutable, + // so we need to convert it to mutable one +// val bitmap = bitmapSrc.copy(bitmapConfig, true) + + // new antialised Paint + val paint = Paint(Paint.ANTI_ALIAS_FLAG) + // text color - #3D3D3D + paint.color = Color.rgb(110, 110, 110) + // text size in pixels + paint.textSize = 12 * scale + // text shadow + paint.setShadowLayer(1f, 0f, 1f, Color.DKGRAY) + paint.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.BOLD)); + // draw text to the Canvas center + val bounds: Rect = Rect() + paint.getTextBounds(mText, 0, mText.length, bounds) + + val transparantBitmap: Bitmap = Bitmap.createBitmap( + bounds.width() + 10, + bounds.height() + 10, + Bitmap.Config.ARGB_8888 + ) + val canvas = Canvas(transparantBitmap) + + val x: Int = (transparantBitmap.width - bounds.width()) / 6 + val y: Int = (transparantBitmap.height + bounds.height()) / 5 + + canvas.drawText(mText, x * scale, y * scale, paint) + + return transparantBitmap + } catch (e: java.lang.Exception) { + // TODO: handle exception + + return null + } + } + + fun drawTextOnBitmap( + mContext: Context, + resourceId: Int, + mText: String + ): Bitmap? { + try { + val resources: Resources = mContext.resources + val scale = resources.displayMetrics.density + val bitmapSrc = BitmapFactory.decodeResource(resources, resourceId) + val bitmapConfig = bitmapSrc.config + // set default bitmap config if none +// if (bitmapConfig == null) { +// bitmapConfig = Bitmap.Config.ARGB_8888 +// } + // resource bitmaps are imutable, + // so we need to convert it to mutable one + val bitmap = bitmapSrc.copy(bitmapConfig, true) + + val canvas = Canvas(bitmap) + // new antialised Paint + val paint = Paint(Paint.ANTI_ALIAS_FLAG) + // text color - #3D3D3D + paint.color = Color.rgb(110, 110, 110) + // text size in pixels + paint.textSize = 12 * scale + // text shadow + paint.setShadowLayer(1f, 0f, 1f, Color.DKGRAY) + + // draw text to the Canvas center + val bounds: Rect = Rect() + paint.getTextBounds(mText, 0, mText.length, bounds) + val x: Int = (bitmap.width - bounds.width()) / 6 + val y: Int = (bitmap.height + bounds.height()) / 5 + + canvas.drawText(mText, x * scale, y * scale, paint) + + return bitmap + } catch (e: java.lang.Exception) { + // TODO: handle exception + + return null + } + } + } + + object DotArt { + + fun maskSquareMaker( + resolution: Int, + peaceLength: Int, + rndList: IntRange, + cutThresholds: Int, + ): Bitmap? { + val loopTimes = resolution / peaceLength + var resultRect: Bitmap? = null + for(i in 1..loopTimes) { + var horizontalRect: Bitmap? = null + for(j in 1..loopTimes) { + val colorStr = when(rndList.random() <= cutThresholds) { + true -> "#00000000" + else -> "#000000" + } + val bitmap = ImageTransformer.makeRect( + colorStr, + peaceLength, + peaceLength + ) + horizontalRect = when(horizontalRect == null){ + true -> bitmap + else -> concatByHorizon( + horizontalRect, + bitmap + ) + } + } + val verticalBitmap = rotate( + horizontalRect as Bitmap, + 90f, + ) + resultRect = when(resultRect == null) { + true -> verticalBitmap + else -> concatByHorizon( + resultRect, + verticalBitmap + ) + } + } + return resultRect + } + fun dotArtMaker( + srcBitmap: Bitmap + ): Bitmap { + val bitmap = Bitmap.createScaledBitmap( + srcBitmap, + 32, + 32, + false, + ) + val dotBitmap = Bitmap.createScaledBitmap( + bitmap, + 192, + 192, + false, + ) + return bitmap + } + } + + object ImageTransformer { + + fun stretchImageWithoutBlur( + originalBitmap: Bitmap?, + targetWidth: Int, + targetHeight: Int + ): Bitmap? { + if(originalBitmap == null) { + return originalBitmap + } + // Create a new bitmap with the target dimensions + val scaledBitmap = Bitmap.createBitmap(targetWidth, targetHeight, Bitmap.Config.ARGB_8888) + + // Create a canvas to draw on the new bitmap + val canvas = Canvas(scaledBitmap) + + // Set up the paint for drawing + val paint = Paint().apply { + isFilterBitmap = false // Disable bitmap filtering + isAntiAlias = false // Disable anti-aliasing + } + + // Calculate the scaling factors + val scaleX = targetWidth.toFloat() / originalBitmap.width + val scaleY = targetHeight.toFloat() / originalBitmap.height + + // Create a matrix to apply the scaling + val matrix = Matrix().apply { + setScale(scaleX, scaleY) + } + + // Draw the scaled bitmap onto the canvas + canvas.drawBitmap(originalBitmap, matrix, paint) + + return scaledBitmap + } + + fun flipHorizontally( bitmap: Bitmap ): Bitmap { @@ -279,6 +764,108 @@ object BitmapTool { return Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true) } + fun createKasureBitmap(bitmap: Bitmap): Bitmap { + val resultBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true) + val randomList = (-10..10) + for (x in 0 until resultBitmap.width) { + for (y in 0 until resultBitmap.height) { + val pixel = resultBitmap.getPixel(x, y) + if ( + Color.alpha(pixel) == 0 + ) continue +// val red = Color.red(pixel) + randomList.random() +// val green = Color.green(pixel) + randomList.random() +// val blue = Color.blue(pixel) + randomList.random() + if (randomList.random() < 3) { + resultBitmap.setPixel(x, y, Color.TRANSPARENT) + } + + } + } + return resultBitmap + } + + fun distortImage(bitmap: Bitmap): Bitmap { + val width = bitmap.width + val height = bitmap.height + val newBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888) + val canvas = Canvas(newBitmap) + + val paint = Paint() + paint.isFilterBitmap = true // アンチエイリアス処理 + + val randomList = (-10..10) + for (x in 0 until width) { + for (y in 0 until height) { + // ランダムなオフセットを計算 + val pixel = newBitmap.getPixel(x, y) + if ( + Color.alpha(pixel) == 0 + ) { + paint.color = Color.TRANSPARENT + canvas.drawPoint(x.toFloat(), y.toFloat(), paint) + continue + } + val offsetX = randomList.random() + val offsetY = randomList.random() + + // 新しい座標を計算 + val newX = x + offsetX + val newY = y + offsetY + + // 範囲外の場合は描画しない + if (newX in 0 until width && newY in 0 until height) { + canvas.drawPoint(newX.toFloat(), newY.toFloat(), paint) + } + } + } + + return newBitmap + } + + fun applyUnevenFade(originalBitmap: Bitmap): Bitmap { + val width = originalBitmap.width + val height = originalBitmap.height + val result = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888) + val canvas = Canvas(result) + + // 不均質な透明度を適用 + val paint = Paint() + for (x in 0 until width) { + for (y in 0 until height) { + val pixel = originalBitmap.getPixel(x, y) + if ( + Color.alpha(pixel) == 0 + ) { + paint.color = Color.TRANSPARENT + canvas.drawPoint(x.toFloat(), y.toFloat(), paint) + continue + } + val alpha = (Random.nextFloat() * 255).toInt() + paint.color = + Color.argb(alpha, Color.red(pixel), Color.green(pixel), Color.blue(pixel)) + canvas.drawPoint(x.toFloat(), y.toFloat(), paint) + } + } + return result + } + + fun createNozeBitmap(bitmap: Bitmap): Bitmap { + val resultBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true) + val randomList = (-10..10) + for (x in 0 until resultBitmap.width) { + for (y in 0 until resultBitmap.height) { + val pixel = resultBitmap.getPixel(x, y) + val red = Color.red(pixel) + randomList.random() + val green = Color.green(pixel) + randomList.random() + val blue = Color.blue(pixel) + randomList.random() + resultBitmap.setPixel(x, y, Color.argb(255, red, green, blue)) + } + } + + return resultBitmap + } + // To flip vertically: fun flipVertically( bitmap: Bitmap @@ -289,6 +876,18 @@ object BitmapTool { return Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true) } + fun addPadding(Src: Bitmap, padding_x: Int, padding_y: Int): Bitmap { + val outputimage = Bitmap.createBitmap( + Src.width + padding_x, + Src.height + padding_y, + Bitmap.Config.ARGB_8888 + ) + val can = Canvas(outputimage) + can.drawARGB(0, 0, 0, 0) //This represents White color + can.drawBitmap(Src, (padding_x / 2f), (padding_y / 2f), null) + return outputimage + } + fun makeRect( color: String?, width: Int, @@ -310,6 +909,142 @@ object BitmapTool { return bg } + fun maskImageByTransparent(bitmap: Bitmap, maskBitmap: Bitmap): Bitmap { + val resultBitmap = Bitmap.createBitmap(bitmap.width, bitmap.height, Bitmap.Config.ARGB_8888) + val canvas = Canvas(resultBitmap) + + val paint = Paint() + paint.xfermode = PorterDuffXfermode(PorterDuff.Mode.SRC_IN) + + canvas.drawBitmap(bitmap, 0f, 0f, null) + canvas.drawBitmap(maskBitmap, 0f, 0f, paint) + + paint.xfermode = null + return resultBitmap + } + + suspend fun maskImageByTransparentForEqualEvenRect( + bitmap: Bitmap, + maskBitmap: Bitmap, + oneSide: Int, + ): Bitmap? { + val divideTimes = bitmap.width / oneSide + val divideHeight = bitmap.width / divideTimes + val divideWidth = bitmap.height / divideTimes + val bitmapList = (0..< divideTimes).map { + yOrder -> + val yOffset = yOrder * divideWidth + (0.. +// FileSystems.updateFile( +// File(UsePath.cmdclickDefaultAppDirPath, "lmaskImageByTrans.txt").absolutePath, +// listOf( +// "divideWidth: ${divideWidth}", +// "divideHeight: ${divideHeight}", +// "xOrder * divideWidth: ${xOrder * divideWidth}", +// "yOffset: ${yOffset}", +// ).joinToString("\n") +// ) + cutByTarget( + bitmap, + divideWidth, + divideHeight, + xOrder * divideWidth, + yOffset + + ) + } + }.flatten() + val maskBitmapList = (0.. + val yOffset = yOrder * divideWidth + (0.. +// FileSystems.updateFile( +// File(UsePath.cmdclickDefaultAppDirPath, "lmaskImageByTransMask.txt").absolutePath, +// listOf( +// "divideWidth: ${divideWidth}", +// "divideHeight: ${divideHeight}", +// "xOrder * divideWidth: ${xOrder * divideWidth}", +// "yOffset: ${yOffset}", +// ).joinToString("\n") +// ) + cutByTarget( + maskBitmap, + divideWidth, + divideHeight, + xOrder * divideWidth, + yOffset + + ) + } + }.flatten() + val concurrencyLimitForMakeTextBitmap = 10 + val semaphore = Semaphore(concurrencyLimitForMakeTextBitmap) + val bitmapListSize = bitmapList.size + val channel = Channel>(bitmapListSize) + val indexToBitmapList: MutableList> = mutableListOf() + val maskedBitmapList = withContext(Dispatchers.IO) { + val jobList = bitmapList.mapIndexed { + index, bkPartBitmap -> + async { + semaphore.withPermit { + val maskPartBitmap = maskBitmapList[index] + val maskedBitmap = maskImageByTransparent( + bkPartBitmap, + maskPartBitmap, + ) + channel.send(Pair(index, maskedBitmap)) + } + } + } + jobList.forEach { it.await() } + channel.close() + for(indexToBitmap in channel){ + indexToBitmapList.add(indexToBitmap) + } + indexToBitmapList.sortBy { it.first } + indexToBitmapList.map { + it.second + } + } + val maskedBitmapListLastIndex = maskedBitmapList.lastIndex + var totalBitmap: Bitmap? = null + var horizonBitmap: Bitmap? = null + for(i in 0..< maskedBitmapListLastIndex){ + val maskedBitmapPart = maskedBitmapList[i] + horizonBitmap = when(horizonBitmap == null){ + true -> maskedBitmapPart + else -> concatByHorizon( + horizonBitmap, + maskedBitmapPart as Bitmap, + + ) + } + if( + (i + 1) % divideTimes != 0 + ) continue + val verticalBitmap = rotate( + horizonBitmap as Bitmap, + 90f + ) + totalBitmap = when(totalBitmap == null){ + true -> verticalBitmap + else -> concatByHorizon( + horizonBitmap, + maskedBitmapPart as Bitmap, + ) + } + } + if( + totalBitmap == null + ) return null + return rotate( + totalBitmap, + -90f + ) + } + fun mask( bkBitmap: Bitmap, mascSrcBitmap: Bitmap, @@ -329,6 +1064,254 @@ object BitmapTool { return output } + + fun crop( + bkBitmap: Bitmap?, + toTransform: Bitmap, + outWidth: Int, + outHeight: Int, + out: Boolean + ): Bitmap { + bkBitmap ?: return toTransform + + val SRC_OUT_PAINT = Paint(PAINT_FLAGS).apply { xfermode = PorterDuffXfermode(PorterDuff.Mode.SRC_OUT) } + val SRC_IN_PAINT = Paint(PAINT_FLAGS).apply { xfermode = PorterDuffXfermode(PorterDuff.Mode.SRC_IN) } + val srcWidth = toTransform.width + val srcHeight = toTransform.height + val scaleX = outWidth / srcWidth.toFloat() + val scaleY = outHeight / srcHeight.toFloat() + val maxScale = max(scaleX, scaleY) + + val scaledWidth = maxScale * srcWidth + val scaledHeight = maxScale * srcHeight + val left = (outWidth - scaledWidth) / 2f + val top = (outHeight - scaledHeight) / 2f + val destRect = RectF(left, top, left + scaledWidth, top + scaledHeight) + + val bitmap = Bitmap.createBitmap(outWidth, outHeight, Bitmap.Config.ARGB_8888) +// pool.get(outWidth, outHeight, Bitmap.Config.ARGB_8888) + val canvas = Canvas(bitmap) + val paint = if (out) SRC_OUT_PAINT else SRC_IN_PAINT + canvas.drawBitmap(bkBitmap, 0f, 0f, null) +// drawable.bounds = Rect(0, 0, outWidth, outHeight) +// drawable.draw(canvas) + canvas.drawBitmap(toTransform, null, destRect, paint) + return bitmap + } + + + fun convertWhiteToTransparent( + originalBitmap: Bitmap, + ): Bitmap { + val width = originalBitmap.width + val height = originalBitmap.height + + // Create a mutable copy of the bitmap + val resultBitmap = originalBitmap.copy(Bitmap.Config.ARGB_8888, true) + + for (x in 0 until width) { + for (y in 0 until height) { + val pixel = resultBitmap.getPixel(x, y) + val red = Color.red(pixel) + val green = Color.green(pixel) + val blue = Color.blue(pixel) + + // Check if the pixel is white or close to white + if (red > 240 && green > 240 && blue > 240) { + // Set the pixel to fully transparent + resultBitmap.setPixel(x, y, Color.TRANSPARENT) + } + } + } + + return resultBitmap + } + + fun exchangeTransparentToBlack( + originalBitmap: Bitmap, + ): Bitmap { + val width = originalBitmap.width + val height = originalBitmap.height + + // Create a mutable copy of the bitmap + val resultBitmap = originalBitmap.copy(Bitmap.Config.ARGB_8888, true) + + for (x in 0 until width) { + for (y in 0 until height) { + val pixel = resultBitmap.getPixel(x, y) + if ( + Color.alpha(pixel) == 0 + ) { + resultBitmap.setPixel(x, y, Color.BLACK) + continue + } + resultBitmap.setPixel(x, y, Color.TRANSPARENT) + } + } + + return resultBitmap + } + + fun exchangeColorToBlack( + originalBitmap: Bitmap, + ): Bitmap { + val width = originalBitmap.width + val height = originalBitmap.height + + // Create a mutable copy of the bitmap + val resultBitmap = originalBitmap.copy(Bitmap.Config.ARGB_8888, true) + + for (x in 0 until width) { + for (y in 0 until height) { + val pixel = resultBitmap.getPixel(x, y) + if ( + Color.alpha(pixel) == 0 + ) { + resultBitmap.setPixel(x, y, Color.TRANSPARENT) + continue + } + resultBitmap.setPixel(x, y, Color.BLACK) + } + } + + return resultBitmap + } + + fun exchangeWhiteToBlack( + originalBitmap: Bitmap, + ): Bitmap { + val width = originalBitmap.width + val height = originalBitmap.height + + // Create a mutable copy of the bitmap + val resultBitmap = originalBitmap.copy(Bitmap.Config.ARGB_8888, true) + + for (x in 0 until width) { + for (y in 0 until height) { + val pixel = resultBitmap.getPixel(x, y) + val red = Color.red(pixel) + val green = Color.green(pixel) + val blue = Color.blue(pixel) + + // Check if the pixel is white or close to white + if (red > 240 && green > 240 && blue > 240) { + // Set the pixel to fully transparent + resultBitmap.setPixel(x, y, Color.BLACK) + } + } + } + + return resultBitmap + } + + + fun adjustOpacity( + bitmap: Bitmap, + opacity: Int, //0(trans)..255 + ): Bitmap { + val mutableBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true) + val canvas = Canvas(mutableBitmap) + val colour = (opacity and 0xFF) shl 24 + canvas.drawColor(colour, PorterDuff.Mode.DST_IN) + return mutableBitmap + } + + fun addAlpha( + originalBitmap: Bitmap, + alpha: Float?, + ): Bitmap { + val width = originalBitmap.width + val height = originalBitmap.height + + // Create a mutable copy of the bitmap + val resultBitmap = originalBitmap.copy(Bitmap.Config.ARGB_8888, true) + + for (x in 0 until width) { + for (y in 0 until height) { + val pixel = resultBitmap.getPixel(x, y) + val red = Color.red(pixel) + val green = Color.green(pixel) + val blue = Color.blue(pixel) + Color.argb(0 ,red, green, blue) + if ( + Color.alpha(pixel) == 0 + ) { + resultBitmap.setPixel(x, y, Color.BLACK) + continue + } + resultBitmap.setPixel(x, y, Color.TRANSPARENT) + } + } + + return resultBitmap + } + + + + fun convertBlackToColor( + originalBitmap: Bitmap, + colorStr: String, + ): Bitmap { + val width = originalBitmap.width + val height = originalBitmap.height + + // Create a mutable copy of the bitmap + val resultBitmap = originalBitmap.copy(Bitmap.Config.ARGB_8888, true) + + for (x in 0 until width) { + for (y in 0 until height) { + val pixel = resultBitmap.getPixel(x, y) + val red = Color.red(pixel) + val green = Color.green(pixel) + val blue = Color.blue(pixel) + if (red < 10 && green < 10 && blue < 10) { + // Set the pixel to fully transparent + resultBitmap.setPixel( + x, + y, + Color.parseColor(colorStr) + ) + continue + } + resultBitmap.setPixel(x, y, Color.rgb(red, green, blue)) + + } + } + + return resultBitmap + } + + private fun isWhite(pixel: Int): Boolean { + val red = Color.red(pixel) + val green = Color.green(pixel) + val blue = Color.blue(pixel) + return red == 255 && green == 255 && blue == 255 + } + + fun bitmapToPath(bitmap: Bitmap): Path { + val bitmapWidth = bitmap.width + val bitmapHeight = bitmap.height + val path = Path() + for (x in 0 until bitmapWidth) { + for (y in 0 until bitmapHeight) { + val pixelColor = bitmap.getPixel(x, y) + // Process pixel color to determine if it should be part of the path +// if (shouldIncludePixel(pixelColor)) { + // Add pixel coordinates to the path + path.lineTo(x.toFloat(), y.toFloat()) +// } + } + } + + return path + } + + private fun shouldIncludePixel(pixelColor: Int): Boolean { + // Implement your logic to determine if a pixel should be included in the path + // For example, you might check if the pixel is within a certain color range or threshold + return pixelColor != Color.TRANSPARENT + } + fun cut( bitmap: Bitmap, limitWidthPx: Int, @@ -344,6 +1327,79 @@ object BitmapTool { return Bitmap.createBitmap(bitmap, startX, startY, limitWidthPx, limitHeightPx, null, false) } + fun cutByTarget( + bitmap: Bitmap, + limitWidthPx: Int, + limitHeightPx: Int, + offsetX: Int, + offsetY: Int, + ): Bitmap { + // Set some constants + val srcWidth = bitmap.width + val srcHeight = bitmap.height + +// Crop bitmap + return Bitmap.createBitmap(bitmap, offsetX, offsetY, limitWidthPx, limitHeightPx, null, false) + } + + fun cutCenter( + bitmap: Bitmap, + limitWidthPx: Int, + limitHeightPx: Int, + ): Bitmap { + // Set some constants + val srcWidth = bitmap.width + val srcHeight = bitmap.height + val startX = (0..(srcWidth - limitWidthPx)).random() + val startY = (0..(srcHeight - limitHeightPx)).random() + +// Crop bitmap + return Bitmap.createBitmap(bitmap, startX, startY, limitWidthPx, limitHeightPx, null, false) + } + + fun cutCenter2( + bitmap: Bitmap, + limitWidthPx: Int, + limitHeightPx: Int, + ): Bitmap { + // Set some constants + val srcWidth = bitmap.width + val srcHeight = bitmap.height + val startX = (srcWidth - limitWidthPx) / 2 + val startY = (srcHeight - limitHeightPx) / 2 + +// Crop bitmap + return Bitmap.createBitmap(bitmap, startX, startY, limitWidthPx, limitHeightPx, null, false) + } + + fun overlayBitmap(bitmapBackground: Bitmap, bitmapImage: Bitmap): Bitmap { + val bitmap2Width = bitmapImage.width + val bitmap2Height = bitmapImage.height + val marginLeft = (bitmapBackground.width * 0.5 - bitmap2Width * 0.5).toFloat() + val marginTop = (bitmapBackground.height * 0.5 - bitmap2Height * 0.5).toFloat() + val overlayBitmap = + Bitmap.createBitmap(bitmap2Width, bitmap2Height, bitmapBackground.config) + val canvas = Canvas(overlayBitmap) + canvas.drawBitmap(bitmapBackground, Matrix(), null) + canvas.drawBitmap(bitmapImage, marginLeft, marginTop, null) + return overlayBitmap + } + + fun overlayOnBkBitmap(bitmapBackground: Bitmap, bitmapImage: Bitmap): Bitmap { + val bitmapWidth = bitmapBackground.width + val bitmapHeight = bitmapBackground.height + val bitmap2Width = bitmapImage.width + val bitmap2Height = bitmapImage.height + val marginLeft = (0..(bitmapBackground.width - bitmap2Width)).random().toFloat() + val marginTop = (0..(bitmapBackground.height - bitmap2Height)).random().toFloat() + val overlayBitmap = + Bitmap.createBitmap(bitmapWidth, bitmapHeight, bitmapBackground.config) + val canvas = Canvas(overlayBitmap) + canvas.drawBitmap(bitmapBackground, Matrix(), null) + canvas.drawBitmap(bitmapImage, marginLeft, marginTop, null) + return overlayBitmap + } + } object Base64Tool { diff --git a/app/src/main/java/com/puutaro/commandclick/util/image_tools/ScreenSizeCalculator.kt b/app/src/main/java/com/puutaro/commandclick/util/image_tools/ScreenSizeCalculator.kt index 316c0bc32..a885fde4a 100755 --- a/app/src/main/java/com/puutaro/commandclick/util/image_tools/ScreenSizeCalculator.kt +++ b/app/src/main/java/com/puutaro/commandclick/util/image_tools/ScreenSizeCalculator.kt @@ -22,6 +22,7 @@ object ScreenSizeCalculator { else 4.0f return -(dpHeight / hideShowRate).toInt() } + fun dpHeight( activity: Activity? ): Float { @@ -107,7 +108,7 @@ object ScreenSizeCalculator { fun toDp( context: Context?, dps: T, - ): Int{ + ): Int { if( context == null ) return 0 @@ -115,6 +116,17 @@ object ScreenSizeCalculator { return (dps.toFloat() * density).roundToInt() } + fun toDpForFloat( + context: Context?, + dps: Float, + ): Float { + if( + context == null + ) return 0f + val density = context.resources.displayMetrics.density + return (dps * density) + } + fun toPx( context: Context?, px: T, diff --git a/app/src/main/java/com/puutaro/commandclick/util/map/FilePrefixGetter.kt b/app/src/main/java/com/puutaro/commandclick/util/map/FilePrefixGetter.kt index 3eddf904b..0a1f468fa 100755 --- a/app/src/main/java/com/puutaro/commandclick/util/map/FilePrefixGetter.kt +++ b/app/src/main/java/com/puutaro/commandclick/util/map/FilePrefixGetter.kt @@ -10,19 +10,18 @@ import com.puutaro.commandclick.util.state.FannelInfoTool object FilePrefixGetter { fun get( - editFragment: EditFragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, configMap: Map?, keyName: String, ): String? { val filePrefix = EditSettings.filePrefix - val fannelInfoMap = editFragment.fannelInfoMap // val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( // fannelInfoMap // ) val currentFannelName = FannelInfoTool.getCurrentFannelName( fannelInfoMap ) - val setReplaceVariableMap = editFragment.setReplaceVariableMap val listDirGetValue = configMap?.get(keyName) if( listDirGetValue.isNullOrEmpty() @@ -38,7 +37,8 @@ object FilePrefixGetter { return when(isFileSpecify){ false -> replaceListDirValue else -> execGetByFilePrefix( - editFragment, + fannelInfoMap, + setReplaceVariableMap, replaceListDirValue, keyName, ) @@ -46,11 +46,11 @@ object FilePrefixGetter { } private fun execGetByFilePrefix( - editFragment: EditFragment, + fannelInfoMap: Map, + setReplaceVariableMap: Map?, replaceListDirValue: String, keyName: String, ): String? { - val fannelInfoMap = editFragment.fannelInfoMap // val currentAppDirPath = FannelInfoTool.getCurrentAppDirPath( // fannelInfoMap // ) @@ -61,7 +61,7 @@ object FilePrefixGetter { return ReadText(listDirFilePath).readText().let { val listSettingKeyMapCon = SetReplaceVariabler.execReplaceByReplaceVariables( it, - editFragment.setReplaceVariableMap, + setReplaceVariableMap, // currentAppDirPath, currentFannelName, ).replace( diff --git a/app/src/main/java/com/puutaro/commandclick/util/state/FragmentArgs.kt b/app/src/main/java/com/puutaro/commandclick/util/state/FragmentArgs.kt index df671d288..f328fd224 100755 --- a/app/src/main/java/com/puutaro/commandclick/util/state/FragmentArgs.kt +++ b/app/src/main/java/com/puutaro/commandclick/util/state/FragmentArgs.kt @@ -30,7 +30,7 @@ class EditFragmentArgs( CMD_VAL_EDIT(FragmentTagPrefix.Prefix.CMD_VAL_EDIT_PREFIX.str), // CMD_VAL_EDIT_EXECUTE("cmdValEditExecute"), // CMD_VAL_EDIT("cmdValEdit"), - SETTING_VAL_EDIT(FragmentTagPrefix.Prefix.SETTING_VAL_EDIT_PREFIX.str), +// SETTING_VAL_EDIT(FragmentTagPrefix.Prefix.SETTING_VAL_EDIT_PREFIX.str), } enum class OnShortcutSettingKey( diff --git a/app/src/main/java/com/puutaro/commandclick/util/str/PairListTool.kt b/app/src/main/java/com/puutaro/commandclick/util/str/PairListTool.kt new file mode 100644 index 000000000..1c463c70f --- /dev/null +++ b/app/src/main/java/com/puutaro/commandclick/util/str/PairListTool.kt @@ -0,0 +1,29 @@ +package com.puutaro.commandclick.util.str + + +object PairListTool { + + fun getValue( + pairList: List>?, + key: String + ): String? { + return getPair( + pairList, + key + )?.second?.let { + QuoteTool.trimBothEdgeQuote(it) + } + } + + fun getPair( + pairList: List>?, + key: String + ): Pair? { + if( + pairList.isNullOrEmpty() + ) return null + return pairList.firstOrNull { + it.first == key + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/util/str/QuoteTool.kt b/app/src/main/java/com/puutaro/commandclick/util/str/QuoteTool.kt index 115b992e1..c8cfe4c48 100755 --- a/app/src/main/java/com/puutaro/commandclick/util/str/QuoteTool.kt +++ b/app/src/main/java/com/puutaro/commandclick/util/str/QuoteTool.kt @@ -8,6 +8,7 @@ object QuoteTool { private val cmdClickBackspaceQuote = "cmdClickBackspaceQuote" private val backSlachDoubleQuote = "\\\"" private val repSeparatorString = "CMDCLICK_SEPARATOR" + private val layoutSeparator = '廳' fun trimBothEdgeQuote( targetStr: String?, ): String { @@ -33,6 +34,24 @@ object QuoteTool { } } + fun extractBothQuote( + targetStr: String?, + ): Char { + if( + targetStr.isNullOrEmpty() + ) return '"' + val quoteList = listOf('\'', '"', '`',) + quoteList.forEach { + if ( + isBothChar( + targetStr, + it + ) + ) return it + } + return '"' + } + fun compBothQuote( targetStr: String?, primaryQuote: String = "`" @@ -183,6 +202,20 @@ object QuoteTool { } } + + fun layoutSplitBySurroundedIgnore( + targetCon: String, + ): List { + val layoutSeparatorStr = layoutSeparator.toString() + return surroundLayoutSeparatorReplace( + targetCon, + ).replace(Regex("[${layoutSeparator}]+"), layoutSeparator.toString()).split( + layoutSeparatorStr, + ).filter { + it.isNotEmpty() + } + } + private fun surroundSeparatorReplace( targetString: String, targetSeparator: Char, @@ -221,6 +254,49 @@ object QuoteTool { }.joinToString("") } + private fun surroundLayoutSeparatorReplace( + targetString: String, + ): String { + val targetSeparator = '-' + var quoteType: Char? = null + return targetString.toList().mapIndexed { + index, char -> + + val isHitSurroundQuote = char.equals('`') + || char.equals('\"') + val beforeChar = targetString.getOrNull(index - 1) + if( + quoteType == null + && beforeChar != '\\' + && isHitSurroundQuote + ) { + quoteType = char + return@mapIndexed char + } + if( + quoteType != null + && beforeChar != '\\' + && char == quoteType + ) { + quoteType = null + return@mapIndexed char + } +// if( +// quoteType != null +// && char == targetSeparator +// ){ +// return@mapIndexed char +// } + if( + quoteType == null + && char == targetSeparator + ){ + return@mapIndexed layoutSeparator + } + char + }.joinToString("") + } + private fun backReplace( replacedCon: String, separator: String, diff --git a/app/src/main/java/com/puutaro/commandclick/util/tsv/TsvLineRenamer.kt b/app/src/main/java/com/puutaro/commandclick/util/tsv/TsvLineRenamer.kt index 3afc99a0c..1aab721e4 100755 --- a/app/src/main/java/com/puutaro/commandclick/util/tsv/TsvLineRenamer.kt +++ b/app/src/main/java/com/puutaro/commandclick/util/tsv/TsvLineRenamer.kt @@ -14,8 +14,10 @@ import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.ExecReW import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.ListIndexDuplicate import com.puutaro.commandclick.component.adapter.lib.list_index_adapter.TitleFileNameAndPathConPairForListIndexAdapter import com.puutaro.commandclick.fragment.EditFragment +import com.puutaro.commandclick.proccess.list_index_for_edit.config_settings.ListSettingsForListIndex import com.puutaro.commandclick.util.CcPathTool import com.puutaro.commandclick.util.file.FileSystems +import com.puutaro.commandclick.util.file.MapListFileTool import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay @@ -23,198 +25,210 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import java.io.File -object TsvLineRenamer { - - private var renamePromptDialog: Dialog? = null - - fun rename( - editFragment: EditFragment, - tsvPath: String, - tsvLine: String, - ){ - CoroutineScope(Dispatchers.Main).launch { - withContext(Dispatchers.Main) { - execRename( - editFragment, - tsvPath, - tsvLine, - ) - } - } - } - - private fun execRename( - editFragment: EditFragment, - tsvPath: String, - tsvLine: String, - ){ - editFragment.disableKeyboardFragmentChange = true - val context = editFragment.context - ?: return - - renamePromptDialog = Dialog( - context - ) - renamePromptDialog?.setContentView( - R.layout.prompt_dialog_layout - ) - val promptTitleTextView = - renamePromptDialog?.findViewById( - R.id.prompt_dialog_title - ) - promptTitleTextView?.text = "Rename title" - val promptMessageTextView = - renamePromptDialog?.findViewById( - R.id.prompt_dialog_message - ) - promptMessageTextView?.isVisible = false - val promptEditText = - renamePromptDialog?.findViewById( - R.id.prompt_dialog_input - ) - val titleFileNameAndPathConPair = - TitleFileNameAndPathConPairForListIndexAdapter.get(tsvLine) - ?: return - val fileNameOrTitle = titleFileNameAndPathConPair.first - - promptEditText?.setText( - fileNameOrTitle - ) - val promptCancelButton = - renamePromptDialog?.findViewById( - R.id.prompt_dialog_cancel - ) - promptCancelButton?.setOnClickListener { - dismissProcess(editFragment) - } - val promptOkButtonView = - renamePromptDialog?.findViewById( - R.id.prompt_dialog_ok - ) - promptOkButtonView?.setOnClickListener { - CoroutineScope(Dispatchers.Main).launch { - withContext(Dispatchers.Main) { - ExecRenameProcess.rename( - editFragment, - tsvPath, - tsvLine, - promptEditText, - ) - } - withContext(Dispatchers.Main) { - dismissProcess(editFragment) - } - } - } - renamePromptDialog?.setOnCancelListener { - dismissProcess(editFragment) - } - renamePromptDialog?.window?.setLayout( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.WRAP_CONTENT - ) - renamePromptDialog?.window?.setGravity( - Gravity.BOTTOM - ) - renamePromptDialog?.show() - } - - private object ExecRenameProcess { - fun rename( - editFragment: EditFragment, - tsvPath: String, - tsvLine: String, - promptEditText: AutoCompleteTextView?, - - ) { - val inputEditable = promptEditText?.text - if ( - inputEditable.isNullOrEmpty() - ) { - ToastUtils.showShort("No type item name") - return - } - val titleFileNameAndPathConPair = - TitleFileNameAndPathConPairForListIndexAdapter.get(tsvLine) - ?: return - val fileNameOrTitle = titleFileNameAndPathConPair.first - val compExtend = CcPathTool.subExtend(fileNameOrTitle) - val renamedFileNameOrTitle = UsePath.compExtend( - inputEditable.toString().trim(), - compExtend - ) - if ( - fileNameOrTitle == renamedFileNameOrTitle - ) return - val filePathOrCon = titleFileNameAndPathConPair.second - val filePathOrConObj = File(filePathOrCon) - val isTitleEqualPathOrCon = - fileNameOrTitle == filePathOrConObj.name - val isWithFileRename = - filePathOrConObj.isFile - && isTitleEqualPathOrCon - val renameFilePathOrCon = renameConOrPath( - renamedFileNameOrTitle, - filePathOrCon, - isWithFileRename, - ) - ListIndexDuplicate.isTsvDetect( - tsvPath, - renamedFileNameOrTitle, - renameFilePathOrCon - ).let { - isDetect -> - if( - isDetect - ) return - } - val renameTsvLine = "${renamedFileNameOrTitle}\t${renameFilePathOrCon}" - val srcAndRepLinePairList = listOf( - tsvLine to renameTsvLine, - ) - TsvTool.updateTsvByReplace( - tsvPath, - srcAndRepLinePairList - ) - if (isWithFileRename) { - FileSystems.moveFile( - filePathOrCon, - renameFilePathOrCon - ) - } - ExecReWriteForListIndexAdapter.replaceListElementForTsv( - editFragment, - srcAndRepLinePairList - ) - } - - private fun renameConOrPath( - renamedFileNameOrTitle: String, - filePathOrCon: String, - isWithFileRename: Boolean, - ): String { - val filePathOrConObj = File(filePathOrCon) - return when (isWithFileRename) { - true -> { - val tsvParentDirPath = filePathOrConObj.parent - ?: return String() - File(tsvParentDirPath, renamedFileNameOrTitle).absolutePath - } - else -> filePathOrCon - } - } - } - - private fun dismissProcess( - editFragment: EditFragment - ){ - renamePromptDialog?.dismiss() - renamePromptDialog = null - CoroutineScope(Dispatchers.IO).launch { - withContext(Dispatchers.IO) { - delay(200) - editFragment.disableKeyboardFragmentChange = false - } - } - } -} \ No newline at end of file +//object TsvLineRenamer { +// +// private var renamePromptDialog: Dialog? = null +// +// fun rename( +// editFragment: EditFragment, +// tsvPath: String, +// tsvLine: String, +// ){ +// CoroutineScope(Dispatchers.Main).launch { +// withContext(Dispatchers.Main) { +// execRename( +// editFragment, +// tsvPath, +// tsvLine, +// ) +// } +// } +// } +// +// private fun execRename( +// editFragment: EditFragment, +// tsvPath: String, +// lineMap: String, +// ){ +// editFragment.disableKeyboardFragmentChange = true +// val context = editFragment.context +// ?: return +// +// renamePromptDialog = Dialog( +// context +// ) +// renamePromptDialog?.setContentView( +// R.layout.prompt_dialog_layout +// ) +// val promptTitleTextView = +// renamePromptDialog?.findViewById( +// R.id.prompt_dialog_title +// ) +// promptTitleTextView?.text = "Rename title" +// val promptMessageTextView = +// renamePromptDialog?.findViewById( +// R.id.prompt_dialog_message +// ) +// promptMessageTextView?.isVisible = false +// val promptEditText = +// renamePromptDialog?.findViewById( +// R.id.prompt_dialog_input +// ) +// val titleFileNameAndPathConPair = +// TitleFileNameAndPathConPairForListIndexAdapter.get(lineMap) +// ?: return +// val fileNameOrTitle = titleFileNameAndPathConPair.first +// +// promptEditText?.setText( +// fileNameOrTitle +// ) +// val promptCancelButton = +// renamePromptDialog?.findViewById( +// R.id.prompt_dialog_cancel +// ) +// promptCancelButton?.setOnClickListener { +// dismissProcess(editFragment) +// } +// val promptOkButtonView = +// renamePromptDialog?.findViewById( +// R.id.prompt_dialog_ok +// ) +// promptOkButtonView?.setOnClickListener { +// CoroutineScope(Dispatchers.Main).launch { +// withContext(Dispatchers.Main) { +// ExecRenameProcess.rename( +// editFragment, +// tsvPath, +// lineMap, +// promptEditText, +// ) +// } +// withContext(Dispatchers.Main) { +// dismissProcess(editFragment) +// } +// } +// } +// renamePromptDialog?.setOnCancelListener { +// dismissProcess(editFragment) +// } +// renamePromptDialog?.window?.setLayout( +// ViewGroup.LayoutParams.MATCH_PARENT, +// ViewGroup.LayoutParams.WRAP_CONTENT +// ) +// renamePromptDialog?.window?.setGravity( +// Gravity.BOTTOM +// ) +// renamePromptDialog?.show() +// } +// +// private object ExecRenameProcess { +// fun rename( +// editFragment: EditFragment, +// mapListPath: String, +// lineMap: Map, +// promptEditText: AutoCompleteTextView?, +// +// ) { +// val inputEditable = promptEditText?.text +// if ( +// inputEditable.isNullOrEmpty() +// ) { +// ToastUtils.showShort("No type item name") +// return +// } +//// val titleFileNameAndPathConPair = +//// TitleFileNameAndPathConPairForListIndexAdapter.get(lineMap) +//// ?: return +// val titleKey = ListSettingsForListIndex.MapListPathManager.Key.TITLE.key +// val fileNameOrTitle = lineMap.get( +// titleKey +// ) ?: String() +//// titleFileNameAndPathConPair.first +// val compExtend = CcPathTool.subExtend(fileNameOrTitle) +// val renamedFileNameOrTitle = UsePath.compExtend( +// inputEditable.toString().trim(), +// compExtend +// ) +// if ( +// fileNameOrTitle == renamedFileNameOrTitle +// ) return +// val srcConKey = ListSettingsForListIndex.MapListPathManager.Key.SRC_CON.key +// val filePathOrCon = lineMap.get( +// srcConKey +// ) ?: String() +// val filePathOrConObj = File(filePathOrCon) +// val isTitleEqualPathOrCon = +// fileNameOrTitle == filePathOrConObj.name +// val isWithFileRename = +// filePathOrConObj.isFile +// && isTitleEqualPathOrCon +// val renameFilePathOrCon = renameConOrPath( +// renamedFileNameOrTitle, +// filePathOrCon, +// isWithFileRename, +// ) +// ListIndexDuplicate.isTsvDetect( +// mapListPath, +// renamedFileNameOrTitle, +// renameFilePathOrCon +// ).let { +// isDetect -> +// if( +// isDetect +// ) return +// } +// val viewLayoutPathKey = ListSettingsForListIndex.MapListPathManager.Key.VIEW_LAYOUT_PATH.key +// val renameLineMap = mapOf( +// titleKey to renamedFileNameOrTitle, +// srcConKey to renameFilePathOrCon, +// viewLayoutPathKey to (lineMap.get(viewLayoutPathKey) ?: String()) +// ) +// val srcAndRepLinePairMapList = listOf( +// lineMap to renameLineMap, +// ) +// MapListFileTool.updateMapListFileByReplace( +// mapListPath, +// srcAndRepLinePairMapList +// ) +// if (isWithFileRename) { +// FileSystems.moveFile( +// filePathOrCon, +// renameFilePathOrCon +// ) +// } +// ExecReWriteForListIndexAdapter.replaceListElementForTsv( +// editFragment, +// srcAndRepLinePairMapList +// ) +// } +// +// private fun renameConOrPath( +// renamedFileNameOrTitle: String, +// filePathOrCon: String, +// isWithFileRename: Boolean, +// ): String { +// val filePathOrConObj = File(filePathOrCon) +// return when (isWithFileRename) { +// true -> { +// val tsvParentDirPath = filePathOrConObj.parent +// ?: return String() +// File(tsvParentDirPath, renamedFileNameOrTitle).absolutePath +// } +// else -> filePathOrCon +// } +// } +// } +// +// private fun dismissProcess( +// editFragment: EditFragment +// ){ +// renamePromptDialog?.dismiss() +// renamePromptDialog = null +// CoroutineScope(Dispatchers.IO).launch { +// withContext(Dispatchers.IO) { +// delay(200) +// editFragment.disableKeyboardFragmentChange = false +// } +// } +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/puutaro/commandclick/view_model/activity/CommandIndexViewModel.kt b/app/src/main/java/com/puutaro/commandclick/view_model/activity/CommandIndexViewModel.kt index f9b421a47..8526c64f9 100755 --- a/app/src/main/java/com/puutaro/commandclick/view_model/activity/CommandIndexViewModel.kt +++ b/app/src/main/java/com/puutaro/commandclick/view_model/activity/CommandIndexViewModel.kt @@ -4,5 +4,5 @@ import androidx.lifecycle.ViewModel class CommandIndexViewModel: ViewModel() { - var onFocusSearchText = false + // var onFocusSearchText = false } \ No newline at end of file diff --git a/app/src/main/res/drawable/ao_space.jpg b/app/src/main/res/drawable/ao_space.jpg new file mode 100644 index 000000000..7f7e5489b Binary files /dev/null and b/app/src/main/res/drawable/ao_space.jpg differ diff --git a/app/src/main/res/drawable/blue_fire.jpg b/app/src/main/res/drawable/blue_fire.jpg new file mode 100644 index 000000000..0bed03215 Binary files /dev/null and b/app/src/main/res/drawable/blue_fire.jpg differ diff --git a/app/src/main/res/drawable/brushi_allow22.png b/app/src/main/res/drawable/brushi_allow22.png new file mode 100644 index 000000000..e36658176 Binary files /dev/null and b/app/src/main/res/drawable/brushi_allow22.png differ diff --git a/app/src/main/res/drawable/brushi_allow3.png b/app/src/main/res/drawable/brushi_allow3.png new file mode 100644 index 000000000..8f4dc35cb Binary files /dev/null and b/app/src/main/res/drawable/brushi_allow3.png differ diff --git a/app/src/main/res/drawable/brushi_allow_dot.png b/app/src/main/res/drawable/brushi_allow_dot.png new file mode 100644 index 000000000..b69926300 Binary files /dev/null and b/app/src/main/res/drawable/brushi_allow_dot.png differ diff --git a/app/src/main/res/drawable/cc.xml b/app/src/main/res/drawable/cc.xml new file mode 100644 index 000000000..68cc98462 --- /dev/null +++ b/app/src/main/res/drawable/cc.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/darkgreen.png b/app/src/main/res/drawable/darkgreen.png new file mode 100644 index 000000000..79e597469 Binary files /dev/null and b/app/src/main/res/drawable/darkgreen.png differ diff --git a/app/src/main/res/drawable/fannel_airphane.xml b/app/src/main/res/drawable/fannel_airphane.xml index f2c1fd781..42268081f 100755 --- a/app/src/main/res/drawable/fannel_airphane.xml +++ b/app/src/main/res/drawable/fannel_airphane.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_airphane_defo.xml b/app/src/main/res/drawable/fannel_airphane_defo.xml index b185c75da..bf882a2ce 100755 --- a/app/src/main/res/drawable/fannel_airphane_defo.xml +++ b/app/src/main/res/drawable/fannel_airphane_defo.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_balloon.xml b/app/src/main/res/drawable/fannel_balloon.xml index b96cc6d5a..ab016d5b0 100755 --- a/app/src/main/res/drawable/fannel_balloon.xml +++ b/app/src/main/res/drawable/fannel_balloon.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_balloon2.xml b/app/src/main/res/drawable/fannel_balloon2.xml new file mode 100644 index 000000000..ab016d5b0 --- /dev/null +++ b/app/src/main/res/drawable/fannel_balloon2.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/fannel_bird.xml b/app/src/main/res/drawable/fannel_bird.xml old mode 100755 new mode 100644 index d4a8ed561..c94a97c8c --- a/app/src/main/res/drawable/fannel_bird.xml +++ b/app/src/main/res/drawable/fannel_bird.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_brain.xml b/app/src/main/res/drawable/fannel_brain.xml new file mode 100644 index 000000000..503551eb4 --- /dev/null +++ b/app/src/main/res/drawable/fannel_brain.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/fannel_cat_face.xml b/app/src/main/res/drawable/fannel_cat_face.xml old mode 100755 new mode 100644 index fa048dab8..f261d8924 --- a/app/src/main/res/drawable/fannel_cat_face.xml +++ b/app/src/main/res/drawable/fannel_cat_face.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_checker.xml b/app/src/main/res/drawable/fannel_checker.xml index 0959abbe8..4417f9a70 100755 --- a/app/src/main/res/drawable/fannel_checker.xml +++ b/app/src/main/res/drawable/fannel_checker.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_corsair.xml b/app/src/main/res/drawable/fannel_corsair.xml deleted file mode 100755 index 642c6ad3c..000000000 --- a/app/src/main/res/drawable/fannel_corsair.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/fannel_cosair.xml b/app/src/main/res/drawable/fannel_cosair.xml new file mode 100644 index 000000000..d3513211f --- /dev/null +++ b/app/src/main/res/drawable/fannel_cosair.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/fannel_crocodile.xml b/app/src/main/res/drawable/fannel_crocodile.xml index e6573ee13..b2de04325 100755 --- a/app/src/main/res/drawable/fannel_crocodile.xml +++ b/app/src/main/res/drawable/fannel_crocodile.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_crown.xml b/app/src/main/res/drawable/fannel_crown.xml index 4d4a391c8..59ae544ec 100755 --- a/app/src/main/res/drawable/fannel_crown.xml +++ b/app/src/main/res/drawable/fannel_crown.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_dog_face.xml b/app/src/main/res/drawable/fannel_dog_face.xml index 6696aebf7..e14087ea1 100755 --- a/app/src/main/res/drawable/fannel_dog_face.xml +++ b/app/src/main/res/drawable/fannel_dog_face.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_dog_footprint.xml b/app/src/main/res/drawable/fannel_dog_footprint.xml index 95b35e9c2..c2c43716a 100755 --- a/app/src/main/res/drawable/fannel_dog_footprint.xml +++ b/app/src/main/res/drawable/fannel_dog_footprint.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_doll_mark.xml b/app/src/main/res/drawable/fannel_doll_mark.xml old mode 100755 new mode 100644 index 55422ec02..b7adbe33a --- a/app/src/main/res/drawable/fannel_doll_mark.xml +++ b/app/src/main/res/drawable/fannel_doll_mark.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_dolphin.xml b/app/src/main/res/drawable/fannel_dolphin.xml index ae7c2f898..ea6e46d3e 100755 --- a/app/src/main/res/drawable/fannel_dolphin.xml +++ b/app/src/main/res/drawable/fannel_dolphin.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_dragon.xml b/app/src/main/res/drawable/fannel_dragon.xml index ce9424428..c61f387f3 100755 --- a/app/src/main/res/drawable/fannel_dragon.xml +++ b/app/src/main/res/drawable/fannel_dragon.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_eagle.xml b/app/src/main/res/drawable/fannel_eagle.xml index 1bf4b3b51..77d37b019 100755 --- a/app/src/main/res/drawable/fannel_eagle.xml +++ b/app/src/main/res/drawable/fannel_eagle.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_elephant.xml b/app/src/main/res/drawable/fannel_elephant.xml index e599b9b6d..7e0c5a57e 100755 --- a/app/src/main/res/drawable/fannel_elephant.xml +++ b/app/src/main/res/drawable/fannel_elephant.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_elephant_pahoo2.xml b/app/src/main/res/drawable/fannel_elephant_pahoo2.xml new file mode 100644 index 000000000..734d1b024 --- /dev/null +++ b/app/src/main/res/drawable/fannel_elephant_pahoo2.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/fannel_f1.xml b/app/src/main/res/drawable/fannel_f1.xml index c8f07ffca..2b554b5d3 100755 --- a/app/src/main/res/drawable/fannel_f1.xml +++ b/app/src/main/res/drawable/fannel_f1.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_f1_dash.xml b/app/src/main/res/drawable/fannel_f1_dash.xml index 74d355c2e..52164de69 100755 --- a/app/src/main/res/drawable/fannel_f1_dash.xml +++ b/app/src/main/res/drawable/fannel_f1_dash.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_fuji.xml b/app/src/main/res/drawable/fannel_fuji.xml index b32e5de48..a076c97c6 100755 --- a/app/src/main/res/drawable/fannel_fuji.xml +++ b/app/src/main/res/drawable/fannel_fuji.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_hakushoku_suisei.xml b/app/src/main/res/drawable/fannel_hakushoku_suisei.xml index 85daedae8..224cb1c20 100755 --- a/app/src/main/res/drawable/fannel_hakushoku_suisei.xml +++ b/app/src/main/res/drawable/fannel_hakushoku_suisei.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_hime.xml b/app/src/main/res/drawable/fannel_hime.xml deleted file mode 100755 index 705b66872..000000000 --- a/app/src/main/res/drawable/fannel_hime.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/fannel_hime1.xml b/app/src/main/res/drawable/fannel_hime1.xml new file mode 100644 index 000000000..ffa073f1c --- /dev/null +++ b/app/src/main/res/drawable/fannel_hime1.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/fannel_hime2.xml b/app/src/main/res/drawable/fannel_hime2.xml index 094e43f43..82d4d6a07 100755 --- a/app/src/main/res/drawable/fannel_hime2.xml +++ b/app/src/main/res/drawable/fannel_hime2.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_jinja.xml b/app/src/main/res/drawable/fannel_jinja.xml deleted file mode 100755 index ef889b58d..000000000 --- a/app/src/main/res/drawable/fannel_jinja.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/fannel_jinja1.xml b/app/src/main/res/drawable/fannel_jinja1.xml new file mode 100755 index 000000000..9e9aef415 --- /dev/null +++ b/app/src/main/res/drawable/fannel_jinja1.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/fannel_jinja2.xml b/app/src/main/res/drawable/fannel_jinja2.xml index 1fefdecad..7060ff5a1 100755 --- a/app/src/main/res/drawable/fannel_jinja2.xml +++ b/app/src/main/res/drawable/fannel_jinja2.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_jk.xml b/app/src/main/res/drawable/fannel_jk.xml index 899cacaf8..e49a14cd5 100755 --- a/app/src/main/res/drawable/fannel_jk.xml +++ b/app/src/main/res/drawable/fannel_jk.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_kabuto2.xml b/app/src/main/res/drawable/fannel_kabuto2.xml index cfaae8443..c87b3119d 100755 --- a/app/src/main/res/drawable/fannel_kabuto2.xml +++ b/app/src/main/res/drawable/fannel_kabuto2.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_kabuto3.xml b/app/src/main/res/drawable/fannel_kabuto3.xml index 4535c6b45..ad3a9ad2f 100755 --- a/app/src/main/res/drawable/fannel_kabuto3.xml +++ b/app/src/main/res/drawable/fannel_kabuto3.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_kabuto4.xml b/app/src/main/res/drawable/fannel_kabuto4.xml index 0dfb737f1..f41f9f8e1 100755 --- a/app/src/main/res/drawable/fannel_kabuto4.xml +++ b/app/src/main/res/drawable/fannel_kabuto4.xml @@ -1,11 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_kitune.xml b/app/src/main/res/drawable/fannel_kitune.xml index e56d24783..83fb7ab47 100755 --- a/app/src/main/res/drawable/fannel_kitune.xml +++ b/app/src/main/res/drawable/fannel_kitune.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_kujira.xml b/app/src/main/res/drawable/fannel_kujira.xml index 6d7cc4df9..6b42c8747 100755 --- a/app/src/main/res/drawable/fannel_kujira.xml +++ b/app/src/main/res/drawable/fannel_kujira.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_labrador.xml b/app/src/main/res/drawable/fannel_labrador.xml index bd7ecbdcd..71164a79e 100755 --- a/app/src/main/res/drawable/fannel_labrador.xml +++ b/app/src/main/res/drawable/fannel_labrador.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_lion_face.xml b/app/src/main/res/drawable/fannel_lion_face.xml index 588df465b..91c679ec1 100755 --- a/app/src/main/res/drawable/fannel_lion_face.xml +++ b/app/src/main/res/drawable/fannel_lion_face.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_magatama.xml b/app/src/main/res/drawable/fannel_magatama.xml index 53b9c3c19..658f84053 100755 --- a/app/src/main/res/drawable/fannel_magatama.xml +++ b/app/src/main/res/drawable/fannel_magatama.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_moon.xml b/app/src/main/res/drawable/fannel_moon.xml index 3bebe6a1a..c614cdc6a 100755 --- a/app/src/main/res/drawable/fannel_moon.xml +++ b/app/src/main/res/drawable/fannel_moon.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_octopass.xml b/app/src/main/res/drawable/fannel_octopass.xml old mode 100755 new mode 100644 index 803bd6c77..e5c0dca43 --- a/app/src/main/res/drawable/fannel_octopass.xml +++ b/app/src/main/res/drawable/fannel_octopass.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_octopass2.xml b/app/src/main/res/drawable/fannel_octopass2.xml index bddd6d3ef..e023313e5 100755 --- a/app/src/main/res/drawable/fannel_octopass2.xml +++ b/app/src/main/res/drawable/fannel_octopass2.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_omusubi.xml b/app/src/main/res/drawable/fannel_omusubi.xml index 6de7d1496..5bfe03c4a 100755 --- a/app/src/main/res/drawable/fannel_omusubi.xml +++ b/app/src/main/res/drawable/fannel_omusubi.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_other_moon.xml b/app/src/main/res/drawable/fannel_other_moon.xml index c38d4fd3c..08abf099b 100755 --- a/app/src/main/res/drawable/fannel_other_moon.xml +++ b/app/src/main/res/drawable/fannel_other_moon.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_pc.xml b/app/src/main/res/drawable/fannel_pc.xml new file mode 100644 index 000000000..5668ad368 --- /dev/null +++ b/app/src/main/res/drawable/fannel_pc.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/fannel_phantom.xml b/app/src/main/res/drawable/fannel_phantom.xml new file mode 100644 index 000000000..0351c60d2 --- /dev/null +++ b/app/src/main/res/drawable/fannel_phantom.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/fannel_phenix.xml b/app/src/main/res/drawable/fannel_phenix.xml deleted file mode 100755 index bb68c9bd2..000000000 --- a/app/src/main/res/drawable/fannel_phenix.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/fannel_phenix1.xml b/app/src/main/res/drawable/fannel_phenix1.xml new file mode 100755 index 000000000..92bddde07 --- /dev/null +++ b/app/src/main/res/drawable/fannel_phenix1.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/fannel_phenix2.xml b/app/src/main/res/drawable/fannel_phenix2.xml index f94cb8bb0..74499a8f1 100755 --- a/app/src/main/res/drawable/fannel_phenix2.xml +++ b/app/src/main/res/drawable/fannel_phenix2.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_robot.xml b/app/src/main/res/drawable/fannel_robot.xml new file mode 100644 index 000000000..b4bc962c9 --- /dev/null +++ b/app/src/main/res/drawable/fannel_robot.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/fannel_sense.xml b/app/src/main/res/drawable/fannel_sense.xml index cf1a10f7f..370653ad9 100755 --- a/app/src/main/res/drawable/fannel_sense.xml +++ b/app/src/main/res/drawable/fannel_sense.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_shachi.xml b/app/src/main/res/drawable/fannel_shachi.xml index 983f84ca6..4280a2e48 100755 --- a/app/src/main/res/drawable/fannel_shachi.xml +++ b/app/src/main/res/drawable/fannel_shachi.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_shark.xml b/app/src/main/res/drawable/fannel_shark.xml index 38b442b5b..ce6c7d41c 100755 --- a/app/src/main/res/drawable/fannel_shark.xml +++ b/app/src/main/res/drawable/fannel_shark.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_shatihoko.xml b/app/src/main/res/drawable/fannel_shatihoko.xml index 9a48351d7..947710a31 100755 --- a/app/src/main/res/drawable/fannel_shatihoko.xml +++ b/app/src/main/res/drawable/fannel_shatihoko.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_shepard.xml b/app/src/main/res/drawable/fannel_shepard.xml index b0fb9ae32..0059aa907 100755 --- a/app/src/main/res/drawable/fannel_shepard.xml +++ b/app/src/main/res/drawable/fannel_shepard.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_siro.xml b/app/src/main/res/drawable/fannel_siro.xml index 4a2bc507c..fa1b17fdb 100755 --- a/app/src/main/res/drawable/fannel_siro.xml +++ b/app/src/main/res/drawable/fannel_siro.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_skull.xml b/app/src/main/res/drawable/fannel_skull.xml new file mode 100644 index 000000000..989f5450f --- /dev/null +++ b/app/src/main/res/drawable/fannel_skull.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/fannel_skull_horizon.xml b/app/src/main/res/drawable/fannel_skull_horizon.xml new file mode 100644 index 000000000..df8cfd91b --- /dev/null +++ b/app/src/main/res/drawable/fannel_skull_horizon.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/fannel_snake.xml b/app/src/main/res/drawable/fannel_snake.xml index d1f921e80..1c88f100c 100755 --- a/app/src/main/res/drawable/fannel_snake.xml +++ b/app/src/main/res/drawable/fannel_snake.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_snake_body.xml b/app/src/main/res/drawable/fannel_snake_body.xml index 5bc5c3eef..3df7c6b3d 100755 --- a/app/src/main/res/drawable/fannel_snake_body.xml +++ b/app/src/main/res/drawable/fannel_snake_body.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_soba.xml b/app/src/main/res/drawable/fannel_soba.xml index 12b8ac815..7d675b5c2 100755 --- a/app/src/main/res/drawable/fannel_soba.xml +++ b/app/src/main/res/drawable/fannel_soba.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_tenpura_soba.xml b/app/src/main/res/drawable/fannel_tenpura_soba.xml new file mode 100644 index 000000000..61be948d3 --- /dev/null +++ b/app/src/main/res/drawable/fannel_tenpura_soba.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/fannel_tiger.xml b/app/src/main/res/drawable/fannel_tiger.xml index 766a92fa7..ebd659bc3 100755 --- a/app/src/main/res/drawable/fannel_tiger.xml +++ b/app/src/main/res/drawable/fannel_tiger.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_trex.xml b/app/src/main/res/drawable/fannel_trex.xml new file mode 100644 index 000000000..4764b4905 --- /dev/null +++ b/app/src/main/res/drawable/fannel_trex.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/fannel_trophy.xml b/app/src/main/res/drawable/fannel_trophy.xml index a74089470..52dec2db3 100755 --- a/app/src/main/res/drawable/fannel_trophy.xml +++ b/app/src/main/res/drawable/fannel_trophy.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/fannel_wind.xml b/app/src/main/res/drawable/fannel_wind.xml index 9c0c829f0..5e72b7f1b 100755 --- a/app/src/main/res/drawable/fannel_wind.xml +++ b/app/src/main/res/drawable/fannel_wind.xml @@ -1,6 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/focus_dark_green.png b/app/src/main/res/drawable/focus_dark_green.png new file mode 100644 index 000000000..1d0304464 Binary files /dev/null and b/app/src/main/res/drawable/focus_dark_green.png differ diff --git a/app/src/main/res/drawable/ok_wheel.xml b/app/src/main/res/drawable/ok_wheel.xml new file mode 100644 index 000000000..3dca8b272 --- /dev/null +++ b/app/src/main/res/drawable/ok_wheel.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/ok_wheel2.xml b/app/src/main/res/drawable/ok_wheel2.xml new file mode 100644 index 000000000..88f19a74c --- /dev/null +++ b/app/src/main/res/drawable/ok_wheel2.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/pour1.xml b/app/src/main/res/drawable/pour1.xml new file mode 100644 index 000000000..b5ecacc78 --- /dev/null +++ b/app/src/main/res/drawable/pour1.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/pour2.xml b/app/src/main/res/drawable/pour2.xml new file mode 100644 index 000000000..e43e10ff1 --- /dev/null +++ b/app/src/main/res/drawable/pour2.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/pour3.xml b/app/src/main/res/drawable/pour3.xml new file mode 100644 index 000000000..f51e9d770 --- /dev/null +++ b/app/src/main/res/drawable/pour3.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/round_corner_drawable.xml b/app/src/main/res/drawable/round_corner_drawable.xml new file mode 100644 index 000000000..accd864a0 --- /dev/null +++ b/app/src/main/res/drawable/round_corner_drawable.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/white_floor.jpg b/app/src/main/res/drawable/white_floor.jpg new file mode 100644 index 000000000..beee9ef9c Binary files /dev/null and b/app/src/main/res/drawable/white_floor.jpg differ diff --git a/app/src/main/res/drawable/white_grad.png b/app/src/main/res/drawable/white_grad.png new file mode 100644 index 000000000..fbc0a0d05 Binary files /dev/null and b/app/src/main/res/drawable/white_grad.png differ diff --git a/app/src/main/res/layout/command_index_fragment.xml b/app/src/main/res/layout/command_index_fragment.xml index 60eb8642f..17eb112dd 100755 --- a/app/src/main/res/layout/command_index_fragment.xml +++ b/app/src/main/res/layout/command_index_fragment.xml @@ -61,6 +61,7 @@ android:layout_gravity="center" android:gravity="top" android:text="Search" + android:letterSpacing="0.1" /> diff --git a/app/src/main/res/layout/confirm_dialog_v2_layout.xml b/app/src/main/res/layout/confirm_dialog_v2_layout.xml new file mode 100644 index 000000000..0928b15cd --- /dev/null +++ b/app/src/main/res/layout/confirm_dialog_v2_layout.xml @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_webview_layout.xml b/app/src/main/res/layout/dialog_webview_layout.xml index 5ef228b6d..d1daf1ea6 100755 --- a/app/src/main/res/layout/dialog_webview_layout.xml +++ b/app/src/main/res/layout/dialog_webview_layout.xml @@ -2,10 +2,10 @@ + android:background="@drawable/round_corner_drawable"> - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/edit_fragment.xml b/app/src/main/res/layout/edit_fragment.xml index f9bed41b9..195dfe6fd 100755 --- a/app/src/main/res/layout/edit_fragment.xml +++ b/app/src/main/res/layout/edit_fragment.xml @@ -8,178 +8,153 @@ - - - - + + + - - - - - - - - - - - - - - + - - - - + + + - - - - - - + - - + android:padding="0dp" + android:textSize="16sp" + android:textStyle="bold" + android:ellipsize="end" + android:maxLines="1" + android:layout_gravity="center" + android:gravity="center" + android:text="@string/fannel_center_caption" + /> + - + \ No newline at end of file diff --git a/app/src/main/res/layout/edit_list_dialog_layout.xml b/app/src/main/res/layout/edit_list_dialog_layout.xml new file mode 100644 index 000000000..69fafff7e --- /dev/null +++ b/app/src/main/res/layout/edit_list_dialog_layout.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/extra_popup_for_cmdindex.xml b/app/src/main/res/layout/extra_popup_for_cmdindex.xml index b1b3a8648..dff8c3abf 100644 --- a/app/src/main/res/layout/extra_popup_for_cmdindex.xml +++ b/app/src/main/res/layout/extra_popup_for_cmdindex.xml @@ -1,13 +1,4 @@ - - - - - - - - - + - - - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/fannel_history_recycler_view.xml b/app/src/main/res/layout/fannel_history_recycler_view_layout.xml similarity index 58% rename from app/src/main/res/layout/fannel_history_recycler_view.xml rename to app/src/main/res/layout/fannel_history_recycler_view_layout.xml index a06e6bb25..bf7be0acb 100755 --- a/app/src/main/res/layout/fannel_history_recycler_view.xml +++ b/app/src/main/res/layout/fannel_history_recycler_view_layout.xml @@ -1,5 +1,5 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/grid_dialog_v2_layout.xml b/app/src/main/res/layout/grid_dialog_v2_layout.xml new file mode 100644 index 000000000..0cf6f9736 --- /dev/null +++ b/app/src/main/res/layout/grid_dialog_v2_layout.xml @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/grid_list_v2_adapter_layout.xml b/app/src/main/res/layout/grid_list_v2_adapter_layout.xml new file mode 100644 index 000000000..fe83cb30f --- /dev/null +++ b/app/src/main/res/layout/grid_list_v2_adapter_layout.xml @@ -0,0 +1,34 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/icon_caption_layout.xml b/app/src/main/res/layout/icon_caption_layout.xml index 55d0b187b..1d1467045 100644 --- a/app/src/main/res/layout/icon_caption_layout.xml +++ b/app/src/main/res/layout/icon_caption_layout.xml @@ -2,7 +2,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/prompt_list_adapter_layout.xml b/app/src/main/res/layout/prompt_list_adapter_layout.xml new file mode 100644 index 000000000..827dd1dbe --- /dev/null +++ b/app/src/main/res/layout/prompt_list_adapter_layout.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/prompt_list_bk_another_component.xml b/app/src/main/res/layout/prompt_list_bk_another_component.xml new file mode 100644 index 000000000..6b956e5c1 --- /dev/null +++ b/app/src/main/res/layout/prompt_list_bk_another_component.xml @@ -0,0 +1,38 @@ + + + + + + diff --git a/app/src/main/res/layout/prompt_list_dialog_layout.xml b/app/src/main/res/layout/prompt_list_dialog_layout.xml new file mode 100644 index 000000000..1a5eb192c --- /dev/null +++ b/app/src/main/res/layout/prompt_list_dialog_layout.xml @@ -0,0 +1,234 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/url_history_list_view_layout.xml b/app/src/main/res/layout/url_history_list_view_layout.xml index 6bc908a40..ca2048ca6 100755 --- a/app/src/main/res/layout/url_history_list_view_layout.xml +++ b/app/src/main/res/layout/url_history_list_view_layout.xml @@ -1,26 +1,34 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/web_bk_image_caption_layout.xml b/app/src/main/res/layout/web_bk_image_caption_layout.xml new file mode 100644 index 000000000..b5389cf68 --- /dev/null +++ b/app/src/main/res/layout/web_bk_image_caption_layout.xml @@ -0,0 +1,39 @@ + + + + + + + diff --git a/app/src/main/res/values/FullScreenRoundCornerDialogTheme.xml b/app/src/main/res/values/FullScreenRoundCornerDialogTheme.xml new file mode 100644 index 000000000..6e0d84201 --- /dev/null +++ b/app/src/main/res/values/FullScreenRoundCornerDialogTheme.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index bb80c5926..f8d151998 100755 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -15,6 +15,7 @@ #043d02 #1e2e1c> #1b8ef2 + #0526fa #A8F2E1 #3A3A3A #dcf4f5 @@ -32,5 +33,6 @@ #717829 #d2fad9 #f7edf1 + #00000000 \ No newline at end of file diff --git a/app/src/main/res/values/common_str.xml b/app/src/main/res/values/common_str.xml new file mode 100644 index 000000000..31c9933b0 --- /dev/null +++ b/app/src/main/res/values/common_str.xml @@ -0,0 +1,4 @@ + + + fnlCntr + \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index e5a5d05ff..85bed79d9 100755 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -9,4 +9,13 @@ 40dp 100dp 95dp + 20dp + 5dp + 50dp + 40dp + 100dp + 60dp + 10dp + 5dp + 2dp \ No newline at end of file diff --git a/app/src/main/res/values/edit_fragment_str.xml b/app/src/main/res/values/edit_fragment_str.xml index f3836dcc6..9b33a97cb 100755 --- a/app/src/main/res/values/edit_fragment_str.xml +++ b/app/src/main/res/values/edit_fragment_str.xml @@ -1,4 +1,5 @@ edit bellow column + editToolbar \ No newline at end of file diff --git a/app/src/main/res/values/extra_menu_dialog_style.xml b/app/src/main/res/values/extra_menu_dialog_style.xml index 15946b194..669b8b9b8 100644 --- a/app/src/main/res/values/extra_menu_dialog_style.xml +++ b/app/src/main/res/values/extra_menu_dialog_style.xml @@ -1,6 +1,11 @@ - + diff --git a/app/src/main/res/values/prompt_dialog_style.xml b/app/src/main/res/values/full_screen_dialog.xml similarity index 100% rename from app/src/main/res/values/prompt_dialog_style.xml rename to app/src/main/res/values/full_screen_dialog.xml diff --git a/app/src/main/res/values/full_screen_dialog_no_dimm.xml b/app/src/main/res/values/full_screen_dialog_no_dimm.xml new file mode 100644 index 000000000..d4a1baaa0 --- /dev/null +++ b/app/src/main/res/values/full_screen_dialog_no_dimm.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values/full_screen_dialog_with_light_dimm.xml b/app/src/main/res/values/full_screen_dialog_with_light_dimm.xml new file mode 100644 index 000000000..aa684ad23 --- /dev/null +++ b/app/src/main/res/values/full_screen_dialog_with_light_dimm.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values/round_corner_for_prompt_list_bk_image.xml b/app/src/main/res/values/round_corner_for_prompt_list_bk_image.xml new file mode 100644 index 000000000..896b1dec3 --- /dev/null +++ b/app/src/main/res/values/round_corner_for_prompt_list_bk_image.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 11d9f2ba7..5f19e2f8a 100755 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,13 +1,18 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { - id("com.android.application") version "7.4.2" apply false - id("com.android.library") version "7.4.2" apply false - id("org.jetbrains.kotlin.android") version "1.8.10" apply false + id("com.android.application") version "8.7.1" apply false + id("com.android.library") version "8.7.1" apply false + id("org.jetbrains.kotlin.android") version "1.9.25" apply false // id("com.chaquo.python") version "15.0.0" apply false } subprojects { tasks.withType { - kotlinOptions.jvmTarget = "11" +// compilerOptions.jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_11) +// kotlinOptions.jvmTarget = "17" + kotlinOptions { + jvmTarget = JavaVersion.VERSION_17.toString() + } + } } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 1a982b5de..eb14ec063 100755 --- a/gradle.properties +++ b/gradle.properties @@ -21,4 +21,5 @@ kotlin.code.style=official # Enables namespacing of each library's R class so that its R class includes only the # resources declared in the library itself and none from the library's dependencies, # thereby reducing the size of the R class for that library -android.nonTransitiveRClass=true \ No newline at end of file +android.nonTransitiveRClass=true +org.gradle.warning.mode=all \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 159d450a8..ca4c3f59e 100755 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sun Jul 02 10:35:16 JST 2023 +#Tue Oct 15 12:37:30 JST 2024 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/md/developer/collection/icons.md b/md/developer/collection/icons.md index 55ea0da64..e5d92f558 100755 --- a/md/developer/collection/icons.md +++ b/md/developer/collection/icons.md @@ -68,3 +68,4 @@ | `| `| `| `| `| `| `| `| `| GOOGLE2(`google2` | |` | |` | GOOGLE2(`google2` |` | ` |` | ` |` | ` |` | ` |` | ` |` | ` |` | ` | | `| `| `| `| `| `| `| `| `| `| GOOGLE2(`google2` | |` | |` | GOOGLE2(`google2` |` | ` |` | ` |` | ` |` | ` |` | ` |` | ` |` | ` |` | ` | | `| `| `| `| `| `| `| `| `| `| `| GOOGLE2(`google2` | |` | |` | GOOGLE2(`google2` |` | ` |` | ` |` | ` |` | ` |` | ` |` | ` |` | ` |` | ` |` | ` | +| `| `| `| `| `| `| `| `| `| `| `| `| GOOGLE2(`google2` | |` | |` | GOOGLE2(`google2` |` | ` |` | ` |` | ` |` | ` |` | ` |` | ` |` | ` |` | ` |` | ` |` | ` | diff --git a/settings.gradle.kts b/settings.gradle.kts index 185130e52..2fea27391 100755 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -13,6 +13,7 @@ dependencyResolutionManagement { mavenCentral() maven(url = "https://jitpack.io") maven(url = "https://oss.sonatype.org/content/repositories/snapshots") + maven (url = "https://dl.bintray.com/bfears/maven") // maven(url = "https://chaquo.com/maven") } } diff --git a/statistics/download_count.csv b/statistics/download_count.csv index ebf63c328..1a1c7dfba 100644 --- a/statistics/download_count.csv +++ b/statistics/download_count.csv @@ -1,3 +1,4 @@ version,date,download_count +v1.4.2,2024-09-29,21 v1.4.2,2024-09-29,20 v1.4.1,2024-09-22,30