Skip to content

Commit

Permalink
Merge branch 'master' into 3777-create-capture-session-deprecation
Browse files Browse the repository at this point in the history
  • Loading branch information
dogi authored Jul 8, 2024
2 parents fe3e21f + 46fcfdf commit a38c583
Show file tree
Hide file tree
Showing 14 changed files with 139 additions and 91 deletions.
12 changes: 6 additions & 6 deletions .github/workflows/android-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
matrix:
build: [default, lite]
env:
FILES: |
LITES: |
app/src/main/AndroidManifest.xml
app/src/main/java/org/ole/planet/myplanet/base/PermissionActivity.kt
app/src/main/java/org/ole/planet/myplanet/base/BaseContainerFragment.kt
Expand All @@ -30,9 +30,9 @@ jobs:
- name: check for .lite diffs
if: matrix.build == 'lite'
run: |
echo "${{ env.FILES }}" | xargs -n 1 | while read file; do
echo "${{ env.LITES }}" | xargs -n 1 | while read file; do
ls -al $file*
diff "$file" "$file.lite" || true
diff <(sed 's/^\s*\/\///; s/^\s*<!--//; s/-->\s*$//' "$file") <(sed 's/^\s*\/\///; s/^\s*<!--//; s/-->\s*$//' "$file.lite")
done
- name: setup JDK 17
Expand All @@ -52,12 +52,12 @@ jobs:
- name: diff the code to get lite
if: matrix.build == 'lite'
run: |
echo "${{ env.FILES }}" | xargs -n 1 | while read file; do
ls -al app/build.gradle
sed -i 's/\(versionName "[0-9.]\+\)"/\1-lite"/' app/build.gradle
echo "${{ env.LITES }}" | xargs -n 1 | while read file; do
ls -al $file*
cp "${file}.lite" "$file"
done
ls -al app/build.gradle
sed -i 's/\(versionName "[0-9.]\+\)"/\1-lite"/' app/build.gradle
- name: build debug as test
run: ./gradlew assembleDebug --configuration-cache --no-daemon
31 changes: 17 additions & 14 deletions .github/workflows/android-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,16 @@ jobs:
matrix:
build: [default, lite]
env:
FILES: |
LITES: |
app/src/main/AndroidManifest.xml
app/src/main/java/org/ole/planet/myplanet/base/PermissionActivity.kt
app/src/main/java/org/ole/planet/myplanet/base/BaseContainerFragment.kt
app/src/main/java/org/ole/planet/myplanet/ui/dashboard/DashboardActivity.kt
OUTPUTS: |
.apk
.apk.sha256
.aab
.aab.sha256
steps:
- name: checkout repository code
Expand All @@ -44,13 +49,13 @@ jobs:
- name: diff the code to get lite
if: matrix.build == 'lite'
run: |
echo "${{ env.FILES }}" | xargs -n 1 | while read file; do
echo ANDROID_VERSION_LITE=$(grep -oP 'versionName "\K[^\"]+' app/build.gradle) >> $GITHUB_ENV
ls -al app/build.gradle
sed -i 's/\(versionName "[0-9.]\+\)"/\1-lite"/' app/build.gradle
echo "${{ env.LITES }}" | xargs -n 1 | while read file; do
ls -al $file*
cp "${file}.lite" "$file"
done
ls -al app/build.gradle
echo ANDROID_VERSION_LITE=$(grep -oP 'versionName "\K[^\"]+' app/build.gradle) >> $GITHUB_ENV
sed -i 's/\(versionName "[0-9.]\+\)"/\1-lite"/' app/build.gradle
- name: build release APK and AAB
run: |
Expand Down Expand Up @@ -108,12 +113,11 @@ jobs:
- name: rename APK and AAB with version and branch for artifact
if: github.event_name == 'workflow_dispatch'
run: |
echo "BRANCHNAME=${GITHUB_REF##*/}" >> $GITHUB_ENV
mv output/myPlanet.apk output/myPlanet-${{ env.ANDROID_VERSION_NAME }}-${{ env.BRANCHNAME }}.apk
mv output/myPlanet.apk.sha256 output/myPlanet-${{ env.ANDROID_VERSION_NAME }}-${{ env.BRANCHNAME }}.apk.sha256
mv output/myPlanet.aab output/myPlanet-${{ env.ANDROID_VERSION_NAME }}-${{ env.BRANCHNAME }}.aab
mv output/myPlanet.aab.sha256 output/myPlanet-${{ env.ANDROID_VERSION_NAME }}-${{ env.BRANCHNAME }}.aab.sha256
echo "${{ env.OUTPUTS }}" | xargs -n 1 | while read type; do
mv "output/myPlanet${type}" "output/myPlanet-${{ env.ANDROID_VERSION_NAME }}-${GITHUB_REF##*/}${type}"
done
ls -alR output
echo "BRANCHNAME=${GITHUB_REF##*/}" >> $GITHUB_ENV
- name: upload APK and AAB as build artifact
if: github.event_name == 'workflow_dispatch'
Expand All @@ -126,10 +130,9 @@ jobs:
- name: pre-process files and tag for lite version
if: github.event_name != 'workflow_dispatch' && matrix.build == 'lite'
run: |
mv output/myPlanet.apk output/myPlanet-lite.apk
mv output/myPlanet.apk.sha256 output/myPlanet-lite.apk.sha256
mv output/myPlanet.aab output/myPlanet-lite.aab
mv output/myPlanet.aab.sha256 output/myPlanet-lite.aab.sha256
echo "${{ env.OUTPUTS }}" | xargs -n 1 | while read type; do
mv "output/myPlanet${type}" "output/myPlanet-lite${type}"
done
echo "ANDROID_VERSION_NAME=${ANDROID_VERSION_LITE}" >> $GITHUB_ENV
- name: release APK and AAB on GitHub
Expand Down
31 changes: 16 additions & 15 deletions app/src/main/java/org/ole/planet/myplanet/ui/chat/ChatAdapter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import org.ole.planet.myplanet.R
import org.ole.planet.myplanet.databinding.ItemAiResponseMessageBinding
import org.ole.planet.myplanet.databinding.ItemUserMessageBinding

Expand All @@ -16,8 +17,8 @@ class ChatAdapter(private val chatList: ArrayList<String>, val context: Context,
private lateinit var textAiMessageBinding: ItemAiResponseMessageBinding
var responseSource: Int = RESPONSE_SOURCE_UNKNOWN

private val VIEW_TYPE_QUERY = 1
private val VIEW_TYPE_RESPONSE = 2
private val viewTypeQuery = 1
private val viewTypeResponse = 2
companion object {
const val RESPONSE_SOURCE_SHARED_VIEW_MODEL = 1
const val RESPONSE_SOURCE_NETWORK = 2
Expand All @@ -29,36 +30,36 @@ class ChatAdapter(private val chatList: ArrayList<String>, val context: Context,
}
}

class ResponseViewHolder(private val textAiMessageBinding: ItemAiResponseMessageBinding) : RecyclerView.ViewHolder(textAiMessageBinding.root) {
class ResponseViewHolder(private val textAiMessageBinding: ItemAiResponseMessageBinding, val context: Context) : RecyclerView.ViewHolder(textAiMessageBinding.root) {
fun bind(response: String, responseSource: Int) {
if(responseSource == RESPONSE_SOURCE_NETWORK){
val typingDelayMillis = 10L
val typingAnimationDurationMillis = response.length * typingDelayMillis
textAiMessageBinding.textGchatMessageOther.text = ""
textAiMessageBinding.textGchatMessageOther.text = context.getString(R.string.empty_text)
Handler(Looper.getMainLooper()).postDelayed({
animateTyping(response, typingDelayMillis)
animateTyping(response)
}, typingAnimationDurationMillis)
} else if(responseSource == RESPONSE_SOURCE_SHARED_VIEW_MODEL){
if (response != "") {
if (response.isNotEmpty()) {
textAiMessageBinding.textGchatMessageOther.text = response
} else{
textAiMessageBinding.textGchatMessageOther.visibility = View.GONE
}
}
}

private fun animateTyping(response: String, typingDelayMillis: Long) {
private fun animateTyping(response: String) {
var currentIndex = 0
val typingRunnable = object : Runnable {
override fun run() {
if (currentIndex < response.length) {
textAiMessageBinding.textGchatMessageOther.text = response.substring(0, currentIndex + 1)
currentIndex++
Handler(Looper.getMainLooper()).postDelayed(this, typingDelayMillis)
Handler(Looper.getMainLooper()).postDelayed(this, 10L)
}
}
}
Handler(Looper.getMainLooper()).postDelayed(typingRunnable, typingDelayMillis)
Handler(Looper.getMainLooper()).postDelayed(typingRunnable, 10L)
}
}

Expand Down Expand Up @@ -90,18 +91,18 @@ class ChatAdapter(private val chatList: ArrayList<String>, val context: Context,
}

override fun getItemViewType(position: Int): Int {
return if (position % 2 == 0) VIEW_TYPE_QUERY else VIEW_TYPE_RESPONSE
return if (position % 2 == 0) viewTypeQuery else viewTypeResponse
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return when (viewType) {
VIEW_TYPE_QUERY -> {
viewTypeQuery -> {
textUserMessageBinding = ItemUserMessageBinding.inflate(LayoutInflater.from(context), parent, false)
QueryViewHolder(textUserMessageBinding)
}
VIEW_TYPE_RESPONSE -> {
viewTypeResponse -> {
textAiMessageBinding = ItemAiResponseMessageBinding.inflate(LayoutInflater.from(context), parent, false)
ResponseViewHolder(textAiMessageBinding)
ResponseViewHolder(textAiMessageBinding, context)
}
else -> throw IllegalArgumentException("Invalid view type")
}
Expand All @@ -111,11 +112,11 @@ class ChatAdapter(private val chatList: ArrayList<String>, val context: Context,
val chatItem = chatList[position]
Log.d("ChatAdapter", "chatList: $chatList")
when (holder.itemViewType) {
VIEW_TYPE_QUERY -> {
viewTypeQuery -> {
val queryViewHolder = holder as QueryViewHolder
queryViewHolder.bind(chatItem)
}
VIEW_TYPE_RESPONSE -> {
viewTypeResponse -> {
val responseViewHolder = holder as ResponseViewHolder
responseViewHolder.bind(chatItem, responseSource)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,12 +123,12 @@ class ChatDetailFragment : Fragment() {
}
}

sharedViewModel.getSelected_id().observe(viewLifecycleOwner) { selected_id ->
_id = selected_id
sharedViewModel.getSelected_id().observe(viewLifecycleOwner) { selectedId ->
_id = selectedId
}

sharedViewModel.getSelected_rev().observe(viewLifecycleOwner) { selected_rev ->
_rev = selected_rev
sharedViewModel.getSelected_rev().observe(viewLifecycleOwner) { selectedRev ->
_rev = selectedRev
}
view.post {
clearChatDetail()
Expand Down Expand Up @@ -292,7 +292,7 @@ class ChatDetailFragment : Fragment() {
}
} else {
fragmentChatDetailBinding.textGchatIndicator.visibility = View.VISIBLE
fragmentChatDetailBinding.textGchatIndicator.text = "${responseBody.message}"
fragmentChatDetailBinding.textGchatIndicator.text = context?.getString(R.string.message_placeholder, responseBody.message)
val jsonObject = JsonObject()
jsonObject.addProperty("_rev", "")
jsonObject.addProperty("_id", "")
Expand Down Expand Up @@ -361,15 +361,15 @@ class ChatDetailFragment : Fragment() {
RealmChatHistory.insert(mRealm, jsonObject)
}
fragmentChatDetailBinding.textGchatIndicator.visibility = View.VISIBLE
fragmentChatDetailBinding.textGchatIndicator.text = "${t.message}"
fragmentChatDetailBinding.textGchatIndicator.text = context?.getString(R.string.message_placeholder, t.message)
fragmentChatDetailBinding.buttonGchatSend.isEnabled = true
fragmentChatDetailBinding.editGchatMessage.isEnabled = true
fragmentChatDetailBinding.imageGchatLoading.visibility = View.INVISIBLE
}
})
}

private fun continueChatRequest(content: RequestBody, _id: String, query: String) {
private fun continueChatRequest(content: RequestBody, id: String, query: String) {
fragmentChatDetailBinding.buttonGchatSend.isEnabled = false
fragmentChatDetailBinding.editGchatMessage.isEnabled = false
fragmentChatDetailBinding.imageGchatLoading.visibility = View.VISIBLE
Expand All @@ -385,16 +385,16 @@ class ChatDetailFragment : Fragment() {
mAdapter.responseSource = ChatAdapter.RESPONSE_SOURCE_NETWORK
mAdapter.addResponse(chatResponse)
_rev = "${response.body()?.couchDBResponse?.rev}"
continueConversationRealm(_id, query, chatResponse)
continueConversationRealm(id, query, chatResponse)
}
} else {
fragmentChatDetailBinding.textGchatIndicator.visibility = View.VISIBLE
fragmentChatDetailBinding.textGchatIndicator.text = "${responseBody.message}"
fragmentChatDetailBinding.textGchatIndicator.text = context?.getString(R.string.message_placeholder, responseBody.message)
}
} else {
fragmentChatDetailBinding.textGchatIndicator.visibility = View.VISIBLE
fragmentChatDetailBinding.textGchatIndicator.text = getString(R.string.request_failed_please_retry)
continueConversationRealm(_id, query, "")
continueConversationRealm(id, query, "")
}

fragmentChatDetailBinding.buttonGchatSend.isEnabled = true
Expand All @@ -403,19 +403,19 @@ class ChatDetailFragment : Fragment() {
}

override fun onFailure(call: Call<ChatModel>, t: Throwable) {
continueConversationRealm(_id, query, "")
continueConversationRealm(id, query, "")
fragmentChatDetailBinding.textGchatIndicator.visibility = View.VISIBLE
fragmentChatDetailBinding.textGchatIndicator.text = "${t.message}"
fragmentChatDetailBinding.textGchatIndicator.text = context?.getString(R.string.message_placeholder, t.message)
fragmentChatDetailBinding.buttonGchatSend.isEnabled = true
fragmentChatDetailBinding.editGchatMessage.isEnabled = true
fragmentChatDetailBinding.imageGchatLoading.visibility = View.INVISIBLE
}
})
}

private fun continueConversationRealm(_id:String, query:String, chatResponse:String) {
private fun continueConversationRealm(id:String, query:String, chatResponse:String) {
try {
addConversationToChatHistory(mRealm, _id, query, chatResponse)
addConversationToChatHistory(mRealm, id, query, chatResponse)
mRealm.commitTransaction()
} catch (e: Exception) {
e.printStackTrace()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ class ChatHistoryListAdapter(var context: Context, private var chatHistory: List
private var newsList: RealmResults<RealmNews>? = null

interface ChatHistoryItemClickListener {
fun onChatHistoryItemClicked(conversations: RealmList<Conversation>?, _id: String, _rev: String?)
fun onChatHistoryItemClicked(conversations: RealmList<Conversation>?, id: String, rev: String?)
}

fun setChatHistoryItemClickListener(listener: ChatHistoryItemClickListener) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,10 +75,10 @@ class ChatHistoryListFragment : Fragment() {
}
val adapter = ChatHistoryListAdapter(requireContext(), list, this)
adapter.setChatHistoryItemClickListener(object : ChatHistoryListAdapter.ChatHistoryItemClickListener {
override fun onChatHistoryItemClicked(conversations: RealmList<Conversation>?, _id: String, _rev:String?) {
override fun onChatHistoryItemClicked(conversations: RealmList<Conversation>?, id: String, rev:String?) {
conversations?.let { sharedViewModel.setSelectedChatHistory(it) }
sharedViewModel.setSelected_id(_id)
_rev?.let { sharedViewModel.setSelected_rev(it) }
sharedViewModel.setSelected_id(id)
rev?.let { sharedViewModel.setSelected_rev(it) }

fragmentChatHistoryListBinding.slidingPaneLayout.openPane()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,14 @@ package org.ole.planet.myplanet.ui.helpwanted

import android.content.Context
import android.content.SharedPreferences
import android.os.Build
import android.os.Bundle
import android.text.Html
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.annotation.RequiresApi
import androidx.core.text.HtmlCompat
import androidx.fragment.app.Fragment
import com.google.gson.JsonObject
import com.google.gson.JsonParser.parseString
Expand All @@ -26,16 +29,17 @@ class HelpWantedFragment : Fragment() {
return fragmentHelpWantedBinding.root
}

@RequiresApi(Build.VERSION_CODES.N)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val boldName = "<b>" + getString(R.string.name_colon) + "</b>"
val boldEmail = "<b>" + getString(R.string.email_colon) + "</b>"
val boldPhone = "<b>" + getString(R.string.phone_number_colon) + "</b>"
if (manager != null) {
fragmentHelpWantedBinding.llData.visibility = View.VISIBLE
fragmentHelpWantedBinding.tvName.text = Html.fromHtml(boldName + getString("name", manager))
fragmentHelpWantedBinding.tvEmail.text = Html.fromHtml(boldEmail + getString("name", manager))
fragmentHelpWantedBinding.tvPhone.text = Html.fromHtml(boldPhone + getString("phoneNumber", manager))
fragmentHelpWantedBinding.tvName.text = Html.fromHtml(boldName + getString("name", manager), HtmlCompat.FROM_HTML_MODE_LEGACY)
fragmentHelpWantedBinding.tvEmail.text = Html.fromHtml(boldEmail + getString("name", manager), HtmlCompat.FROM_HTML_MODE_LEGACY)
fragmentHelpWantedBinding.tvPhone.text = Html.fromHtml(boldPhone + getString("phoneNumber", manager), HtmlCompat.FROM_HTML_MODE_LEGACY)
} else {
fragmentHelpWantedBinding.llData.visibility = View.GONE
fragmentHelpWantedBinding.tvNodata.setText(R.string.no_data_available)
Expand Down
Loading

0 comments on commit a38c583

Please sign in to comment.