Loading app/src/main/java/io/eelo/appinstaller/application/ApplicationActivity.kt +15 −4 Original line number Diff line number Diff line Loading @@ -168,10 +168,21 @@ class ApplicationActivity : AppCompatActivity(), ApplicationStateListener { startActivity(intent) } val decimalFormat = DecimalFormat("##.0") appRating.text = decimalFormat.format(basicData.score).toString() if (basicData.score != -1f) { appRating.text = basicData.score.toString() } else { appRating.text = getString(R.string.not_available) } if (basicData.score != -1f) { appPrivacyScore.text = fullData.privacyScore.toString() } else { appPrivacyScore.text = getString(R.string.not_available) } if (basicData.score != -1f) { appEnergyScore.text = fullData.energyScore.toString() } else { appEnergyScore.text = getString(R.string.not_available) } basicData.loadImagesAsyncly { showImages(it) Loading app/src/main/java/io/eelo/appinstaller/application/ApplicationViewHolder.kt +5 −20 Original line number Diff line number Diff line Loading @@ -53,31 +53,16 @@ class ApplicationViewHolder(private val activity: Activity, private val view: Vi title.text = app.basicData!!.name author.text = app.basicData!!.author ratingBar.rating = app.basicData!!.score val decimalFormat = DecimalFormat("##.0") rating.text = decimalFormat.format(app.basicData!!.score).toString() rating.setTextColor(findStarsColor(app.basicData!!.score)) if (app.basicData!!.score != -1f) { rating.text = app.basicData!!.score.toString() } else { rating.text = activity.getString(R.string.not_available) } // TODO Use exodus rating from basic data //privacyScore.text = app.fullData!!.privacyScore.toString() //privacyScore.setTextColor(findPrivacyColor(app.fullData!!.privacyScore)) stateChanged(app.state) } private fun findStarsColor(stars: Float): Int { return view.context.resources.getColor(when { stars >= 4.0f -> R.color.colorRatingGood stars >= 3.0f -> R.color.colorRatingNeutral else -> R.color.colorRatingBad }) } private fun findPrivacyColor(privacyScore: Float): Int { return view.context.resources.getColor(when { privacyScore >= 7.0f -> R.color.colorRatingGood privacyScore >= 4.0f -> R.color.colorRatingNeutral else -> R.color.colorRatingBad }) } override fun stateChanged(state: State) { Execute({}, { installButton.text = view.context.resources.getString(state.installButtonTextId) Loading app/src/main/java/io/eelo/appinstaller/application/model/data/BasicData.kt +24 −5 Original line number Diff line number Diff line Loading @@ -4,10 +4,13 @@ import android.graphics.Bitmap import android.graphics.BitmapFactory import com.fasterxml.jackson.annotation.JsonCreator import com.fasterxml.jackson.annotation.JsonProperty import io.eelo.appinstaller.utils.Constants import io.eelo.appinstaller.utils.Constants.BASE_URL import io.eelo.appinstaller.utils.Error import io.eelo.appinstaller.utils.Execute import io.eelo.appinstaller.utils.ImagesLoader import java.net.URL import javax.net.ssl.HttpsURLConnection class BasicData @JsonCreator constructor(@param:JsonProperty("package_name") val packageName: String, Loading Loading @@ -46,10 +49,15 @@ constructor(@param:JsonProperty("package_name") val packageName: String, fun loadIconAsync(getter: (Bitmap) -> Unit) { if (icon == null) { var error: Error? = null Execute({ loadIconSynced() error = loadIconSynced() }, { icon?.let { getter.invoke(it) } if (error == null) { icon?.let { getter.invoke(it) } } }) } else { getter.invoke(icon!!) Loading @@ -57,11 +65,22 @@ constructor(@param:JsonProperty("package_name") val packageName: String, } @Synchronized private fun loadIconSynced() { private fun loadIconSynced(): io.eelo.appinstaller.utils.Error? { if (icon == null) { try { val url = URL(BASE_URL + "media/" + iconUri) icon = BitmapFactory.decodeStream(url.openStream()) val urlConnection = url.openConnection() as HttpsURLConnection urlConnection.requestMethod = Constants.REQUEST_METHOD urlConnection.connectTimeout = Constants.CONNECT_TIMEOUT urlConnection.readTimeout = Constants.READ_TIMEOUT icon = BitmapFactory.decodeStream(urlConnection.inputStream) urlConnection.disconnect() } catch (e: Exception) { e.printStackTrace() return io.eelo.appinstaller.utils.Error.UNKNOWN } } return null } fun updateLoadedImages(other: BasicData) { Loading app/src/main/java/io/eelo/appinstaller/utils/ImagesLoader.kt +13 −2 Original line number Diff line number Diff line Loading @@ -6,6 +6,7 @@ import android.os.AsyncTask import java.net.URL import java.util.concurrent.BlockingQueue import java.util.concurrent.LinkedBlockingQueue import javax.net.ssl.HttpsURLConnection class ImagesLoader(private val imagesUri: Array<String>) { Loading Loading @@ -54,8 +55,18 @@ class ImagesLoader(private val imagesUri: Array<String>) { override fun doInBackground(vararg params: BlockingQueue<Image>): Any? { val queue = params[0] try { val url = URL(Constants.BASE_URL + "media/" + uri) image = BitmapFactory.decodeStream(url.openStream()) val urlConnection = url.openConnection() as HttpsURLConnection urlConnection.requestMethod = Constants.REQUEST_METHOD urlConnection.connectTimeout = Constants.CONNECT_TIMEOUT urlConnection.readTimeout = Constants.READ_TIMEOUT image = BitmapFactory.decodeStream(urlConnection.inputStream) urlConnection.disconnect() } catch (e: Exception) { e.printStackTrace() return null } queue.put(this) return null } Loading Loading
app/src/main/java/io/eelo/appinstaller/application/ApplicationActivity.kt +15 −4 Original line number Diff line number Diff line Loading @@ -168,10 +168,21 @@ class ApplicationActivity : AppCompatActivity(), ApplicationStateListener { startActivity(intent) } val decimalFormat = DecimalFormat("##.0") appRating.text = decimalFormat.format(basicData.score).toString() if (basicData.score != -1f) { appRating.text = basicData.score.toString() } else { appRating.text = getString(R.string.not_available) } if (basicData.score != -1f) { appPrivacyScore.text = fullData.privacyScore.toString() } else { appPrivacyScore.text = getString(R.string.not_available) } if (basicData.score != -1f) { appEnergyScore.text = fullData.energyScore.toString() } else { appEnergyScore.text = getString(R.string.not_available) } basicData.loadImagesAsyncly { showImages(it) Loading
app/src/main/java/io/eelo/appinstaller/application/ApplicationViewHolder.kt +5 −20 Original line number Diff line number Diff line Loading @@ -53,31 +53,16 @@ class ApplicationViewHolder(private val activity: Activity, private val view: Vi title.text = app.basicData!!.name author.text = app.basicData!!.author ratingBar.rating = app.basicData!!.score val decimalFormat = DecimalFormat("##.0") rating.text = decimalFormat.format(app.basicData!!.score).toString() rating.setTextColor(findStarsColor(app.basicData!!.score)) if (app.basicData!!.score != -1f) { rating.text = app.basicData!!.score.toString() } else { rating.text = activity.getString(R.string.not_available) } // TODO Use exodus rating from basic data //privacyScore.text = app.fullData!!.privacyScore.toString() //privacyScore.setTextColor(findPrivacyColor(app.fullData!!.privacyScore)) stateChanged(app.state) } private fun findStarsColor(stars: Float): Int { return view.context.resources.getColor(when { stars >= 4.0f -> R.color.colorRatingGood stars >= 3.0f -> R.color.colorRatingNeutral else -> R.color.colorRatingBad }) } private fun findPrivacyColor(privacyScore: Float): Int { return view.context.resources.getColor(when { privacyScore >= 7.0f -> R.color.colorRatingGood privacyScore >= 4.0f -> R.color.colorRatingNeutral else -> R.color.colorRatingBad }) } override fun stateChanged(state: State) { Execute({}, { installButton.text = view.context.resources.getString(state.installButtonTextId) Loading
app/src/main/java/io/eelo/appinstaller/application/model/data/BasicData.kt +24 −5 Original line number Diff line number Diff line Loading @@ -4,10 +4,13 @@ import android.graphics.Bitmap import android.graphics.BitmapFactory import com.fasterxml.jackson.annotation.JsonCreator import com.fasterxml.jackson.annotation.JsonProperty import io.eelo.appinstaller.utils.Constants import io.eelo.appinstaller.utils.Constants.BASE_URL import io.eelo.appinstaller.utils.Error import io.eelo.appinstaller.utils.Execute import io.eelo.appinstaller.utils.ImagesLoader import java.net.URL import javax.net.ssl.HttpsURLConnection class BasicData @JsonCreator constructor(@param:JsonProperty("package_name") val packageName: String, Loading Loading @@ -46,10 +49,15 @@ constructor(@param:JsonProperty("package_name") val packageName: String, fun loadIconAsync(getter: (Bitmap) -> Unit) { if (icon == null) { var error: Error? = null Execute({ loadIconSynced() error = loadIconSynced() }, { icon?.let { getter.invoke(it) } if (error == null) { icon?.let { getter.invoke(it) } } }) } else { getter.invoke(icon!!) Loading @@ -57,11 +65,22 @@ constructor(@param:JsonProperty("package_name") val packageName: String, } @Synchronized private fun loadIconSynced() { private fun loadIconSynced(): io.eelo.appinstaller.utils.Error? { if (icon == null) { try { val url = URL(BASE_URL + "media/" + iconUri) icon = BitmapFactory.decodeStream(url.openStream()) val urlConnection = url.openConnection() as HttpsURLConnection urlConnection.requestMethod = Constants.REQUEST_METHOD urlConnection.connectTimeout = Constants.CONNECT_TIMEOUT urlConnection.readTimeout = Constants.READ_TIMEOUT icon = BitmapFactory.decodeStream(urlConnection.inputStream) urlConnection.disconnect() } catch (e: Exception) { e.printStackTrace() return io.eelo.appinstaller.utils.Error.UNKNOWN } } return null } fun updateLoadedImages(other: BasicData) { Loading
app/src/main/java/io/eelo/appinstaller/utils/ImagesLoader.kt +13 −2 Original line number Diff line number Diff line Loading @@ -6,6 +6,7 @@ import android.os.AsyncTask import java.net.URL import java.util.concurrent.BlockingQueue import java.util.concurrent.LinkedBlockingQueue import javax.net.ssl.HttpsURLConnection class ImagesLoader(private val imagesUri: Array<String>) { Loading Loading @@ -54,8 +55,18 @@ class ImagesLoader(private val imagesUri: Array<String>) { override fun doInBackground(vararg params: BlockingQueue<Image>): Any? { val queue = params[0] try { val url = URL(Constants.BASE_URL + "media/" + uri) image = BitmapFactory.decodeStream(url.openStream()) val urlConnection = url.openConnection() as HttpsURLConnection urlConnection.requestMethod = Constants.REQUEST_METHOD urlConnection.connectTimeout = Constants.CONNECT_TIMEOUT urlConnection.readTimeout = Constants.READ_TIMEOUT image = BitmapFactory.decodeStream(urlConnection.inputStream) urlConnection.disconnect() } catch (e: Exception) { e.printStackTrace() return null } queue.put(this) return null } Loading