stock-news-app / app / src / main / java / edu / utap / stocknewsapp / api / NewsData.kt
NewsData.kt
Raw
package edu.utap.stocknewsapp.api

import android.text.SpannableString
import com.google.gson.annotations.SerializedName

class NewsData (
    // Useful for MarketAux getting news
    @SerializedName("uuid")
    val uuid: String? = null,
    @SerializedName("title")
    val title: SpannableString? = null,
    @SerializedName("description")
    val description: SpannableString? = null,
    @SerializedName("url")
    val url: String? = null,
    @SerializedName("image_url")
    val image_url: String? = null,
    @SerializedName("entities")
    val entities: List<NewsData>? = null,

    // Useful for MarketAux search query
    @SerializedName("symbol")
    val symbol: String? = "",
    @SerializedName("name")
    val name: String? = "",
    @SerializedName("exchange")
    val exchange: String? = "",

    // Useful for FinnHub api
    var currentPrice: String? = null,
    var dollarChange: String? = null,
    var percentChange: String? = null
) {
    companion object {
        // NB: This only highlights the first match in a string
        fun spannableStringsEqual(a: SpannableString?, b: SpannableString?): Boolean {
            if (a == null && b == null) return true
            if (a == null && b != null) return false
            if (a != null && b == null) return false
            val spA = a!!.getSpans(0, a.length, Any::class.java)
            val spB = b!!.getSpans(0, b.length, Any::class.java)
            return a.toString() == b.toString()
                    &&
                    spA.size == spB.size && spA.equals(spB)
        }
    }
}
        /*
        private fun findAndSetSpan(fulltext: SpannableString, subtext: String): Boolean {
            if (subtext.isEmpty()) return true
            val i = fulltext.indexOf(subtext, ignoreCase = true)
            if (i == -1) return false
            fulltext.setSpan(
                ForegroundColorSpan(Color.CYAN), i, i + subtext.length,
                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
            )
            return true
        }
        */