Skip to content

Commit e5ddf0c

Browse files
committed
Merge branch 'release/v1.3.1'
2 parents 23e59e1 + 6963564 commit e5ddf0c

File tree

23 files changed

+326
-497
lines changed

23 files changed

+326
-497
lines changed

.idea/misc.xml

Lines changed: 4 additions & 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: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
apply plugin: 'com.android.application'
22
apply plugin: 'com.google.firebase.firebase-crash'
3-
apply plugin: 'com.google.firebase.firebase-perf'
3+
//apply plugin: 'com.google.firebase.firebase-perf'
44
apply plugin: 'kotlin-android'
55
apply plugin: 'kotlin-android-extensions'
66
apply plugin: 'io.fabric'
@@ -80,7 +80,7 @@ ext {
8080
coroutines_version = "0.15"
8181
okIOVersion = "1.12.+"
8282
okHttpVersion = "3.7.+"
83-
playServicesVersion = "11.0.0"
83+
playServicesVersion = "10.2.4"
8484
supportLibraryVersion = "25.4.0"
8585
threetenabpVersion = "1.0.+"
8686

@@ -123,10 +123,10 @@ dependencies {
123123
compile "com.google.firebase:firebase-config:$playServicesVersion"
124124
compile "com.google.firebase:firebase-database:$playServicesVersion"
125125
compile "com.google.firebase:firebase-messaging:$playServicesVersion"
126-
compile "com.google.firebase:firebase-perf:$playServicesVersion"
127-
compile "com.google.firebase:firebase-storage:$playServicesVersion"
126+
// compile "com.google.firebase:firebase-perf:$playServicesVersion"
128127
releaseCompile "com.google.firebase:firebase-crash:$playServicesVersion"
129-
compile("com.firebaseui:firebase-ui-storage:2.0.0")
128+
compile "com.google.firebase:firebase-storage:10.2.1"
129+
compile "com.firebaseui:firebase-ui-storage:1.2.0"
130130

131131
//Fabric
132132
compile('com.crashlytics.sdk.android:answers:1.3.13') {

app/src/main/AndroidManifest.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@
5858
android:name=".ui.cards.CardFullArtActivity"
5959
android:screenOrientation="portrait"
6060
android:theme="@style/AppThemeTransparent" />
61+
<activity
62+
android:name=".ui.cards.CardLevelActivity"
63+
android:screenOrientation="portrait"
64+
android:theme="@style/AppThemeTransparent" />
6165
<activity
6266
android:name=".ui.decks.DeckActivity"
6367
android:screenOrientation="portrait" />

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,14 @@ import timber.log.Timber
2626
enum class CardSet(val title: String) {
2727

2828
CORE("Core"),
29+
HEROESOFSKYRIM("Heroes of Skyrim"),
2930
MADHOUSE("Madhouse Collection"),
3031
FALLOFTHEDARKBROTHERHOOD("The Fall of the Dark Brotherhood"),
3132
TOKENS("Tokens"),
3233
UNKNOWN(TEXT_UNKNOWN);
3334

3435
var unknownSetName = ""
36+
var unknownSetTitle = ""
3537

3638
val db = name.toLowerCase()
3739

@@ -384,7 +386,8 @@ data class Card(
384386
val arenaTier: CardArenaTier,
385387
val arenaTierPlus: List<CardArenaTierPlus?>,
386388
val evolves: Boolean,
387-
val season: String
389+
val season: String,
390+
val shout: Int
388391

389392
) : Comparable<Card>, Parcelable {
390393

@@ -397,7 +400,7 @@ data class Card(
397400
val DUMMY = Card("", "", CardSet.CORE, CardAttribute.DUAL, CardAttribute.STRENGTH,
398401
CardAttribute.WILLPOWER, CardRarity.EPIC, false, 0, 0, 0, CardType.ACTION,
399402
CardRace.ARGONIAN, emptyList<CardKeyword>(), "", CardArenaTier.AVERAGE,
400-
listOf(), false, "")
403+
listOf(), false, "", 0)
401404

402405
const val ARTS_PATH = "Arts"
403406
const val CARD_PATH = "Cards"
@@ -417,7 +420,7 @@ data class Card(
417420
mutableListOf<CardKeyword>().apply { source.readList(this, CardKeyword::class.java.classLoader) },
418421
source.readString(), CardArenaTier.values()[source.readInt()],
419422
mutableListOf<CardArenaTierPlus>().apply { source.readList(this, CardArenaTierPlus::class.java.classLoader) },
420-
1 == source.readInt(), source.readString())
423+
1 == source.readInt(), source.readString(), source.readInt())
421424

422425
override fun describeContents() = 0
423426

@@ -515,6 +518,7 @@ data class Card(
515518
dest?.writeList(arenaTierPlus)
516519
dest?.writeInt((if (evolves) 1 else 0))
517520
dest?.writeString(season)
521+
dest?.writeInt(shout)
518522
}
519523

520524
override fun compareTo(other: Card): Int {

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ abstract class FirebaseParsers {
3232
val attr1: String = ""
3333
val attr2: String = ""
3434
val season: String = ""
35+
val shout: Int = 0
3536

3637
fun toCard(shortName: String, set: CardSet, attr: CardAttribute): Card {
3738
var clsAttr1 = attr
@@ -48,7 +49,7 @@ abstract class FirebaseParsers {
4849
.mapTo(arrayListOf<CardKeyword>()) {
4950
CardKeyword.of(it)
5051
},
51-
text, CardArenaTier.of(arenaTier), getCardArenaTierPlus(), evolves, season)
52+
text, CardArenaTier.of(arenaTier), getCardArenaTierPlus(), evolves, season, shout)
5253
}
5354

5455
private fun getCardArenaTierPlus(): List<CardArenaTierPlus?> {

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

Lines changed: 30 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -144,23 +144,43 @@ object PublicInteractor : BaseInteractor() {
144144
})
145145
}
146146

147+
private fun getSpoilerSet(onSuccess: (String) -> Unit) {
148+
database.child(NODE_SPOILER).child(KEY_SPOILER_SET)
149+
.addListenerForSingleValueEvent(object : ValueEventListener {
150+
151+
override fun onDataChange(ds: DataSnapshot) {
152+
val name = "${ds.value}"
153+
Timber.d(name)
154+
onSuccess.invoke(name.takeIf { it != "null" } ?: "")
155+
}
156+
157+
override fun onCancelled(de: DatabaseError) {
158+
Timber.d("Fail: " + de.message)
159+
}
160+
161+
})
162+
}
163+
147164
fun getSpoilerCards(onSuccess: (List<Card>) -> Unit) {
148165
with(database.child(NODE_SPOILER).child(NODE_SPOILER_CARDS).orderByChild(KEY_CARD_COST)) {
149166
keepSynced()
150167
addValueEventListener(object : ValueEventListener {
151168

152169
override fun onDataChange(ds: DataSnapshot) {
153-
getSpoilerSet { spoilerSet ->
154-
val set = CardSet.UNKNOWN.apply {
155-
unknownSetName = spoilerSet
170+
getSpoilerTitle { spoilerTitle ->
171+
getSpoilerSet { spoilerSet ->
172+
val set = CardSet.UNKNOWN.apply {
173+
unknownSetName = spoilerSet
174+
unknownSetTitle = spoilerTitle
175+
}
176+
val cards = ds.children.map {
177+
val attr = CardAttribute.valueOf(it.key.toUpperCase())
178+
it.children.map {
179+
it.getValue(FirebaseParsers.CardParser::class.java)?.toCard(it.key, set, attr)
180+
}.filterNotNull()
181+
}.flatMap { it }
182+
onSuccess.invoke(cards)
156183
}
157-
val cards = ds.children.map {
158-
val attr = CardAttribute.valueOf(it.key.toUpperCase())
159-
it.children.map {
160-
it.getValue(FirebaseParsers.CardParser::class.java)?.toCard(it.key, set, attr)
161-
}.filterNotNull()
162-
}.flatMap { it }
163-
onSuccess.invoke(cards)
164184
}
165185
}
166186

@@ -172,23 +192,6 @@ object PublicInteractor : BaseInteractor() {
172192
}
173193
}
174194

175-
private fun getSpoilerSet(onSuccess: (String) -> Unit) {
176-
database.child(NODE_SPOILER).child(KEY_SPOILER_SET)
177-
.addListenerForSingleValueEvent(object : ValueEventListener {
178-
179-
override fun onDataChange(ds: DataSnapshot) {
180-
val name = "${ds.value}"
181-
Timber.d(name)
182-
onSuccess.invoke(name.takeIf { it != "null" } ?: "")
183-
}
184-
185-
override fun onCancelled(de: DatabaseError) {
186-
Timber.d("Fail: " + de.message)
187-
}
188-
189-
})
190-
}
191-
192195
fun getCardsForStatistics(set: CardSet?, onSuccess: (List<CardStatistic>) -> Unit) {
193196
getListFromSets(set, onSuccess) { set, onEachSuccess ->
194197
database.child(NODE_CARDS).child(set.db).orderByChild(KEY_CARD_COST)

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ class DashActivity : BaseFilterActivity(),
171171
}
172172

173173
override fun onDestroy() {
174-
if (!App.hasUserDonate()) {
174+
if (BuildConfig.PREPARE_TO_RELEASE && !App.hasUserDonate()) {
175175
adsInterstitial.show()
176176
}
177177
try {
@@ -304,6 +304,7 @@ class DashActivity : BaseFilterActivity(),
304304
}
305305
}
306306
}
307+
intent = Intent()
307308
}
308309

309310
private fun updateUserMenuInfo() {

app/src/main/kotlin/com/ediposouza/teslesgendstracker/ui/cards/CardActivity.kt

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ import android.support.design.widget.BottomSheetBehavior
2020
import android.support.v4.app.ActivityCompat
2121
import android.support.v4.app.ActivityOptionsCompat
2222
import android.support.v4.view.ViewCompat
23-
import android.support.v7.view.ContextThemeWrapper
2423
import android.support.v7.widget.*
2524
import android.text.format.DateUtils
2625
import android.transition.Transition
26+
import android.view.ContextThemeWrapper
2727
import android.view.View
2828
import android.view.ViewGroup
2929
import android.view.ViewTreeObserver
@@ -33,6 +33,7 @@ import com.ediposouza.teslesgendstracker.R
3333
import com.ediposouza.teslesgendstracker.SEASON_UUID_PATTERN
3434
import com.ediposouza.teslesgendstracker.data.Card
3535
import com.ediposouza.teslesgendstracker.data.CardBasicInfo
36+
import com.ediposouza.teslesgendstracker.data.CardSet
3637
import com.ediposouza.teslesgendstracker.interactor.PrivateInteractor
3738
import com.ediposouza.teslesgendstracker.interactor.PublicInteractor
3839
import com.ediposouza.teslesgendstracker.ui.base.BaseActivity
@@ -42,6 +43,7 @@ import com.google.firebase.storage.FirebaseStorage
4243
import kotlinx.android.synthetic.main.activity_card.*
4344
import kotlinx.android.synthetic.main.include_card_info.*
4445
import kotlinx.android.synthetic.main.itemlist_card_full.view.*
46+
import kotlinx.android.synthetic.main.itemlist_card_min.view.*
4547
import org.jetbrains.anko.intentFor
4648
import org.jetbrains.anko.toast
4749
import org.threeten.bp.YearMonth
@@ -282,7 +284,9 @@ class CardActivity : BaseActivity() {
282284

283285
private fun loadCardInfo() {
284286
updateFavoriteButton()
285-
card_set.text = card.set.title
287+
card_set.text = card.set.let { set ->
288+
set.title.takeIf { set != CardSet.UNKNOWN } ?: set.unknownSetTitle
289+
}
286290
if (card.season.isNotEmpty()) {
287291
val yearMonth = YearMonth.parse(card.season, DateTimeFormatter.ofPattern(SEASON_UUID_PATTERN))
288292
val month = yearMonth.month.getDisplayName(TextStyle.FULL, Locale.getDefault())
@@ -293,6 +297,26 @@ class CardActivity : BaseActivity() {
293297
card_race_desc.text = card.race.desc
294298
card_race_desc.visibility = View.GONE.takeIf { card.race.desc.isEmpty() } ?: View.VISIBLE
295299
card_arena_tier.text = card.arenaTier.name.toLowerCase().capitalize()
300+
configureShoutLevels()
301+
}
302+
303+
private fun configureShoutLevels() {
304+
if (card.shout > 1) {
305+
card_levels_label.visibility = View.VISIBLE
306+
with(card_levels_rv) {
307+
visibility = View.VISIBLE
308+
layoutManager = LinearLayoutManager(this@CardActivity, LinearLayoutManager.HORIZONTAL, false)
309+
val shoutCards = (2..card.shout).asSequence().map { card to it }.toList()
310+
adapter = CardLevelsAdapter(shoutCards) { view, level ->
311+
val intent = intentFor<CardLevelActivity>(CardLevelActivity.EXTRA_CARD to card,
312+
CardLevelActivity.EXTRA_CARD_LEVEL to level)
313+
ActivityCompat.startActivity(this@CardActivity, intent,
314+
ActivityOptionsCompat.makeSceneTransitionAnimation(this@CardActivity,
315+
view, getString(R.string.card_full_transition_name)).toBundle())
316+
}
317+
setHasFixedSize(true)
318+
}
319+
}
296320
}
297321

298322
private fun configureRecycleView() {
@@ -589,4 +613,28 @@ class CardActivity : BaseActivity() {
589613

590614
}
591615

616+
class CardLevelsAdapter(val items: List<Pair<Card, Int>>, val onCardClick: (View, Int) -> Unit) : RecyclerView.Adapter<CardLevelsViewHolder>() {
617+
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): CardLevelsViewHolder {
618+
return CardLevelsViewHolder(parent?.inflate(R.layout.itemlist_card_min))
619+
}
620+
621+
override fun onBindViewHolder(holder: CardLevelsViewHolder?, position: Int) {
622+
holder?.bind(items[position], onCardClick)
623+
}
624+
625+
override fun getItemCount(): Int = items.size
626+
627+
}
628+
629+
class CardLevelsViewHolder(view: View?) : RecyclerView.ViewHolder(view) {
630+
631+
fun bind(cardLevel: Pair<Card, Int>, onCardClick: (View, Int) -> Unit) {
632+
with(itemView) {
633+
card_min_image.loadFromCard(cardLevel.first, cardLevel.second)
634+
setOnClickListener { onCardClick(card_min_image, cardLevel.second) }
635+
}
636+
}
637+
638+
}
639+
592640
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.ediposouza.teslesgendstracker.ui.cards
2+
3+
import android.os.Bundle
4+
import android.support.v4.app.ActivityCompat
5+
import com.ediposouza.teslesgendstracker.R
6+
import com.ediposouza.teslesgendstracker.data.Card
7+
import com.ediposouza.teslesgendstracker.ui.base.BaseActivity
8+
import com.ediposouza.teslesgendstracker.util.*
9+
import kotlinx.android.synthetic.main.activity_card_level.*
10+
11+
/**
12+
* Created by EdipoSouza on 4/2/17.
13+
*/
14+
class CardLevelActivity : BaseActivity() {
15+
16+
companion object {
17+
18+
const val EXTRA_CARD = "cardExtra"
19+
const val EXTRA_CARD_LEVEL = "cardExtraLevel"
20+
21+
}
22+
23+
val card: Card by lazy { intent.getParcelableExtra<Card>(EXTRA_CARD) }
24+
val cardLevel: Int by lazy { intent.getIntExtra(EXTRA_CARD_LEVEL, 0) }
25+
26+
override fun onCreate(savedInstanceState: Bundle?) {
27+
super.onCreate(savedInstanceState)
28+
setContentView(R.layout.activity_card_level)
29+
ActivityCompat.postponeEnterTransition(this)
30+
31+
if (hasNavigationBar()) {
32+
card_level_content.setBottomPaddingForNavigationBar()
33+
}
34+
with(card_level_iv) {
35+
loadFromCard(card, cardLevel)
36+
setOnClickListener {
37+
ActivityCompat.finishAfterTransition(this@CardLevelActivity)
38+
}
39+
}
40+
ActivityCompat.startPostponedEnterTransition(this)
41+
}
42+
43+
override fun onPostCreate(savedInstanceState: Bundle?) {
44+
super.onPostCreate(savedInstanceState)
45+
card_level_ads_view.load()
46+
MetricsManager.trackScreen(MetricScreen.SCREEN_CARD_FULL_ART())
47+
}
48+
49+
}

app/src/main/kotlin/com/ediposouza/teslesgendstracker/ui/spoiler/SpoilerFragment.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import com.ediposouza.teslesgendstracker.util.inflate
1818
import kotlinx.android.synthetic.main.activity_dash.*
1919
import kotlinx.android.synthetic.main.fragment_spoiler.*
2020
import org.greenrobot.eventbus.Subscribe
21+
import org.jetbrains.anko.toast
2122

2223
/**
2324
* Created by EdipoSouza on 10/30/16.
@@ -54,6 +55,7 @@ class SpoilerFragment : BaseFragment(), SearchView.OnQueryTextListener {
5455
fragmentManager.beginTransaction()
5556
.replace(R.id.spoiler_cards_container, SpoilerCardsFragment())
5657
.commit()
58+
context.toast(getString(R.string.spoiler_image_qlt_warning))
5759
}
5860

5961
override fun onResume() {

0 commit comments

Comments
 (0)