Skip to content

Commit

Permalink
Added support for sharing any word from across the OS to the app to f…
Browse files Browse the repository at this point in the history
…ind it's meaning.
  • Loading branch information
103sbavert committed Jan 12, 2021
1 parent b629446 commit 97c48cf
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 39 deletions.
4 changes: 2 additions & 2 deletions app/build.gradle
Expand Up @@ -36,8 +36,8 @@ android {
applicationId "com.sbeve.jada"
minSdkVersion 21
targetSdkVersion 30
versionCode 22
versionName 'v4.3.0'
versionCode 23
versionName 'v4.3.1'
}

buildTypes {
Expand Down
5 changes: 5 additions & 0 deletions app/src/main/AndroidManifest.xml
Expand Up @@ -17,6 +17,11 @@
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter android:label="@string/search">
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity>
</application>
</manifest>
23 changes: 22 additions & 1 deletion app/src/main/java/com/sbeve/jada/activities/MainActivity.kt
Expand Up @@ -24,7 +24,6 @@ class MainActivity : AppCompatActivity() {
val applicationPreferences: SharedPreferences by lazy {
getPreferences(Context.MODE_PRIVATE)
}

private lateinit var binding: ActivityMainBinding

override fun onCreate(savedInstanceState: Bundle?) {
Expand All @@ -36,4 +35,26 @@ class MainActivity : AppCompatActivity() {
override fun onSupportNavigateUp(): Boolean {
return NavigationUI.navigateUp(navController, appBarConfiguration)
}


/*
private fun hideSoftKeyboard() {
val imm: InputMethodManager = getSystemService(AppCompatActivity.INPUT_METHOD_SERVICE) as InputMethodManager
//Find the currently focused view, so we can grab the correct window token from it.
var view = currentFocus
//If no view currently has focus, create a new one, just so we can grab a window token from it
if (view == null) {
view = View(this)
}
imm.hideSoftInputFromWindow(view.windowToken, 0)
}
private fun showSoftKeyboard(view: View) {
val imm: InputMethodManager = getSystemService(AppCompatActivity.INPUT_METHOD_SERVICE) as InputMethodManager
imm.showSoftInput(view, 0)
}
*/

}
67 changes: 31 additions & 36 deletions app/src/main/java/com/sbeve/jada/fragments/main/MainFragment.kt
@@ -1,5 +1,7 @@
package com.sbeve.jada.fragments.main

import android.content.DialogInterface
import android.content.Intent
import android.content.SharedPreferences
import android.os.Bundle
import android.view.View
Expand All @@ -20,7 +22,7 @@ import com.sbeve.jada.recyclerview_utils.ViewHolderClickListener
import com.sbeve.jada.retrofit_utils.RetrofitInit
import com.sbeve.jada.room_utils.RecentQuery

class MainFragment : Fragment(R.layout.fragment_main), ViewHolderClickListener,
class MainFragment : Fragment(R.layout.fragment_main), SearchView.OnQueryTextListener, ViewHolderClickListener,
SharedPreferences.OnSharedPreferenceChangeListener {
private val navController: NavController by lazy {
this.findNavController()
Expand Down Expand Up @@ -53,73 +55,56 @@ class MainFragment : Fragment(R.layout.fragment_main), ViewHolderClickListener,

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

fragmentMainBinding = FragmentMainBinding.bind(view)
fragmentMainBinding.changeLanguageGearIcon.setOnClickListener {
createChangeLanguageDialog().show()
createChangeLanguageDialog(null).show()
}
fragmentMainBinding.clearAllButton.setOnClickListener {
viewModel.clear()
}
fragmentMainBinding.queriesRecyclerView.setHasFixedSize(true)
fragmentMainBinding.queriesRecyclerView.adapter = adapter

//set up an observer to update the recycler view whenever the database is updated
updateRecyclerView()


if (mainActivityContext.intent.action == Intent.ACTION_SEND) {
handleSharedText(mainActivityContext.intent.getStringExtra(Intent.EXTRA_TEXT)!!)
mainActivityContext.intent.action = Intent.ACTION_MAIN
}

//set the text view's text to show whichever language is selected and update the text whenever the setting is changed
fragmentMainBinding.currentLanguage.text = RetrofitInit.supportedLanguages.first[savedLanguageIndex]
mainActivityContext.applicationPreferences.registerOnSharedPreferenceChangeListener(this)

fragmentMainBinding.searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String): Boolean {
viewModel.addQuery(RecentQuery(query, savedLanguageIndex))
navController.navigate(MainFragmentDirections.actionMainFragmentToResultFragment(query, savedLanguageIndex))

return true
}

override fun onQueryTextChange(newText: String?) = false
})
fragmentMainBinding.searchView.setOnQueryTextListener(this)
}

//play an empty animation to keep the fragment from disappearing from the background when the enter animation for other fragments is playing
override fun onCreateAnimation(transit: Int, enter: Boolean, nextAnim: Int) = stayInPlaceAnimation

//change language dialog to change the language to be used by the dictionary
private fun createChangeLanguageDialog() =
private fun createChangeLanguageDialog(action: ((dialogInterface: DialogInterface, item: Int) -> Unit)?) =
MaterialAlertDialogBuilder(mainActivityContext)
.setTitle(getString(R.string.choose_a_language))
.setSingleChoiceItems(RetrofitInit.supportedLanguages.first, savedLanguageIndex)
{ dialogInterface, i ->
{ dialogInterface, item ->
mainActivityContext.applicationPreferences
.edit()
.putInt(getString(R.string.language_setting_key), i)
.putInt(getString(R.string.language_setting_key), item)
.apply()
dialogInterface.dismiss()
action?.invoke(dialogInterface, item)
}
.create()

/*
//hides the keyboard
private fun hideSoftKeyboard() {
val imm: InputMethodManager = mainActivityContext.getSystemService(AppCompatActivity.INPUT_METHOD_SERVICE) as InputMethodManager
//Find the currently focused view, so we can grab the correct window token from it.
var view = mainActivityContext.currentFocus
//If no view currently has focus, create a new one, just so we can grab a window token from it
if (view == null) {
view = View(activity)
}
imm.hideSoftInputFromWindow(view.windowToken, 0)
}

private fun showSoftKeyboard(view: View) {
val imm: InputMethodManager = mainActivityContext.getSystemService(AppCompatActivity.INPUT_METHOD_SERVICE) as InputMethodManager
imm.showSoftInput(view, 0)
private fun handleSharedText(sharedText: String) {
createChangeLanguageDialog { _, _ ->
navController.navigate(MainFragmentDirections.actionMainFragmentToResultFragment(sharedText, savedLanguageIndex))
viewModel.addQuery(RecentQuery(sharedText, savedLanguageIndex))
}.show()
}
*/

private fun updateRecyclerView() {
viewModel.allQueries.observe(viewLifecycleOwner) {
Expand Down Expand Up @@ -159,4 +144,14 @@ class MainFragment : Fragment(R.layout.fragment_main), ViewHolderClickListener,
}
}
}

//navigate to the result fragment and show the results for submitted query. Asynchronously update the database.
override fun onQueryTextSubmit(query: String): Boolean {
viewModel.addQuery(RecentQuery(query, savedLanguageIndex))
navController.navigate(MainFragmentDirections.actionMainFragmentToResultFragment(query, savedLanguageIndex))
return true
}

//nothing to implement
override fun onQueryTextChange(newText: String?) = false
}
1 change: 1 addition & 0 deletions app/src/main/res/values/strings.xml
Expand Up @@ -29,4 +29,5 @@
<string name="clear_button_text">Clear recent searches</string>
<string name="delete_query_button_text">Delete Query</string>
<string name="no_recent_searches_found">No recent searches to show</string>
<string name="search">Find Definition</string>
</resources>

0 comments on commit 97c48cf

Please sign in to comment.