OSDN Git Service

9e1955f018db0716bb1f4f8ce2b87f4fe0f96388
[gokigen/mangle.git] / app / src / main / java / jp / osdn / gokigen / gokigenassets / utils / logcat / LogCatFragment.kt
1 package jp.osdn.gokigen.gokigenassets.utils.logcat
2
3 import android.app.Activity
4 import android.os.Bundle
5 import android.util.Log
6 import android.view.*
7 import android.widget.ArrayAdapter
8 import android.widget.ListView
9 import android.widget.Toast
10 import jp.osdn.gokigen.gokigenassets.constants.IApplicationConstantConvert.Companion.ID_LABEL_FINISHED_REFRESH
11 import jp.osdn.gokigen.gokigenassets.constants.IApplicationConstantConvert.Companion.ID_MENU_ACTION_REFRESH
12 import jp.osdn.gokigen.gokigenassets.constants.IApplicationConstantConvert.Companion.ID_MENU_LAYOUT_DEBUG_VIEW
13 import java.util.*
14
15 class LogCatFragment : androidx.fragment.app.ListFragment()
16 {
17     private val updater : LogCatUpdater = LogCatUpdater()
18     private var myView : View? = null
19     private var adapter: ArrayAdapter<String>? = null
20     private var myDataItems: List<String> = ArrayList()
21
22     companion object
23     {
24         private val TAG = LogCatFragment::class.java.simpleName
25         fun newInstance() = LogCatFragment().apply { }
26     }
27
28     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?) : View?
29     {
30         if (myView != null)
31         {
32             return (myView)
33         }
34
35         adapter = ArrayAdapter(inflater.context, android.R.layout.simple_list_item_1, myDataItems)
36         listAdapter = adapter
37         myView = super.onCreateView(inflater, container, savedInstanceState)!!
38         return (myView)
39     }
40
41     override fun onActivityCreated(savedInstanceState: Bundle?)
42     {
43         super.onActivityCreated(savedInstanceState)
44         Log.v(TAG, "LogCatFragment::onActivityCreated()")
45         setHasOptionsMenu(true)
46
47         val activity: Activity? = activity
48         if (activity != null)
49         {
50             listView.onItemLongClickListener = LogCatExporter(activity)
51         }
52     }
53
54     override fun onResume()
55     {
56         super.onResume()
57
58         update()
59     }
60
61     override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater)
62     {
63         inflater.inflate(ID_MENU_LAYOUT_DEBUG_VIEW, menu)
64     }
65
66     override fun onOptionsItemSelected(item: MenuItem) : Boolean
67     {
68         val ret : Boolean
69         when (item.itemId)
70         {
71             ID_MENU_ACTION_REFRESH -> ret = update()
72             else -> ret = super.onOptionsItemSelected(item)
73         }
74         return (ret)
75     }
76
77     fun update() : Boolean
78     {
79         val thread = Thread {
80             Log.v(TAG, "START LOGCAT")
81             myDataItems = updater.getLogCat("main", "time", "*:v", "gokigen", Regex(""))
82             Log.v(TAG, "FINISH LOGCAT")
83             try {
84                 val activity = activity
85                 activity?.runOnUiThread {
86                     try {
87                         // 中身があったらクリアする
88                         if (adapter!!.count > 0) {
89                             adapter!!.clear()
90                         }
91
92                         // リストの内容を更新する
93                         adapter!!.addAll(myDataItems)
94
95                         // 最下部にカーソルを移したい
96                         val view =
97                             activity.findViewById<ListView>(android.R.id.list)
98                         view.setSelection(myDataItems.size)
99
100                         // 更新終了通知
101                         Toast.makeText(
102                             getActivity(),
103                             getString(ID_LABEL_FINISHED_REFRESH),
104                             Toast.LENGTH_SHORT
105                         ).show()
106                     } catch (ee: Exception) {
107                         ee.printStackTrace()
108                     }
109                 }
110             } catch (e: Exception) {
111                 e.printStackTrace()
112             }
113         }
114         try
115         {
116             // 本当は、ここでダイアログを出したい
117             thread.start()
118         }
119         catch (e: Exception)
120         {
121             e.printStackTrace()
122         }
123
124         return (true)
125     }
126 }