1 package net.osdn.gokigen.joggingtimer.recorddetail
3 import android.annotation.SuppressLint
4 import android.content.Intent
5 import android.provider.BaseColumns
6 import android.util.Log
7 import androidx.appcompat.app.AppCompatActivity
8 import net.osdn.gokigen.joggingtimer.R
9 import net.osdn.gokigen.joggingtimer.storage.ITimeEntryDatabase
10 import net.osdn.gokigen.joggingtimer.storage.ITimeEntryDatabaseCallback
11 import net.osdn.gokigen.joggingtimer.storage.ITimeEntryDatabaseCallback.OperationType
12 import net.osdn.gokigen.joggingtimer.storage.TimeEntryDatabaseFactory
13 import net.osdn.gokigen.joggingtimer.storage.contract.TimeEntryData
14 import net.osdn.gokigen.joggingtimer.storage.contract.TimeEntryIndex.EntryIndex
15 import net.osdn.gokigen.joggingtimer.utilities.CreateModelData
16 import net.osdn.gokigen.joggingtimer.utilities.CreateModelData.IEditedModelDataCallback
17 import net.osdn.gokigen.joggingtimer.utilities.CreateModelDataDialog
18 import net.osdn.gokigen.joggingtimer.utilities.TimeStringConvert
21 class RecordDetailSetup internal constructor(
22 private val activity: AppCompatActivity,
23 private val indexId: Long,
24 private val callback: IDatabaseReadyNotify,
25 private val operation: IRecordOperation?,
26 private val editCallback: IEditedModelDataCallback
27 ) : ITimeEntryDatabaseCallback, IDetailEditor
29 private var database: ITimeEntryDatabase? = null
33 database = TimeEntryDatabaseFactory(activity, this).entryDatabase
47 override fun prepareFinished(isReady: Boolean)
51 callback.databaseSetupFinished(false)
54 val editor: IDetailEditor = this
59 operation?.clearRecord()
60 val cursor = database?.getAllDetailData(indexId)
62 var startTime: Long = 0
63 var previousLapTime: Long = 0
64 var morePreviousTime: Long = 0
65 while (cursor?.moveToNext() == true)
67 val dataIdIndex = cursor.getColumnIndex(BaseColumns._ID)
68 val dataId = cursor.getLong(dataIdIndex)
70 val indexIdIndex = cursor.getColumnIndex(TimeEntryData.EntryData.COLUMN_NAME_INDEX_ID)
71 val indexId = cursor.getLong(indexIdIndex)
73 val entryTimeIndex = cursor.getColumnIndex(TimeEntryData.EntryData.COLUMN_NAME_TIME_ENTRY)
74 val entryTime = cursor.getLong(entryTimeIndex)
76 val recordTypeIndex = cursor.getColumnIndex(TimeEntryData.EntryData.COLUMN_NAME_RECORD_TYPE)
77 val recordType = cursor.getInt(recordTypeIndex)
82 previousLapTime = entryTime
83 morePreviousTime = entryTime
87 val lapTime = entryTime - previousLapTime
88 val overallTime = entryTime - startTime
90 lapTime - (previousLapTime - morePreviousTime)
103 morePreviousTime = previousLapTime
104 previousLapTime = entryTime
108 activity.runOnUiThread { operation?.dataSetChangeFinished() }
115 callback.databaseSetupFinished(ret)
120 fun setEditIndexData(title: String, icon: Int)
122 val data = EditIndexData(title, icon)
123 val thread = Thread {
124 database?.updateIndexData(indexId, data.title(), data.icon())
125 callback.updatedIndexData(false)
130 fun getEditIndexData(): EditIndexData?
133 var iconId: Int = R.drawable.ic_android_black_24dp
136 val cursor = database?.getIndexdata(indexId)
137 while (cursor?.moveToNext() == true)
139 val titleIndex = cursor.getColumnIndex(EntryIndex.COLUMN_NAME_TITLE)
140 title = cursor.getString(titleIndex)
142 val iconIdIndex = cursor.getColumnIndex(EntryIndex.COLUMN_NAME_ICON_ID)
143 iconId = cursor.getInt(iconIdIndex)
145 return EditIndexData(title, iconId)
147 catch (e: java.lang.Exception)
154 fun setReferenceData(id: Int)
156 val thread = Thread {
157 database?.setReferenceIndexData(id, indexId)
158 callback.updatedIndexData(true)
163 override fun dataEntryFinished(operationType: OperationType, result: Boolean, id: Long, title: String) { }
164 override fun timeEntryFinished(operationType: OperationType, result: Boolean, indexId: Long, dataId: Long) { }
165 override fun modelDataEntryFinished(operationType: OperationType, result: Boolean, indexId: Long, title: String)
167 Log.v(TAG, "modelDataEntryFinished : $result $title $indexId")
183 * IDetailEditor.editDetailData()
185 override fun editDetailData(indexId: Long, dataId: Long, count: Int, defaultMillis: Long)
187 activity.runOnUiThread {
188 val dialog2 = CreateModelDataDialog.newInstance(
190 activity.getString(R.string.information_modify_time),
194 editCallback, null, indexId, dataId
198 dialog2.showNow(activity.supportFragmentManager, "dialog2")
202 fun updateDatabaseRecord(adapter: RecordDetailAdapter)
206 val count = adapter.itemCount
209 for (index in 0 until count)
211 val record = adapter.getRecord(index)
212 val id = record.dataId
213 val time = record.totalTime
214 database!!.updateTimeEntryData(id, time)
228 fun shareTheData(adapter: RecordDetailAdapter?)
230 Log.v(TAG, "shareTheData()")
231 if (adapter == null || adapter.itemCount <= 0 )
234 Log.v(TAG, "DATA IS NONE, NOT EXPORTED")
237 shareDetailIntent(adapter)
240 @SuppressLint("Range")
241 private fun shareDetailIntent(adapter: RecordDetailAdapter)
244 val dataCount = adapter.itemCount
245 val dataToExport = StringBuilder()
246 dataToExport.append("; ")
247 dataToExport.append(activity.getString(R.string.app_name))
248 dataToExport.append("\r\n")
251 val cursor = database?.getIndexdata(indexId)
252 while (cursor?.moveToNext() == true) {
253 dataToExport.append("; ")
254 title = cursor.getString(cursor.getColumnIndex(EntryIndex.COLUMN_NAME_TITLE))
255 dataToExport.append(title)
256 dataToExport.append(",")
258 TimeStringConvert.getTimeString(
260 cursor.getColumnIndex(
261 EntryIndex.COLUMN_NAME_TIME_DURATION
266 dataToExport.append(",")
267 dataToExport.append(cursor.getLong(cursor.getColumnIndex(EntryIndex.COLUMN_NAME_START_TIME)))
268 dataToExport.append(",")
269 dataToExport.append(cursor.getString(cursor.getColumnIndex(EntryIndex.COLUMN_NAME_MEMO)))
270 dataToExport.append(",")
271 dataToExport.append("\r\n")
277 dataToExport.append("\r\n")
279 dataToExport.append("; \r\n")
280 dataToExport.append("; LapCount,LapTime,TotalTime,LapTime(ms),TotalTime(ms),;\r\n")
281 for (index in 0 until dataCount)
285 val record = adapter.getRecord(index)
286 dataToExport.append(record.lapCount)
287 dataToExport.append(",")
288 dataToExport.append(record.title)
289 dataToExport.append(",")
290 dataToExport.append(record.overallTime)
291 dataToExport.append(",")
292 dataToExport.append(record.lapTime)
293 dataToExport.append(",")
294 dataToExport.append(record.totalTime)
295 dataToExport.append(",")
296 dataToExport.append(";")
301 dataToExport.append(";;\r\n")
304 dataToExport.append("\r\n")
307 // Intent発行(ACTION_SEND)
310 val sendIntent = Intent().apply {
311 action = Intent.ACTION_SEND // NoteIntents.ACTION_CREATE_NOTE
313 putExtra(Intent.EXTRA_SUBJECT, title)
314 putExtra(Intent.EXTRA_TEXT, dataToExport.toString())
316 //val shareIntent = Intent.createChooser(sendIntent, null)
317 //activity.startActivity(shareIntent)
318 activity.startActivity(sendIntent)
319 Log.v(TAG, "<<< SEND INTENT >>> : $title")
327 class EditIndexData(val title: String, val icon: Int)
340 internal interface IDatabaseReadyNotify
342 fun databaseSetupFinished(result: Boolean)
343 fun updatedIndexData(isIconOnly: Boolean)
347 private val TAG = RecordDetailSetup::class.java.simpleName