Skip to content

Commit 7f01333

Browse files
authored
Merge branch 'development' into 1256_hard_coded_strings
2 parents 3d4fb8c + b92a839 commit 7f01333

24 files changed

+172
-84
lines changed

app/build.gradle

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ android {
1717
applicationId "com.eventyay.attendee"
1818
minSdkVersion 16
1919
targetSdkVersion 28
20-
versionCode 3
21-
versionName "0.0.3a"
20+
versionCode 5
21+
versionName "0.1.1"
2222
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
2323
vectorDrawables.useSupportLibrary = true
2424
multiDexEnabled true
@@ -33,6 +33,7 @@ android {
3333
}
3434
buildTypes {
3535
release {
36+
shrinkResources true
3637
minifyEnabled true
3738
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
3839
buildConfigField "String", "DEFAULT_BASE_URL", '"https://api.eventyay.com/v1/"'
@@ -72,6 +73,9 @@ android {
7273
androidExtensions {
7374
experimental = true
7475
}
76+
aaptOptions {
77+
cruncherEnabled = false
78+
}
7579
}
7680

7781
spotless {
@@ -172,9 +176,6 @@ dependencies {
172176
releaseImplementation 'com.github.iamareebjamal:stetho-noop:1.2.1'
173177
testImplementation 'com.github.iamareebjamal:stetho-noop:1.2.1'
174178

175-
//Mapbox SDK plugins
176-
implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-places-v7:0.7.0'
177-
178179
testImplementation 'junit:junit:4.12'
179180
testImplementation "io.mockk:mockk:1.9.3"
180181
testImplementation 'org.threeten:threetenbp:1.3.8'

app/src/main/java/org/fossasia/openevent/general/auth/EditProfileViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class EditProfileViewModel(
4545
.subscribe({
4646
updateUser(it.url, firstName, lastName)
4747
mutableMessage.value = resource.getString(R.string.image_upload_success_message)
48-
Timber.d("Image uploaded " + it.url)
48+
Timber.d("Image uploaded ${it.url}")
4949
}) {
5050
mutableMessage.value = resource.getString(R.string.image_upload_error_message)
5151
Timber.e(it, "Error uploading user!")

app/src/main/java/org/fossasia/openevent/general/auth/LoginViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ class LoginViewModel(
9191
mutableProgress.value = true
9292
}.doFinally {
9393
mutableProgress.value = false
94-
}.subscribe({ it ->
94+
}.subscribe({
9595
Timber.d("User Fetched")
9696
mutableUser.value = it
9797
}) {

app/src/main/java/org/fossasia/openevent/general/event/EventDetailsFragment.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ class EventDetailsFragment : Fragment() {
210210

211211
// Event Description Section
212212
if (!event.description.isNullOrEmpty()) {
213-
setTextField(rootView.eventDescription, event.description?.stripHtml())
213+
setTextField(rootView.eventDescription, event.description.stripHtml())
214214

215215
rootView.eventDescription.post {
216216
if (rootView.eventDescription.lineCount > LINE_COUNT) {
@@ -246,6 +246,7 @@ class EventDetailsFragment : Fragment() {
246246
Picasso.get()
247247
.load(eventViewModel.loadMap(event))
248248
.placeholder(R.drawable.ic_map_black)
249+
.error(R.drawable.ic_map_black)
249250
.into(rootView.imageMap)
250251
}
251252

app/src/main/java/org/fossasia/openevent/general/event/EventService.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class EventService(
3636
private fun getEventTopicList(eventsList: List<Event>): List<EventTopic?> {
3737
return eventsList
3838
.filter { it.eventTopic != null }
39-
.map { it -> it.eventTopic }
39+
.map { it.eventTopic }
4040
.toList()
4141
}
4242

app/src/main/java/org/fossasia/openevent/general/event/EventUtils.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,10 @@ object EventUtils {
5555
fun loadMapUrl(event: Event) = "geo:<${event.latitude}>,<${event.longitude}>" +
5656
"?q=<${event.latitude}>,<${event.longitude}>"
5757

58-
fun getEventDateTime(dateString: String, timeZone: String): ZonedDateTime {
58+
fun getEventDateTime(dateString: String, timeZone: String?): ZonedDateTime {
5959
try {
6060
return when (PreferenceManager.getDefaultSharedPreferences(OpenEventGeneral.appContext)
61-
.getBoolean("useEventTimeZone", false)) {
61+
.getBoolean("useEventTimeZone", false) && !timeZone.isNullOrBlank()) {
6262

6363
true -> ZonedDateTime.parse(dateString)
6464
.toOffsetDateTime()
@@ -74,7 +74,7 @@ object EventUtils {
7474
}
7575
}
7676

77-
fun getTimeInMilliSeconds(dateString: String, timeZone: String): Long {
77+
fun getTimeInMilliSeconds(dateString: String, timeZone: String?): Long {
7878
return getEventDateTime(dateString, timeZone).toInstant().toEpochMilli()
7979
}
8080

app/src/main/java/org/fossasia/openevent/general/order/OrdersRecyclerAdapter.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,15 @@ import org.fossasia.openevent.general.event.Event
99
class OrdersRecyclerAdapter : RecyclerView.Adapter<OrdersViewHolder>() {
1010

1111
private val eventAndOrderIdentifier = ArrayList<Pair<Event, String>>()
12+
private val showExpired = false
1213
private var clickListener: OrderClickListener? = null
1314
var attendeesNumber = listOf<Int>()
1415

1516
fun setListener(listener: OrderClickListener) {
1617
clickListener = listener
1718
}
1819

19-
fun addAllPairs(list: List<Pair<Event, String>>) {
20+
fun addAllPairs(list: List<Pair<Event, String>>, showExpired: Boolean) {
2021
if (eventAndOrderIdentifier.isNotEmpty())
2122
this.eventAndOrderIdentifier.clear()
2223
eventAndOrderIdentifier.addAll(list)
@@ -32,7 +33,7 @@ class OrdersRecyclerAdapter : RecyclerView.Adapter<OrdersViewHolder>() {
3233
holder.bind(eventAndOrderIdentifier[position].first,
3334
clickListener,
3435
eventAndOrderIdentifier[position].second,
35-
it)
36+
it, showExpired)
3637
}
3738
}
3839

app/src/main/java/org/fossasia/openevent/general/order/OrdersUnderUserFragment.kt

Lines changed: 55 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package org.fossasia.openevent.general.order
22

33
import android.os.Bundle
44
import android.view.LayoutInflater
5+
import android.view.MenuItem
56
import android.view.View
67
import android.view.ViewGroup
78
import androidx.appcompat.app.AppCompatActivity
@@ -11,18 +12,25 @@ import androidx.lifecycle.Observer
1112
import androidx.recyclerview.widget.LinearLayoutManager
1213
import androidx.recyclerview.widget.RecyclerView
1314
import androidx.navigation.Navigation.findNavController
15+
import androidx.navigation.fragment.navArgs
1416
import com.google.android.material.snackbar.Snackbar
17+
import kotlinx.android.synthetic.main.activity_main.navigation
1518
import kotlinx.android.synthetic.main.content_no_tickets.findMyTickets
19+
import kotlinx.android.synthetic.main.content_no_tickets.noTicketMessage
1620
import kotlinx.android.synthetic.main.fragment_orders_under_user.noTicketsScreen
1721
import kotlinx.android.synthetic.main.fragment_orders_under_user.view.ordersUnderUserCoordinatorLayout
1822
import kotlinx.android.synthetic.main.fragment_orders_under_user.view.ordersRecycler
1923
import kotlinx.android.synthetic.main.fragment_orders_under_user.view.shimmerSearch
2024
import kotlinx.android.synthetic.main.fragment_orders_under_user.view.ordersNestedScrollView
25+
import kotlinx.android.synthetic.main.fragment_orders_under_user.view.expireFilter
2126
import org.fossasia.openevent.general.R
2227
import org.fossasia.openevent.general.ScrollToTop
2328
import org.fossasia.openevent.general.auth.LoginFragmentArgs
29+
import org.fossasia.openevent.general.event.EventUtils
2430
import org.fossasia.openevent.general.utils.Utils
2531
import org.fossasia.openevent.general.utils.Utils.getAnimFade
32+
import org.fossasia.openevent.general.utils.Utils.getAnimSlide
33+
import org.fossasia.openevent.general.utils.Utils.navAnimGone
2634
import org.fossasia.openevent.general.utils.extensions.nonNull
2735
import org.koin.androidx.viewmodel.ext.android.viewModel
2836
import timber.log.Timber
@@ -33,6 +41,7 @@ class OrdersUnderUserFragment : Fragment(), ScrollToTop {
3341
private val ordersUnderUserVM by viewModel<OrdersUnderUserViewModel>()
3442
private val ordersRecyclerAdapter: OrdersRecyclerAdapter = OrdersRecyclerAdapter()
3543
private lateinit var linearLayoutManager: LinearLayoutManager
44+
private val safeArgs: OrdersUnderUserFragmentArgs by navArgs()
3645

3746
override fun onStart() {
3847
super.onStart()
@@ -50,8 +59,18 @@ class OrdersUnderUserFragment : Fragment(), ScrollToTop {
5059

5160
val thisActivity = activity
5261
if (thisActivity is AppCompatActivity) {
53-
thisActivity.supportActionBar?.title = getString(R.string.tickets)
54-
thisActivity.supportActionBar?.setDisplayHomeAsUpEnabled(false)
62+
when (safeArgs.showExpired) {
63+
true -> {
64+
thisActivity.supportActionBar?.title = "Past Tickets"
65+
thisActivity.supportActionBar?.setDisplayHomeAsUpEnabled(true)
66+
setHasOptionsMenu(true)
67+
navAnimGone(activity?.navigation, requireContext())
68+
}
69+
false -> {
70+
thisActivity.supportActionBar?.title = getString(R.string.tickets)
71+
thisActivity.supportActionBar?.setDisplayHomeAsUpEnabled(false)
72+
}
73+
}
5574
}
5675

5776
rootView.ordersRecycler.layoutManager = LinearLayoutManager(activity)
@@ -63,7 +82,8 @@ class OrdersUnderUserFragment : Fragment(), ScrollToTop {
6382
rootView.ordersRecycler.layoutManager = linearLayoutManager
6483

6584
if (ordersUnderUserVM.isLoggedIn()) {
66-
ordersUnderUserVM.ordersUnderUser()
85+
if (ordersRecyclerAdapter.itemCount == 0) ordersUnderUserVM.ordersUnderUser(safeArgs.showExpired)
86+
if (safeArgs.showExpired) rootView.expireFilter.isVisible = false
6787

6888
val recyclerViewClickListener = object : OrdersRecyclerAdapter.OrderClickListener {
6989
override fun onClick(eventID: Long, orderIdentifier: String) {
@@ -78,6 +98,16 @@ class OrdersUnderUserFragment : Fragment(), ScrollToTop {
7898
}
7999
}
80100

101+
rootView.expireFilter.setOnClickListener {
102+
OrdersUnderUserFragmentArgs.Builder()
103+
.setShowExpired(true)
104+
.build()
105+
.toBundle()
106+
.also { bundle ->
107+
findNavController(rootView).navigate(R.id.orderUnderUserFragment, bundle, getAnimSlide())
108+
}
109+
}
110+
81111
ordersRecyclerAdapter.setListener(recyclerViewClickListener)
82112

83113
ordersUnderUserVM.showShimmerResults
@@ -109,7 +139,10 @@ class OrdersUnderUserFragment : Fragment(), ScrollToTop {
109139
ordersUnderUserVM.eventAndOrderIdentifier
110140
.nonNull()
111141
.observe(viewLifecycleOwner, Observer {
112-
ordersRecyclerAdapter.addAllPairs(it)
142+
val list = it.sortedByDescending {
143+
EventUtils.getTimeInMilliSeconds(it.first.startsAt, null)
144+
}
145+
ordersRecyclerAdapter.addAllPairs(list, safeArgs.showExpired)
113146
ordersRecyclerAdapter.notifyDataSetChanged()
114147
Timber.d("Fetched events of size %s", ordersRecyclerAdapter.itemCount)
115148
})
@@ -119,9 +152,14 @@ class OrdersUnderUserFragment : Fragment(), ScrollToTop {
119152
}
120153

121154
private fun showNoTicketsScreen(show: Boolean) {
122-
noTicketsScreen.visibility = if (show) View.VISIBLE else View.GONE
123-
findMyTickets.setOnClickListener {
124-
Utils.openUrl(requireContext(), resources.getString(R.string.ticket_issues_url))
155+
noTicketsScreen.isVisible = show
156+
if (safeArgs.showExpired) {
157+
findMyTickets.isVisible = false
158+
noTicketMessage.text = getString(R.string.no_past_tickets)
159+
} else {
160+
findMyTickets.setOnClickListener {
161+
Utils.openUrl(requireContext(), resources.getString(R.string.ticket_issues_url))
162+
}
125163
}
126164
}
127165

@@ -136,4 +174,14 @@ class OrdersUnderUserFragment : Fragment(), ScrollToTop {
136174
}
137175

138176
override fun scrollToTop() = rootView.ordersNestedScrollView.smoothScrollTo(0, 0)
177+
178+
override fun onOptionsItemSelected(item: MenuItem): Boolean {
179+
return when (item.itemId) {
180+
android.R.id.home -> {
181+
activity?.onBackPressed()
182+
true
183+
}
184+
else -> super.onOptionsItemSelected(item)
185+
}
186+
}
139187
}

app/src/main/java/org/fossasia/openevent/general/order/OrdersUnderUserViewModel.kt

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import org.fossasia.openevent.general.common.SingleLiveEvent
1212
import org.fossasia.openevent.general.data.Resource
1313
import org.fossasia.openevent.general.event.Event
1414
import org.fossasia.openevent.general.event.EventService
15+
import org.fossasia.openevent.general.event.EventUtils
1516
import timber.log.Timber
1617

1718
class OrdersUnderUserViewModel(
@@ -43,20 +44,20 @@ class OrdersUnderUserViewModel(
4344

4445
fun isLoggedIn() = authHolder.isLoggedIn()
4546

46-
fun ordersUnderUser() {
47+
fun ordersUnderUser(showExpired: Boolean) {
4748
compositeDisposable.add(orderService.orderUser(getId())
4849
.subscribeOn(Schedulers.io())
4950
.observeOn(AndroidSchedulers.mainThread())
5051
.doOnSubscribe {
51-
mutableshowShimmerResults.value = mutableAttendeesNumber.value == null
52+
mutableshowShimmerResults.value = true
5253
mutableNoTickets.value = false
5354
}.subscribe({
5455
order = it
5556
mutableAttendeesNumber.value = it.map { it.attendees.size }
5657
val query = buildQuery(it)
5758

5859
if (idList.size != 0)
59-
eventsUnderUser(query)
60+
eventsUnderUser(query, showExpired)
6061
else {
6162
mutableshowShimmerResults.value = false
6263
mutableNoTickets.value = true
@@ -70,7 +71,7 @@ class OrdersUnderUserViewModel(
7071
)
7172
}
7273

73-
private fun eventsUnderUser(eventIds: String) {
74+
private fun eventsUnderUser(eventIds: String, showExpired: Boolean) {
7475
compositeDisposable.add(eventService.getEventsUnderUser(eventIds)
7576
.subscribeOn(Schedulers.io())
7677
.observeOn(AndroidSchedulers.mainThread())
@@ -87,13 +88,22 @@ class OrdersUnderUserViewModel(
8788
}
8889
eventIdMap[it.id] = it
8990
}
90-
val eventAndIdentifier = ArrayList<Pair<Event, String>>()
91+
var eventAndIdentifier = ArrayList<Pair<Event, String>>()
92+
var finalList: List<Pair<Event, String>>
9193
order.forEach {
9294
val event = eventIdMap[it.event?.id]
9395
if (event != null && it.identifier != null)
9496
eventAndIdentifier.add(Pair(event, it.identifier))
9597
}
96-
mutableEventAndOrderIdentifier.value = eventAndIdentifier
98+
finalList = eventAndIdentifier
99+
when (showExpired) {
100+
false -> finalList = finalList.filter {
101+
EventUtils.getTimeInMilliSeconds(it.first.endsAt, null) > System.currentTimeMillis() }
102+
true -> finalList = finalList.filter {
103+
EventUtils.getTimeInMilliSeconds(it.first.endsAt, null) < System.currentTimeMillis() }
104+
}
105+
if (finalList.isEmpty()) mutableNoTickets.value = true
106+
mutableEventAndOrderIdentifier.value = finalList
97107
}, {
98108
mutableMessage.value = resource.getString(R.string.list_events_fail_message)
99109
Timber.d(it, "Failed to list events under a user ")

app/src/main/java/org/fossasia/openevent/general/order/OrdersViewHolder.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.fossasia.openevent.general.order
22

3+
import android.graphics.ColorMatrix
4+
import android.graphics.ColorMatrixColorFilter
35
import androidx.recyclerview.widget.RecyclerView
46
import android.view.View
57
import com.squareup.picasso.Picasso
@@ -14,7 +16,8 @@ class OrdersViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
1416
event: Event,
1517
clickListener: OrdersRecyclerAdapter.OrderClickListener?,
1618
orderIdentifier: String?,
17-
attendeesNumber: Int
19+
attendeesNumber: Int,
20+
showExpired: Boolean
1821
) {
1922
val formattedDateTime = EventUtils.getEventDateTime(event.startsAt, event.timezone)
2023
val formattedTime = EventUtils.getFormattedTime(formattedDateTime)
@@ -41,5 +44,10 @@ class OrdersViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
4144
.placeholder(R.drawable.header)
4245
.into(itemView.eventImage)
4346
}
47+
if (!showExpired) {
48+
val matrix = ColorMatrix()
49+
matrix.setSaturation(0F)
50+
itemView.eventImage.colorFilter = ColorMatrixColorFilter(matrix)
51+
}
4452
}
4553
}

0 commit comments

Comments
 (0)