1 package host.exp.exponent.experience 2 3 import android.content.Context 4 import host.exp.exponent.kernel.ExponentError 5 import android.widget.ArrayAdapter 6 import android.view.ViewGroup 7 import android.view.LayoutInflater 8 import android.view.View 9 import android.widget.TextView 10 import host.exp.expoview.R 11 import host.exp.expoview.databinding.ErrorConsoleListItemBinding 12 import java.text.SimpleDateFormat 13 import java.util.* 14 15 class ErrorQueueAdapter(context: Context, values: List<ExponentError>) : ArrayAdapter<ExponentError>(context, -1, values) { getViewnull16 override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { 17 val (convertViewRet, holder) = if (convertView == null) { 18 val binding = ErrorConsoleListItemBinding.inflate(LayoutInflater.from(context), parent, false) 19 val convertViewLocal = binding.root 20 val holderLocal = ViewHolder(binding) 21 convertViewLocal.tag = holderLocal 22 Pair(convertViewLocal, holderLocal) 23 } else { 24 Pair(convertView, convertView.tag as ViewHolder) 25 } 26 27 val item = getItem(position) 28 holder.errorMessageView.text = context.getString(R.string.error_uncaught, item!!.errorMessage.developerErrorMessage()) 29 30 if (item.stack.isNotEmpty()) { 31 val bundle = item.stack[0] 32 33 val path = bundle.getString("file") 34 val fileName = if (path != null && path.isNotEmpty()) { 35 val file = path.substring(path.lastIndexOf('/') + 1) 36 "@$file" 37 } else { 38 "" 39 } 40 41 val lineNumber = when (val lineNumberObject = bundle["lineNumber"]) { 42 is Double -> ":" + lineNumberObject.toInt() 43 is Int -> ":" + lineNumberObject.toInt() 44 else -> "" 45 } 46 47 val stacktracePreview = bundle.getString("methodName") + fileName + lineNumber 48 holder.stacktraceView.text = stacktracePreview 49 } 50 51 var timestampViewText = SimpleDateFormat("HH:mm:ss", Locale.US).format(item.timestamp) 52 if (item.isFatal) { 53 timestampViewText += " Fatal Error" 54 } 55 holder.timestampView.text = timestampViewText 56 57 return convertViewRet 58 } 59 60 internal class ViewHolder(binding: ErrorConsoleListItemBinding) { 61 var errorMessageView: TextView = binding.errorConsoleItemMessage 62 var stacktraceView: TextView = binding.errorConsoleItemStackPreview 63 var timestampView: TextView = binding.errorConsoleItemTimestamp 64 } 65 } 66