From c249e79e9a5be792e9379e43581cdc76e31d734e Mon Sep 17 00:00:00 2001 From: lunaticbum <> Date: Fri, 2 Aug 2024 16:30:05 +0900 Subject: [PATCH] ... --- app/build.gradle | 3 + app/src/main/AndroidManifest.xml | 3 +- .../com/mime/dualscreenview/activity/Intro.kt | 95 ++++--- .../mime/dualscreenview/activity/Settings.kt | 251 +++++++++--------- .../mime/dualscreenview/view/ScopeEditor.kt | 124 ++++----- .../dualscreenview/view/SideButtonTextView.kt | 148 ++++++----- .../mime/dualscreenview/view/StepsEditor.kt | 67 +++-- app/src/main/res/drawable/angle_left.xml | 9 + app/src/main/res/drawable/angle_right.xml | 9 + app/src/main/res/drawable/bookmark.png | Bin 9957 -> 0 bytes app/src/main/res/drawable/bookmark.xml | 9 + app/src/main/res/drawable/home.png | Bin 8656 -> 0 bytes app/src/main/res/drawable/home.xml | 15 ++ app/src/main/res/drawable/saved.xml | 15 ++ app/src/main/res/drawable/settings.xml | 9 + app/src/main/res/layout/intro.xml | 89 ++++--- app/src/main/res/layout/layout_textviewer.xml | 25 +- app/src/main/res/layout/settings.xml | 116 ++++---- app/src/main/res/values/dimens.xml | 2 +- app/src/main/res/values/strings.xml | 100 +++---- 20 files changed, 598 insertions(+), 491 deletions(-) create mode 100644 app/src/main/res/drawable/angle_left.xml create mode 100644 app/src/main/res/drawable/angle_right.xml delete mode 100644 app/src/main/res/drawable/bookmark.png create mode 100644 app/src/main/res/drawable/bookmark.xml delete mode 100644 app/src/main/res/drawable/home.png create mode 100644 app/src/main/res/drawable/home.xml create mode 100644 app/src/main/res/drawable/saved.xml create mode 100644 app/src/main/res/drawable/settings.xml diff --git a/app/build.gradle b/app/build.gradle index 045bacd..91d00be 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -36,6 +36,9 @@ android { kotlinOptions { jvmTarget = '1.8' } + buildFeatures { + dataBinding true + } } dependencies { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 403880d..83a28de 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -18,8 +18,7 @@ diff --git a/app/src/main/java/com/mime/dualscreenview/activity/Intro.kt b/app/src/main/java/com/mime/dualscreenview/activity/Intro.kt index e3b1e9d..423dba9 100644 --- a/app/src/main/java/com/mime/dualscreenview/activity/Intro.kt +++ b/app/src/main/java/com/mime/dualscreenview/activity/Intro.kt @@ -1,6 +1,7 @@ package com.mime.dualscreenview.activity import android.content.DialogInterface +import android.content.Intent import android.content.pm.ActivityInfo import android.content.res.Configuration import android.graphics.Bitmap @@ -10,7 +11,10 @@ import android.os.Bundle import android.os.Handler import android.os.Message import android.text.InputType +import android.text.SpannableStringBuilder +import android.text.style.RelativeSizeSpan import android.util.Log +import android.view.Gravity import android.view.KeyEvent import android.view.View import android.view.View.* @@ -22,9 +26,11 @@ import android.widget.EditText import android.widget.ImageButton import android.widget.ProgressBar import android.widget.TextView +import android.widget.Toast import androidx.annotation.RequiresApi import androidx.appcompat.app.AlertDialog import androidx.appcompat.widget.AppCompatButton +import androidx.constraintlayout.utils.widget.ImageFilterButton import com.google.gson.Gson import com.mime.dualscreenview.R import com.mime.dualscreenview.common.Blog @@ -125,12 +131,12 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface { contentsSaver?.clearSslPreferences(); } - findViewById(R.id.btn_rotate).setOnClickListener { v-> - switcvhOrient() - } +// findViewById(R.id.btn_rotate).setOnClickListener { v-> +// switcvhOrient() +// } findViewById(R.id.btn_setting).setOnClickListener { v-> -// startActivity(Intent(this@Intro, Settings::class.java)) + startActivity(Intent(this@Intro, Settings::class.java)) } findViewById(R.id.btn_history).setOnClickListener { v-> var realm = openRealm() @@ -158,7 +164,7 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface { fun reloadLastInfo() { val configuration: Configuration = getResources().getConfiguration() if(lastInfo != null && lastInfo?.displayOrientation != configuration.orientation) { - findViewById(R.id.btn_rotate).performClick() +// findViewById(R.id.btn_rotate).performClick() } } @@ -247,11 +253,11 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface { reloadTo(lastInfo) } fun switcvhOrient(){ - val configuration: Configuration = getResources().getConfiguration() - setRequestedOrientation( - if(configuration.orientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) { ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE } - else {ActivityInfo.SCREEN_ORIENTATION_PORTRAIT} - ) +// val configuration: Configuration = getResources().getConfiguration() +// setRequestedOrientation( +// if(configuration.orientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) { ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE } +// else {ActivityInfo.SCREEN_ORIENTATION_PORTRAIT} +// ) } fun showHistory(infos: List) { @@ -343,7 +349,7 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface { override fun onPageFinished(webView: WebView?, url: String?) { super.onPageFinished(webView, url) isLoading = false - var ramdomTimeSec = 1000L + Random(System.currentTimeMillis()).nextLong().rem(1999) + var ramdomTimeSec = 1500L + Random(System.currentTimeMillis()).nextLong().rem(2999) Blog.LOGE("ramdomTime >>> ${ramdomTimeSec}") webView?.postDelayed( { Blog.LOGE("saveClient >>> ${isLoading} ${url}") @@ -353,13 +359,13 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface { webView?.evaluateJavascript(findContents){ result: String? -> Blog.LOGE("saveClient result >>> ${result}") result?.let { string: String -> - Blog.LOGE("saveClient contents >>> ${string}") + Blog.LOGE("saveClient contents >>> ${string.length}") if (string.length > 10) { Blog.LOGE("saveClient it.length >>> ${string.length}") var contents = string.replace("\\\"", "\"") contents = (contents.replace("\\n", System.getProperty("line.separator"))) - Blog.LOGE("saveClient contents >>> ${contents}") + Blog.LOGE("saveClient contents >>> ${contents.length}") Uri.parse(url)?.let { it.path?.let { HistoryManager.getBooPageInfo(it) { @@ -371,11 +377,21 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface { } } }.close() + runOnUiThread { + it?.let { + var origin = it.getTitleItem() + val biggerText = SpannableStringBuilder(origin) + biggerText.setSpan(RelativeSizeSpan(1.6f), 0, origin.length, 0) + Toast.makeText(baseContext,biggerText, Toast.LENGTH_LONG).apply { + setGravity(Gravity.CENTER, 0, 0) + }.show() + } + } } } } } - var ramdomTime = 10000L + Random(System.currentTimeMillis()).nextLong().rem(3999) + var ramdomTime = 10000L + Random(System.currentTimeMillis()).nextLong().rem(9999) Blog.LOGE("ramdomTime >>> ${ramdomTime}") contentsSaver?.postDelayed( { saveItem(null) }, ramdomTime) } @@ -454,8 +470,7 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface { var onNextClickAction: GotoSomeWhere? = null override fun showNextBtn(find : Boolean , onClickAction: GotoSomeWhere) { onNextClickAction = onClickAction - findViewById(R.id.btn_right)?.let{ - it.text = "다음 페이지" + findViewById(R.id.btn_right)?.let{ it.setOnClickListener { actionNextEvent() } @@ -505,8 +520,7 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface { var onPrevClickAction: GotoSomeWhere? = null override fun showPrevBtn(find : Boolean, onClickAction: GotoSomeWhere) { onPrevClickAction = onClickAction - findViewById(R.id.btn_left)?.let{ - it.text = "이전 페이지" + findViewById(R.id.btn_left)?.let{ it.setOnClickListener { actionPrevEvent() } @@ -584,26 +598,28 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface { paged_layer.apply { if (aContents != null) { var contents = aContents.replace("\\\"","\"") - text = (contents.replace("\\n", System.getProperty("line.separator"))) - visibility = VISIBLE + contents = (contents.replace("\\n", System.getProperty("line.separator"))) + mPagedTextViewInterface = this@Intro var realm = HistoryManager.openRealm() realm.query()?.find()?.let { if (it.size > 0) { realm.copyFromRealm(it.first())?.let { - paged_layer?.setTextSize(it.textSize?.toFloat()?: 14f) - paged_layer?.setLineSpacing(it.lineSpace?.toFloat() ?: 1f) - paged_layer?.setLetterSpacing(it.letterSpace?.toFloat() ?: 1f) - paged_layer?.setPadding( - it.padding ?: 1, - it.padding ?: 1, - it.padding ?: 1, - it.padding ?: 1) + runOnUiThread { + paged_layer?.setTextSize(it.textSize?.toFloat()?: 14f) + paged_layer?.setLineSpacing(it.lineSpace?.toFloat() ?: 1f) + paged_layer?.setLetterSpacing(it.letterSpace?.toFloat() ?: 1f) + paged_layer?.setPadding( + it.padding ?: 1, + it.padding ?: 1, + it.padding ?: 1, + it.padding ?: 1) - var typeface = typesfacez.get(getIndex(typesfacez as PairArray,it.font ?: "")) - paged_layer?.setTypeface(resources.getFont(typeface.second)) - val color = colorz.get(it.style ?: 0) - paged_layer?.setColorStyle(color.second) + var typeface = typesfacez.get(getIndex(typesfacez as PairArray,it.font ?: "")) + paged_layer?.setTypeface(resources.getFont(typeface.second)) + val color = colorz.get(it.style ?: 0) + paged_layer?.setColorStyle(color.second) + } } } } @@ -616,12 +632,13 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface { if(lastInfo != null && mBaseWebContentsViewer.webview.url?.endsWith(lastInfo!!.pageUrl) ?: false) { this@Intro.findViewById(R.id.progress)?.visibility = VISIBLE paged_layer?.postDelayed({ - next(lastInfo!!.pageIndex) - paged_layer?.post { - this@Intro.findViewById(R.id.progress)?.visibility = GONE - } + this@Intro.findViewById(R.id.progress)?.visibility = GONE },1000) } + runOnUiThread { + text = (contents.replace("\\n", System.getProperty("line.separator"))) + visibility = VISIBLE + } forceUpdateUI() mBaseWebContentsViewer.webview.url?.let { Uri.parse(it)?.let { @@ -776,7 +793,7 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface { findViewById(R.id.btn_home).visibility = VISIBLE findViewById(R.id.btn_list).visibility = VISIBLE findViewById(R.id.btn_history).visibility = VISIBLE - findViewById(R.id.btn_rotate).visibility = VISIBLE +// findViewById(R.id.btn_rotate).visibility = VISIBLE } TouchArea.Right -> { @@ -830,7 +847,7 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface { findViewById(R.id.btn_home).visibility = VISIBLE findViewById(R.id.btn_list).visibility = VISIBLE findViewById(R.id.btn_history).visibility = VISIBLE - findViewById(R.id.btn_rotate).visibility = VISIBLE +// findViewById(R.id.btn_rotate).visibility = VISIBLE } } } @@ -846,7 +863,7 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface { findViewById(R.id.btn_home).visibility = GONE findViewById(R.id.btn_list).visibility = GONE findViewById(R.id.btn_history).visibility = GONE - findViewById(R.id.btn_rotate).visibility = GONE +// findViewById(R.id.btn_rotate).visibility = GONE } diff --git a/app/src/main/java/com/mime/dualscreenview/activity/Settings.kt b/app/src/main/java/com/mime/dualscreenview/activity/Settings.kt index d746f73..ba3117e 100644 --- a/app/src/main/java/com/mime/dualscreenview/activity/Settings.kt +++ b/app/src/main/java/com/mime/dualscreenview/activity/Settings.kt @@ -1,128 +1,125 @@ -//package com.mime.dualscreenview.activity -// -//import android.graphics.Color -//import android.os.Build -//import android.os.Bundle -//import androidx.annotation.RequiresApi -//import com.mime.dualscreenview.R -//import com.mime.dualscreenview.common.PairArray -//import com.mime.dualscreenview.common.colorz -//import com.mime.dualscreenview.common.getIndex -//import com.mime.dualscreenview.common.typesfacez -//import com.mime.dualscreenview.data.HistoryManager -//import com.mime.dualscreenview.data.model.ReaderConfig -//import io.realm.kotlin.UpdatePolicy -//import io.realm.kotlin.ext.query -//import kotlinx.android.synthetic.main.settings.letter_space -//import kotlinx.android.synthetic.main.settings.line_space -//import kotlinx.android.synthetic.main.settings.page_padding -//import kotlinx.android.synthetic.main.settings.page_style -//import kotlinx.android.synthetic.main.settings.page_typesface -//import kotlinx.android.synthetic.main.settings.preview -//import kotlinx.android.synthetic.main.settings.text_size -// -//class Settings : Base() { -// -// var readerConfig : ReaderConfig? = null -// override fun onCreate(savedInstanceState: Bundle?) { -// super.onCreate(savedInstanceState) +package com.mime.dualscreenview.activity + +import android.graphics.Color +import android.os.Build +import android.os.Bundle +import androidx.annotation.RequiresApi +import androidx.databinding.DataBindingUtil +import com.mime.dualscreenview.R +import com.mime.dualscreenview.common.PairArray +import com.mime.dualscreenview.common.colorz +import com.mime.dualscreenview.common.getIndex +import com.mime.dualscreenview.common.typesfacez +import com.mime.dualscreenview.data.HistoryManager +import com.mime.dualscreenview.data.model.ReaderConfig +import com.mime.dualscreenview.databinding.SettingsBinding +import io.realm.kotlin.UpdatePolicy +import io.realm.kotlin.ext.query + +class Settings : Base() { + + lateinit var binding : SettingsBinding + var readerConfig : ReaderConfig? = null + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = DataBindingUtil.setContentView(this, R.layout.settings) // setContentView(R.layout.settings) -// var realm = HistoryManager.openRealm() -// realm.writeBlocking { -// this.query()?.find()?.let { -// if (it.size > 0) { -// readerConfig = copyFromRealm(it.first()) -// } else { -// readerConfig = ReaderConfig() -// } -// } -// -// } -// realm.close() -// } -// -// @RequiresApi(Build.VERSION_CODES.O) -// override fun onResume() { -// super.onResume() -// text_size.displayFormat = "글자 크기 : %d" -// text_size.value = readerConfig?.textSize ?: 14 -// text_size.mValueChange = { -// preview.textSize = it.toFloat() ; -// if (readerConfig?.textSize != it) { -// readerConfig?.textSize = it -// configSave() -// } -// } -// -// -// page_padding.displayFormat = "페이지 여백 : %d" -// page_padding.value = readerConfig?.padding ?: 5 -// page_padding.mValueChange = { -// preview.setPadding(it,it,it,it) ; -// if (readerConfig?.padding != it) { -// readerConfig?.padding = it -// configSave() -// } -// } -// -// -// letter_space.displayFormat = "자간 : %d" -// letter_space.value = readerConfig?.letterSpace ?: 1 -// letter_space.mValueChange = { -// preview.letterSpacing = it.times(0.01).toFloat() ; -// if (readerConfig?.letterSpace != it) { -// readerConfig?.letterSpace = it -// configSave() -// } -// } -// -// -// line_space.displayFormat = "행간 : %d" -// line_space.value = readerConfig?.lineSpace ?: 1 -// line_space.mValueChange = { -// preview.setLineSpacing(1f, 1f.plus(it.times(0.01f))) ; -// if (readerConfig?.lineSpace != it) { -// readerConfig?.lineSpace = it -// configSave() -// } -// } -// -// -// -// page_typesface.displayFormat = "폰트 : %s" -// page_typesface.titleArray = typesfacez.map { it.first }.toTypedArray() -// page_typesface.value = getIndex(typesfacez as PairArray,readerConfig?.font ?: "") -// page_typesface.mValueChange = { -// val pair = typesfacez.get(it) -// preview.setTypeface(resources.getFont(pair.second)) -// if (readerConfig?.font != pair.first) { -// readerConfig?.font = pair.first ?: "" -// configSave() -// } -// } -// -// page_style.displayFormat = "스타일 : %s" -// page_style.titleArray = colorz.map { it.first }.toTypedArray() -// page_style.value = readerConfig?.style ?: 0 -// page_style.mValueChange = { -// val pair = colorz.get(it) -// preview.setBackgroundColor(Color.parseColor(pair.second.last())) -// preview.setTextColor(Color.parseColor(pair.second.first())) -// if (readerConfig?.style != it) { -// readerConfig?.style = it ?: 0 -// configSave() -// } -// } -// -// } -// -// -// -// fun configSave() { -// var realm = HistoryManager.openRealm() -// realm.writeBlocking { -// copyToRealm(readerConfig!!, UpdatePolicy.ALL) -// } -// realm.close() -// } -//} \ No newline at end of file + var realm = HistoryManager.openRealm() + realm.writeBlocking { + this.query()?.find()?.let { + if (it.size > 0) { + readerConfig = copyFromRealm(it.first()) + } else { + readerConfig = ReaderConfig() + } + } + + } + realm.close() + } + + @RequiresApi(Build.VERSION_CODES.O) + override fun onResume() { + super.onResume() + binding.textSize.displayFormat = "글자 크기 : %d" + binding.textSize.value = readerConfig?.textSize ?: 14 + binding.textSize.mValueChange = { + binding.preview.textSize = it.toFloat() ; + if (readerConfig?.textSize != it) { + readerConfig?.textSize = it + configSave() + } + } + + + binding.pagePadding.displayFormat = "페이지 여백 : %d" + binding.pagePadding.value = readerConfig?.padding ?: 5 + binding.pagePadding.mValueChange = { + binding.preview.setPadding(it,it,it,it) ; + if (readerConfig?.padding != it) { + readerConfig?.padding = it + configSave() + } + } + + + binding.letterSpace.displayFormat = "자간 : %d" + binding.letterSpace.value = readerConfig?.letterSpace ?: 1 + binding.letterSpace.mValueChange = { + binding.preview.letterSpacing = it.times(0.01).toFloat() ; + if (readerConfig?.letterSpace != it) { + readerConfig?.letterSpace = it + configSave() + } + } + + + binding.lineSpace.displayFormat = "행간 : %d" + binding.lineSpace.value = readerConfig?.lineSpace ?: 1 + binding.lineSpace.mValueChange = { + binding.preview.setLineSpacing(1f, 1f.plus(it.times(0.01f))) ; + if (readerConfig?.lineSpace != it) { + readerConfig?.lineSpace = it + configSave() + } + } + + + + binding.pageTypesface.displayFormat = "폰트 : %s" + binding.pageTypesface.titleArray = typesfacez.map { it.first }.toTypedArray() + binding.pageTypesface.value = getIndex(typesfacez as PairArray,readerConfig?.font ?: "") + binding.pageTypesface.mValueChange = { + val pair = typesfacez.get(it) + binding.preview.setTypeface(resources.getFont(pair.second)) + if (readerConfig?.font != pair.first) { + readerConfig?.font = pair.first ?: "" + configSave() + } + } + + binding.pageStyle.displayFormat = "스타일 : %s" + binding.pageStyle.titleArray = colorz.map { it.first }.toTypedArray() + binding.pageStyle.value = readerConfig?.style ?: 0 + binding.pageStyle.mValueChange = { + val pair = colorz.get(it) + binding.preview.setBackgroundColor(Color.parseColor(pair.second.last())) + binding.preview.setTextColor(Color.parseColor(pair.second.first())) + if (readerConfig?.style != it) { + readerConfig?.style = it ?: 0 + configSave() + } + } + + } + + + + fun configSave() { + var realm = HistoryManager.openRealm() + realm.writeBlocking { + copyToRealm(readerConfig!!, UpdatePolicy.ALL) + } + realm.close() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/mime/dualscreenview/view/ScopeEditor.kt b/app/src/main/java/com/mime/dualscreenview/view/ScopeEditor.kt index e10fe39..50747ea 100644 --- a/app/src/main/java/com/mime/dualscreenview/view/ScopeEditor.kt +++ b/app/src/main/java/com/mime/dualscreenview/view/ScopeEditor.kt @@ -1,62 +1,64 @@ -//package com.mime.dualscreenview.view -// -//import android.content.Context -//import android.util.AttributeSet -//import com.mime.dualscreenview.R -//import kotlinx.android.synthetic.main.layout_steps_editor.view.btn_decrement -//import kotlinx.android.synthetic.main.layout_steps_editor.view.btn_increment -//import kotlinx.android.synthetic.main.layout_steps_editor.view.text_value -// -//class ScopeEditor: SideButtonTextView { -// constructor(context: Context) : super(context) -// constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) -// constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super( -// context, -// attrs, -// defStyleAttr -// ) -// var titleArray : Array? = null -// set(value) { -// if(value != null && value.size < 1) { -// Error("titleArray는 최소 한개 이상이여야됨.") -// return -// } -// field = value -// maxValue = field!!.size -// } -// -// var maxValue : Int = 1 -// set(value) { -// if (value < 1) { -// Error("maxValue는 무조건 0보다 커야하눈뎅....") -// return -// } -// field = value -// } -// -// override var value : Int = 14 -// set(newValue) { -// field = newValue -// text_value.text = displayFormat.format(titleArray?.get(field) ?:"defulat") -// mValueChange?.invoke(field) -// } -// -// -// constructor( -// context: Context, -// attrs: AttributeSet?, -// defStyleAttr: Int, -// defStyleRes: Int -// ) : super(context, attrs, defStyleAttr, defStyleRes) -// -// init { +package com.mime.dualscreenview.view + +import android.content.Context +import android.util.AttributeSet +import android.widget.Button +import androidx.appcompat.widget.AppCompatButton +import com.mime.dualscreenview.R + +class ScopeEditor: SideButtonTextView { + constructor(context: Context) : super(context) + constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) + constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super( + context, + attrs, + defStyleAttr + ) + var titleArray : Array? = null + set(value) { + if(value != null && value.size < 1) { + Error("titleArray는 최소 한개 이상이여야됨.") + return + } + field = value + maxValue = field!!.size + } + + var maxValue : Int = 1 + set(value) { + if (value < 1) { + Error("maxValue는 무조건 0보다 커야하눈뎅....") + return + } + field = value + } + + override var value : Int = 14 + set(newValue) { + field = newValue + text_value?.text = displayFormat.format(titleArray?.get(field) ?:"defulat") + mValueChange?.invoke(field) + } + + + constructor( + context: Context, + attrs: AttributeSet?, + defStyleAttr: Int, + defStyleRes: Int + ) : super(context, attrs, defStyleAttr, defStyleRes) + + + + init { +// super.i // inflate(context, R.layout.layout_steps_editor,this) -// btn_decrement.setOnClickListener { value = Math.abs(value.dec()).rem(maxValue) } -// btn_increment.setOnClickListener { value = value.inc().rem(maxValue) } -// leftButtonTitle = "<" -// rightButtonTitle = ">" -// } -// -// -// -//} \ No newline at end of file + btn_decrement?.setOnClickListener { value = Math.abs(value.dec()).rem(maxValue) } + btn_increment?.setOnClickListener { value = value.inc().rem(maxValue) } + leftButtonTitle = "<" + rightButtonTitle = ">" + } + + + +} \ No newline at end of file diff --git a/app/src/main/java/com/mime/dualscreenview/view/SideButtonTextView.kt b/app/src/main/java/com/mime/dualscreenview/view/SideButtonTextView.kt index 93da39c..8048fff 100644 --- a/app/src/main/java/com/mime/dualscreenview/view/SideButtonTextView.kt +++ b/app/src/main/java/com/mime/dualscreenview/view/SideButtonTextView.kt @@ -1,70 +1,78 @@ -//package com.mime.dualscreenview.view -// -//import android.content.Context -//import android.util.AttributeSet -//import androidx.constraintlayout.widget.ConstraintLayout -//import com.mime.dualscreenview.R -//import kotlinx.android.synthetic.main.layout_steps_editor.view.btn_decrement -//import kotlinx.android.synthetic.main.layout_steps_editor.view.btn_increment -//import kotlinx.android.synthetic.main.layout_steps_editor.view.text_value -//import java.lang.Exception -// -//open class SideButtonTextView : ConstraintLayout { -// constructor(context: Context) : super(context) -// constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) -// constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super( -// context, -// attrs, -// defStyleAttr -// ) -// -// constructor( -// context: Context, -// attrs: AttributeSet?, -// defStyleAttr: Int, -// defStyleRes: Int -// ) : super(context, attrs, defStyleAttr, defStyleRes) -// -// var leftButtonTitle : String = "" -// set(value) { -// field = value -// btn_decrement.text = field -// } -// -// var rightButtonTitle : String = "" -// set(value) { -// field = value -// btn_increment.text = field -// } -// -// open var value : Int = 14 -// set(newValue) { -// field = newValue -// text_value.text = displayFormat.format(field) -// mValueChange?.invoke(field) -// } -// -// var displayFormat = "글자 크기 : %d" -// set(newValue) { -// field = newValue -// try { -// text_value.text = displayFormat.format(value) -// } catch (e : Exception) { -// -// } -// } -// -// var mValueChange : ValueChange? = null -// set(newValue) { -// field = newValue -// if (newValue != null) { -// newValue(value) -// } -// } -// -// init { -//// inflate(context, R.layout.layout_steps_editor,this) -//// btn_decrement.setOnClickListener { value = value.dec() } -//// btn_increment.setOnClickListener { value = value.inc() } -// } -//} \ No newline at end of file +package com.mime.dualscreenview.view + +import android.content.Context +import android.util.AttributeSet +import android.widget.Button +import android.widget.TextView +import androidx.appcompat.widget.AppCompatButton +import androidx.constraintlayout.widget.ConstraintLayout +import com.mime.dualscreenview.R + +import java.lang.Exception + +open class SideButtonTextView : ConstraintLayout { + constructor(context: Context) : super(context) + constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) + constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super( + context, + attrs, + defStyleAttr + ) + + constructor( + context: Context, + attrs: AttributeSet?, + defStyleAttr: Int, + defStyleRes: Int + ) : super(context, attrs, defStyleAttr, defStyleRes) + + var leftButtonTitle : String = "" + set(value) { + field = value + btn_decrement?.text = field + } + + var rightButtonTitle : String = "" + set(value) { + field = value + btn_increment?.text = field + } + + open var value : Int = 14 + set(newValue) { + field = newValue + text_value?.text = displayFormat.format(field) + mValueChange?.invoke(field) + } + + var displayFormat = "글자 크기 : %d" + set(newValue) { + field = newValue + try { + text_value?.text = displayFormat.format(value) + } catch (e : Exception) { + + } + } + + var mValueChange : ValueChange? = null + set(newValue) { + field = newValue + if (newValue != null) { + newValue(value) + } + } + + var btn_decrement : AppCompatButton? = null + var btn_increment : AppCompatButton? = null + var text_value : TextView? = null + + init { + inflate(context, R.layout.layout_steps_editor,this) + btn_increment = findViewById(R.id.btn_increment) + btn_decrement = findViewById(R.id.btn_decrement) + text_value = findViewById(R.id.text_value) + btn_decrement?.setOnClickListener { value = value.dec() } + btn_increment?.setOnClickListener { value = value.inc() } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/mime/dualscreenview/view/StepsEditor.kt b/app/src/main/java/com/mime/dualscreenview/view/StepsEditor.kt index a4cb129..9a3f925 100644 --- a/app/src/main/java/com/mime/dualscreenview/view/StepsEditor.kt +++ b/app/src/main/java/com/mime/dualscreenview/view/StepsEditor.kt @@ -1,37 +1,32 @@ -//package com.mime.dualscreenview.view -// -//import android.content.Context -//import android.util.AttributeSet -//import androidx.constraintlayout.widget.ConstraintLayout -//import com.mime.dualscreenview.R -//import kotlinx.android.synthetic.main.layout_steps_editor.view.btn_decrement -//import kotlinx.android.synthetic.main.layout_steps_editor.view.btn_increment -//import kotlinx.android.synthetic.main.layout_steps_editor.view.text_value -//import java.lang.Exception -// -//typealias ValueChange = (Int)->Unit -// -//class StepsEditor : SideButtonTextView { -// constructor(context: Context) : super(context) -// constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) -// constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super( -// context, -// attrs, -// defStyleAttr -// ) -// -// constructor( -// context: Context, -// attrs: AttributeSet?, -// defStyleAttr: Int, -// defStyleRes: Int -// ) : super(context, attrs, defStyleAttr, defStyleRes) -// -// init { +package com.mime.dualscreenview.view + +import android.content.Context +import android.util.AttributeSet +import com.mime.dualscreenview.R + +typealias ValueChange = (Int)->Unit + +class StepsEditor : SideButtonTextView { + constructor(context: Context) : super(context) + constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) + constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super( + context, + attrs, + defStyleAttr + ) + + constructor( + context: Context, + attrs: AttributeSet?, + defStyleAttr: Int, + defStyleRes: Int + ) : super(context, attrs, defStyleAttr, defStyleRes) + + init { // inflate(context, R.layout.layout_steps_editor,this) -// btn_decrement.setOnClickListener { value = value.dec() } -// btn_increment.setOnClickListener { value = value.inc() } -// leftButtonTitle = "-" -// rightButtonTitle = "+" -// } -//} \ No newline at end of file + btn_decrement?.setOnClickListener { value = value.dec() } + btn_increment?.setOnClickListener { value = value.inc() } + leftButtonTitle = "-" + rightButtonTitle = "+" + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/angle_left.xml b/app/src/main/res/drawable/angle_left.xml new file mode 100644 index 0000000..ba9bad4 --- /dev/null +++ b/app/src/main/res/drawable/angle_left.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/angle_right.xml b/app/src/main/res/drawable/angle_right.xml new file mode 100644 index 0000000..aebb5dd --- /dev/null +++ b/app/src/main/res/drawable/angle_right.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/bookmark.png b/app/src/main/res/drawable/bookmark.png deleted file mode 100644 index 94b58010b6f53bd0cc957d64d5855ebb4785eb99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9957 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 diff --git a/app/src/main/res/drawable/bookmark.xml b/app/src/main/res/drawable/bookmark.xml new file mode 100644 index 0000000..0d108ef --- /dev/null +++ b/app/src/main/res/drawable/bookmark.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/home.png b/app/src/main/res/drawable/home.png deleted file mode 100644 index d6fb9468eb3e2c8388a39d618d830e65ab7e6968..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8656 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 bJlXW>rRd6l)pNnGFCf&_%cWweVE6w6dud8n diff --git a/app/src/main/res/drawable/home.xml b/app/src/main/res/drawable/home.xml new file mode 100644 index 0000000..b906b99 --- /dev/null +++ b/app/src/main/res/drawable/home.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/saved.xml b/app/src/main/res/drawable/saved.xml new file mode 100644 index 0000000..34d2c6d --- /dev/null +++ b/app/src/main/res/drawable/saved.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/settings.xml b/app/src/main/res/drawable/settings.xml new file mode 100644 index 0000000..8a7da8a --- /dev/null +++ b/app/src/main/res/drawable/settings.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/intro.xml b/app/src/main/res/layout/intro.xml index bc6c1c6..71afd37 100644 --- a/app/src/main/res/layout/intro.xml +++ b/app/src/main/res/layout/intro.xml @@ -17,6 +17,8 @@ app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent"/> + + @@ -49,86 +50,95 @@ android:layout_width="0dp" android:layout_height="@dimen/main_top_height" android:text="@string/app_name" - android:background="@color/black" android:gravity="center" android:textSize="24sp" app:layout_constraintRight_toLeftOf="@id/btn_list" app:layout_constraintLeft_toRightOf="@id/btn_home" app:layout_constraintTop_toTopOf="parent" /> - - - - + + + + + + + + + + + + + + + - - + /> - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/layout_textviewer.xml b/app/src/main/res/layout/layout_textviewer.xml index 7ed74c3..1a017dc 100644 --- a/app/src/main/res/layout/layout_textviewer.xml +++ b/app/src/main/res/layout/layout_textviewer.xml @@ -1,5 +1,5 @@ - @@ -42,7 +41,6 @@ android:layout_height="match_parent"> - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layout/settings.xml b/app/src/main/res/layout/settings.xml index bd1bdc7..843e9ed 100644 --- a/app/src/main/res/layout/settings.xml +++ b/app/src/main/res/layout/settings.xml @@ -1,55 +1,63 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + \ 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 5ac04f8..b4919e2 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -1,6 +1,6 @@ - 35dp + 40dp 15dp 45dp \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9de98ef..e834b46 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,29 +1,29 @@ - DualScreenView + Bum\'s App 화면 옮 기 기 it\'s 두번째화면 - + - 여섯글자마다 방점을찍어놔 - 가사관찰하다 반쯤놓치거나 - 해석잘안되면 몇번돌리든가 - 이건이를테면 덤비는리듬과 - 손묶인채붙는 일종의노름판 - 신도구제불능 내가물오른밤 - 감방에날가둬 내가패를까도 - 가난한니네가 판돈잃지않게 - 나하고니네가 의견일치한게 - 아마처음일걸 그마저운일걸 - 존나좋음이퀄 내중저음일걸 - 이배열어쩌면 너에대한배려 - 너에겐어쩌면 언어적배리어 - 그럼넌글렀어 지망생여기에 - 잠들다글로써 훗날니묘비에 - For sale my rhymes never used - For sale my rhymes never used - 판매자바로너 니가씨발오너 - For sale my rhymes never used + 여섯글자마다 방점을찍어놔 + 가사관찰하다 반쯤놓치거나 + 해석잘안되면 몇번돌리든가 + 이건이를테면 덤비는리듬과 + 손묶인채붙는 일종의노름판 + 신도구제불능 내가물오른밤 + 감방에날가둬 내가패를까도 + 가난한니네가 판돈잃지않게 + 나하고니네가 의견일치한게 + 아마처음일걸 그마저운일걸 + 존나좋음이퀄 내중저음일걸 + 이배열어쩌면 너에대한배려 + 너에겐어쩌면 언어적배리어 + 그럼넌글렀어 지망생여기에 + 잠들다글로써 훗날니묘비에 + For sale my rhymes never used + For sale my rhymes never used + 판매자바로너 니가씨발오너 + For sale my rhymes never used 노예처럼일해서왕처럼지배 성탄처럼지내설탕뿌려위에 성공을말했기에난그길위에 @@ -39,34 +39,34 @@ 미안해난비션갖고와내기적 자음모음이어리듬위에띄어 금은보화이쁜걸로손에끼워 - Uh she suckin\' my soul like - De La to the Soul - I shout out to the Rhonda - But before I\'m sober - 변태는 변태인데 underground 모범생 - 맨날 난 오덕 돼 활자에 꼬여 - 내 팔자도 고쳐낼 하나의 초월체를 - 만들려 고쳐댄 rhyme들만 몇 truck 돼 - 그러다 깨어나 여기에 - 빼어난 묘기에 없네 기본기 - 내 눈엔 수명이 대본처럼 읽히네 - 뭐처럼 비치네 뭐처럼 비치네 - Fuck all of ya list man - If it ain\'t Forbes list mayne - Your wristwatch cheaper than - My profile picture damn - Picture the future and - 믿어 like it\'s happend - Big ass house foreign cars have several - 미녀 fine ass apple hip 내 옆에 같이 태우고 - Top of the top으로 가 죽어야 들어 잠은 - 넌 안 죽었다는 척 - 갖은 폼 잡으면 뭐하냐 - 좆밥들 또 반년만 가면 쏙 - 다 들어가는 거 다 보여 - 내 눈엔 너가 금방 죽어 - 다음 무덤 안 들어갈 주검 - 한 우물 파는 넌 밟고서 - 땅을 쳐봐 내 발자국을 + Uh she suckin\' my soul like + De La to the Soul + I shout out to the Rhonda + But before I\'m sober + 변태는 변태인데 underground 모범생 + 맨날 난 오덕 돼 활자에 꼬여 + 내 팔자도 고쳐낼 하나의 초월체를 + 만들려 고쳐댄 rhyme들만 몇 truck 돼 + 그러다 깨어나 여기에 + 빼어난 묘기에 없네 기본기 + 내 눈엔 수명이 대본처럼 읽히네 + 뭐처럼 비치네 뭐처럼 비치네 + Fuck all of ya list man + If it ain\'t Forbes list mayne + Your wristwatch cheaper than + My profile picture damn + Picture the future and + 믿어 like it\'s happend + Big ass house foreign cars have several + 미녀 fine ass apple hip 내 옆에 같이 태우고 + Top of the top으로 가 죽어야 들어 잠은 + 넌 안 죽었다는 척 + 갖은 폼 잡으면 뭐하냐 + 좆밥들 또 반년만 가면 쏙 + 다 들어가는 거 다 보여 + 내 눈엔 너가 금방 죽어 + 다음 무덤 안 들어갈 주검 + 한 우물 파는 넌 밟고서 + 땅을 쳐봐 내 발자국을 \ No newline at end of file