OSDN Git Service

3ef5fac2ada0e1baf03d4ef881aa1fce7dfa99b3
[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         }
146         catch (ex: Exception)
147         {
148             ex.printStackTrace()
149         }
150     }
151
152     /**
153      * 終了時の処理
154      */
155     override fun onDestroy()
156     {
157         try
158         {
159             listener.finishListener()
160             super.onDestroy()
161         }
162         catch (e: Exception)
163         {
164             e.printStackTrace()
165         }
166     }
167
168     /**
169      *
170      */
171     override fun onSaveInstanceState(outState: Bundle)
172     {
173         try
174         {
175             super.onSaveInstanceState(outState)
176             if (::listener.isInitialized)
177             {
178                 // ここでActivityの情報を覚える
179                 listener.onSaveInstanceState(outState)
180             }
181         }
182         catch (e: Exception)
183         {
184             e.printStackTrace()
185         }
186     }
187
188     /**
189      *
190      */
191     override fun onRestoreInstanceState(savedInstanceState: Bundle)
192     {
193         super.onRestoreInstanceState(savedInstanceState)
194         try
195         {
196             if (::listener.isInitialized)
197             {
198                 // ここでActivityの情報を展開する
199                 listener.onRestoreInstanceState(savedInstanceState)
200             }
201         }
202         catch (e: Exception)
203         {
204             e.printStackTrace()
205         }
206     }
207
208     /**
209      * ダイアログ表示の準備
210      *
211      */
212     override fun onCreateDialog(id: Int): Dialog
213     {
214         return listener.onCreateDialog(id)
215     }
216
217     /**
218      * ダイアログ表示の準備
219      *
220      */
221     override fun onPrepareDialog(id: Int, dialog: Dialog)
222     {
223         try
224         {
225             listener.onPrepareDialog(id, dialog)
226         }
227         catch (e: Exception)
228         {
229             e.printStackTrace()
230         }
231     }
232
233     /**
234      * 子画面から応答をもらったときの処理
235      */
236     override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?)
237     {
238         super.onActivityResult(requestCode, resultCode, data)
239         try
240         {
241             // 子画面からもらった情報の応答処理をイベント処理クラスに依頼する
242             listener.onActivityResult(requestCode, resultCode, data)
243         }
244         catch (ex: Exception)
245         {
246             ex.printStackTrace()
247         }
248     }
249
250     override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray)
251     {
252         super.onRequestPermissionsResult(requestCode, permissions, grantResults)
253         if (requestCode == REQUEST_CODE_PERMISSIONS)
254         {
255             if (!allPermissionsGranted())
256             {
257                 Toast.makeText(this, getString(R.string.permission_not_granted), Toast.LENGTH_SHORT).show()
258             }
259         }
260     }
261
262     companion object {
263         const val APP_NAMESPACE = "gokigen"
264         private val TAG = Main::class.java.simpleName
265         private const val REQUEST_CODE_PERMISSIONS = 10
266         private val REQUIRED_PERMISSIONS = arrayOf(
267             Manifest.permission.READ_EXTERNAL_STORAGE,
268         )
269     }
270 }