From 14f01e952e92656d6cebb3ca7ff7e6ecea64f874 Mon Sep 17 00:00:00 2001 From: Tuan Nguyen Date: Thu, 6 Mar 2025 15:47:19 +0700 Subject: [PATCH 1/3] Rename language classes from .java to .kt --- ...guageListDialogFragment.java => LanguageListDialogFragment.kt} | 0 .../{SelectLanguageActivity.java => SelectLanguageActivity.kt} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename app/src/main/java/ai/elimu/content_provider/language/{LanguageListDialogFragment.java => LanguageListDialogFragment.kt} (100%) rename app/src/main/java/ai/elimu/content_provider/language/{SelectLanguageActivity.java => SelectLanguageActivity.kt} (100%) diff --git a/app/src/main/java/ai/elimu/content_provider/language/LanguageListDialogFragment.java b/app/src/main/java/ai/elimu/content_provider/language/LanguageListDialogFragment.kt similarity index 100% rename from app/src/main/java/ai/elimu/content_provider/language/LanguageListDialogFragment.java rename to app/src/main/java/ai/elimu/content_provider/language/LanguageListDialogFragment.kt diff --git a/app/src/main/java/ai/elimu/content_provider/language/SelectLanguageActivity.java b/app/src/main/java/ai/elimu/content_provider/language/SelectLanguageActivity.kt similarity index 100% rename from app/src/main/java/ai/elimu/content_provider/language/SelectLanguageActivity.java rename to app/src/main/java/ai/elimu/content_provider/language/SelectLanguageActivity.kt From cd4d22c1e42833208173210180e4e9e0a23a82dc Mon Sep 17 00:00:00 2001 From: Tuan Nguyen Date: Thu, 6 Mar 2025 15:51:04 +0700 Subject: [PATCH 2/3] Convert language related classes to Kotlin --- .../language/LanguageListDialogFragment.kt | 163 ++++++++++-------- .../language/SelectLanguageActivity.kt | 34 ++-- 2 files changed, 102 insertions(+), 95 deletions(-) diff --git a/app/src/main/java/ai/elimu/content_provider/language/LanguageListDialogFragment.kt b/app/src/main/java/ai/elimu/content_provider/language/LanguageListDialogFragment.kt index 89e4776e..34e03c5c 100644 --- a/app/src/main/java/ai/elimu/content_provider/language/LanguageListDialogFragment.kt +++ b/app/src/main/java/ai/elimu/content_provider/language/LanguageListDialogFragment.kt @@ -1,99 +1,110 @@ -package ai.elimu.content_provider.language; - -import android.content.Intent; -import android.os.Bundle; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.recyclerview.widget.DividerItemDecoration; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - -import com.google.android.material.bottomsheet.BottomSheetDialogFragment; - -import ai.elimu.content_provider.MainActivity; -import ai.elimu.content_provider.R; -import ai.elimu.content_provider.util.SharedPreferencesHelper; -import ai.elimu.model.v2.enums.Language; +package ai.elimu.content_provider.language + +import ai.elimu.content_provider.MainActivity +import ai.elimu.content_provider.R +import ai.elimu.content_provider.util.SharedPreferencesHelper +import ai.elimu.model.v2.enums.Language +import android.content.Intent +import android.os.Bundle +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.DividerItemDecoration +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.google.android.material.bottomsheet.BottomSheetDialogFragment /** - *

A fragment that shows a list of items as a modal bottom sheet.

- *

You can show this modal bottom sheet from your activity like this:

+ * + * A fragment that shows a list of items as a modal bottom sheet. + * + * You can show this modal bottom sheet from your activity like this: *
- *     LanguageListDialogFragment.newInstance().show(getSupportFragmentManager(), "dialog");
- * 
+ * LanguageListDialogFragment.newInstance().show(getSupportFragmentManager(), "dialog"); + * */ -public class LanguageListDialogFragment extends BottomSheetDialogFragment { - - public static LanguageListDialogFragment newInstance() { - LanguageListDialogFragment fragment = new LanguageListDialogFragment(); - return fragment; - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - return inflater.inflate(R.layout.fragment_language_list_dialog_list_dialog, container, false); +class LanguageListDialogFragment : BottomSheetDialogFragment() { + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate( + R.layout.fragment_language_list_dialog_list_dialog, + container, + false + ) } - @Override - public void onViewCreated(View view, Bundle savedInstanceState) { - final RecyclerView recyclerView = (RecyclerView) view; - recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); - recyclerView.setAdapter(new LanguageAdapter()); - recyclerView.addItemDecoration(new DividerItemDecoration(getContext(), DividerItemDecoration.VERTICAL)); - - setCancelable(false); + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + val recyclerView = view as RecyclerView + recyclerView.layoutManager = LinearLayoutManager(context) + recyclerView.adapter = LanguageAdapter() + recyclerView.addItemDecoration( + DividerItemDecoration( + context, + DividerItemDecoration.VERTICAL + ) + ) + + isCancelable = false } - @Override - public int getTheme() { - return R.style.BottomSheetDialogTheme; + override fun getTheme(): Int { + return R.style.BottomSheetDialogTheme } - private class ViewHolder extends RecyclerView.ViewHolder { - - final TextView text; - - ViewHolder(LayoutInflater inflater, ViewGroup parent) { - super(inflater.inflate(R.layout.fragment_language_list_dialog_list_dialog_item, parent, false)); - text = itemView.findViewById(R.id.text); - } + private inner class ViewHolder(inflater: LayoutInflater, parent: ViewGroup?) : + RecyclerView.ViewHolder( + inflater.inflate( + R.layout.fragment_language_list_dialog_list_dialog_item, + parent, + false + ) + ) { + val text: TextView = + itemView.findViewById(R.id.text) } - private class LanguageAdapter extends RecyclerView.Adapter { - - private Language[] languages = Language.values(); + private inner class LanguageAdapter : RecyclerView.Adapter() { + private val languages = Language.entries.toTypedArray() - @Override - public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - return new ViewHolder(LayoutInflater.from(parent.getContext()), parent); + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + return ViewHolder(LayoutInflater.from(parent.context), parent) } - @Override - public void onBindViewHolder(ViewHolder holder, int position) { - final Language language = languages[position]; - holder.text.setText(language.getEnglishName() + " (" + language.getNativeName() + ")"); - holder.text.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Log.i(getClass().getName(), "onClick"); - Log.i(getClass().getName(), "language: " + language); - SharedPreferencesHelper.storeLanguage(getContext(), language); - Intent mainActivityIntent = new Intent(getContext(), MainActivity.class); - startActivity(mainActivityIntent); - getActivity().finish(); + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + val language = languages[position] + holder.text.text = language.englishName + " (" + language.nativeName + ")" + holder.text.setOnClickListener(object : View.OnClickListener { + override fun onClick(v: View) { + Log.i(javaClass.name, "onClick") + Log.i(javaClass.name, "language: $language") + SharedPreferencesHelper.storeLanguage(context, language) + val mainActivityIntent = Intent( + context, + MainActivity::class.java + ) + startActivity(mainActivityIntent) + activity!!.finish() } - }); + }) } - @Override - public int getItemCount() { - return languages.length; + override fun getItemCount(): Int { + return languages.size + } + } + + companion object { + @JvmStatic + fun newInstance(): LanguageListDialogFragment { + val fragment = LanguageListDialogFragment() + return fragment } } } diff --git a/app/src/main/java/ai/elimu/content_provider/language/SelectLanguageActivity.kt b/app/src/main/java/ai/elimu/content_provider/language/SelectLanguageActivity.kt index 8b105b43..8935a81a 100644 --- a/app/src/main/java/ai/elimu/content_provider/language/SelectLanguageActivity.kt +++ b/app/src/main/java/ai/elimu/content_provider/language/SelectLanguageActivity.kt @@ -1,27 +1,23 @@ -package ai.elimu.content_provider.language; +package ai.elimu.content_provider.language -import android.os.Bundle; -import android.util.Log; +import ai.elimu.content_provider.R +import ai.elimu.content_provider.language.LanguageListDialogFragment.Companion.newInstance +import android.os.Bundle +import android.util.Log +import androidx.appcompat.app.AppCompatActivity -import androidx.appcompat.app.AppCompatActivity; +class SelectLanguageActivity : AppCompatActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + Log.i(javaClass.name, "onCreate") + super.onCreate(savedInstanceState) -import ai.elimu.content_provider.R; - -public class SelectLanguageActivity extends AppCompatActivity { - - @Override - protected void onCreate(Bundle savedInstanceState) { - Log.i(getClass().getName(), "onCreate"); - super.onCreate(savedInstanceState); - - setContentView(R.layout.activity_select_language); + setContentView(R.layout.activity_select_language) } - @Override - protected void onStart() { - Log.i(getClass().getName(), "onStart"); - super.onStart(); + override fun onStart() { + Log.i(javaClass.name, "onStart") + super.onStart() - LanguageListDialogFragment.newInstance().show(getSupportFragmentManager(), "dialog"); + newInstance().show(supportFragmentManager, "dialog") } } From ae2507184be92fbcbfe71eda0567a4ef3f9156c8 Mon Sep 17 00:00:00 2001 From: Tuan Nguyen Date: Fri, 7 Mar 2025 09:46:44 +0700 Subject: [PATCH 3/3] Replace unsafe null assertion with safe call. --- .../content_provider/language/LanguageListDialogFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/ai/elimu/content_provider/language/LanguageListDialogFragment.kt b/app/src/main/java/ai/elimu/content_provider/language/LanguageListDialogFragment.kt index 34e03c5c..715a9925 100644 --- a/app/src/main/java/ai/elimu/content_provider/language/LanguageListDialogFragment.kt +++ b/app/src/main/java/ai/elimu/content_provider/language/LanguageListDialogFragment.kt @@ -90,7 +90,7 @@ class LanguageListDialogFragment : BottomSheetDialogFragment() { MainActivity::class.java ) startActivity(mainActivityIntent) - activity!!.finish() + activity?.finish() } }) }