diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
new file mode 100644
index 0000000..93c7cee
--- /dev/null
+++ b/.idea/deploymentTargetDropDown.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index b6cf899..3e855f7 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -6,14 +6,16 @@
+
-
+
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 7f8b19b..0946cf4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,12 +1,13 @@
+
-
-
-
-
-
+
+
+
+
+
+
@@ -31,13 +35,10 @@
-
-
-
-
-
-
+
+
+
+
-
\ No newline at end of file
diff --git a/app/src/main/java/com/satyajitghosh/mediclock/AlarmManagerHandler.java b/app/src/main/java/com/satyajitghosh/mediclock/AlarmManagerHandler.java
index aa09ec4..c84d7a5 100644
--- a/app/src/main/java/com/satyajitghosh/mediclock/AlarmManagerHandler.java
+++ b/app/src/main/java/com/satyajitghosh/mediclock/AlarmManagerHandler.java
@@ -46,9 +46,14 @@ public static void addAlert(Context context, int hour, int minute, String medici
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, hour);
cal.set(Calendar.MINUTE, minute);
- cal.set(Calendar.SECOND, 00);
- long time = cal.getTimeInMillis();
+ cal.set(Calendar.SECOND, 0);
+
+ // if alarm time has already passed, increment day by 1
+ if (cal.getTimeInMillis() <= System.currentTimeMillis()) {
+ cal.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH) + 1);
+ }
+ long time = cal.getTimeInMillis();
Intent intent = new Intent(context, MyBroadcastReceiver.class)
.putExtra("MedicineName", medicineName)
diff --git a/app/src/main/java/com/satyajitghosh/mediclock/AlarmRefreshService.java b/app/src/main/java/com/satyajitghosh/mediclock/AlarmRefreshService.java
new file mode 100644
index 0000000..821b3d5
--- /dev/null
+++ b/app/src/main/java/com/satyajitghosh/mediclock/AlarmRefreshService.java
@@ -0,0 +1,81 @@
+package com.satyajitghosh.mediclock;
+
+import android.app.Service;
+import android.content.Intent;
+import android.os.IBinder;
+import android.util.Log;
+import android.widget.Toast;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.google.android.gms.auth.api.signin.GoogleSignIn;
+import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
+import com.google.firebase.database.ChildEventListener;
+import com.google.firebase.database.DataSnapshot;
+import com.google.firebase.database.DatabaseError;
+import com.google.firebase.database.DatabaseReference;
+import com.google.firebase.database.FirebaseDatabase;
+
+import java.util.Iterator;
+import java.util.Objects;
+
+public class AlarmRefreshService extends Service {
+ private DatabaseReference mDatabase;
+ protected GoogleSignInAccount account;
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+ Log.d("RefreshService","It is refreshed");
+ GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
+ FirebaseDatabase database = FirebaseDatabase.getInstance();
+ mDatabase = FirebaseDatabase.getInstance().getReference().child("MedicineRecord").child(Objects.requireNonNull(account.getId()));
+ mDatabase.addChildEventListener(new ChildEventListener() {
+ @Override
+ public void onChildAdded(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
+ refreshData(snapshot);
+ }
+
+ @Override
+ public void onChildChanged(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
+ refreshData(snapshot);
+ }
+
+ @Override
+ public void onChildRemoved(@NonNull DataSnapshot snapshot) {
+
+ }
+
+ @Override
+ public void onChildMoved(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
+
+ }
+
+ @Override
+ public void onCancelled(@NonNull DatabaseError error) {
+
+ }
+ });
+
+ return super.onStartCommand(intent, flags, startId);
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ }
+
+ @Nullable
+ @Override
+ public IBinder onBind(Intent intent) {
+ return null;
+ }
+ public void refreshData(DataSnapshot snapshot) {
+
+ MedicineRecordHandler mrd = snapshot.getValue(MedicineRecordHandler.class);
+ AlarmManagerHandler.initAlarm(mrd,getApplicationContext());
+ Log.d("RefreshService",mrd.getName()+" refreshed");
+ }
+
+
+ }
diff --git a/app/src/main/java/com/satyajitghosh/mediclock/DisplayMedicineActivity.java b/app/src/main/java/com/satyajitghosh/mediclock/DisplayMedicineActivity.java
index 2806d39..6582aee 100644
--- a/app/src/main/java/com/satyajitghosh/mediclock/DisplayMedicineActivity.java
+++ b/app/src/main/java/com/satyajitghosh/mediclock/DisplayMedicineActivity.java
@@ -79,6 +79,12 @@ public void onClick(View view) {
);
}
});
+ findViewById(R.id.setting_btn).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ startActivity(new Intent(getApplicationContext(),TimeChangeActivity.class));
+ }
+ });
}
/**
diff --git a/app/src/main/java/com/satyajitghosh/mediclock/HomeActivity.java b/app/src/main/java/com/satyajitghosh/mediclock/HomeActivity.java
index c7f7a12..e560c90 100644
--- a/app/src/main/java/com/satyajitghosh/mediclock/HomeActivity.java
+++ b/app/src/main/java/com/satyajitghosh/mediclock/HomeActivity.java
@@ -96,7 +96,7 @@ public void onClick(View view) {
time
);
myRef.child("MedicineRecord").child(PersonID).child(mrh.getName() + AlarmManagerHandler.setUniqueNotificationId()).setValue(mrh); // It writes the new data to FireBase Database
- AlarmManagerHandler.initAlarm(mrh, getApplicationContext()); //It set up the alarm for that record
+ // AlarmManagerHandler.initAlarm(mrh, getApplicationContext()); //It set up the alarm for that record
Toast.makeText(getApplicationContext(), "Added Successfully", Toast.LENGTH_SHORT).show();
} else {
InputValidationHandler.showDialog(HomeActivity.this); // It shows a dialog box informing user to fill the required fields.
diff --git a/app/src/main/java/com/satyajitghosh/mediclock/MainActivity.java b/app/src/main/java/com/satyajitghosh/mediclock/MainActivity.java
index 35459b3..f06cefa 100644
--- a/app/src/main/java/com/satyajitghosh/mediclock/MainActivity.java
+++ b/app/src/main/java/com/satyajitghosh/mediclock/MainActivity.java
@@ -36,6 +36,7 @@ protected void onCreate(Bundle savedInstanceState) {
// the GoogleSignInAccount will be non-null.
GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
if (account != null) {
+ startService(new Intent(this,AlarmRefreshService.class));
String personName = account.getDisplayName();
startActivity(new Intent(MainActivity.this, DisplayMedicineActivity.class).putExtra("UserName", personName).putExtra("Id", account.getId())
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK)
diff --git a/app/src/main/java/com/satyajitghosh/mediclock/MyBroadcastReceiver.java b/app/src/main/java/com/satyajitghosh/mediclock/MyBroadcastReceiver.java
index c3fc84c..82d3b3f 100644
--- a/app/src/main/java/com/satyajitghosh/mediclock/MyBroadcastReceiver.java
+++ b/app/src/main/java/com/satyajitghosh/mediclock/MyBroadcastReceiver.java
@@ -19,7 +19,7 @@ public void onReceive(Context context, Intent intent) {
String MedicineName=intent.getStringExtra("MedicineName");
String Food=intent.getStringExtra("Food");
- context.startForegroundService(new Intent(context,MyAlarmService.class)
+ context.startService(new Intent(context,MyAlarmService.class)
.putExtra("MedicineName",MedicineName)
.putExtra("Food",Food)
);
diff --git a/app/src/main/java/com/satyajitghosh/mediclock/TimeChangeActivity.java b/app/src/main/java/com/satyajitghosh/mediclock/TimeChangeActivity.java
new file mode 100644
index 0000000..b9679e4
--- /dev/null
+++ b/app/src/main/java/com/satyajitghosh/mediclock/TimeChangeActivity.java
@@ -0,0 +1,117 @@
+package com.satyajitghosh.mediclock;
+
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.fragment.app.Fragment;
+
+import android.app.FragmentManager;
+import android.app.FragmentTransaction;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+import android.widget.FrameLayout;
+import android.widget.TextView;
+
+import com.google.android.material.timepicker.MaterialTimePicker;
+import com.google.android.material.timepicker.TimeFormat;
+
+public class TimeChangeActivity extends AppCompatActivity {
+ String time = "0000";
+ private TextView morning_edit_time;
+ private TextView lunch_edit_time;
+ private TextView night_edit_time;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_time_change);
+ morning_edit_time=findViewById(R.id.morning_edit_time);
+ lunch_edit_time=findViewById(R.id.afternoon_edit_time);
+ night_edit_time=findViewById(R.id.night_edit_time);
+
+ morning_edit_time.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+
+ MaterialTimePicker picker =
+ new MaterialTimePicker.Builder()
+ .setTimeFormat(TimeFormat.CLOCK_24H)
+ .setHour(12)
+ .setMinute(10)
+ .build();
+
+ picker.show(getSupportFragmentManager(), "tag");
+
+ picker.addOnPositiveButtonClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ morning_edit_time.setText(timeTextView(picker.getHour(),picker.getMinute()));
+ }
+ });
+
+ }
+ });
+ lunch_edit_time.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+
+ MaterialTimePicker picker =
+ new MaterialTimePicker.Builder()
+ .setTimeFormat(TimeFormat.CLOCK_24H)
+ .setHour(12)
+ .setMinute(10)
+ .build();
+
+ picker.show(getSupportFragmentManager(), "tag");
+
+ picker.addOnPositiveButtonClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ lunch_edit_time.setText(timeTextView(picker.getHour(),picker.getMinute()));
+ }
+ });
+
+ }
+ });
+ night_edit_time.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+
+ MaterialTimePicker picker =
+ new MaterialTimePicker.Builder()
+ .setTimeFormat(TimeFormat.CLOCK_24H)
+ .setHour(12)
+ .setMinute(10)
+ .build();
+
+ picker.show(getSupportFragmentManager(), "tag");
+
+ picker.addOnPositiveButtonClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ night_edit_time.setText(timeTextView(picker.getHour(),picker.getMinute()));
+ }
+ });
+
+ }
+ });
+ }
+ public String timeTextView(int hour,int minute){
+ String result="";
+ if(hour<10){
+ result="0"+Integer.toString(hour);
+ }
+ else{
+ result=Integer.toString(hour);
+ }
+ result+=":";
+ if(minute<10){
+ result+="0"+Integer.toString(minute);
+ }
+ else{
+ result+=Integer.toString(minute);
+ }
+
+ return result;
+ }
+
+ }
diff --git a/app/src/main/java/com/satyajitghosh/mediclock/UpdateActivity.java b/app/src/main/java/com/satyajitghosh/mediclock/UpdateActivity.java
index aafe657..a58cfda 100644
--- a/app/src/main/java/com/satyajitghosh/mediclock/UpdateActivity.java
+++ b/app/src/main/java/com/satyajitghosh/mediclock/UpdateActivity.java
@@ -66,7 +66,7 @@ public void onClick(View view) {
myRef.child(key).setValue(getData()); //Updates the data to the FireBase DataBase
- AlarmManagerHandler.initAlarm(getData(), getApplicationContext());
+ // AlarmManagerHandler.initAlarm(getData(), getApplicationContext());
startActivity(
new Intent(UpdateActivity.this, DisplayMedicineActivity.class)
diff --git a/app/src/main/res/drawable/ic_baseline_settings_24.xml b/app/src/main/res/drawable/ic_baseline_settings_24.xml
new file mode 100644
index 0000000..b240b83
--- /dev/null
+++ b/app/src/main/res/drawable/ic_baseline_settings_24.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_display_medicine.xml b/app/src/main/res/layout/activity_display_medicine.xml
index 8982168..10f2dc5 100644
--- a/app/src/main/res/layout/activity_display_medicine.xml
+++ b/app/src/main/res/layout/activity_display_medicine.xml
@@ -31,12 +31,25 @@
android:layout_alignParentEnd="true"
android:layout_alignParentRight="false"
android:layout_alignParentBottom="false"
- android:layout_marginHorizontal="40dp"
+ android:layout_marginHorizontal="60dp"
android:layout_marginTop="60dp"
android:clickable="true"
app:srcCompat="@drawable/ic_baseline_add_box_24"
tools:ignore="SpeakableTextPresentCheck" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index 84720c9..d106de8 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -14,6 +14,15 @@
- false
+
+
\ No newline at end of file