Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,15 @@
<activity
android:name=".ui.AboutActivity"
android:parentActivityName=".ui.MainActivity" />

<service
android:name="androidx.appcompat.app.AppLocalesMetadataHolderService"
android:enabled="false"
android:exported="false">
<meta-data
android:name="autoStoreLocales"
android:value="true" />
</service>
</application>

</manifest>
4 changes: 4 additions & 0 deletions app/src/main/java/app/opass/ccip/ui/DrawerMenuAdapter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ class DrawerMenuAdapter(
merged.addAll(features.map(FeatureItem.Companion::fromFeature))
merged.addAll(arrayOf(
DividerItem,
MenuAction.LAUNCH_LANGUAGE_PREFERENCE_FRAGMENT,
MenuAction.LAUNCH_ABOUT_SCREEN
))
return merged
Expand All @@ -120,12 +121,14 @@ class DrawerMenuAdapter(
private fun getTitleByAction(action: MenuAction): String {
return when (action) {
MenuAction.SWITCH_EVENT -> context.resources.getString(R.string.switch_event)
MenuAction.LAUNCH_LANGUAGE_PREFERENCE_FRAGMENT -> context.getString(R.string.switch_language)
MenuAction.LAUNCH_ABOUT_SCREEN -> context.getString(R.string.about_app)
}
}

private fun getIconByAction(action: MenuAction): Int = when (action) {
MenuAction.SWITCH_EVENT -> R.drawable.ic_swap_horiz_black_24dp
MenuAction.LAUNCH_LANGUAGE_PREFERENCE_FRAGMENT -> R.drawable.ic_languages_black_24dp
MenuAction.LAUNCH_ABOUT_SCREEN -> R.drawable.ic_info_black_24dp
}

Expand Down Expand Up @@ -192,6 +195,7 @@ object DividerItem

enum class MenuAction {
SWITCH_EVENT,
LAUNCH_LANGUAGE_PREFERENCE_FRAGMENT,
LAUNCH_ABOUT_SCREEN
}

Expand Down
126 changes: 126 additions & 0 deletions app/src/main/java/app/opass/ccip/ui/LanguagePreferenceFragment.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
package app.opass.ccip.ui

import android.app.Dialog
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.appcompat.app.AppCompatDelegate
import androidx.core.os.LocaleListCompat
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.FragmentManager
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import app.opass.ccip.R
import com.google.android.material.dialog.MaterialAlertDialogBuilder

class LanguagePreferenceFragment : DialogFragment() {

companion object {
private const val TAG = "LanguagePreferenceFragment"

fun show(fragmentManager: FragmentManager) {
LanguagePreferenceFragment().show(fragmentManager, TAG)
}
}

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val recyclerView = RecyclerView(requireContext()).apply {
layoutParams = RecyclerView.LayoutParams(
RecyclerView.LayoutParams.MATCH_PARENT,
RecyclerView.LayoutParams.MATCH_PARENT
)
layoutManager = LinearLayoutManager(requireContext())
adapter = LanguagePreferenceAdapter(
items = listOf(
LanguageOptionItem(
key = "en-US",
localName = requireContext().getString(R.string.lang_local_name_en_us),
translatedName = requireContext().getString(R.string.lang_translated_name_en_us)
),
LanguageOptionItem(
key = "nan-Hant-TW",
localName = requireContext().getString(R.string.lang_local_name_nan_hant_tw),
translatedName = requireContext().getString(R.string.lang_translated_name_nan_hant_tw)
),
LanguageOptionItem(
key = "nan-Latn-TW-pehoeji",
localName = requireContext().getString(R.string.lang_local_name_nan_latn_tw_pehoeji),
translatedName = requireContext().getString(R.string.lang_translated_name_nan_latn_tw_pehoeji)
),
LanguageOptionItem(
key = "nan-Latn-TW-tailo",
localName = requireContext().getString(R.string.lang_local_name_nan_latn_tw_tailo),
translatedName = requireContext().getString(R.string.lang_translated_name_nan_latn_tw_tailo)
),
LanguageOptionItem(
key = "hi-IN",
localName = requireContext().getString(R.string.lang_local_name_hi_in),
translatedName = requireContext().getString(R.string.lang_translated_name_hi_in)
),
LanguageOptionItem(
key = "nb-NO",
localName = requireContext().getString(R.string.lang_local_name_nb_no),
translatedName = requireContext().getString(R.string.lang_translated_name_nb_no)
),
LanguageOptionItem(
key = "ta-IN",
localName = requireContext().getString(R.string.lang_local_name_ta_in),
translatedName = requireContext().getString(R.string.lang_translated_name_ta_in)
),
LanguageOptionItem(
key = "zh-Hant-TW",
localName = requireContext().getString(R.string.lang_local_name_zh_hant_tw),
translatedName = requireContext().getString(R.string.lang_translated_name_zh_hant_tw)
)
)
) { item ->
dialog?.dismiss()
AppCompatDelegate.setApplicationLocales(
LocaleListCompat.forLanguageTags(item.key)
)
}
}

return MaterialAlertDialogBuilder(requireContext())
.setTitle(R.string.choose_app_language)
.setView(recyclerView)
.create()
}
}

data class LanguageOptionItem(
val key: String,
val localName: String,
val translatedName: String
)

class LanguagePreferenceAdapter(
private val items: List<LanguageOptionItem>,
private val onItemClick: (LanguageOptionItem) -> Unit
) : RecyclerView.Adapter<LanguagePreferenceViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): LanguagePreferenceViewHolder =
LayoutInflater.from(parent.context)
.inflate(R.layout.item_option_language, parent, false)
.let(::LanguagePreferenceViewHolder)
.apply {
itemView.setOnClickListener {
val pos = getBindingAdapterPosition()
if (pos != RecyclerView.NO_POSITION) onItemClick(items[pos])
}
}

override fun getItemCount() = items.size

override fun onBindViewHolder(holder: LanguagePreferenceViewHolder, position: Int) {
val item = items[position]
holder.localName.text = item.localName
holder.translatedName.text = item.translatedName
}
}

class LanguagePreferenceViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val localName: TextView = view.findViewById(R.id.option_local_name)
val translatedName: TextView = view.findViewById(R.id.option_translated_name)
}
5 changes: 5 additions & 0 deletions app/src/main/java/app/opass/ccip/ui/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,11 @@ class MainActivity : AppCompatActivity(), CoroutineScope {
this.startActivity(Intent(this, EventActivity::class.java))
finish()
}
MenuAction.LAUNCH_LANGUAGE_PREFERENCE_FRAGMENT -> {
LanguagePreferenceFragment.show(supportFragmentManager)
mDrawerLayout.closeDrawers()
return
}
MenuAction.LAUNCH_ABOUT_SCREEN -> {
this.startActivity(Intent(this, AboutActivity::class.java))
}
Expand Down
9 changes: 9 additions & 0 deletions app/src/main/res/drawable/ic_languages_black_24dp.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="20.0"
android:viewportHeight="20.0">
<path
android:fillColor="#FF000000"
android:pathData="M20,18h-1.44a0.6,0.6 0,0 1,-0.4 -0.12,0.8 0.8,0 0,1 -0.23,-0.31L17,15h-5l-1,2.54a0.8,0.8 0,0 1,-0.22 0.3,0.6 0.6,0 0,1 -0.4,0.14L9,17.98l4.55,-11.47h1.89zM16.47,13.69L14.89,9.5a12,12 0,0 1,-0.39 -1.24q-0.09,0.37 -0.19,0.69l-0.19,0.56 -1.58,4.19zM10.17,12.11a13.4,13.4 0,0 1,-2.91 -1.41,11.46 11.46,0 0,0 2.81,-5.37L12,5.33L12,4L7.31,4a4,4 0,0 0,-0.2 -0.56C6.87,2.79 6.6,2 6.6,2l-1.47,0.5s0.4,0.89 0.6,1.5L0,4v1.33h2.15A11.23,11.23 0,0 0,5 10.7a17.2,17.2 0,0 1,-5 2.1q0.56,0.82 0.87,1.38a23.3,23.3 0,0 0,5.22 -2.51,15.6 15.6,0 0,0 3.56,1.77zM3.63,5.33h4.91a8.1,8.1 0,0 1,-2.45 4.45,9.1 9.1,0 0,1 -2.46,-4.45"/>
</vector>
28 changes: 28 additions & 0 deletions app/src/main/res/layout/item_option_language.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:focusable="true"
android:orientation="vertical"
android:paddingStart="32dp"
android:paddingTop="16dp"
android:paddingEnd="8dp"
android:paddingBottom="16dp">

<TextView
android:id="@+id/option_local_name"
style="@style/TextAppearance.MaterialComponents.Body1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/textColorPrimary"
tools:text="繁體中文" />

<TextView
android:id="@+id/option_translated_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
tools:text="Mandarin - Traditional Han script" />
</LinearLayout>
10 changes: 10 additions & 0 deletions app/src/main/res/values-zh-rTW/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,16 @@
<string name="wifi_saved">已儲存 Wi-Fi 網路資訊</string>
<string name="failed_to_save_wifi">無法儲存 Wi-Fi 網路資訊</string>
<string name="failed_to_save_wifi_copied_to_clipboard">無法儲存 Wi-Fi 網路資訊。網路密碼已複製到剪貼簿。</string>
<string name="switch_language">切換語言</string>
<string name="choose_app_language">選擇應用程式語言</string>
<string name="lang_translated_name_en_us">英語</string>
<string name="lang_translated_name_nan_hant_tw">閩南語 - 傳統漢字</string>
<string name="lang_translated_name_nan_latn_tw_pehoeji">閩南語 - 白話字</string>
<string name="lang_translated_name_nan_latn_tw_tailo">閩南語 - 臺羅拼音</string>
<string name="lang_translated_name_hi_in">印地語</string>
<string name="lang_translated_name_nb_no">書面挪威語</string>
<string name="lang_translated_name_ta_in">坦米爾語</string>
<string name="lang_translated_name_zh_hant_tw">繁體中文</string>
<string name="about_app">關於 &appname;</string>
<string name="version">版本 %s</string>
<string name="privacy_policy">隱私權政策</string>
Expand Down
20 changes: 19 additions & 1 deletion app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@
<string name="bookmark_channel_name">Session bookmark</string>
<string name="notification_session_start">%1$s will start in 10 minutes at %2$s</string>
<string name="invalid_token">Invalid QR code, invite link, or token</string>
<string name="tap_here_to_scan">Tap here to scan the KKTIX QR Code ticket via the camera or gallery
<string name="tap_here_to_scan">Tap here to scan the KKTIX QR code ticket via the camera or gallery
</string>
<string name="enter_token_button">I have a token</string>
<string name="enter_your_token">Enter your token</string>
Expand Down Expand Up @@ -94,6 +94,24 @@
<string name="wifi_saved">Wi-Fi network saved</string>
<string name="failed_to_save_wifi">Failed to save Wi-Fi network</string>
<string name="failed_to_save_wifi_copied_to_clipboard">Failed to save the Wi-Fi information. Password copied to clipboard.</string>
<string name="switch_language">Switch language</string>
<string name="choose_app_language">Choose app language</string>
<string name="lang_local_name_en_us" translatable="false">English</string>
<string name="lang_translated_name_en_us">English</string>
<string name="lang_local_name_nan_hant_tw" translatable="false">閩南語 - 傳統漢字</string>
<string name="lang_translated_name_nan_hant_tw">Hokkien - Traditional Han script</string>
<string name="lang_local_name_nan_latn_tw_pehoeji" translatable="false">Bân-lâm-gú - Pe̍h-ōe-jī</string>
<string name="lang_translated_name_nan_latn_tw_pehoeji">Hokkien - Pe̍h-ōe-jī</string>
<string name="lang_local_name_nan_latn_tw_tailo" translatable="false">Bân-lâm-gú - Tâi-lô</string>
<string name="lang_translated_name_nan_latn_tw_tailo">Hokkien - Tâi-lô</string>
<string name="lang_local_name_hi_in" translatable="false">हिन्दी</string>
<string name="lang_translated_name_hi_in">Hindi</string>
<string name="lang_local_name_nb_no" translatable="false">norsk bokmål</string>
<string name="lang_translated_name_nb_no">Norwegian Bokmål</string>
<string name="lang_local_name_ta_in" translatable="false">தமிழ்</string>
<string name="lang_translated_name_ta_in">Tamil</string>
<string name="lang_local_name_zh_hant_tw" translatable="false">繁體中文</string>
<string name="lang_translated_name_zh_hant_tw">Mandarin - Traditional Han script</string>
<string name="about_app">About &appname;</string>
<string name="version">Version %s</string>
<string name="privacy_policy">Privacy Policy</string>
Expand Down