1
1
package org.fossasia.openevent.general.order
2
2
3
+ import android.content.Intent
4
+ import android.graphics.Bitmap
5
+ import android.graphics.Canvas
6
+ import android.net.Uri
3
7
import android.os.Bundle
4
8
import android.view.LayoutInflater
5
9
import android.view.MenuItem
6
10
import android.view.View
7
11
import android.view.ViewGroup
12
+ import android.view.Menu
13
+ import android.view.MenuInflater
14
+ import androidx.core.content.FileProvider
8
15
import androidx.core.view.isVisible
9
16
import androidx.fragment.app.Fragment
10
17
import androidx.lifecycle.Observer
11
18
import androidx.recyclerview.widget.LinearLayoutManager
12
19
import androidx.navigation.Navigation.findNavController
13
20
import androidx.navigation.fragment.navArgs
14
21
import androidx.recyclerview.widget.LinearSnapHelper
22
+ import androidx.recyclerview.widget.RecyclerView
15
23
import kotlinx.android.synthetic.main.fragment_order_details.view.orderDetailCoordinatorLayout
16
24
import kotlinx.android.synthetic.main.fragment_order_details.view.orderDetailsRecycler
17
25
import kotlinx.android.synthetic.main.fragment_order_details.view.progressBar
26
+ import kotlinx.android.synthetic.main.item_card_order_details.view.orderDetailCardView
27
+ import org.fossasia.openevent.general.BuildConfig
18
28
import org.fossasia.openevent.general.R
19
29
import org.fossasia.openevent.general.event.EventDetailsFragmentArgs
20
30
import org.fossasia.openevent.general.utils.Utils.getAnimFade
@@ -23,6 +33,9 @@ import org.koin.androidx.viewmodel.ext.android.viewModel
23
33
import timber.log.Timber
24
34
import org.fossasia.openevent.general.utils.Utils.setToolbar
25
35
import org.jetbrains.anko.design.longSnackbar
36
+ import org.jetbrains.anko.design.snackbar
37
+ import java.io.File
38
+ import java.io.FileOutputStream
26
39
27
40
class OrderDetailsFragment : Fragment () {
28
41
@@ -69,7 +82,20 @@ class OrderDetailsFragment : Fragment() {
69
82
linearLayoutManager = LinearLayoutManager (context)
70
83
linearLayoutManager.orientation = LinearLayoutManager .HORIZONTAL
71
84
rootView.orderDetailsRecycler.layoutManager = linearLayoutManager
72
- LinearSnapHelper ().attachToRecyclerView(rootView.orderDetailsRecycler)
85
+ val snapHelper = LinearSnapHelper ()
86
+ snapHelper.attachToRecyclerView(rootView.orderDetailsRecycler)
87
+ rootView.orderDetailsRecycler.addOnScrollListener(object : RecyclerView .OnScrollListener () {
88
+ override fun onScrollStateChanged (recyclerView : RecyclerView , newState : Int ) {
89
+ super .onScrollStateChanged(recyclerView, newState)
90
+ if (newState == RecyclerView .SCROLL_STATE_IDLE ) {
91
+ val centerView = snapHelper.findSnapView(linearLayoutManager)
92
+ centerView?.let {
93
+ val itemPosition = linearLayoutManager.getPosition(it)
94
+ orderDetailsViewModel.currentTicketPosition = itemPosition
95
+ }
96
+ }
97
+ }
98
+ })
73
99
74
100
val eventDetailsListener = object : OrderDetailsRecyclerAdapter .EventDetailsListener {
75
101
override fun onClick (eventID : Long ) {
@@ -101,13 +127,59 @@ class OrderDetailsFragment : Fragment() {
101
127
return rootView
102
128
}
103
129
130
+ override fun onCreateOptionsMenu (menu : Menu , inflater : MenuInflater ) {
131
+ inflater.inflate(R .menu.order_detail, menu)
132
+ super .onCreateOptionsMenu(menu, inflater)
133
+ }
134
+
104
135
override fun onOptionsItemSelected (item : MenuItem ): Boolean {
105
136
return when (item.itemId) {
106
137
android.R .id.home -> {
107
138
activity?.onBackPressed()
108
139
true
109
140
}
141
+ R .id.share_ticket -> {
142
+ shareCurrentTicket()
143
+ true
144
+ }
110
145
else -> super .onOptionsItemSelected(item)
111
146
}
112
147
}
148
+
149
+ private fun shareCurrentTicket () {
150
+ val currentTicketViewHolder =
151
+ rootView.orderDetailsRecycler.findViewHolderForAdapterPosition(orderDetailsViewModel.currentTicketPosition)
152
+ if (currentTicketViewHolder != null && currentTicketViewHolder is OrderDetailsViewHolder ) {
153
+ val bitmap = getBitmapFromView(currentTicketViewHolder.itemView.rootView.orderDetailCardView)
154
+ val bitmapUri = getBitmapUri(bitmap)
155
+ if (bitmapUri == null ) {
156
+ rootView.snackbar(getString(R .string.fail_sharing_ticket))
157
+ return
158
+ }
159
+ val intent = Intent (Intent .ACTION_SEND )
160
+ intent.flags = Intent .FLAG_ACTIVITY_NEW_TASK
161
+ intent.type = " image/png"
162
+ intent.putExtra(Intent .EXTRA_STREAM , bitmapUri)
163
+ startActivity(intent)
164
+ } else {
165
+ rootView.snackbar(getString(R .string.fail_sharing_ticket))
166
+ }
167
+ }
168
+
169
+ private fun getBitmapUri (bitmap : Bitmap ): Uri ? {
170
+ val myContext = context ? : return null
171
+ val file = File (myContext.cacheDir, " shared_image.png" )
172
+ return FileOutputStream (file)
173
+ .use { fileOutputStream ->
174
+ bitmap.compress(Bitmap .CompressFormat .PNG , 90 , fileOutputStream)
175
+ FileProvider .getUriForFile(myContext, BuildConfig .APPLICATION_ID + " .provider" , file)
176
+ }
177
+ }
178
+
179
+ private fun getBitmapFromView (view : View ): Bitmap {
180
+ val bitmap = Bitmap .createBitmap(view.width, view.height, Bitmap .Config .ARGB_8888 )
181
+ val canvas = Canvas (bitmap)
182
+ view.draw(canvas)
183
+ return bitmap
184
+ }
113
185
}
0 commit comments