Skip to content

Commit 8787900

Browse files
committed
Merge branch 'release/v1.1.0'
2 parents a18fb01 + a540746 commit 8787900

File tree

34 files changed

+705
-65
lines changed

34 files changed

+705
-65
lines changed

.idea/misc.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/build.gradle

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,9 @@ android {
6969

7070
ext {
7171
anko_version = "0.9.1"
72-
okIOVersion = "1.11.+"
73-
okHttpVersion = "3.6.+"
74-
playServicesVersion = prepareToRelease ? "10.2.1" : "9.8.0"
72+
okIOVersion = "1.12.+"
73+
okHttpVersion = "3.7.+"
74+
playServicesVersion = prepareToRelease ? "10.2.4" : "9.8.0"
7575
supportLibraryVersion = "25.3.1"
7676
threetenabpVersion = "1.0.+"
7777

@@ -109,38 +109,36 @@ dependencies {
109109
compile "com.google.firebase:firebase-config:$playServicesVersion"
110110
compile "com.google.firebase:firebase-database:$playServicesVersion"
111111
compile "com.google.firebase:firebase-messaging:$playServicesVersion"
112-
compile "com.google.firebase:firebase-storage:$playServicesVersion"
113112
releaseCompile "com.google.firebase:firebase-crash:$playServicesVersion"
114-
compile("com.firebaseui:firebase-ui-storage:1.2.0", {
115-
exclude group: "com.google.firebase", module: "firebase-storage"
116-
})
113+
compile "com.google.firebase:firebase-storage:10.2.1"
114+
compile("com.firebaseui:firebase-ui-storage:1.2.0")
117115

118116
//Fabric
119117
compile("com.crashlytics.sdk.android:answers:1.3.11") {
120118
transitive = true
121119
}
122-
compile("com.crashlytics.sdk.android:crashlytics:2.6.6") {
120+
compile("com.crashlytics.sdk.android:crashlytics:2.6.8") {
123121
transitive = true
124122
}
125123

126124
//Others
127-
compile "com.facebook.android:facebook-android-sdk:4.20.0"
125+
compile "com.facebook.android:facebook-android-sdk:4.22.0"
128126
compile "com.jakewharton.threetenabp:threetenabp:$threetenabpVersion"
129127
compile "com.jakewharton.timber:timber:4.5.1"
130128
compile "org.greenrobot:eventbus:3.0.0"
131-
compile "com.github.bumptech.glide:glide:3.7.0"
132-
compile "com.github.bumptech.glide:okhttp3-integration:1.4.0@aar"
133-
compile "com.mixpanel.android:mixpanel-android:4.9.3"
129+
compile "com.github.bumptech.glide:glide:3.8.0"
130+
compile "com.github.bumptech.glide:okhttp3-integration:1.5.0"
131+
compile "com.mixpanel.android:mixpanel-android:5.0.2"
134132
compile "com.squareup.okio:okio:$okIOVersion"
135133
compile "com.squareup.okhttp3:okhttp:$okHttpVersion"
136134

137135
compile "com.github.emanzanoaxa:RippleEffect:52ea2a0ab6"
138136
// compile "com.github.traex.rippleeffect:library:1.3"
139137
compile "com.github.miguelbcr:TableFixHeaders-Wrapper:0.2.0"
140138
compile "com.timehop.stickyheadersrecyclerview:library:0.4.3"
141-
compile "com.kyleduo.switchbutton:library:1.4.5"
139+
compile "com.kyleduo.switchbutton:library:1.4.6"
142140
compile "jp.wasabeef:recyclerview-animators:2.2.6"
143-
compile "org.jsoup:jsoup:1.10.1"
141+
compile "org.jsoup:jsoup:1.10.2"
144142
compile "com.github.chrisbanes:PhotoView:2.0.0"
145143

146144
testCompile "junit:junit:4.12"
25.7 KB
Loading
Binary file not shown.

app/src/main/kotlin/com/ediposouza/teslesgendstracker/App.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ class App : MultiDexApplication() {
2424

2525
private var ctx: Context? = null
2626

27+
var currentLanguage: String = ""
2728
var hasUserAlreadyLogged: Boolean = false
2829

2930
fun hasUserLogged() = FirebaseAuth.getInstance().currentUser != null

app/src/main/kotlin/com/ediposouza/teslesgendstracker/Constants.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ val TEXT_UNKNOWN = "unknown"
1515
val DECK_NAME_MIN_SIZE = 5
1616

1717
val PREF_USER_DONATE = "ud"
18+
val PREF_USER_LANGUAGE = "language"
1819
val PREF_NEWS_CHECK_LAST_TIME = "newsCheckPref"
1920

2021
val PPKA = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlL9jJqmVwaD9jJ68bVbu4B61CY1FLSZLMuNU/"

app/src/main/kotlin/com/ediposouza/teslesgendstracker/data/Card.kt

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import com.bumptech.glide.request.target.SimpleTarget
2121
import com.bumptech.glide.request.target.Target
2222
import com.ediposouza.teslesgendstracker.R
2323
import com.ediposouza.teslesgendstracker.TEXT_UNKNOWN
24+
import com.ediposouza.teslesgendstracker.util.getCurrentVersion
2425
import com.firebase.ui.storage.images.FirebaseImageLoader
2526
import com.google.firebase.storage.FirebaseStorage
2627
import com.google.firebase.storage.StorageReference
@@ -388,7 +389,7 @@ data class Card(
388389
val keywords: List<CardKeyword>,
389390
val text: String,
390391
val arenaTier: CardArenaTier,
391-
val arenaTierPlus: CardArenaTierPlus?,
392+
val arenaTierPlus: List<CardArenaTierPlus?>,
392393
val evolves: Boolean,
393394
val season: String
394395

@@ -403,7 +404,7 @@ data class Card(
403404
val DUMMY = Card("", "", CardSet.CORE, CardAttribute.DUAL, CardAttribute.STRENGTH,
404405
CardAttribute.WILLPOWER, CardRarity.EPIC, false, 0, 0, 0, CardType.ACTION,
405406
CardRace.ARGONIAN, emptyList<CardKeyword>(), "", CardArenaTier.AVERAGE,
406-
CardArenaTierPlus(CardArenaTierPlusType.ATTACK, CardArenaTierPlusOperator.GREAT, "5"), false, "")
407+
listOf(), false, "")
407408

408409
private const val ARTS_PATH = "Arts"
409410
private const val CARD_PATH = "Cards"
@@ -414,11 +415,14 @@ data class Card(
414415
const val SOUND_TYPE_EXTRA = "extra"
415416

416417
fun getDefaultCardImage(context: Context): Bitmap {
418+
val cardBackDrawable = ContextCompat.getDrawable(context, R.drawable.card_back)
417419
try {
418-
val cardBackDrawable = ContextCompat.getDrawable(context, R.drawable.card_back)
420+
context.resources.assets.open(CARD_BACK)?.let {
421+
return BitmapFactory.decodeStream(it)
422+
}
419423
return (cardBackDrawable as BitmapDrawable).bitmap
420424
} catch (e: Exception) {
421-
return BitmapFactory.decodeStream(context.resources.assets.open(CARD_BACK))
425+
return (cardBackDrawable as BitmapDrawable).bitmap
422426
}
423427
}
424428

@@ -430,11 +434,12 @@ data class Card(
430434
return
431435
}
432436
val imagePath = getImagePath(cardAttr, cardSet, cardShortName)
433-
Timber.d(imagePath)
437+
val remotePath = imagePath.takeIf { cardShortName.contains("_") } ?: "v${view.context.getCurrentVersion()}/$imagePath"
438+
Timber.d("Local: $imagePath - Remote: $remotePath")
434439
with(view.context) {
435440
Glide.with(this)
436441
.using(FirebaseImageLoader())
437-
.load(FirebaseStorage.getInstance().reference.child(imagePath))
442+
.load(FirebaseStorage.getInstance().reference.child(remotePath))
438443
.placeholder(BitmapDrawable(resources, getCardImageBitmap(this, imagePath, transform, onLoadDefault)))
439444
.bitmapTransform(object : Transformation<Bitmap> {
440445
override fun transform(resource: Resource<Bitmap>, outWidth: Int, outHeight: Int): Resource<Bitmap> {
@@ -456,16 +461,20 @@ data class Card(
456461
fun loadCardImageInto(context: Context, cardSet: String, cardAttr: String, cardShortName: String,
457462
onLoaded: ((Boolean) -> Unit)? = null) {
458463
if (cardShortName.isEmpty()) {
464+
onLoaded?.invoke(false)
459465
return
460466
}
461467
val imagePath = getImagePath(cardAttr, cardSet, cardShortName)
468+
val remotePath = imagePath.takeIf { cardShortName.contains("_") } ?: "v${context.getCurrentVersion()}/$imagePath"
469+
Timber.d("Local: $imagePath - Remote: $remotePath")
462470
Glide.with(context)
463471
.using(FirebaseImageLoader())
464-
.load(FirebaseStorage.getInstance().reference.child(imagePath))
472+
.load(FirebaseStorage.getInstance().reference.child(remotePath))
465473
.asBitmap()
466474
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
467475
.listener(object : RequestListener<StorageReference?, Bitmap?> {
468-
override fun onException(e: java.lang.Exception?, model: StorageReference?, target: Target<Bitmap?>?, isFirstResource: Boolean): Boolean {
476+
override fun onException(e: Exception?, model: StorageReference?, target: Target<Bitmap?>?, isFirstResource: Boolean): Boolean {
477+
Timber.d(e)
469478
onLoaded?.invoke(false)
470479
return true
471480
}
@@ -511,7 +520,7 @@ data class Card(
511520
CardType.values()[source.readInt()], CardRace.values()[source.readInt()],
512521
mutableListOf<CardKeyword>().apply { source.readList(this, CardKeyword::class.java.classLoader) },
513522
source.readString(), CardArenaTier.values()[source.readInt()],
514-
source.readParcelable<CardArenaTierPlus>(CardArenaTierPlus::class.java.classLoader),
523+
mutableListOf<CardArenaTierPlus>().apply { source.readList(this, CardArenaTierPlus::class.java.classLoader) },
515524
1 == source.readInt(), source.readString())
516525

517526
override fun describeContents() = 0
@@ -539,7 +548,6 @@ data class Card(
539548
val setName = set.name.toLowerCase().capitalize()
540549
val attrName = attr.name.toLowerCase().capitalize()
541550
val artPath = "$ARTS_PATH/$setName/$attrName/$shortName.webp"
542-
Timber.d(artPath)
543551
return artPath
544552
}
545553

@@ -551,11 +559,12 @@ data class Card(
551559
}
552560
Glide.with(context)
553561
.using(FirebaseImageLoader())
554-
.load(FirebaseStorage.getInstance().reference.child(fullArtPath()))
562+
.load(FirebaseStorage.getInstance().reference.child("v${context.getCurrentVersion()}/${fullArtPath()}"))
555563
.asBitmap()
556564
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
557565
.listener(object : RequestListener<StorageReference?, Bitmap?> {
558-
override fun onException(e: java.lang.Exception?, model: StorageReference?, target: Target<Bitmap?>?, isFirstResource: Boolean): Boolean {
566+
override fun onException(e: Exception?, model: StorageReference?, target: Target<Bitmap?>?, isFirstResource: Boolean): Boolean {
567+
Timber.d(e)
559568
onLoaded(null)
560569
return true
561570
}
@@ -623,7 +632,7 @@ data class Card(
623632
dest?.writeList(keywords)
624633
dest?.writeString(text)
625634
dest?.writeInt(arenaTier.ordinal)
626-
dest?.writeParcelable(arenaTierPlus, 0)
635+
dest?.writeList(arenaTierPlus)
627636
dest?.writeInt((if (evolves) 1 else 0))
628637
dest?.writeString(season)
629638
}

app/src/main/kotlin/com/ediposouza/teslesgendstracker/interactor/FirebaseParsers.kt

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -51,23 +51,22 @@ abstract class FirebaseParsers {
5151
text, CardArenaTier.of(arenaTier), getCardArenaTierPlus(), evolves, season)
5252
}
5353

54-
private fun getCardArenaTierPlus(): CardArenaTierPlus? {
55-
if (arenaTierPlus.keys.isEmpty()) {
56-
return null
57-
}
58-
val cardArenaTierPlusType = CardArenaTierPlusType.of(arenaTierPlus.keys.first())
59-
var operator: CardArenaTierPlusOperator? = null
60-
var value = when (cardArenaTierPlusType) {
61-
CardArenaTierPlusType.ATTACK,
62-
CardArenaTierPlusType.COST,
63-
CardArenaTierPlusType.HEALTH ->
64-
with(arenaTierPlus.values.first().split(ARENA_TIER_PLUS_VALUE_DELIMITER)) {
65-
operator = CardArenaTierPlusOperator.of(get(0))
66-
get(1)
67-
}
68-
else -> arenaTierPlus.values.first()
69-
}
70-
return CardArenaTierPlus(cardArenaTierPlusType, operator, value)
54+
private fun getCardArenaTierPlus(): List<CardArenaTierPlus?> {
55+
return arenaTierPlus.map {
56+
val cardArenaTierPlusType = CardArenaTierPlusType.of(it.key)
57+
var operator: CardArenaTierPlusOperator? = null
58+
var value = when (cardArenaTierPlusType) {
59+
CardArenaTierPlusType.ATTACK,
60+
CardArenaTierPlusType.COST,
61+
CardArenaTierPlusType.HEALTH ->
62+
with(it.value.split(ARENA_TIER_PLUS_VALUE_DELIMITER)) {
63+
operator = CardArenaTierPlusOperator.of(get(0))
64+
get(1)
65+
}
66+
else -> it.value
67+
}
68+
CardArenaTierPlus(cardArenaTierPlusType, operator, value)
69+
}.toList()
7170
}
7271

7372
fun toCardStatistic(shortName: String): CardStatistic {

app/src/main/kotlin/com/ediposouza/teslesgendstracker/ui/DashActivity.kt

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.ediposouza.teslesgendstracker.ui
22

3+
import android.content.DialogInterface
34
import android.content.Intent
45
import android.net.Uri
56
import android.os.Build
@@ -17,8 +18,11 @@ import android.text.format.DateUtils
1718
import android.view.Gravity
1819
import android.view.MenuItem
1920
import android.view.View
21+
import android.view.ViewGroup
2022
import android.webkit.CookieManager
2123
import android.webkit.CookieSyncManager
24+
import android.widget.ArrayAdapter
25+
import android.widget.TextView
2226
import com.ediposouza.teslesgendstracker.*
2327
import com.ediposouza.teslesgendstracker.interactor.PrivateInteractor
2428
import com.ediposouza.teslesgendstracker.interactor.PublicInteractor
@@ -216,6 +220,7 @@ class DashActivity : BaseFilterActivity(),
216220
MetricsManager.trackAction(MetricAction.ACTION_SHARE())
217221
true
218222
}
223+
R.id.menu_language -> showLanguageDialog()
219224
R.id.menu_about -> showAboutDialog()
220225
else -> false
221226
}
@@ -294,6 +299,38 @@ class DashActivity : BaseFilterActivity(),
294299
}
295300
}
296301

302+
private fun showLanguageDialog(): Boolean {
303+
val languages = resources.getStringArray(R.array.languages)
304+
AlertDialog.Builder(this, R.style.AppDialog)
305+
.setAdapter(object : ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, languages) {
306+
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
307+
return (super.getView(position, convertView, parent) as TextView).apply {
308+
setTextColor(ContextCompat.getColor(context, R.color.primary_text_dark))
309+
setCompoundDrawablesWithIntrinsicBounds(when (position) {
310+
0 -> R.drawable.lang_en
311+
1 -> R.drawable.lang_ptbr
312+
2 -> R.drawable.lang_es
313+
3 -> R.drawable.lang_de
314+
4 -> R.drawable.lang_ru
315+
else -> R.drawable.ic_menu_earth
316+
}, 0, 0, 0)
317+
compoundDrawablePadding = resources.getDimensionPixelSize(R.dimen.default_margin)
318+
}
319+
}
320+
}, DialogInterface.OnClickListener { dialog, which ->
321+
dialog.dismiss()
322+
changeAppLanguage(when (which) {
323+
1 -> "pt-br"
324+
2 -> "es"
325+
3 -> "de"
326+
4 -> "ru"
327+
else -> "en"
328+
})
329+
})
330+
.show()
331+
return true
332+
}
333+
297334
private fun showAboutDialog(): Boolean {
298335
val dialogView = View.inflate(this, R.layout.dialog_about, null).apply {
299336
about_dialog_version.text = packageManager.getPackageInfo(packageName, 0).versionName

app/src/main/kotlin/com/ediposouza/teslesgendstracker/ui/arena/widget/ArenaDraftCards.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,14 @@ class ArenaDraftCards(ctx: Context?, attrs: AttributeSet?, defStyleAttr: Int) :
190190
return Pair(value + totalValueExtra, cardsSynergy)
191191
}
192192

193+
private fun calcCardSynergyPoints(arenaTierPlus: List<CardArenaTierPlus?>, draftedCard: Card, reverseCalc: Boolean = false): Int {
194+
if (arenaTierPlus.isEmpty()) {
195+
return 0
196+
}
197+
val extraSynergyPoints = arenaTierPlus.map { calcCardSynergyPoints(it, draftedCard, reverseCalc) }
198+
return 0.takeIf { extraSynergyPoints.contains(0) } ?: extraSynergyPoints.first()
199+
}
200+
193201
private fun calcCardSynergyPoints(arenaTierPlus: CardArenaTierPlus?, draftedCard: Card, reverseCalc: Boolean = false): Int {
194202
if (arenaTierPlus == null) {
195203
return 0

0 commit comments

Comments
 (0)