diff --git a/app/src/fdroid/java/ani/dantotsu/others/AppUpdater.kt b/app/src/fdroid/java/ani/dantotsu/others/AppUpdater.kt
index 5dfb79e746..60d0685729 100644
--- a/app/src/fdroid/java/ani/dantotsu/others/AppUpdater.kt
+++ b/app/src/fdroid/java/ani/dantotsu/others/AppUpdater.kt
@@ -1,10 +1,14 @@
package ani.dantotsu.others
import androidx.fragment.app.FragmentActivity
+import kotlinx.serialization.SerialName
+import kotlinx.serialization.Serializable
+import java.text.SimpleDateFormat
+import java.util.Locale
object AppUpdater {
suspend fun check(activity: FragmentActivity, post: Boolean = false) {
- //no-op
+ // no-op
}
@Serializable
@@ -28,5 +32,9 @@ object AppUpdater {
fun timeStamp(): Long {
return dateFormat.parse(createdAt)!!.time
}
+
+ companion object {
+ private val dateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.getDefault())
+ }
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c42fee0d98..1104ba865f 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -201,7 +201,8 @@
android:name=".others.imagesearch.ImageSearchActivity"
android:parentActivityName=".MainActivity" />
+ android:name=".util.MarkdownCreatorActivity"
+ android:windowSoftInputMode="adjustResize" />
", 2, R.id.formatQuote),
+ CODE("``", 1, R.id.formatCode)
+ }
@OptIn(DelicateCoroutinesApi::class)
override fun onCreate(savedInstanceState: Bundle?) {
@@ -36,11 +64,15 @@ class MarkdownCreatorActivity : AppCompatActivity() {
binding.markdownCreatorToolbar.updateLayoutParams {
topMargin = statusBarHeight
}
- binding.buttonContainer.updateLayoutParams {
+ binding.markdownOptionsContainer.updateLayoutParams {
bottomMargin += navBarHeight
}
setContentView(binding.root)
+ val params = binding.createButton.layoutParams as ViewGroup.MarginLayoutParams
+ params.marginEnd = 16 * resources.displayMetrics.density.toInt()
+ binding.createButton.layoutParams = params
+
if (intent.hasExtra("type")) {
type = intent.getStringExtra("type")!!
} else {
@@ -69,17 +101,12 @@ class MarkdownCreatorActivity : AppCompatActivity() {
text = ping ?: ""
binding.editText.setText(text)
binding.editText.addTextChangedListener {
- if (!binding.markdownCreatorPreviewCheckbox.isChecked) {
+ if (!isPreviewMode) {
text = it.toString()
}
}
previewMarkdown(false)
- binding.markdownCreatorPreviewCheckbox.setOnClickListener {
- previewMarkdown(binding.markdownCreatorPreviewCheckbox.isChecked)
- }
- binding.cancelButton.setOnClickListener {
- onBackPressedDispatcher.onBackPressed()
- }
+
binding.markdownCreatorBack.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
@@ -89,10 +116,10 @@ class MarkdownCreatorActivity : AppCompatActivity() {
toast(getString(R.string.cannot_be_empty))
return@setOnClickListener
}
- AlertDialogBuilder(this).apply {
+ AlertDialog.Builder(this, R.style.MyPopup).apply {
setTitle(R.string.warning)
setMessage(R.string.post_to_anilist_warning)
- setPosButton(R.string.ok) {
+ setPositiveButton(R.string.ok) { _, _ ->
launchIO {
val editId = intent.getIntExtra("edit", -1)
val isEdit = editId != -1
@@ -119,14 +146,126 @@ class MarkdownCreatorActivity : AppCompatActivity() {
finish()
}
}
- setNeutralButton(R.string.open_rules) {
+ setNeutralButton(R.string.open_rules) { _, _ ->
openLinkInBrowser("https://anilist.co/forum/thread/14")
}
- setNegButton(R.string.cancel)
+ setNegativeButton(R.string.cancel, null)
}.show()
}
+ binding.createButton.setOnLongClickListener {
+ isPreviewMode = !isPreviewMode
+ previewMarkdown(isPreviewMode)
+ if (isPreviewMode) {
+ toast("Preview enabled")
+ } else {
+ toast("Preview disabled")
+ }
+ true
+ }
binding.editText.requestFocus()
+ setupMarkdownButtons()
+ }
+
+ private fun setupMarkdownButtons() {
+ MarkdownFormat.entries.forEach { format ->
+ findViewById(format.imageViewId)?.setOnClickListener {
+ applyMarkdownFormat(format)
+ }
+ }
+ }
+
+ private fun applyMarkdownFormat(format: MarkdownFormat) {
+ val start = binding.editText.selectionStart
+ val end = binding.editText.selectionEnd
+
+ if (start != end) {
+ val selectedText = binding.editText.text?.substring(start, end) ?: ""
+ val lines = selectedText.split("\n")
+
+ val newText = when (format) {
+ MarkdownFormat.UNORDERED_LIST -> {
+ lines.joinToString("\n") { "- $it" }
+ }
+ MarkdownFormat.ORDERED_LIST -> {
+ lines.mapIndexed { index, line -> "${index + 1}. $line" }.joinToString("\n")
+ }
+ else -> {
+ if (format.syntax.contains("%s")) {
+ String.format(format.syntax, selectedText)
+ } else {
+ format.syntax.substring(0, format.selectionOffset) +
+ selectedText +
+ format.syntax.substring(format.selectionOffset)
+ }
+ }
+ }
+
+ binding.editText.text?.replace(start, end, newText)
+ binding.editText.setSelection(start + newText.length)
+ } else {
+ if (format.syntax.contains("%s")) {
+ showInputDialog(format, start)
+ } else {
+ val newText = format.syntax
+ binding.editText.text?.insert(start, newText)
+ binding.editText.setSelection(start + format.selectionOffset)
+ }
+ }
+ }
+
+
+ private fun showInputDialog(format: MarkdownFormat, position: Int) {
+ val inputLayout = TextInputLayout(this).apply {
+ layoutParams = ViewGroup.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT
+ )
+ boxBackgroundMode = TextInputLayout.BOX_BACKGROUND_OUTLINE
+ hint = "Paste your link here"
+ isHintEnabled = true
+ }
+
+ val inputEditText = TextInputEditText(this).apply {
+ layoutParams = LinearLayout.LayoutParams(
+ LinearLayout.LayoutParams.MATCH_PARENT,
+ LinearLayout.LayoutParams.WRAP_CONTENT
+ )
+ }
+
+ inputLayout.addView(inputEditText)
+
+ val container = FrameLayout(this).apply {
+ addView(inputLayout)
+ layoutParams = ViewGroup.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.MATCH_PARENT
+ )
+ setPadding(64, 64, 64, 0)
+ }
+
+ val dialog = AlertDialog.Builder(this, R.style.MyPopup).apply {
+ setView(container)
+ setPositiveButton(getString(R.string.ok)) { dialog, _ ->
+ val input = inputEditText.text.toString()
+ val formattedText = String.format(format.syntax, input)
+ binding.editText.text?.insert(position, formattedText)
+ binding.editText.setSelection(position + formattedText.length)
+ dialog.dismiss()
+ }
+ setNegativeButton(getString(R.string.cancel)) { dialog, _ ->
+ dialog.dismiss()
+ }
+ }.create()
+
+ val widthInDp = 245
+ val layoutParams = ViewGroup.LayoutParams(
+ (widthInDp * resources.displayMetrics.density).toInt(),
+ ViewGroup.LayoutParams.WRAP_CONTENT
+ )
+ dialog.window?.setLayout(layoutParams.width, layoutParams.height)
+ dialog.show()
+ inputEditText.requestFocus()
}
private fun previewMarkdown(preview: Boolean) {
diff --git a/app/src/main/res/drawable/format_align_center_24.xml b/app/src/main/res/drawable/format_align_center_24.xml
new file mode 100644
index 0000000000..c174a0ea79
--- /dev/null
+++ b/app/src/main/res/drawable/format_align_center_24.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/drawable/format_bold_24.xml b/app/src/main/res/drawable/format_bold_24.xml
new file mode 100644
index 0000000000..c640aaaa40
--- /dev/null
+++ b/app/src/main/res/drawable/format_bold_24.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/drawable/format_code_24.xml b/app/src/main/res/drawable/format_code_24.xml
new file mode 100644
index 0000000000..61eaae2dc4
--- /dev/null
+++ b/app/src/main/res/drawable/format_code_24.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/drawable/format_image_24.xml b/app/src/main/res/drawable/format_image_24.xml
new file mode 100644
index 0000000000..f6cc30a4eb
--- /dev/null
+++ b/app/src/main/res/drawable/format_image_24.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/drawable/format_italic_24.xml b/app/src/main/res/drawable/format_italic_24.xml
new file mode 100644
index 0000000000..7f9ea8f94b
--- /dev/null
+++ b/app/src/main/res/drawable/format_italic_24.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/drawable/format_link_24.xml b/app/src/main/res/drawable/format_link_24.xml
new file mode 100644
index 0000000000..c8c0c1b61e
--- /dev/null
+++ b/app/src/main/res/drawable/format_link_24.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/drawable/format_list_bulleted_24.xml b/app/src/main/res/drawable/format_list_bulleted_24.xml
new file mode 100644
index 0000000000..d2558d8514
--- /dev/null
+++ b/app/src/main/res/drawable/format_list_bulleted_24.xml
@@ -0,0 +1,11 @@
+
+
+
diff --git a/app/src/main/res/drawable/format_list_numbered_24.xml b/app/src/main/res/drawable/format_list_numbered_24.xml
new file mode 100644
index 0000000000..bc344d3224
--- /dev/null
+++ b/app/src/main/res/drawable/format_list_numbered_24.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/drawable/format_quote_24.xml b/app/src/main/res/drawable/format_quote_24.xml
new file mode 100644
index 0000000000..74ecc15081
--- /dev/null
+++ b/app/src/main/res/drawable/format_quote_24.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/drawable/format_spoiler_24.xml b/app/src/main/res/drawable/format_spoiler_24.xml
new file mode 100644
index 0000000000..647711b4d3
--- /dev/null
+++ b/app/src/main/res/drawable/format_spoiler_24.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/drawable/format_strikethrough_24.xml b/app/src/main/res/drawable/format_strikethrough_24.xml
new file mode 100644
index 0000000000..a7556219ac
--- /dev/null
+++ b/app/src/main/res/drawable/format_strikethrough_24.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/drawable/format_title_24.xml b/app/src/main/res/drawable/format_title_24.xml
new file mode 100644
index 0000000000..4b15683f54
--- /dev/null
+++ b/app/src/main/res/drawable/format_title_24.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/drawable/format_video_24.xml b/app/src/main/res/drawable/format_video_24.xml
new file mode 100644
index 0000000000..9813485dae
--- /dev/null
+++ b/app/src/main/res/drawable/format_video_24.xml
@@ -0,0 +1,11 @@
+
+
+
diff --git a/app/src/main/res/drawable/format_youtube_24.xml b/app/src/main/res/drawable/format_youtube_24.xml
new file mode 100644
index 0000000000..909e5a21b2
--- /dev/null
+++ b/app/src/main/res/drawable/format_youtube_24.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_markdown_creator.xml b/app/src/main/res/layout/activity_markdown_creator.xml
index 87af585d2d..504557a0db 100644
--- a/app/src/main/res/layout/activity_markdown_creator.xml
+++ b/app/src/main/res/layout/activity_markdown_creator.xml
@@ -1,107 +1,253 @@
-
+ android:fitsSystemWindows="false">
-
-
-
-
-
+
+
-
-
-
-
-
+ android:orientation="horizontal"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+ android:layout_height="wrap_content"
+ android:orientation="horizontal">
+
+
+
+
+
+
+
+
+
+
+
+
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_status.xml b/app/src/main/res/layout/fragment_status.xml
index c5fdd65fd7..4660a18294 100644
--- a/app/src/main/res/layout/fragment_status.xml
+++ b/app/src/main/res/layout/fragment_status.xml
@@ -65,6 +65,18 @@
+
Apply
Cancel
Edit
+ Publish
+ Write a response…
This Season
Next Season
Previous Season