Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Display Renamed Flags #16204

Closed
david-allison opened this issue Apr 18, 2024 · 7 comments · Fixed by #16218 or #16306
Closed

Display Renamed Flags #16204

david-allison opened this issue Apr 18, 2024 · 7 comments · Fixed by #16218 or #16306

Comments

@david-allison
Copy link
Member

david-allison commented Apr 18, 2024

ankitects/anki@9816227

image-1.png

    def rename_flag(self, item: SidebarItem, new_name: str) -> None:
        labels = self.col.get_config("flagLabels", {})
        labels[str(item.id)] = new_name
        self.col.set_config("flagLabels", labels)
        item.name = new_name
        self.refresh()
@david-allison
Copy link
Member Author

<string name="menu_flag_card_one">Red flag</string>
<string name="menu_flag_card_two">Orange flag</string>
<string name="menu_flag_card_three">Green flag</string>
<string name="menu_flag_card_four">Blue flag</string>
<string name="menu_flag_card_five">Pink flag</string>
<string name="menu_flag_card_six">Turquoise flag</string>
<string name="menu_flag_card_seven">Purple flag</string>

<string name="gesture_flag_red">Toggle Red Flag</string>
<string name="gesture_flag_orange">Toggle Orange Flag</string>
<string name="gesture_flag_green">Toggle Green Flag</string>
<string name="gesture_flag_blue">Toggle Blue Flag</string>
<string name="gesture_flag_pink">Toggle Pink Flag</string>
<string name="gesture_flag_turquoise">Toggle Turquoise Flag</string>
<string name="gesture_flag_purple">Toggle Purple Flag</string>
<string name="gesture_flag_remove">Remove Flag</string>

@david-allison david-allison changed the title Support Renamed Flags Display Renamed Flags Apr 18, 2024
@david-allison
Copy link
Member Author

Untested patch to get started:

Subject: [PATCH] fix tests
---
Index: AnkiDroid/src/main/java/com/ichi2/anki/Flag.kt
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/Flag.kt b/AnkiDroid/src/main/java/com/ichi2/anki/Flag.kt
--- a/AnkiDroid/src/main/java/com/ichi2/anki/Flag.kt	(revision a75ef34cf93c809931752f986f7b7ef95d51480b)
+++ b/AnkiDroid/src/main/java/com/ichi2/anki/Flag.kt	(date 1713444409705)
@@ -15,11 +15,26 @@
  */
 package com.ichi2.anki
 
+import android.content.Context
 import androidx.annotation.ColorRes
 import androidx.annotation.DrawableRes
+import com.ichi2.anki.CollectionManager.withCol
 import com.ichi2.libanki.Card
 import com.ichi2.libanki.CardId
 import com.ichi2.libanki.Collection
+import org.json.JSONObject
+
+// this is not part of the enum as getFlagNames should be used to handle overrides
+private val flagToName = hashMapOf(
+    Flag.NONE to R.string.menu_flag_card_zero,
+    Flag.RED to R.string.menu_flag_card_one,
+    Flag.ORANGE to R.string.menu_flag_card_two,
+    Flag.GREEN to R.string.menu_flag_card_three,
+    Flag.BLUE to R.string.menu_flag_card_four,
+    Flag.PINK to R.string.menu_flag_card_five,
+    Flag.TURQUOISE to R.string.menu_flag_card_six,
+    Flag.PURPLE to R.string.menu_flag_card_seven,
+)
 
 enum class Flag(val code: Int, @DrawableRes val drawableRes: Int, @ColorRes val browserColorRes: Int?) {
     NONE(0, R.drawable.ic_flag_transparent, null),
@@ -39,3 +54,19 @@
 }
 fun Collection.setUserFlag(flag: Flag, cids: List<CardId>) = this.setUserFlag(flag.code, cids)
 fun Card.setUserFlag(flag: Flag) = this.setUserFlag(flag.code)
+
+suspend fun getFlagNames(context: Context): Map<Flag, String> {
+    val overrides = withCol {  config.getObject("flagLabels", JSONObject()) }
+    return Flag.entries.associateWith {
+        overrides.getStringOrNull(it.code.toString()) ?: context.getString(flagToName[it]!!)
+    }
+}
+
+private fun JSONObject.getStringOrNull(key: String): String? {
+    if (!has(key)) return null
+    return try {
+        getString(key)
+    } catch (_: Exception) {
+        null
+    }
+}
\ No newline at end of file
Index: AnkiDroid/src/main/java/com/ichi2/libanki/Config.kt
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/Config.kt b/AnkiDroid/src/main/java/com/ichi2/libanki/Config.kt
--- a/AnkiDroid/src/main/java/com/ichi2/libanki/Config.kt	(revision a75ef34cf93c809931752f986f7b7ef95d51480b)
+++ b/AnkiDroid/src/main/java/com/ichi2/libanki/Config.kt	(date 1713444409707)
@@ -25,6 +25,7 @@
 import net.ankiweb.rsdroid.Backend
 import net.ankiweb.rsdroid.exceptions.BackendNotFoundException
 import org.json.JSONArray
+import org.json.JSONException
 import org.json.JSONObject
 
 class Config(val backend: Backend) {
@@ -69,4 +70,15 @@
             null
         }
     }
+
+    @NotInLibAnki
+    fun getObject(key: String, default: JSONObject) : JSONObject {
+        return try {
+            JSONObject(backend.getConfigJson(key).toStringUtf8())
+        } catch (ex: BackendNotFoundException) {
+            default
+        } catch (ex: JSONException) {
+            default
+        }
+    }
 }

@criticalAY
Copy link
Contributor

Taking it up, since we already have a patch thanks to David likely test it and push it

@david-allison
Copy link
Member Author

There are ~4 usages of menu_flag_card_one which need to be replaced in addition to the patch

Nothing is tested

@criticalAY
Copy link
Contributor

Had to make some changes but I am mostly done testing and likely push the changes in the morning

@mikehardy
Copy link
Member

The related PR #16218 had the unfortunate side effect of surfacing a latent issue with windows unit testing and not-always-serialized collection-open behavior in a robolectric context, and had to be reverted

@mikehardy mikehardy reopened this Apr 26, 2024
@mikehardy mikehardy removed this from the 2.18 release milestone Apr 26, 2024
@criticalAY
Copy link
Contributor

Will get back with a better solution soon

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
3 participants