OSDN Git Service

Androidの古いバージョンでの対応を追加。
[gokigen/MeMoMa.git] / app / src / main / java / jp / sourceforge / gokigen / memoma / Main.kt
1 package jp.sourceforge.gokigen.memoma
2
3 import android.Manifest
4 import android.app.Dialog
5 import android.content.Intent
6 import android.content.pm.PackageManager
7 import android.os.Bundle
8 import android.util.Log
9 import android.view.Menu
10 import android.view.MenuItem
11 import android.view.Window
12 import android.widget.Toast
13 import androidx.appcompat.app.AppCompatActivity
14 import androidx.core.app.ActivityCompat
15 import androidx.core.content.ContextCompat
16 import jp.sourceforge.gokigen.memoma.io.MeMoMaDataInOutManager
17
18 /**
19  * メイン画面の処理
20  */
21 class Main : AppCompatActivity()
22 {
23     private lateinit var listener: MeMoMaListener // イベント処理クラス
24
25     public override fun onCreate(savedInstanceState: Bundle?)
26     {
27         super.onCreate(savedInstanceState)
28
29         // リスナクラスを生成する
30         listener = MeMoMaListener(this, MeMoMaDataInOutManager(this))
31
32         // タイトルにプログレスバーを出せるようにする
33         supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS)
34
35         // タイトルバーにアクションバーを出す
36         supportRequestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY)
37
38         // レイアウトを設定する **/
39         setContentView(R.layout.main)
40
41         try
42         {
43             // リスナクラスの準備
44             listener.prepareListener()
45         }
46         catch (e: Exception)
47         {
48             e.printStackTrace()
49         }
50
51         try
52         {
53             if (!allPermissionsGranted())
54             {
55                 ActivityCompat.requestPermissions(this, REQUIRED_PERMISSIONS, REQUEST_CODE_PERMISSIONS)
56             }
57         }
58         catch (e: Exception)
59         {
60             e.printStackTrace()
61         }
62
63         Log.v(TAG, " START MEMOMA...");
64     }
65
66     /**
67      * メニューの生成
68      */
69     override fun onCreateOptionsMenu(menu: Menu): Boolean
70     {
71         try
72         {
73             val menu0 = listener.onCreateOptionsMenu(menu)
74             return (super.onCreateOptionsMenu(menu0))
75         }
76         catch (e: Exception)
77         {
78             e.printStackTrace()
79         }
80         return false
81     }
82
83     /**
84      * メニューアイテムの選択
85      */
86     override fun onOptionsItemSelected(item: MenuItem): Boolean
87     {
88         try
89         {
90             return listener.onOptionsItemSelected(item)
91         }
92         catch (e: Exception)
93         {
94             e.printStackTrace()
95         }
96         return false
97     }
98
99     /**
100      * メニュー表示前の処理
101      */
102     override fun onPrepareOptionsMenu(menu: Menu): Boolean
103     {
104         try
105         {
106             listener.onPrepareOptionsMenu(menu)
107             return (super.onPrepareOptionsMenu(menu))
108         }
109         catch (e: Exception)
110         {
111             e.printStackTrace()
112         }
113         return false
114     }
115     private fun allPermissionsGranted() = REQUIRED_PERMISSIONS.all {
116         ContextCompat.checkSelfPermission(baseContext, it) == PackageManager.PERMISSION_GRANTED
117     }
118     /**
119      * 画面が裏に回ったときの処理
120      */
121     public override fun onPause()
122     {
123         super.onPause()
124         try
125         {
126             // 動作を止めるようイベント処理クラスに指示する
127             listener.shutdown()
128         }
129         catch (ex: Exception)
130         {
131             ex.printStackTrace()
132         }
133     }
134
135     /**
136      * 画面が表に出てきたときの処理
137      */
138     public override fun onResume()
139     {
140         super.onResume()
141         try
142         {
143             // 動作準備するようイベント処理クラスに指示する
144             listener.prepareToStart()
145             listener.updateContentList()
146         }
147         catch (ex: Exception)
148         {
149             ex.printStackTrace()
150         }
151     }
152
153     /**
154      * 終了時の処理
155      */
156     override fun onDestroy()
157     {
158         try
159         {
160             listener.finishListener()
161             super.onDestroy()
162         }
163         catch (e: Exception)
164         {
165             e.printStackTrace()
166         }
167     }
168
169     /**
170      *
171      */
172     override fun onSaveInstanceState(outState: Bundle)
173     {
174         try
175         {
176             super.onSaveInstanceState(outState)
177             if (::listener.isInitialized)
178             {
179                 // ここでActivityの情報を覚える
180                 listener.onSaveInstanceState(outState)
181             }
182         }
183         catch (e: Exception)
184         {
185             e.printStackTrace()
186         }
187     }
188
189     /**
190      *
191      */
192     override fun onRestoreInstanceState(savedInstanceState: Bundle)
193     {
194         super.onRestoreInstanceState(savedInstanceState)
195         try
196         {
197             if (::listener.isInitialized)
198             {
199                 // ここでActivityの情報を展開する
200                 listener.onRestoreInstanceState(savedInstanceState)
201             }
202         }
203         catch (e: Exception)
204         {
205             e.printStackTrace()
206         }
207     }
208
209     /**
210      * ダイアログ表示の準備
211      *
212      */
213     override fun onCreateDialog(id: Int): Dialog?
214     {
215         return listener.onCreateDialog(id)
216     }
217
218     /**
219      * ダイアログ表示の準備
220      *
221      */
222     override fun onPrepareDialog(id: Int, dialog: Dialog)
223     {
224         try
225         {
226             listener.onPrepareDialog(id, dialog)
227         }
228         catch (e: Exception)
229         {
230             e.printStackTrace()
231         }
232     }
233
234     /**
235      * 子画面から応答をもらったときの処理
236      */
237     override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?)
238     {
239         super.onActivityResult(requestCode, resultCode, data)
240         try
241         {
242             // 子画面からもらった情報の応答処理をイベント処理クラスに依頼する
243             listener.onActivityResult(requestCode, resultCode, data)
244         }
245         catch (ex: Exception)
246         {
247             ex.printStackTrace()
248         }
249     }
250
251     override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray)
252     {
253         super.onRequestPermissionsResult(requestCode, permissions, grantResults)
254         if (requestCode == REQUEST_CODE_PERMISSIONS)
255         {
256             if (!allPermissionsGranted())
257             {
258                 Toast.makeText(this, getString(R.string.permission_not_granted), Toast.LENGTH_SHORT).show()
259             }
260         }
261     }
262
263     companion object {
264         const val APP_NAMESPACE = "gokigen"
265         private val TAG = Main::class.java.simpleName
266         private const val REQUEST_CODE_PERMISSIONS = 10
267         private val REQUIRED_PERMISSIONS = arrayOf(
268             Manifest.permission.READ_EXTERNAL_STORAGE,
269             Manifest.permission.WRITE_EXTERNAL_STORAGE,
270         )
271     }
272 }