mirror of
				https://github.com/SimpleMobileTools/Simple-Clock.git
				synced 2025-06-05 22:19:17 +02:00 
			
		
		
		
	properly handle alarmclock scheduling
This commit is contained in:
		| @@ -41,7 +41,7 @@ android { | |||||||
| } | } | ||||||
|  |  | ||||||
| dependencies { | dependencies { | ||||||
|     implementation 'com.simplemobiletools:commons:3.15.1' |     implementation 'com.simplemobiletools:commons:3.15.3' | ||||||
|     implementation 'com.facebook.stetho:stetho:1.5.0' |     implementation 'com.facebook.stetho:stetho:1.5.0' | ||||||
|     implementation 'com.android.support.constraint:constraint-layout:1.0.2' |     implementation 'com.android.support.constraint:constraint-layout:1.0.2' | ||||||
| } | } | ||||||
|   | |||||||
| @@ -3,6 +3,8 @@ | |||||||
|     xmlns:android="http://schemas.android.com/apk/res/android" |     xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|     package="com.simplemobiletools.clock"> |     package="com.simplemobiletools.clock"> | ||||||
|  |  | ||||||
|  |     <uses-permission android:name="com.android.alarm.permission.SET_ALARM"/> | ||||||
|  |  | ||||||
|     <application |     <application | ||||||
|         android:name=".App" |         android:name=".App" | ||||||
|         android:allowBackup="true" |         android:allowBackup="true" | ||||||
| @@ -47,5 +49,7 @@ | |||||||
|             android:name="com.simplemobiletools.commons.activities.FAQActivity" |             android:name="com.simplemobiletools.commons.activities.FAQActivity" | ||||||
|             android:label="@string/frequently_asked_questions" |             android:label="@string/frequently_asked_questions" | ||||||
|             android:parentActivityName="com.simplemobiletools.commons.activities.AboutActivity"/> |             android:parentActivityName="com.simplemobiletools.commons.activities.AboutActivity"/> | ||||||
|  |  | ||||||
|  |         <receiver android:name=".receivers.AlarmReceiver"/> | ||||||
|     </application> |     </application> | ||||||
| </manifest> | </manifest> | ||||||
|   | |||||||
| @@ -1,5 +1,10 @@ | |||||||
| package com.simplemobiletools.clock.fragments | package com.simplemobiletools.clock.fragments | ||||||
|  |  | ||||||
|  | import android.annotation.SuppressLint | ||||||
|  | import android.app.AlarmManager | ||||||
|  | import android.app.PendingIntent | ||||||
|  | import android.content.Context | ||||||
|  | import android.content.Intent | ||||||
| import android.os.Bundle | import android.os.Bundle | ||||||
| import android.support.v4.app.Fragment | import android.support.v4.app.Fragment | ||||||
| import android.view.LayoutInflater | import android.view.LayoutInflater | ||||||
| @@ -12,10 +17,13 @@ import com.simplemobiletools.clock.adapters.AlarmsAdapter | |||||||
| import com.simplemobiletools.clock.dialogs.EditAlarmDialog | import com.simplemobiletools.clock.dialogs.EditAlarmDialog | ||||||
| import com.simplemobiletools.clock.extensions.createNewAlarm | import com.simplemobiletools.clock.extensions.createNewAlarm | ||||||
| import com.simplemobiletools.clock.extensions.dbHelper | import com.simplemobiletools.clock.extensions.dbHelper | ||||||
|  | import com.simplemobiletools.clock.helpers.ALARM_ID | ||||||
| import com.simplemobiletools.clock.interfaces.ToggleAlarmInterface | import com.simplemobiletools.clock.interfaces.ToggleAlarmInterface | ||||||
| import com.simplemobiletools.clock.models.Alarm | import com.simplemobiletools.clock.models.Alarm | ||||||
|  | import com.simplemobiletools.clock.receivers.AlarmReceiver | ||||||
| import com.simplemobiletools.commons.extensions.toast | import com.simplemobiletools.commons.extensions.toast | ||||||
| import com.simplemobiletools.commons.extensions.updateTextColors | import com.simplemobiletools.commons.extensions.updateTextColors | ||||||
|  | import com.simplemobiletools.commons.helpers.isLollipopPlus | ||||||
| import kotlinx.android.synthetic.main.fragment_alarm.view.* | import kotlinx.android.synthetic.main.fragment_alarm.view.* | ||||||
| import java.util.* | import java.util.* | ||||||
| import kotlin.math.pow | import kotlin.math.pow | ||||||
| @@ -90,6 +98,7 @@ class AlarmFragment : Fragment(), ToggleAlarmInterface { | |||||||
|             if (isCorrectDay && (alarm.timeInMinutes > currentTimeInMinutes || i > 0)) { |             if (isCorrectDay && (alarm.timeInMinutes > currentTimeInMinutes || i > 0)) { | ||||||
|                 val triggerInMinutes = alarm.timeInMinutes - currentTimeInMinutes + (i * DAY_MINUTES) |                 val triggerInMinutes = alarm.timeInMinutes - currentTimeInMinutes + (i * DAY_MINUTES) | ||||||
|                 showRemainingTimeMessage(triggerInMinutes) |                 showRemainingTimeMessage(triggerInMinutes) | ||||||
|  |                 setupAlarmClock(alarm, triggerInMinutes * 60 - calendar.get(Calendar.SECOND)) | ||||||
|                 break |                 break | ||||||
|             } else { |             } else { | ||||||
|                 calendar.add(Calendar.DAY_OF_MONTH, 1) |                 calendar.add(Calendar.DAY_OF_MONTH, 1) | ||||||
| @@ -120,4 +129,22 @@ class AlarmFragment : Fragment(), ToggleAlarmInterface { | |||||||
|         val fullString = String.format(activity!!.getString(R.string.alarm_goes_off_in), timesString.toString().trim().trimEnd(',')) |         val fullString = String.format(activity!!.getString(R.string.alarm_goes_off_in), timesString.toString().trim().trimEnd(',')) | ||||||
|         activity!!.toast(fullString, Toast.LENGTH_LONG) |         activity!!.toast(fullString, Toast.LENGTH_LONG) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @SuppressLint("NewApi") | ||||||
|  |     private fun setupAlarmClock(alarm: Alarm, triggerInSeconds: Int) { | ||||||
|  |         val alarmManager = context!!.getSystemService(Context.ALARM_SERVICE) as AlarmManager | ||||||
|  |         val targetMS = System.currentTimeMillis() + triggerInSeconds * 1000 | ||||||
|  |         val pendingIntent = getPendingIntent(alarm) | ||||||
|  |  | ||||||
|  |         if (isLollipopPlus()) { | ||||||
|  |             val info = AlarmManager.AlarmClockInfo(targetMS, pendingIntent) | ||||||
|  |             alarmManager.setAlarmClock(info, pendingIntent) | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private fun getPendingIntent(alarm: Alarm): PendingIntent { | ||||||
|  |         val intent = Intent(context, AlarmReceiver::class.java) | ||||||
|  |         intent.putExtra(ALARM_ID, alarm.id) | ||||||
|  |         return PendingIntent.getBroadcast(context, alarm.id, intent, PendingIntent.FLAG_UPDATE_CURRENT) | ||||||
|  |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -10,6 +10,7 @@ const val EDITED_TIME_ZONE_TITLES = "edited_time_zone_titles" | |||||||
|  |  | ||||||
| const val TABS_COUNT = 3 | const val TABS_COUNT = 3 | ||||||
| const val EDITED_TIME_ZONE_SEPARATOR = ":" | const val EDITED_TIME_ZONE_SEPARATOR = ":" | ||||||
|  | const val ALARM_ID = "alarm_id" | ||||||
|  |  | ||||||
| fun getDefaultTimeZoneTitle(id: Int) = getAllTimeZones().firstOrNull { it.id == id }?.title ?: "" | fun getDefaultTimeZoneTitle(id: Int) = getAllTimeZones().firstOrNull { it.id == id }?.title ?: "" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -76,6 +76,8 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont | |||||||
|         return mDb.update(ALARMS_TABLE_NAME, values, selection, selectionArgs) == 1 |         return mDb.update(ALARMS_TABLE_NAME, values, selection, selectionArgs) == 1 | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     fun getAlarmWithId(id: Int) = getAlarms().firstOrNull { it.id == id } | ||||||
|  |  | ||||||
|     private fun fillAlarmContentValues(alarm: Alarm): ContentValues { |     private fun fillAlarmContentValues(alarm: Alarm): ContentValues { | ||||||
|         return ContentValues().apply { |         return ContentValues().apply { | ||||||
|             put(COL_TIME_IN_MINUTES, alarm.timeInMinutes) |             put(COL_TIME_IN_MINUTES, alarm.timeInMinutes) | ||||||
|   | |||||||
| @@ -0,0 +1,14 @@ | |||||||
|  | package com.simplemobiletools.clock.receivers | ||||||
|  |  | ||||||
|  | import android.content.BroadcastReceiver | ||||||
|  | import android.content.Context | ||||||
|  | import android.content.Intent | ||||||
|  | import com.simplemobiletools.clock.extensions.dbHelper | ||||||
|  | import com.simplemobiletools.clock.helpers.ALARM_ID | ||||||
|  |  | ||||||
|  | class AlarmReceiver : BroadcastReceiver() { | ||||||
|  |     override fun onReceive(context: Context, intent: Intent) { | ||||||
|  |         val id = intent.getIntExtra(ALARM_ID, -1) | ||||||
|  |         val alarm = context.dbHelper.getAlarmWithId(id) ?: return | ||||||
|  |     } | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user