Skip to content

Commit e71b892

Browse files
Detect location with ip & auto complete search for combobox
1 parent ead519e commit e71b892

27 files changed

+719
-608
lines changed

Azkar/jarFiles/db/data.db

-132 KB
Binary file not shown.

Azkar/src/main/java/com/bayoumi/Launcher.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,6 @@ public void start(Stage primaryStage) {
115115
SingleInstance.getInstance().setCurrentStage(primaryStage);
116116

117117
// show Onboarding stage
118-
System.out.println("Onboarding.isFirstTimeOpened: " + Onboarding.isFirstTimeOpened());
119118
if (Onboarding.isFirstTimeOpened()) {
120119
try {
121120
Stage onboardingStage = new Stage();

Azkar/src/main/java/com/bayoumi/controllers/home/HomeController.java

Lines changed: 80 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
package com.bayoumi.controllers.home;
22

3-
import com.batoulapps.adhan.PrayerTimes;
43
import com.bayoumi.Launcher;
54
import com.bayoumi.controllers.azkar.timed.TimedAzkarController;
6-
import com.bayoumi.models.*;
7-
import com.bayoumi.util.EditablePeriodTimerTask;
5+
import com.bayoumi.models.AbsoluteZekr;
6+
import com.bayoumi.models.AzkarSettings;
7+
import com.bayoumi.models.OtherSettings;
8+
import com.bayoumi.models.PrayerTimeSettings;
89
import com.bayoumi.util.Logger;
910
import com.bayoumi.util.gui.HelperMethods;
10-
import com.bayoumi.util.gui.notfication.Notification;
11-
import com.bayoumi.util.prayertimes.local.PrayerTimesUtil;
11+
import com.bayoumi.util.services.azkar.AzkarService;
12+
import com.bayoumi.util.services.reminders.ReminderService;
1213
import com.bayoumi.util.time.ArabicNumeralDiscrimination;
1314
import com.bayoumi.util.time.HijriDate;
1415
import com.bayoumi.util.time.Utilities;
@@ -17,29 +18,23 @@
1718
import javafx.animation.Animation;
1819
import javafx.animation.KeyFrame;
1920
import javafx.animation.Timeline;
20-
import javafx.application.Platform;
2121
import javafx.fxml.FXML;
2222
import javafx.fxml.FXMLLoader;
2323
import javafx.fxml.Initializable;
2424
import javafx.scene.Scene;
2525
import javafx.scene.control.Label;
26-
import javafx.scene.image.Image;
2726
import javafx.scene.layout.VBox;
2827
import javafx.stage.Modality;
2928
import javafx.stage.Stage;
3029
import javafx.util.Duration;
3130
import org.controlsfx.control.PopOver;
3231

3332
import java.net.URL;
34-
import java.text.SimpleDateFormat;
35-
import java.time.LocalTime;
3633
import java.util.Date;
37-
import java.util.Random;
3834
import java.util.ResourceBundle;
3935

4036
public class HomeController implements Initializable {
4137

42-
4338
@FXML
4439
public Label hijriDate;
4540
@FXML
@@ -50,7 +45,6 @@ public class HomeController implements Initializable {
5045
public Label timeLabel;
5146
@FXML
5247
public JFXButton settingsBTN;
53-
private EditablePeriodTimerTask absoluteAzkarTask;
5448
private OtherSettings otherSettings;
5549
private AzkarSettings azkarSettings;
5650
@FXML
@@ -70,20 +64,7 @@ public class HomeController implements Initializable {
7064

7165
@Override
7266
public void initialize(URL location, ResourceBundle resources) {
73-
//Build PopOver look and feel
74-
Label label = new Label("يمكن تعديل معدل ظهور الأذكار من الإعدادت");
75-
label.setStyle("-fx-padding: 10;-fx-background-color: #E9C46A;-fx-text-fill: #000000;-fx-font-weight: bold;");
76-
//Create PopOver and add look and feel
77-
PopOver popOver = new PopOver(label);
78-
frequencyLabel.setOnMouseEntered(mouseEvent -> {
79-
//Show PopOver when mouse enters label
80-
popOver.show(frequencyLabel);
81-
});
82-
popOver.setCloseButtonEnabled(true);
83-
frequencyLabel.setOnMouseExited(mouseEvent -> {
84-
//Hide PopOver when mouse exits label
85-
popOver.hide();
86-
});
67+
buildPopOver();
8768

8869
otherSettings = new OtherSettings();
8970
azkarSettings = new AzkarSettings();
@@ -97,100 +78,19 @@ public void initialize(URL location, ResourceBundle resources) {
9778
}
9879

9980
if (!azkarSettings.isStopped()) {
100-
initAzkarThread();
81+
AzkarService.init(this);
10182
} else {
10283
periodBox.setDisable(true);
10384
}
10485

10586
initClock();
106-
initReminders();
87+
ReminderService.init(azkarSettings);
10788
Date date = new Date();
10889
day.setText(Utilities.getDay(otherSettings.getLanguageLocal(), date));
10990
gregorianDate.setText(Utilities.getGregorianDate(otherSettings.getLanguageLocal(), date));
11091
hijriDate.setText(new HijriDate(otherSettings.getHijriOffset()).getString(otherSettings.getLanguageLocal()));
11192
}
11293

113-
private void initReminders() {
114-
System.out.println("initReminders() ... ");
115-
AzkarReminderService.clearAllTasks();
116-
Image morningImage = new Image("/com/bayoumi/images/sun_50px.png");
117-
Image nightImage = new Image("/com/bayoumi/images/night_50px.png");
118-
PrayerTimes prayerTimesForToday = PrayerTimesUtil.getPrayerTimesToday(new PrayerTimeSettings());
119-
if (azkarSettings.getMorningAzkarOffset() != 0) { // 60000
120-
prayerTimesForToday.fajr.setTime(prayerTimesForToday.fajr.getTime() + (azkarSettings.getMorningAzkarOffset() * 60000));
121-
AzkarReminderService.create(new SimpleDateFormat("HH:mm").format(prayerTimesForToday.fajr), "أذكار الصباح", morningImage, this::goToMorningAzkar);
122-
}
123-
if (azkarSettings.getNightAzkarOffset() != 0) {
124-
prayerTimesForToday.asr.setTime(prayerTimesForToday.asr.getTime() + (azkarSettings.getNightAzkarOffset() * 60000));
125-
AzkarReminderService.create(new SimpleDateFormat("HH:mm").format(prayerTimesForToday.asr), "أذكار المساء", nightImage, this::goToNightAzkar);
126-
}
127-
128-
// for testing
129-
AzkarReminderService.create(LocalTime.of(0,22).toString(), "أذكار المساء", nightImage,this::goToNightAzkar);
130-
}
131-
132-
private void initAzkarThread() {
133-
setFrequencyLabel("initAzkarThread");
134-
absoluteAzkarTask = null;
135-
absoluteAzkarTask = new EditablePeriodTimerTask(()
136-
-> {
137-
if (AbsoluteZekr.absoluteZekrObservableList.isEmpty()) {
138-
return;
139-
}
140-
Platform.runLater(()
141-
-> Notification.createControlsFX(
142-
AbsoluteZekr.absoluteZekrObservableList.get(
143-
new Random().nextInt(AbsoluteZekr.absoluteZekrObservableList.size())).getText(),
144-
null, null,10));
145-
146-
},
147-
this::getPeriod);
148-
absoluteAzkarTask.updateTimer();
149-
}
150-
151-
private void initClock() {
152-
Timeline clock = new Timeline(new KeyFrame(Duration.ZERO, e -> {
153-
Date date = new Date();
154-
String timeNow;
155-
if (OtherSettings.isUpdated) {
156-
otherSettings = new OtherSettings();
157-
OtherSettings.isUpdated = false;
158-
hijriDate.setText(new HijriDate(otherSettings.getHijriOffset()).getString(otherSettings.getLanguageLocal()));
159-
}
160-
if (otherSettings.isEnable24Format()) {
161-
timeNow = Utilities.getTime24(otherSettings.getLanguageLocal(), date);
162-
} else {
163-
timeNow = Utilities.getTime(otherSettings.getLanguageLocal(), date);
164-
}
165-
timeLabel.setText(timeNow);
166-
167-
// Is it new day? => change Dates and the prayer times
168-
if (timeNow.equals("12:00:00 AM") || timeNow.equals("12:00:00 ص") || timeNow.equals("00:00:00")) {
169-
System.out.println("NEW DAY ...");
170-
day.setText(Utilities.getDay(otherSettings.getLanguageLocal(), date));
171-
gregorianDate.setText(Utilities.getGregorianDate(otherSettings.getLanguageLocal(), date));
172-
hijriDate.setText(new HijriDate(otherSettings.getHijriOffset()).getString(otherSettings.getLanguageLocal()));
173-
}
174-
175-
if (AzkarSettings.isUpdated) {
176-
azkarSettings = new AzkarSettings();
177-
AzkarSettings.isUpdated = false;
178-
if (absoluteAzkarTask != null) {
179-
absoluteAzkarTask.stopTask();
180-
}
181-
if (azkarSettings.isStopped()) {
182-
periodBox.setDisable(true);
183-
} else {
184-
initAzkarThread();
185-
periodBox.setDisable(false);
186-
}
187-
initReminders();
188-
}
189-
}), new KeyFrame(Duration.seconds(1)));
190-
clock.setCycleCount(Animation.INDEFINITE);
191-
clock.play();
192-
}
193-
19494
private JFXButton getSelectedButton() {
19595
if (azkarSettings.getSelectedPeriod().equals(highFrequency.getText())) {
19696
return highFrequency;
@@ -204,8 +104,7 @@ private JFXButton getSelectedButton() {
204104
return highFrequency;
205105
}
206106

207-
private void setFrequencyLabel(String s) {
208-
System.out.println("S: " + s);
107+
public void setFrequencyLabel() {
209108
String msg = "ظهور كل" + " ";
210109
if (currentFrequency.equals(highFrequency)) {
211110
msg += ArabicNumeralDiscrimination.getTimeArabicPlurality(azkarSettings.getHighPeriod());
@@ -219,7 +118,7 @@ private void setFrequencyLabel(String s) {
219118
frequencyLabel.setText(msg);
220119
}
221120

222-
private Long getPeriod() {
121+
public Long getPeriod() {
223122
if (currentFrequency.equals(highFrequency)) {
224123
return azkarSettings.getHighPeriod() * 60000L;
225124
} else if (currentFrequency.equals(midFrequency)) {
@@ -244,13 +143,78 @@ private Long getPeriod() {
244143
*/
245144
}
246145

146+
private void buildPopOver() {
147+
//Build PopOver look and feel
148+
Label label = new Label("يمكن تعديل معدل ظهور الأذكار من الإعدادت");
149+
label.setStyle("-fx-padding: 10;-fx-background-color: #E9C46A;-fx-text-fill: #000000;-fx-font-weight: bold;");
150+
//Create PopOver and add look and feel
151+
PopOver popOver = new PopOver(label);
152+
frequencyLabel.setOnMouseEntered(mouseEvent -> {
153+
//Show PopOver when mouse enters label
154+
popOver.show(frequencyLabel);
155+
});
156+
popOver.setCloseButtonEnabled(true);
157+
frequencyLabel.setOnMouseExited(mouseEvent -> {
158+
//Hide PopOver when mouse exits label
159+
popOver.hide();
160+
});
161+
}
162+
163+
private void initClock() {
164+
Timeline clock = new Timeline(new KeyFrame(Duration.ZERO, e -> {
165+
Date date = new Date();
166+
String timeNow;
167+
// check if there is a change in Hijri date offset
168+
if (OtherSettings.isUpdated) {
169+
otherSettings = new OtherSettings();
170+
OtherSettings.isUpdated = false;
171+
hijriDate.setText(new HijriDate(otherSettings.getHijriOffset()).getString(otherSettings.getLanguageLocal()));
172+
}
173+
if (otherSettings.isEnable24Format()) {
174+
timeNow = Utilities.getTime24(otherSettings.getLanguageLocal(), date);
175+
} else {
176+
timeNow = Utilities.getTime(otherSettings.getLanguageLocal(), date);
177+
}
178+
timeLabel.setText(timeNow);
179+
180+
// Is it new day? => change Dates and the prayer times
181+
if (timeNow.equals("12:00:00 AM") || timeNow.equals("12:00:00 ص") || timeNow.equals("00:00:00")) {
182+
day.setText(Utilities.getDay(otherSettings.getLanguageLocal(), date));
183+
gregorianDate.setText(Utilities.getGregorianDate(otherSettings.getLanguageLocal(), date));
184+
hijriDate.setText(new HijriDate(otherSettings.getHijriOffset()).getString(otherSettings.getLanguageLocal()));
185+
}
186+
187+
// check if time periods of Azkar and settings has changed
188+
if (AzkarSettings.isUpdated) {
189+
azkarSettings = new AzkarSettings();
190+
AzkarSettings.isUpdated = false;
191+
if (AzkarService.absoluteAzkarTask != null) {
192+
AzkarService.absoluteAzkarTask.stopTask();
193+
}
194+
if (azkarSettings.isStopped()) {
195+
periodBox.setDisable(true);
196+
} else {
197+
AzkarService.init(this);
198+
periodBox.setDisable(false);
199+
}
200+
ReminderService.init(azkarSettings);
201+
}
202+
if (PrayerTimeSettings.isUpdated) {
203+
ReminderService.init(azkarSettings);
204+
PrayerTimeSettings.isUpdated = false;
205+
}
206+
}), new KeyFrame(Duration.seconds(1)));
207+
clock.setCycleCount(Animation.INDEFINITE);
208+
clock.play();
209+
}
210+
247211
@FXML
248-
private void goToMorningAzkar() {
212+
public void goToMorningAzkar() {
249213
showTimedAzkar("morning");
250214
}
251215

252216
@FXML
253-
private void goToNightAzkar() {
217+
public void goToNightAzkar() {
254218
showTimedAzkar("night");
255219
}
256220

@@ -296,8 +260,8 @@ private void toggleFrequencyBTN(JFXButton b) {
296260
currentFrequency = b;
297261
currentFrequency.getStyleClass().add("frequency-btn-selected");
298262

299-
absoluteAzkarTask.updateTimer();
300-
setFrequencyLabel("toggleFrequencyBTN");
263+
AzkarService.absoluteAzkarTask.updateTimer();
264+
setFrequencyLabel();
301265
azkarSettings.setSelectedPeriod(currentFrequency.getText());
302266
azkarSettings.saveSelectedPeriod();
303267
}

0 commit comments

Comments
 (0)