commit 12/02/2026

This commit is contained in:
2026-02-12 17:08:20 +07:00
parent 546f2e27af
commit c797c6e7fe
47 changed files with 89103 additions and 214 deletions

View File

@@ -0,0 +1,155 @@
package database.table
import com.batoulapps.adhan.CalculationMethod
import com.batoulapps.adhan.CalculationParameters
import com.batoulapps.adhan.Coordinates
import com.batoulapps.adhan.Madhab
import com.batoulapps.adhan.PrayerTimes
import com.batoulapps.adhan.data.DateComponents
import java.text.SimpleDateFormat
import java.util.Date
import java.util.TimeZone
/**
* Class for calculating prayer times (Adzan) based on latitude, longitude, and time zone.
* @param latitude The latitude of the location. Default is Monas, Jakarta (latitude: -6.1751).
* @param longitude The longitude of the location. Default is Monas, Jakarta (longitude: 106.8272).
* @param timezone The time zone for formatting prayer times. Default is "Asia/Jakarta".
*/
@Suppress("unused")
class Table_Adzan(val latitude: Double = -6.1751, val longitude: Double = 106.8272, val timezone : TimeZone = TimeZone.getTimeZone("Asia/Jakarta")) {
var coordinate: Coordinates = Coordinates(latitude, longitude)
val params : CalculationParameters = CalculationMethod.OTHER.parameters
val timeformatter = SimpleDateFormat("HH:mm")
val dateformatter = SimpleDateFormat("dd/MM/yyyy")
var fajar_enable = false
var dzuhur_enable = false
var ashar_enable = false
var maghrib_enable = false
var isya_enable = false
var fajar_sound = ""
var dzuhur_sound = ""
var ashar_sound = ""
var maghrib_sound = ""
var isya_sound = ""
init{
// sumber chatgpt Kemenag
params.fajrAngle = 20.0
params.ishaAngle = 18.0
params.madhab = Madhab.SHAFI
timeformatter.timeZone = timezone
}
/**
* Change the time zone used for formatting prayer times.
* @param timezone The new AdzanTimeZone.
*/
fun ChangeTimezone(timezone: AdzanTimeZone) {
ChangeTimeZone(timezone.toTimeZoneString())
}
/**
* Change the time zone used for formatting prayer times.
* @param timezoneString The new time zone string (e.g., "Asia/Jakarta").
*/
fun ChangeTimeZone(timezoneString: String) {
timeformatter.timeZone = TimeZone.getTimeZone(timezoneString)
}
/**
* Set prayer time adjustments in minutes.
* @param fajrMinute Adjustment for Fajr prayer time in minutes.
* @param dhuhrMinute Adjustment for Dhuhr prayer time in minutes.
* @param asrMinute Adjustment for Asr prayer time in minutes.
* @param maghribMinute Adjustment for Maghrib prayer time in minutes.
* @param ishaMinute Adjustment for Isha prayer time in minutes.
*/
fun SetPrayerAdjustment(fajrMinute: Int = 0, dhuhrMinute: Int = 0, asrMinute: Int = 0,maghribMinute: Int = 0, ishaMinute: Int = 0) {
params.adjustments.fajr = fajrMinute
params.adjustments.dhuhr = dhuhrMinute
params.adjustments.asr = asrMinute
params.adjustments.maghrib = maghribMinute
params.adjustments.isha = ishaMinute
}
/**
* Change the coordinates used for Adzan calculations.
* @param lat The new latitude.
* @param long The new longitude.
*/
fun ChangeCoordinate(lat: Double, long: Double) {
coordinate = Coordinates(lat, long)
}
fun ChangeLatitude(lat: Double) {
coordinate = Coordinates(lat, coordinate.longitude)
}
fun ChangeLongitude(long: Double) {
coordinate = Coordinates(coordinate.latitude, long)
}
/**
* Get prayer times for a specific date string in the format "dd/MM/yyyy".
* @param date_string The date string for which to get prayer times.
* @return An AdzanPrayerTime object containing the prayer times, or null if the date string is invalid.
*/
fun GetPrayerTimes(date_string: String) : AdzanPrayerTime?{
try{
val date = dateformatter.parse(date_string)
return GetPrayerTimes(date)
} catch (e: Exception){
return null
}
}
/**
* Get prayer times for a specific date.
* @param date The date for which to get prayer times.
* @return An AdzanPrayerTime object containing the prayer times.
*/
fun GetPrayerTimes(date: Date) : AdzanPrayerTime{
val prayer = PrayerTimes(coordinate, DateComponents.from(date), params)
return AdzanPrayerTime(
dateformatter.format(date),
timeformatter.format(prayer.fajr),
timeformatter.format(prayer.dhuhr),
timeformatter.format(prayer.asr),
timeformatter.format(prayer.maghrib),
timeformatter.format(prayer.isha)
)
}
/**
* Get prayer times for the current date.
* @return An AdzanPrayerTime object containing the prayer times for today.
*/
fun GetTodayPrayerTimes() : AdzanPrayerTime{
return GetPrayerTimes(Date())
}
/**
* Get prayer times for all days in a specific month and year.
* @param month The month (1-12) for which to get prayer times.
* @param year The year for which to get prayer times.
* @return A list of AdzanPrayerTime objects for each day in the specified month and year.
*/
fun GetMonthlyPrayerTimes(month: Int, year: Int) : List<AdzanPrayerTime>{
val prayerTimesList = mutableListOf<AdzanPrayerTime>()
val calendar = java.util.Calendar.getInstance()
calendar.set(year, month - 1, 1) // Month is 0-based in Calendar
val daysInMonth = calendar.getActualMaximum(java.util.Calendar.DAY_OF_MONTH)
for (day in 1..daysInMonth) {
calendar.set(year, month - 1, day)
val date = calendar.time
val prayerTimes = GetPrayerTimes(date)
prayerTimesList.add(prayerTimes)
}
return prayerTimesList
}
}