Guest User

upload Activity

a guest
Mar 18th, 2023
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 13.04 KB | Source Code | 0 0
  1. package codify.generator.activities.crea_qr
  2.  
  3. import android.content.ContentResolver
  4. import android.content.Context
  5. import android.content.Intent
  6. import android.net.Uri
  7. import android.os.Bundle
  8. import android.provider.OpenableColumns
  9. import android.util.Base64
  10. import android.util.Log
  11. import android.view.View
  12. import android.widget.*
  13. import androidx.appcompat.app.AppCompatActivity
  14. import androidx.core.content.ContextCompat
  15. import androidx.lifecycle.lifecycleScope
  16. import codify.generator.R
  17. import codify.generator.activities.DashboardActivity
  18. import codify.generator.api.CollectionAPI
  19. import codify.generator.api.FileUploadAPI
  20. import com.google.android.material.snackbar.Snackbar
  21. import kotlinx.android.synthetic.main.crea_qr.*
  22. import kotlinx.android.synthetic.main.test.*
  23. import kotlinx.coroutines.CompletableDeferred
  24. import kotlinx.coroutines.launch
  25. import models.requests.GetCollectionRequestModel
  26. import models.requests.UploadFileRequestModel
  27. import models.responses.UploadFileResponseModel
  28. import okhttp3.OkHttpClient
  29. import okhttp3.logging.HttpLoggingInterceptor
  30. import retrofit2.Call
  31. import retrofit2.Callback
  32. import retrofit2.Response
  33. import retrofit2.Retrofit
  34. import retrofit2.converter.gson.GsonConverterFactory
  35. import java.io.File
  36. import java.io.FileInputStream
  37. import java.io.Serializable
  38.  
  39.  
  40. class CreaQrActivity: AppCompatActivity() {
  41.  
  42.     private var selectedImageUri: Uri? = null
  43.  
  44.     override fun onCreate(savedInstanceState: Bundle?) {
  45.         super.onCreate(savedInstanceState)
  46.         setContentView(R.layout.crea_qr)
  47.  
  48.         initButtons()
  49.  
  50.  
  51.     }
  52.  
  53.     private fun initButtons() {
  54.         val buttonQrFree = findViewById<Button>(R.id.buttonQrFree)
  55.         val buttonQrMonthly = findViewById<Button>(R.id.buttonQrMonthly)
  56.         val buttonQrTemp = findViewById<Button>(R.id.buttonQrTemp)
  57.         val frame = findViewById<View>(R.id.frame_layout_tab_content) as FrameLayout
  58.  
  59.  
  60.         //frameLayout.removeAllViews()
  61.         //frameLayout.addView(newLayout)
  62.  
  63.  
  64.         buttonQrFree.setOnClickListener {
  65.             this.changeButtonState(1)
  66.             this.setFrameOnQrLink(frame)
  67.         }
  68.  
  69.         buttonQrMonthly.setOnClickListener {
  70.  
  71.  
  72.             lifecycleScope.launch {
  73.                 try {
  74.                     val response =  getCollections().await()
  75.                     this@CreaQrActivity.changeButtonState(2)
  76.                     this@CreaQrActivity.setFrameOnQrMensile(frame)
  77.                     val spinner: Spinner = findViewById(R.id.qr_collection)
  78.                     val adapter = ArrayAdapter(this@CreaQrActivity, android.R.layout.simple_spinner_item, response)
  79.                     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
  80.                     spinner.adapter = adapter
  81.  
  82.                     //Toast.makeText(this@CreaQrActivity, response.toString(), Toast.LENGTH_LONG).show()
  83.                 } catch (e: Exception) {
  84.                     Log.d("exception", e.toString())
  85.                 }
  86.             }
  87.  
  88.  
  89.  
  90.         }
  91.  
  92.         buttonQrTemp.setOnClickListener {
  93.            this.setFrameOnQrTemp(frame)
  94.            this.changeButtonState(3)
  95.  
  96.         }
  97.  
  98.     }
  99.  
  100.     private fun setFrameOnQrLink(frame: FrameLayout)
  101.     {
  102.         frame.removeAllViews()
  103.     }
  104.  
  105.     private fun setFrameOnQrMensile(frame: FrameLayout)
  106.     {
  107.  
  108.         val newLayout = layoutInflater.inflate(R.layout.test, null)
  109.         frame.removeAllViews()
  110.         frame.addView(newLayout)
  111.         val buttonUpload = findViewById<Button>(R.id.button_upload)
  112.  
  113.         image_view.setOnClickListener {
  114.  
  115.             opeinImageChooser()
  116.         }
  117.  
  118.         button_upload.setOnClickListener {
  119.             lifecycleScope.launch {
  120.                 try {
  121.                     val spinner = findViewById<Spinner>(R.id.qr_collection)
  122.                     val selectedValue = spinner.selectedItem.toString()
  123.                     val editText = findViewById<EditText>(R.id.qr_name_text)
  124.                     val qr_name = editText.text.toString()
  125.                     val response = uploadImage( 1,selectedValue,qr_name).await()
  126.                     Log.d("QR_DEBUG",response.base64)
  127.                     val intent = Intent(this@CreaQrActivity, DashboardActivity::class.java)
  128.                     intent.putExtra("response_model", response as Serializable)
  129.                     startActivity(intent)
  130.                 } catch (e: Exception) {
  131.                     Log.d("exception", e.toString())
  132.                 }
  133.             }
  134.         }
  135.     }
  136.  
  137.     private fun setFrameOnQrTemp(frame: FrameLayout)
  138.     {
  139.         frame.removeAllViews()
  140.     }
  141.  
  142.     private fun changeButtonState(selectedButton: Int)
  143.     {
  144.         when (selectedButton) {
  145.             1 ->
  146.             {
  147.                 buttonQrFree.isSelected = true
  148.                 buttonQrMonthly.isSelected = false
  149.                 buttonQrTemp.isSelected = false
  150.  
  151.                 buttonQrFree.setTextColor(ContextCompat.getColor(this, R.color.green))
  152.                 buttonQrMonthly.setTextColor(ContextCompat.getColor(this, R.color.black))
  153.                 buttonQrTemp.setTextColor(ContextCompat.getColor(this, R.color.black))
  154.             }
  155.             2 ->
  156.             {
  157.                 buttonQrFree.isSelected = false
  158.                 buttonQrMonthly.isSelected = true
  159.                 buttonQrTemp.isSelected = false
  160.  
  161.                 buttonQrFree.setTextColor(ContextCompat.getColor(this, R.color.black))
  162.                 buttonQrMonthly.setTextColor(ContextCompat.getColor(this, R.color.green))
  163.                 buttonQrTemp.setTextColor(ContextCompat.getColor(this, R.color.black))
  164.             }
  165.             3 ->
  166.             {
  167.                 buttonQrFree.isSelected = false
  168.                 buttonQrMonthly.isSelected = false
  169.                 buttonQrTemp.isSelected = true
  170.  
  171.                 buttonQrFree.setTextColor(ContextCompat.getColor(this, R.color.black))
  172.                 buttonQrMonthly.setTextColor(ContextCompat.getColor(this, R.color.black))
  173.                 buttonQrTemp.setTextColor(ContextCompat.getColor(this, R.color.green))
  174.             }
  175.  
  176.         }
  177.     }
  178.  
  179. private fun getCollections(): CompletableDeferred<List<String>> {
  180.  
  181.     val deferred = CompletableDeferred<List<String>>()
  182.  
  183.     val retrofit = Retrofit.Builder()
  184.         .baseUrl("https://codify.ovh/")
  185.         .addConverterFactory(GsonConverterFactory.create())
  186.         .client(
  187.             OkHttpClient.Builder()
  188.                 .addInterceptor(HttpLoggingInterceptor().apply {
  189.                     level = HttpLoggingInterceptor.Level.BODY
  190.                 })
  191.                 .build()
  192.         )
  193.         .build()
  194.  
  195.     val retrofitAPI = retrofit.create(CollectionAPI::class.java)
  196.  
  197.     val uploadModel = GetCollectionRequestModel(this.getTokenFromStorage())
  198.  
  199.     retrofitAPI.getCollection(uploadModel)?.enqueue(object : Callback<List<String>>  {
  200.         override fun onResponse(call: Call<List<String>>, response: Response<List<String>>) {
  201.             if (response.isSuccessful) {
  202.                 val responseModel = response.body();
  203.                 if (responseModel != null) {
  204.  
  205.                     deferred.complete(responseModel)
  206.                 }
  207.                 else {
  208.                     deferred.completeExceptionally(NullPointerException("Response body is null"))
  209.                 }
  210.             }
  211.             else {
  212.                 val errorBody = response.errorBody()?.string()
  213.                 deferred.completeExceptionally(Exception("Error response from server: $errorBody"))
  214.             }
  215.         }
  216.  
  217.         override fun onFailure(call: Call<List<String>>, t: Throwable) {
  218.             t.message?.let { Log.d("error request", it) }
  219.             deferred.completeExceptionally(t)
  220.         }
  221.  
  222.     })
  223.     return deferred
  224. }
  225.  
  226.  
  227.     private fun uploadImage(fileType:  Int,selectedCollection: String,qr_name: String): CompletableDeferred<UploadFileResponseModel>{
  228.  
  229.         val deferred = CompletableDeferred<UploadFileResponseModel>()
  230.  
  231.         if (selectedImageUri == null) {
  232.             layout_root.snackbar("Select an Image First")
  233.             deferred.completeExceptionally(java.lang.Exception("Select an Image First"))
  234.             return deferred;
  235.         }
  236.  
  237.         val parcelFileDescriptor = contentResolver.openFileDescriptor(
  238.             selectedImageUri!!, "r", null
  239.         ) ?: return deferred
  240.  
  241.         val inputStream = FileInputStream(parcelFileDescriptor.fileDescriptor)
  242.         val file = File(cacheDir,contentResolver.getFileName(selectedImageUri!!))
  243.         val base64File = this.convertToBase64(file)
  244.  
  245.         val retrofit = Retrofit.Builder()
  246.             .baseUrl("https://codify.ovh/")
  247.             // as we are sending data in json format so
  248.             // we have to add Gson converter factory
  249.             .addConverterFactory(GsonConverterFactory.create()) // at last we are building our retrofit builder.
  250.             .client(
  251.                 OkHttpClient.Builder()
  252.                     .addInterceptor(HttpLoggingInterceptor().apply {
  253.                         level = HttpLoggingInterceptor.Level.BODY
  254.                     })
  255.                     .build()
  256.             )
  257.             .build()
  258.  
  259.  
  260.         // below line is to create an instance for our retrofit api class.
  261.         val retrofitAPI = retrofit.create(FileUploadAPI::class.java)
  262.  
  263.         // passing data from our text fields to our modal class.
  264.         val uploadModel = UploadFileRequestModel(
  265.             base64File,
  266.             this.getTokenFromStorage(),
  267.             fileType,
  268.             selectedCollection,
  269.             qr_name
  270.         )
  271.  
  272.         // calling a method to create a post and passing our modal class.
  273.  
  274.         // on below line we are executing our method.
  275.  
  276.         retrofitAPI.uploadFile(uploadModel)?.enqueue(object : Callback<UploadFileResponseModel> {
  277.             override fun onResponse(call: Call<UploadFileResponseModel>, response: Response<UploadFileResponseModel>) {
  278.                 if (response.isSuccessful) {
  279.                     val responseModel = response.body()
  280.                     if (responseModel != null) {
  281.                         /*
  282.                         val base64 = responseModel.base64
  283.                         val modelWithBase64 = UploadFileResponseModel(responseModel.url, base64)
  284.                         deferred.complete(modelWithBase64)
  285.                          */
  286.                     } else {
  287.                         deferred.completeExceptionally(NullPointerException("Response body is null"))
  288.                     }
  289.                 } else {
  290.                     val errorBody = response.errorBody()?.string()
  291.                     deferred.completeExceptionally(Exception("Error response from server: $errorBody"))
  292.                 }
  293.             }
  294.  
  295.             override fun onFailure(call: Call<UploadFileResponseModel>, t: Throwable) {
  296.                 // setting text to our text view when
  297.                 // we get error response from API.
  298.                 t.message?.let { Log.d("error request", it) }
  299.                 deferred.completeExceptionally(t)
  300.             }
  301.  
  302.         })
  303.         return deferred
  304.  
  305.  
  306.  
  307.     }
  308.  
  309.     private fun convertToBase64(attachment: File): String {
  310.         return Base64.encodeToString(attachment.readBytes(), Base64.NO_WRAP)
  311.     }
  312.     private fun opeinImageChooser() {
  313.  
  314.         Intent(Intent.ACTION_PICK).also {
  315.             it.type = "image/*"
  316.             val mimeTypes = arrayOf("image/jpeg", "image/png","image/jpg","image/gif","image/webp")
  317.             it.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes)
  318.             startActivityForResult(it, REQUEST_CODE_IMAGE)
  319.         }
  320.     }
  321.  
  322.     override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
  323.         super.onActivityResult(requestCode, resultCode, data)
  324.         if (resultCode == RESULT_OK) {
  325.             when (requestCode) {
  326.                 REQUEST_CODE_IMAGE -> {
  327.                     selectedImageUri = data?.data
  328.                     image_view.setImageURI(selectedImageUri)
  329.                 }
  330.             }
  331.         }
  332.     }
  333.  
  334.  
  335.  
  336.     companion object {
  337.         const val REQUEST_CODE_IMAGE = 101
  338.     }
  339.  
  340.     fun onProgressUpdate(percentage: Int) {
  341.         progress_bar.progress = percentage
  342.     }
  343.  
  344.     private fun getTokenFromStorage(): String {
  345.         val sharedPref = getSharedPreferences("CODIFY_PREFERENCES", Context.MODE_PRIVATE)
  346.         //Toast.makeText(this, sharedPref.getString("G_AUTH_TOKEN", "null"), Toast.LENGTH_LONG).show()
  347.         return sharedPref.getString("G_AUTH_TOKEN", "null") ?: "null"
  348.     }
  349.  
  350. }
  351.  
  352. private fun ContentResolver.getFileName(selectedImageUri: Uri): String {
  353.     var name = ""
  354.     val returnCursor = this.query(selectedImageUri,null,null,null,null)
  355.     if (returnCursor!=null){
  356.         val nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME)
  357.         returnCursor.moveToFirst()
  358.         name = returnCursor.getString(nameIndex)
  359.         returnCursor.close()
  360.     }
  361.  
  362.     return name
  363. }
  364.  
  365. private fun View.snackbar(message: String) {
  366.     Snackbar.make(this, message, Snackbar.LENGTH_LONG).also { snackbar ->
  367.         snackbar.setAction("OK") {
  368.             snackbar.dismiss()
  369.         }
  370.     }.show()
  371.  
  372.  
  373. }
Add Comment
Please, Sign In to add comment