From a3a9916c28a9f578c9c83db49ad19b2521436365 Mon Sep 17 00:00:00 2001
From: elaraaj <91123185+theftzoku@users.noreply.github.com>
Date: Mon, 11 Nov 2024 18:11:44 +0000
Subject: [PATCH] Merge remote-tracking branch 'origin/development' into
development
---
.idea/kotlinc.xml | 2 +-
...inflater_asynclayoutinflater_1_0_0_aar.xml | 4 +-
...__androidx_cardview_cardview_1_0_0_aar.xml | 6 +-
...atorlayout_coordinatorlayout_1_1_0_aar.xml | 8 +-
..._cursoradapter_cursoradapter_1_0_0_aar.xml | 4 +-
...dx_documentfile_documentfile_1_0_0_aar.xml | 4 +-
...dx_interpolator_interpolator_1_0_0_aar.xml | 4 +-
...egacy_legacy_support_core_ui_1_0_0_aar.xml | 4 +-
...cy_legacy_support_core_utils_1_0_0_aar.xml | 4 +-
...idx_legacy_legacy_support_v4_1_0_0_aar.xml | 4 +-
...adle__androidx_loader_loader_1_0_0_aar.xml | 4 +-
...anager_localbroadcastmanager_1_0_0_aar.xml | 4 +-
...Gradle__androidx_media_media_1_0_0_aar.xml | 8 +-
...Gradle__androidx_print_print_1_0_0_aar.xml | 6 +-
...dx_recyclerview_recyclerview_1_1_0_aar.xml | 8 +-
...panelayout_slidingpanelayout_1_0_0_aar.xml | 4 +-
...eshlayout_swiperefreshlayout_1_0_0_aar.xml | 6 +-
...ectordrawable_vectordrawable_1_1_0_aar.xml | 4 +-
...able_vectordrawable_animated_1_1_0_aar.xml | 4 +-
...droidx_viewpager2_viewpager2_1_0_0_aar.xml | 8 +-
...androidx_viewpager_viewpager_1_0_0_aar.xml | 4 +-
...thub_PhilJay_MPAndroidChart_v3_1_0_aar.xml | 4 +-
...aredrummler_material_spinner_1_3_1_aar.xml | 6 +-
...de_hdodenhof_circleimageview_3_1_0_aar.xml | 6 +-
.idea/modules.xml | 6 +-
app/build.gradle | 5 +-
app/src/main/AndroidManifest.xml | 11 +
.../java/rocks/poopjournal/todont/About.java | 41 +-
.../todont/Adapters/AvoidedAdapter.java | 109 +---
.../todont/Adapters/AvoidedLogAdapter.java | 433 ++++++++++++---
.../todont/Adapters/DoneAdapter.java | 97 +---
.../todont/Adapters/DoneLogAdapter.java | 424 +++++++++++++--
.../todont/Adapters/HabitsAdapter.java | 514 +++++++++++++++---
.../todont/Adapters/HabitsLogAdapter.java | 458 +++++++++++++---
.../java/rocks/poopjournal/todont/Alarm.java | 50 ++
.../poopjournal/todont/DatabaseManager.java | 73 +++
.../poopjournal/todont/DatabaseUtils.java | 92 ++++
.../poopjournal/todont/Db_Controller.java | 98 +++-
.../rocks/poopjournal/todont/Db_Helper.java | 244 +++++++++
.../todont/Fragments/AvoidedFragment.java | 16 +-
.../todont/Fragments/AvoidedLogFragment.java | 9 -
.../todont/Fragments/DoneFragment.java | 11 +-
.../todont/Fragments/FragmentLog.java | 1 -
.../todont/Fragments/FragmentToday.java | 4 -
.../todont/Fragments/HabitsFragment.java | 84 +--
.../todont/Fragments/HabitsLogFragment.java | 24 -
.../todont/Fragments/LabelsAdapter.java | 10 +-
.../todont/Fragments/MonthlyFragment.java | 5 +-
.../todont/Fragments/WeeklyFragment.java | 6 +-
.../todont/Fragments/YearlyFragment.java | 7 +-
.../todont/Fragments/menuFragment.java | 20 +-
.../java/rocks/poopjournal/todont/Helper.java | 4 +-
.../java/rocks/poopjournal/todont/Labels.java | 73 +--
.../rocks/poopjournal/todont/MainActivity.kt | 63 ++-
.../todont/NotificationReceiver.java | 43 ++
.../todont/OnBoardingActivity.java | 9 +-
.../rocks/poopjournal/todont/Settings.java | 400 ++++++++++----
.../poopjournal/todont/Splash_Screen.java | 1 -
.../poopjournal/todont/utils/Constant.java | 1 -
.../todont/utils/SharedPrefUtils.java | 10 +
.../rocks/poopjournal/todont/utils/Utils.java | 5 +-
app/src/main/res/drawable/bell.xml | 20 +
app/src/main/res/drawable/bottom_sheet.xml | 1 -
app/src/main/res/drawable/dis.xml | 13 +
app/src/main/res/layout/activity_about.xml | 212 ++++----
app/src/main/res/layout/activity_settings.xml | 18 +-
.../main/res/layout/fab_description_view.xml | 11 -
app/src/main/res/layout/fragment_habits.xml | 13 -
.../res/layout/recyclerview_layout_habits.xml | 35 +-
.../update_layout_bottom_sheet_test.xml | 163 +++---
build.gradle | 1 +
71 files changed, 3033 insertions(+), 1035 deletions(-)
create mode 100644 app/src/main/java/rocks/poopjournal/todont/Alarm.java
create mode 100644 app/src/main/java/rocks/poopjournal/todont/DatabaseManager.java
create mode 100644 app/src/main/java/rocks/poopjournal/todont/DatabaseUtils.java
create mode 100644 app/src/main/java/rocks/poopjournal/todont/Db_Helper.java
create mode 100644 app/src/main/java/rocks/poopjournal/todont/NotificationReceiver.java
create mode 100644 app/src/main/res/drawable/bell.xml
create mode 100644 app/src/main/res/drawable/dis.xml
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
index 6d0ee1c2..d4b7accb 100644
--- a/.idea/kotlinc.xml
+++ b/.idea/kotlinc.xml
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__androidx_asynclayoutinflater_asynclayoutinflater_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_asynclayoutinflater_asynclayoutinflater_1_0_0_aar.xml
index 5257e386..3bab6da7 100644
--- a/.idea/libraries/Gradle__androidx_asynclayoutinflater_asynclayoutinflater_1_0_0_aar.xml
+++ b/.idea/libraries/Gradle__androidx_asynclayoutinflater_asynclayoutinflater_1_0_0_aar.xml
@@ -1,8 +1,8 @@
-
-
+
+
diff --git a/.idea/libraries/Gradle__androidx_cardview_cardview_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_cardview_cardview_1_0_0_aar.xml
index 48a27f31..84e6a9de 100644
--- a/.idea/libraries/Gradle__androidx_cardview_cardview_1_0_0_aar.xml
+++ b/.idea/libraries/Gradle__androidx_cardview_cardview_1_0_0_aar.xml
@@ -1,9 +1,9 @@
-
-
-
+
+
+
diff --git a/.idea/libraries/Gradle__androidx_coordinatorlayout_coordinatorlayout_1_1_0_aar.xml b/.idea/libraries/Gradle__androidx_coordinatorlayout_coordinatorlayout_1_1_0_aar.xml
index a4fc9feb..3770ab2f 100644
--- a/.idea/libraries/Gradle__androidx_coordinatorlayout_coordinatorlayout_1_1_0_aar.xml
+++ b/.idea/libraries/Gradle__androidx_coordinatorlayout_coordinatorlayout_1_1_0_aar.xml
@@ -1,12 +1,12 @@
-
+
-
-
-
+
+
+
diff --git a/.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml
index fc0f2f7d..4a48314b 100644
--- a/.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml
+++ b/.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml
@@ -1,8 +1,8 @@
-
-
+
+
diff --git a/.idea/libraries/Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml
index a7d7e93f..be019a6c 100644
--- a/.idea/libraries/Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml
+++ b/.idea/libraries/Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml
@@ -1,8 +1,8 @@
-
-
+
+
diff --git a/.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml
index 5e023a96..cb7c7f10 100644
--- a/.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml
+++ b/.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml
@@ -1,8 +1,8 @@
-
-
+
+
diff --git a/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_ui_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_ui_1_0_0_aar.xml
index 97dede46..3929decc 100644
--- a/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_ui_1_0_0_aar.xml
+++ b/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_ui_1_0_0_aar.xml
@@ -1,8 +1,8 @@
-
-
+
+
diff --git a/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml
index bae5567a..8cc2145b 100644
--- a/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml
+++ b/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml
@@ -1,8 +1,8 @@
-
-
+
+
diff --git a/.idea/libraries/Gradle__androidx_legacy_legacy_support_v4_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_legacy_legacy_support_v4_1_0_0_aar.xml
index 9ef4fc0d..e4e3f039 100644
--- a/.idea/libraries/Gradle__androidx_legacy_legacy_support_v4_1_0_0_aar.xml
+++ b/.idea/libraries/Gradle__androidx_legacy_legacy_support_v4_1_0_0_aar.xml
@@ -1,8 +1,8 @@
-
-
+
+
diff --git a/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml
index 2718db62..2728cf67 100644
--- a/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml
+++ b/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml
@@ -1,8 +1,8 @@
-
-
+
+
diff --git a/.idea/libraries/Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml
index f94d91d7..b34f5cc1 100644
--- a/.idea/libraries/Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml
+++ b/.idea/libraries/Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml
@@ -1,8 +1,8 @@
-
-
+
+
diff --git a/.idea/libraries/Gradle__androidx_media_media_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_media_media_1_0_0_aar.xml
index 8df46097..bb29a77d 100644
--- a/.idea/libraries/Gradle__androidx_media_media_1_0_0_aar.xml
+++ b/.idea/libraries/Gradle__androidx_media_media_1_0_0_aar.xml
@@ -1,12 +1,12 @@
-
+
-
-
-
+
+
+
diff --git a/.idea/libraries/Gradle__androidx_print_print_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_print_print_1_0_0_aar.xml
index af9cd3c2..0b1188c4 100644
--- a/.idea/libraries/Gradle__androidx_print_print_1_0_0_aar.xml
+++ b/.idea/libraries/Gradle__androidx_print_print_1_0_0_aar.xml
@@ -1,11 +1,11 @@
-
+
-
-
+
+
diff --git a/.idea/libraries/Gradle__androidx_recyclerview_recyclerview_1_1_0_aar.xml b/.idea/libraries/Gradle__androidx_recyclerview_recyclerview_1_1_0_aar.xml
index a312ef85..8336346e 100644
--- a/.idea/libraries/Gradle__androidx_recyclerview_recyclerview_1_1_0_aar.xml
+++ b/.idea/libraries/Gradle__androidx_recyclerview_recyclerview_1_1_0_aar.xml
@@ -1,12 +1,12 @@
-
+
-
-
-
+
+
+
diff --git a/.idea/libraries/Gradle__androidx_slidingpanelayout_slidingpanelayout_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_slidingpanelayout_slidingpanelayout_1_0_0_aar.xml
index 0d807f32..cbfdca32 100644
--- a/.idea/libraries/Gradle__androidx_slidingpanelayout_slidingpanelayout_1_0_0_aar.xml
+++ b/.idea/libraries/Gradle__androidx_slidingpanelayout_slidingpanelayout_1_0_0_aar.xml
@@ -1,8 +1,8 @@
-
-
+
+
diff --git a/.idea/libraries/Gradle__androidx_swiperefreshlayout_swiperefreshlayout_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_swiperefreshlayout_swiperefreshlayout_1_0_0_aar.xml
index 49a07f66..e2d61d00 100644
--- a/.idea/libraries/Gradle__androidx_swiperefreshlayout_swiperefreshlayout_1_0_0_aar.xml
+++ b/.idea/libraries/Gradle__androidx_swiperefreshlayout_swiperefreshlayout_1_0_0_aar.xml
@@ -1,11 +1,11 @@
-
+
-
-
+
+
diff --git a/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_1_0_aar.xml b/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_1_0_aar.xml
index 12c1acb1..86f09b5c 100644
--- a/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_1_0_aar.xml
+++ b/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_1_0_aar.xml
@@ -1,8 +1,8 @@
-
-
+
+
diff --git a/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_1_0_aar.xml b/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_1_0_aar.xml
index 40c5b258..ffae872a 100644
--- a/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_1_0_aar.xml
+++ b/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_1_0_aar.xml
@@ -1,8 +1,8 @@
-
-
+
+
diff --git a/.idea/libraries/Gradle__androidx_viewpager2_viewpager2_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_viewpager2_viewpager2_1_0_0_aar.xml
index 34221018..8dd8f993 100644
--- a/.idea/libraries/Gradle__androidx_viewpager2_viewpager2_1_0_0_aar.xml
+++ b/.idea/libraries/Gradle__androidx_viewpager2_viewpager2_1_0_0_aar.xml
@@ -1,12 +1,12 @@
-
+
-
-
-
+
+
+
diff --git a/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml
index e09ffe3e..da4a3664 100644
--- a/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml
+++ b/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml
@@ -1,8 +1,8 @@
-
-
+
+
diff --git a/.idea/libraries/Gradle__com_github_PhilJay_MPAndroidChart_v3_1_0_aar.xml b/.idea/libraries/Gradle__com_github_PhilJay_MPAndroidChart_v3_1_0_aar.xml
index 95228de1..83a2e3b5 100644
--- a/.idea/libraries/Gradle__com_github_PhilJay_MPAndroidChart_v3_1_0_aar.xml
+++ b/.idea/libraries/Gradle__com_github_PhilJay_MPAndroidChart_v3_1_0_aar.xml
@@ -1,8 +1,8 @@
-
-
+
+
diff --git a/.idea/libraries/Gradle__com_jaredrummler_material_spinner_1_3_1_aar.xml b/.idea/libraries/Gradle__com_jaredrummler_material_spinner_1_3_1_aar.xml
index 6808240e..839ff95d 100644
--- a/.idea/libraries/Gradle__com_jaredrummler_material_spinner_1_3_1_aar.xml
+++ b/.idea/libraries/Gradle__com_jaredrummler_material_spinner_1_3_1_aar.xml
@@ -1,9 +1,9 @@
-
-
-
+
+
+
diff --git a/.idea/libraries/Gradle__de_hdodenhof_circleimageview_3_1_0_aar.xml b/.idea/libraries/Gradle__de_hdodenhof_circleimageview_3_1_0_aar.xml
index 4a919ea3..7b8b6419 100644
--- a/.idea/libraries/Gradle__de_hdodenhof_circleimageview_3_1_0_aar.xml
+++ b/.idea/libraries/Gradle__de_hdodenhof_circleimageview_3_1_0_aar.xml
@@ -1,9 +1,9 @@
-
-
-
+
+
+
diff --git a/.idea/modules.xml b/.idea/modules.xml
index 6aea7b9f..a2717ef4 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -2,10 +2,10 @@
-
-
-
+
+
+
diff --git a/app/build.gradle b/app/build.gradle
index 98623d88..d3ce95fc 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,7 +8,6 @@ plugins {
// id 'kotlin-parcelize'
}
-
android {
namespace 'rocks.poopjournal.todont'
compileSdk 35
@@ -64,11 +63,14 @@ dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.13.1'
+ implementation 'androidx.core:core:1.10.1' // Check for the latest version
+ implementation 'com.google.android.material:material:1.12.0'
implementation 'androidx.appcompat:appcompat:1.7.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.google.android.material:material:1.12.0'
implementation 'androidx.cardview:cardview:1.0.0'
+ implementation 'androidx.leanback:leanback:1.0.0'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.2.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1'
@@ -82,5 +84,6 @@ dependencies {
implementation 'de.hdodenhof:circleimageview:3.1.0'
//noinspection GradleCompatible
implementation 'com.android.support:cardview-v7:28.0.0'
+ implementation("com.github.mreram:showcaseview:1.4.1")
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 0bb30127..404c9859 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -3,11 +3,21 @@
xmlns:tools="http://schemas.android.com/tools"
package="rocks.poopjournal.todont">
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/rocks/poopjournal/todont/About.java b/app/src/main/java/rocks/poopjournal/todont/About.java
index 00e1aa15..4bef03e5 100644
--- a/app/src/main/java/rocks/poopjournal/todont/About.java
+++ b/app/src/main/java/rocks/poopjournal/todont/About.java
@@ -1,25 +1,62 @@
package rocks.poopjournal.todont;
-import androidx.appcompat.app.AppCompatActivity;
-
import android.annotation.SuppressLint;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
+import android.view.MotionEvent;
import android.view.View;
+import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
+import androidx.appcompat.app.AppCompatActivity;
+
+import rocks.poopjournal.todont.utils.SharedPrefUtils;
+import smartdevelop.ir.eram.showcaseviewlib.GuideView;
+import smartdevelop.ir.eram.showcaseviewlib.config.DismissType;
+import smartdevelop.ir.eram.showcaseviewlib.config.Gravity;
+import smartdevelop.ir.eram.showcaseviewlib.config.PointerType;
+import smartdevelop.ir.eram.showcaseviewlib.listener.GuideListener;
+
public class About extends AppCompatActivity {
TextView version;
+ private LinearLayout contributionView;
+ private SharedPrefUtils prefUtils;
@SuppressLint("SetTextI18n")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_about);
+ contributionView=findViewById(R.id.contributionView);
version=findViewById(R.id.versiontext);
version.setText( BuildConfig.VERSION_NAME +" Beta ");
+
+ prefUtils=new SharedPrefUtils(this);
+ contributionView.setOnTouchListener(new View.OnTouchListener() {
+ @Override
+ public boolean onTouch(View view, MotionEvent motionEvent) {
+ if(!prefUtils.getBool(SharedPrefUtils.KEY_CONTRIBUTION_VIEW)){
+ GuideView.Builder guideView = new GuideView.Builder(About.this)
+ .setContentText("Help make \"To Don't\" better.")
+ .setTargetView(contributionView)
+ .setDismissType(DismissType.anywhere)
+ .setPointerType(PointerType.arrow)
+ .setGravity(Gravity.center)
+ .setGuideListener(new GuideListener() {
+ @Override
+ public void onDismiss(View view) {
+ prefUtils.setBool(SharedPrefUtils.KEY_CONTRIBUTION_VIEW, true);
+ }
+ });
+ guideView.build().show();
+ return true;
+ }
+ return false;
+ }
+ });
+
//tabdeeli aa gai hai
}
public void contact_codeaquaria(View view) {
diff --git a/app/src/main/java/rocks/poopjournal/todont/Adapters/AvoidedAdapter.java b/app/src/main/java/rocks/poopjournal/todont/Adapters/AvoidedAdapter.java
index 82004df5..0b4cc890 100644
--- a/app/src/main/java/rocks/poopjournal/todont/Adapters/AvoidedAdapter.java
+++ b/app/src/main/java/rocks/poopjournal/todont/Adapters/AvoidedAdapter.java
@@ -1,39 +1,24 @@
package rocks.poopjournal.todont.Adapters;
-import android.app.Activity;
import android.content.Context;
-import android.content.Intent;
-import android.database.sqlite.SQLiteException;
-import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.Adapter;
-import android.widget.AdapterView;
-import android.widget.ArrayAdapter;
import android.widget.Button;
-import android.widget.EditText;
-import android.widget.RelativeLayout;
-import android.widget.Spinner;
-import android.widget.SpinnerAdapter;
import android.widget.TextView;
import androidx.annotation.NonNull;
-import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView;
-import com.google.android.material.bottomsheet.BottomSheetDialog;
-
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
-import rocks.poopjournal.todont.Fragments.AvoidedFragment;
import rocks.poopjournal.todont.Db_Controller;
+import rocks.poopjournal.todont.Fragments.AvoidedFragment;
import rocks.poopjournal.todont.Helper;
-import rocks.poopjournal.todont.MainActivity;
import rocks.poopjournal.todont.R;
@@ -47,7 +32,7 @@ public class AvoidedAdapter extends RecyclerView.Adapter donotTask, ArrayList donotCatagory) {
@@ -61,100 +46,22 @@ public AvoidedAdapter(Context con, AvoidedFragment ft, Db_Controller db, ArrayLi
@NonNull
@Override
- public AvoidedAdapter.RecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
+ public RecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
View view = inflater.inflate(R.layout.recyclerview_layout, viewGroup, false);
return new RecyclerViewHolder(view);
}
@Override
- public void onBindViewHolder(@NonNull AvoidedAdapter.RecyclerViewHolder holder, final int position) {
- db.show_data();
+ public void onBindViewHolder(@NonNull RecyclerViewHolder holder, final int position) {
+ db.show_avoided_data();
String dTask = donotTask.get(position);
- String date = Helper.data.get(position)[1];
- String tim = Helper.data.get(position)[4];
+ String date = Helper.avoidedData.get(position)[1];
+ String tim = Helper.avoidedData.get(position)[4];
holder.tim.setText(tim+ "-Times");
holder.task.setText(dTask);
holder.dateoftask.setText(date);
- holder.task.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- final BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(con,
- R.style.BottomSheetDialogTheme);
- final View bottomsheetview = LayoutInflater.from(con.getApplicationContext()).
- inflate(R.layout.update_layout_bottom_sheet_test,
- view.findViewById(R.id.bottomsheetContainer));
- final Spinner spinner = bottomsheetview.findViewById(R.id.updatespinner);
- Button saveTaskButton = bottomsheetview.findViewById(R.id.updateTaskButton);
- final EditText habit = bottomsheetview.findViewById(R.id.updatehabit);
- final EditText detail = bottomsheetview.findViewById(R.id.updatedetail);
- TextView txt=bottomsheetview.findViewById(R.id.txt);
- if (Helper.labels_array.size() == 0) {
- txt.setVisibility(View.VISIBLE);
- spinner.setVisibility(View.INVISIBLE);
- } else {
- txt.setVisibility(View.INVISIBLE);
- spinner.setVisibility(View.VISIBLE);
- }
- habit.setText("" + Helper.data.get(position)[2]);
- detail.setText("" + Helper.habitsdata.get(position)[3].replace("''","'"));
-
- ArrayList reformed_labels = new ArrayList<>();
- for (int i=0;i(con, android.R.layout.simple_list_item_1,
- reformed_labels) {
- @Override
- public boolean isEnabled(int position) {
- return position != 0;
- }
- };
- spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
- @Override
- public void onItemSelected(AdapterView> adapterView, View view, int i, long l) {
- catagoryselected = adapterView.getItemAtPosition(i).toString().replace("'","''");
- TextView selectedText = (TextView) adapterView.getChildAt(i);
- if (selectedText != null) {
- selectedText.setTextColor(ContextCompat.getColor(con,R.color.g2));
- }
- }
-
- @Override
- public void onNothingSelected(AdapterView> adapterView) {
-
- }
- });
-
-
- saveTaskButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- String habit_text = Helper.data.get(position)[2];
- String detail_text = detail.getText().toString();
- String formattedDate = df.format(c);
- try {
-
- } catch (SQLiteException e) {
- }
- Log.d("checkingz",""+habit.getText().toString());
- db.update_habitsdata(position, formattedDate,habit_text
- , detail.getText().toString().replace("'","''"), catagoryselected);
- db.show_data();
- Helper.SelectedButtonOfTodayTab = 1;
- Intent intent = new Intent(con, MainActivity.class);
- con.startActivity(intent);
- ((Activity) con).overridePendingTransition(0, 0);
- bottomSheetDialog.dismiss();
- }
-
- });
- spinner.setAdapter((SpinnerAdapter) adapter);
- bottomSheetDialog.setContentView(bottomsheetview);
- bottomSheetDialog.show();
- }
- });
+
}
diff --git a/app/src/main/java/rocks/poopjournal/todont/Adapters/AvoidedLogAdapter.java b/app/src/main/java/rocks/poopjournal/todont/Adapters/AvoidedLogAdapter.java
index de34874c..294ee0de 100644
--- a/app/src/main/java/rocks/poopjournal/todont/Adapters/AvoidedLogAdapter.java
+++ b/app/src/main/java/rocks/poopjournal/todont/Adapters/AvoidedLogAdapter.java
@@ -1,25 +1,25 @@
package rocks.poopjournal.todont.Adapters;
-import android.app.Activity;
+import android.app.AlarmManager;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.app.TimePickerDialog;
import android.content.Context;
+import android.content.DialogInterface;
import android.content.Intent;
-import android.database.sqlite.SQLiteException;
+import android.os.Build;
+import android.provider.Settings;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.Adapter;
-import android.widget.AdapterView;
-import android.widget.ArrayAdapter;
import android.widget.Button;
-import android.widget.EditText;
-import android.widget.RelativeLayout;
-import android.widget.Spinner;
-import android.widget.SpinnerAdapter;
import android.widget.TextView;
+import android.widget.TimePicker;
+import android.widget.Toast;
import androidx.annotation.NonNull;
-import androidx.core.content.ContextCompat;
+import androidx.appcompat.app.AlertDialog;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.bottomsheet.BottomSheetDialog;
@@ -30,12 +30,13 @@
import java.util.Date;
import java.util.Locale;
+import rocks.poopjournal.todont.Alarm;
import rocks.poopjournal.todont.Db_Controller;
-import rocks.poopjournal.todont.Fragments.AvoidedFragment;
import rocks.poopjournal.todont.Fragments.AvoidedLogFragment;
import rocks.poopjournal.todont.Helper;
-import rocks.poopjournal.todont.MainActivity;
+import rocks.poopjournal.todont.NotificationReceiver;
import rocks.poopjournal.todont.R;
+import rocks.poopjournal.todont.databinding.UpdateLayoutBottomSheetTestBinding;
public class AvoidedLogAdapter extends RecyclerView.Adapter {
@@ -48,7 +49,7 @@ public class AvoidedLogAdapter extends RecyclerView.Adapter donotTask, ArrayList donotCatagory) {
@@ -62,95 +63,397 @@ public AvoidedLogAdapter(Context con, AvoidedLogFragment ft, Db_Controller db, A
@NonNull
@Override
- public AvoidedLogAdapter.RecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
+ public RecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
View view = inflater.inflate(R.layout.recyclerview_layout, viewGroup, false);
return new RecyclerViewHolder(view);
}
@Override
- public void onBindViewHolder(@NonNull AvoidedLogAdapter.RecyclerViewHolder holder, final int position) {
- db.show_data();
+ public void onBindViewHolder(@NonNull RecyclerViewHolder holder, final int position) {
+ db.show_avoided_data();
String dTask = donotTask.get(position);
- String date = Helper.data.get(position)[1];
+ String date = Helper.avoidedData.get(position)[1];
holder.task.setText(dTask);
holder.dateoftask.setText(date);
holder.times.setText(dTask);
holder.task.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
- final BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(con,
- R.style.BottomSheetDialogTheme);
- final View bottomsheetview = LayoutInflater.from(con.getApplicationContext()).
- inflate(R.layout.update_layout_bottom_sheet_test,
- view.findViewById(R.id.bottomsheetContainer));
- final Spinner spinner = bottomsheetview.findViewById(R.id.updatespinner);
- Button saveTaskButton = bottomsheetview.findViewById(R.id.updateTaskButton);
- final EditText habit = bottomsheetview.findViewById(R.id.updatehabit);
- final EditText detail = bottomsheetview.findViewById(R.id.updatedetail);
- TextView txt=bottomsheetview.findViewById(R.id.txt);
- if (Helper.labels_array.size() == 0) {
- txt.setVisibility(View.VISIBLE);
- spinner.setVisibility(View.INVISIBLE);
+ final BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(con, R.style.BottomSheetDialogTheme);
+ final UpdateLayoutBottomSheetTestBinding bottomsheetview = UpdateLayoutBottomSheetTestBinding.inflate(LayoutInflater.from(con));
+
+// if (Helper.labels_array.size() == 0) {
+// txt.setVisibility(View.VISIBLE);
+// } else {
+// txt.setVisibility(View.INVISIBLE);
+// }
+
+ bottomsheetview.titleText.setText(dTask);
+ bottomsheetview.details.setText(Helper.habitsdata.get(position)[3]);
+ bottomSheetDialog.setContentView(bottomsheetview.getRoot());
+ bottomSheetDialog.show();
+ db.show_avoided_data();
+ db.show_done_data();
+ if (Helper.avoidedData.size() == 0) {
+ bottomsheetview.avoidedCount.setText("0");
} else {
- txt.setVisibility(View.INVISIBLE);
- spinner.setVisibility(View.VISIBLE);
+ bottomsheetview.avoidedCount.setText(getAvoidedCount(Helper.habitsdata.get(position)[2]));
}
- habit.setText("" + Helper.data.get(position)[2]);
- detail.setText("" + Helper.data.get(position)[3]);
- final Adapter adapter = new ArrayAdapter(con, android.R.layout.simple_list_item_1,
- Helper.labels_array) {
- @Override
- public boolean isEnabled(int position) {
- return position != 0;
- }
- };
- spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+ if (Helper.donedata.size() == 0) {
+ bottomsheetview.doneCount.setText("0");
+ } else {
+ bottomsheetview.doneCount.setText(getDoneCount(Helper.habitsdata.get(position)[2]));
+ }
+ bottomsheetview.avoidedPlusButton.setOnClickListener(new View.OnClickListener() {
@Override
- public void onItemSelected(AdapterView> adapterView, View view, int i, long l) {
- catagoryselected = adapterView.getItemAtPosition(i).toString();
- TextView selectedText = (TextView) adapterView.getChildAt(i);
- if (selectedText != null) {
- selectedText.setTextColor(ContextCompat.getColor(con,R.color.g2));
+ public void onClick(View view) {
+ db.show_avoided_data();
+ db.show_habits_data();
+ Log.d("asize", "" + Helper.avoidedData.size());
+ int count = 0;
+ int countAll = 0;
+ int ids = Integer.parseInt(Helper.habitsdata.get(position)[0]);
+ if (Helper.avoidedData.size() != 0) {
+ for (int i = 0; i < Helper.avoidedData.size(); i++) {
+ String getdate = Helper.avoidedData.get(i)[1];
+ String gethabit = Helper.avoidedData.get(i)[2];
+ /* if ((Helper.habitsdata.get(position)[2].equals(gethabit)) && (getdate.equals(df.format(c)))) {
+// Toast.makeText(con, " Already Added ", Toast.LENGTH_SHORT).show();
+ count++;
+ }
+
+*/
+ if ((Helper.habitsdata.get(position)[2].equals(gethabit)) && (getdate.equals(df.format(c)))) {
+// Toast.makeText(con, " Already Added ", Toast.LENGTH_SHORT).show();
+ count++;
+ countAll = Integer.parseInt(Helper.avoidedData.get(i)[4]);
+ Log.i("tariq", "onClick: " + Helper.avoidedData.get(i)[4]);
+ }
+ }
+ if (count == 0) {
+ int res = count + countAll;
+ db.insert_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, " Added To Avoided", Toast.LENGTH_SHORT).show();
+ } else {
+ int res = count + countAll;
+ db.update_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, " Added To Avoided", Toast.LENGTH_SHORT).show();
+ }
+ } else {
+ int res = 1;
+ db.insert_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, " Added To Avoided out", Toast.LENGTH_SHORT).show();
}
+
+ db.show_avoided_data();
+ db.show_done_data();
+ if (Helper.avoidedData.size() == 0) {
+ bottomsheetview.avoidedCount.setText("0");
+ } else {
+ bottomsheetview.avoidedCount.setText(getAvoidedCount(Helper.habitsdata.get(position)[2]));
+ }
+ //holder.catagoryoftask.setText(String.valueOf(getCount(position)));
}
+ });
+ bottomsheetview.avoidedMinusButton.setOnClickListener(new View.OnClickListener() {
@Override
- public void onNothingSelected(AdapterView> adapterView) {
+ public void onClick(View view) {
+
+ db.show_avoided_data();
+ db.show_avoided_data();
+ Log.d("asize", "" + Helper.avoidedData.size());
+ int count = 0;
+ int countAll = 0;
+ int ids = Integer.parseInt(Helper.habitsdata.get(position)[0]);
+ if (Helper.avoidedData.size() != 0) {
+ for (int i = 0; i < Helper.avoidedData.size(); i++) {
+ String getdate = Helper.avoidedData.get(i)[1];
+ String gethabit = Helper.avoidedData.get(i)[2];
+ /* if ((Helper.habitsdata.get(position)[2].equals(gethabit)) && (getdate.equals(df.format(c)))) {
+// Toast.makeText(con, " Already Added ", Toast.LENGTH_SHORT).show();
+ count++;
+ }
+*/
+ if ((Helper.habitsdata.get(position)[2].equals(gethabit)) && (getdate.equals(df.format(c)))) {
+// Toast.makeText(con, " Already Added ", Toast.LENGTH_SHORT).show();
+ count--;
+ countAll = Integer.parseInt(Helper.avoidedData.get(i)[4]);
+ Log.i("tariq", "onClick: " + Helper.avoidedData.get(i)[4]);
+ }
+ }
+ if ((count + countAll) >= 0 && count == 0) {
+ int res = count + countAll;
+ db.insert_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, " Added To Avoided", Toast.LENGTH_SHORT).show();
+ } else if ((count + countAll) >= 0) {
+ int res = count + countAll;
+ db.update_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, " Added To Avoided", Toast.LENGTH_SHORT).show();
+ }
+ }
+
+ db.show_avoided_data();
+ db.show_done_data();
+ if (Helper.avoidedData.size() == 0) {
+ bottomsheetview.avoidedCount.setText("0");
+ } else {
+ bottomsheetview.avoidedCount.setText(getAvoidedCount(Helper.habitsdata.get(position)[2]));
+ }
+ //holder.catagoryoftask.setText(String.valueOf(getCount(position)));
}
});
+ bottomsheetview.donePlusButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ db.show_done_data();
+ db.show_avoided_data();
+ int count = 0;
+ int countAll = 0;
+ int ids = Integer.parseInt(Helper.habitsdata.get(position)[0]);
+ if (Helper.donedata.size() != 0) {
+ for (int i = 0; i < Helper.donedata.size(); i++) {
+ String getdate = Helper.donedata.get(i)[1];
+ String gethabit = Helper.donedata.get(i)[2];
+ if ((Helper.habitsdata.get(position)[2].equals(gethabit)) && (getdate.equals(df.format(c)))) {
+// Toast.makeText(con, " Already Added ", Toast.LENGTH_SHORT).show();
+ count++;
+ countAll = Integer.parseInt(Helper.donedata.get(i)[4]);
+ }
+ }
+ if (count == 0) {
+ int res = count + countAll;
+ db.insert_done_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, "Added To Done", Toast.LENGTH_SHORT).show();
+ } else {
+ int res = count + countAll;
+ db.update_done_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, "Added To Done ", Toast.LENGTH_SHORT).show();
+ }
+ } else {
+ int res = 1;
+ db.insert_done_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, "Added To Done out", Toast.LENGTH_SHORT).show();
+ }
+ db.show_avoided_data();
+ db.show_done_data();
+ if (Helper.donedata.size() == 0) {
+ bottomsheetview.doneCount.setText("0");
+ } else {
+ bottomsheetview.doneCount.setText(getDoneCount(Helper.habitsdata.get(position)[2]));
+ }
+ // holder.catagoryoftask.setText(String.valueOf(getCount(position)));
+
+ }
+
+ });
+ bottomsheetview.doneMinusButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ db.show_done_data();
+ db.show_avoided_data();
+ int count = 0;
+ int countAll = 0;
+ int ids = Integer.parseInt(Helper.habitsdata.get(position)[0]);
+ if (Helper.donedata.size() != 0) {
+ for (int i = 0; i < Helper.donedata.size(); i++) {
+ String getdate = Helper.donedata.get(i)[1];
+ String gethabit = Helper.donedata.get(i)[2];
+ if ((Helper.habitsdata.get(position)[2].equals(gethabit)) && (getdate.equals(df.format(c)))) {
+// Toast.makeText(con, " Already Added ", Toast.LENGTH_SHORT).show();
+ count--;
+ countAll = Integer.parseInt(Helper.donedata.get(i)[4]);
+ }
+ }
+ if ((count + countAll) >= 0) {
+ if (count == 0) {
+ int res = count + countAll;
+ db.insert_done_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, "Added To Done", Toast.LENGTH_SHORT).show();
+ } else {
+ int res = count + countAll;
+ db.update_done_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, "Added To Done ", Toast.LENGTH_SHORT).show();
+ }
+ }
+ }
- saveTaskButton.setOnClickListener(new View.OnClickListener() {
+ db.show_avoided_data();
+ db.show_done_data();
+ if (Helper.donedata.size() == 0) {
+ bottomsheetview.doneCount.setText("0");
+ } else {
+ bottomsheetview.doneCount.setText(getDoneCount(Helper.habitsdata.get(position)[2]));
+ }
+ // holder.catagoryoftask.setText(String.valueOf(getCount(position)));
+ }
+ });
+ bottomsheetview.tvNotification.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
- String habit_text = Helper.data.get(position)[2];
- String detail_text = detail.getText().toString();
- String formattedDate = df.format(c);
- try {
- } catch (SQLiteException e) {
+ // check if the user has the permission to post notificaiton
+ // else ask for the permission
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ NotificationManager notificationManager = ( NotificationManager) con.getSystemService(Context.NOTIFICATION_SERVICE);
+ if (!notificationManager.areNotificationsEnabled()) {
+ // Request notification permission
+ Intent intent = new Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS)
+ .putExtra(Settings.EXTRA_APP_PACKAGE, con.getPackageName());
+ con.startActivity(intent);
+ }else{
+ showDialog();
+ }
+ }else{
+ showDialog();
}
- Log.d("checkingz",""+habit.getText().toString());
- db.update_data(position, formattedDate, habit.getText().toString(), detail.getText().toString() , Integer.parseInt( Helper.data.get(position)[4]), catagoryselected);
- db.show_data();
- Helper.SelectedButtonOfTodayTab = 1;
- Intent intent = new Intent(con, MainActivity.class);
- con.startActivity(intent);
- ((Activity) con).overridePendingTransition(0, 0);
- bottomSheetDialog.dismiss();
}
+ private void showDialog(){
+ // Get current time
+ final Calendar calendar = Calendar.getInstance();
+ int hour = calendar.get(Calendar.HOUR_OF_DAY);
+ int minute = calendar.get(Calendar.MINUTE);
+
+ // Create and show TimePickerDialog
+ TimePickerDialog timePickerDialog = new TimePickerDialog(
+ view.getContext(),
+ new TimePickerDialog.OnTimeSetListener() {
+
+ @Override
+ public void onTimeSet(TimePicker timePicker, int hourOfDay, int minute) {
+ // Update the calendar with the selected time
+ calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
+ calendar.set(Calendar.MINUTE, minute);
+
+ // After selecting time, show dialog for repetition frequency
+ showFrequencyDialog(calendar, hourOfDay, minute);
+ }
+ },
+ hour,
+ minute,
+ true // Use 24-hour format
+ );
+ timePickerDialog.show();
+ }
+
+ private void showFrequencyDialog(Calendar calendar, int hourOfDay, int minute) {
+ // Options for repetition frequency
+ final String[] frequencies = {"Once", "Daily", "Weekly"};
+
+ // Show an AlertDialog to select frequency
+ AlertDialog.Builder builder = new AlertDialog.Builder(con);
+ builder.setTitle("Select Repetition Frequency");
+ builder.setItems(frequencies, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ String frequency = frequencies[which];
+
+ // Update tvNotification with selected time and frequency
+ String notificationText = String.format("Time: %02d:%02d, Frequency: %s", hourOfDay, minute, frequency);
+ bottomsheetview.tvNotification.setText(notificationText);
+
+ // Schedule notification based on selected time and frequency
+ scheduleNotification(Integer.parseInt(Helper.habitsdata.get(position)[0]), calendar, frequency);
+ }
+ });
+ builder.show();
+ }
+
+ private void scheduleNotification(int taskId, Calendar calendar, String frequency) {
+ Context context = con;
+ AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
+
+ Intent intent = new Intent(context, NotificationReceiver.class);
+ intent.putExtra("task_id", taskId); // Pass task ID in intent
+ intent.putExtra("task",Helper.habitsdata.get(position)[2]);
+ PendingIntent pendingIntent = PendingIntent.getBroadcast(context, taskId, intent, PendingIntent.FLAG_IMMUTABLE);
+
+ long triggerTime = calendar.getTimeInMillis();
+ long interval = 0;
+
+ // Determine repetition interval based on frequency
+ if (frequency.equals("Daily")) {
+ interval = AlarmManager.INTERVAL_DAY;
+ } else if (frequency.equals("Weekly")) {
+ interval = AlarmManager.INTERVAL_DAY * 7;
+ }
+
+ // Store alarm details in database
+ db.insertOrUpdateAlarm(new Alarm(taskId, triggerTime, frequency));
+
+ // Set the alarm
+ if (interval > 0) {
+ alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, triggerTime, interval, pendingIntent);
+ } else {
+ alarmManager.setExact(AlarmManager.RTC_WAKEUP, triggerTime, pendingIntent); // For "Once" frequency
+ }
+
+ Toast.makeText(context, "Notification scheduled: " + frequency, Toast.LENGTH_SHORT).show();
+ }
+
+ private void deleteAlarm(int taskId) {
+ Context context = con;
+ AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
+
+ // Cancel alarm with taskId
+ Intent intent = new Intent(context, NotificationReceiver.class);
+ PendingIntent pendingIntent = PendingIntent.getBroadcast(context, taskId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
+ alarmManager.cancel(pendingIntent);
+
+ // Remove alarm from the database
+ db.deleteAlarm(taskId);
+
+ Toast.makeText(context, "Notification cancelled", Toast.LENGTH_SHORT).show();
+ }
+
+ private void updateAlarm(int taskId, Calendar newCalendar, String newFrequency) {
+ // First, cancel the existing alarm
+ deleteAlarm(taskId);
+
+ // Then, set a new alarm with updated time and frequency
+ scheduleNotification(taskId, newCalendar, newFrequency);
+ }
});
- spinner.setAdapter((SpinnerAdapter) adapter);
- bottomSheetDialog.setContentView(bottomsheetview);
- bottomSheetDialog.show();
+
}
});
}
+ private int getCount(int position) {
+ int count = Integer.parseInt(getAvoidedCount(Helper.habitsdata.get(position)[2])) - Integer.parseInt(getDoneCount(Helper.habitsdata.get(position)[2]));
+ db.update_habitsdata(Integer.parseInt(Helper.habitsdata.get(position)[0]),
+ Helper.habitsdata.get(position)[1],
+ Helper.habitsdata.get(position)[2],
+ Helper.habitsdata.get(position)[3],
+ count,
+ Helper.habitsdata.get(position)[5]);
+ return count;
+ }
+
+ private String getDoneCount(String s) {
+ for (String x[] : Helper.donedata) {
+ if (x[2].equalsIgnoreCase(s)) {
+ return x[4];
+ }
+ }
+ return "0";
+ }
+
+ private String getAvoidedCount(String s) {
+ for (String x[] : Helper.avoidedData) {
+ if (x[2].equalsIgnoreCase(s)) {
+ return x[4];
+ }
+ }
+ return "0";
+
+ }
+
@Override
public int getItemCount() {
return donotTask.size();
diff --git a/app/src/main/java/rocks/poopjournal/todont/Adapters/DoneAdapter.java b/app/src/main/java/rocks/poopjournal/todont/Adapters/DoneAdapter.java
index 4b0847ef..118336cc 100644
--- a/app/src/main/java/rocks/poopjournal/todont/Adapters/DoneAdapter.java
+++ b/app/src/main/java/rocks/poopjournal/todont/Adapters/DoneAdapter.java
@@ -1,28 +1,15 @@
package rocks.poopjournal.todont.Adapters;
-import android.app.Activity;
import android.content.Context;
-import android.content.Intent;
-import android.database.sqlite.SQLiteException;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.Adapter;
-import android.widget.AdapterView;
-import android.widget.ArrayAdapter;
import android.widget.Button;
-import android.widget.EditText;
-import android.widget.RelativeLayout;
-import android.widget.Spinner;
-import android.widget.SpinnerAdapter;
import android.widget.TextView;
import androidx.annotation.NonNull;
-import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView;
-import com.google.android.material.bottomsheet.BottomSheetDialog;
-
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
@@ -32,7 +19,6 @@
import rocks.poopjournal.todont.Db_Controller;
import rocks.poopjournal.todont.Fragments.DoneFragment;
import rocks.poopjournal.todont.Helper;
-import rocks.poopjournal.todont.MainActivity;
import rocks.poopjournal.todont.R;
@@ -45,7 +31,9 @@ public class DoneAdapter extends RecyclerView.Adapter donotTask, ArrayList donotCatagory) {
@@ -59,14 +47,14 @@ public DoneAdapter(Context con, DoneFragment ft, Db_Controller db, ArrayList reformed_labels = new ArrayList<>();
- for (int i=0;i(con, android.R.layout.simple_list_item_1,
- reformed_labels) {
- @Override
- public boolean isEnabled(int position) {
- return position != 0;
- }
-
- };
- spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
- @Override
- public void onItemSelected(AdapterView> adapterView, View view, int i, long l) {
- catagoryselected = adapterView.getItemAtPosition(i).toString().replace("'","''");
- TextView selectedText = (TextView) adapterView.getChildAt(i);
- if (selectedText != null) {
- selectedText.setTextColor(ContextCompat.getColor(con,R.color.g2));
- }
- }
-
- @Override
- public void onNothingSelected(AdapterView> adapterView) {
-
- }
- });
- saveTaskButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- String habit_text = Helper.donedata.get(position)[2];
- String detail_text = detail.getText().toString();
- String formattedDate = df.format(c);
- try {
-
- } catch (SQLiteException e) {
- }
- db.update_habitsdata(position, formattedDate,habit_text
- , detail.getText().toString().replace("'","''"), catagoryselected);
- db.show_data();
- Intent intent = new Intent(con, MainActivity.class);
- con.startActivity(intent);
- ((Activity)con).overridePendingTransition(0,0);
- bottomSheetDialog.dismiss();
- }
- });
- spinner.setAdapter((SpinnerAdapter) adapter);
- bottomSheetDialog.setContentView(bottomsheetview);
- bottomSheetDialog.show();
- }
- });
//ft.setDataInList();
}
diff --git a/app/src/main/java/rocks/poopjournal/todont/Adapters/DoneLogAdapter.java b/app/src/main/java/rocks/poopjournal/todont/Adapters/DoneLogAdapter.java
index bc721552..62132935 100644
--- a/app/src/main/java/rocks/poopjournal/todont/Adapters/DoneLogAdapter.java
+++ b/app/src/main/java/rocks/poopjournal/todont/Adapters/DoneLogAdapter.java
@@ -1,24 +1,25 @@
package rocks.poopjournal.todont.Adapters;
-import android.app.Activity;
+import android.app.AlarmManager;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.app.TimePickerDialog;
import android.content.Context;
+import android.content.DialogInterface;
import android.content.Intent;
-import android.database.sqlite.SQLiteException;
+import android.os.Build;
+import android.provider.Settings;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.Adapter;
-import android.widget.AdapterView;
-import android.widget.ArrayAdapter;
import android.widget.Button;
-import android.widget.EditText;
-import android.widget.RelativeLayout;
-import android.widget.Spinner;
-import android.widget.SpinnerAdapter;
import android.widget.TextView;
+import android.widget.TimePicker;
+import android.widget.Toast;
import androidx.annotation.NonNull;
-import androidx.core.content.ContextCompat;
+import androidx.appcompat.app.AlertDialog;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.bottomsheet.BottomSheetDialog;
@@ -29,12 +30,13 @@
import java.util.Date;
import java.util.Locale;
+import rocks.poopjournal.todont.Alarm;
import rocks.poopjournal.todont.Db_Controller;
-import rocks.poopjournal.todont.Fragments.DoneFragment;
import rocks.poopjournal.todont.Fragments.DoneLogFragment;
import rocks.poopjournal.todont.Helper;
-import rocks.poopjournal.todont.MainActivity;
+import rocks.poopjournal.todont.NotificationReceiver;
import rocks.poopjournal.todont.R;
+import rocks.poopjournal.todont.databinding.UpdateLayoutBottomSheetTestBinding;
public class DoneLogAdapter extends RecyclerView.Adapter {
@@ -46,7 +48,7 @@ public class DoneLogAdapter extends RecyclerView.Adapter donotTask, ArrayList donotCatagory) {
@@ -60,14 +62,14 @@ public DoneLogAdapter(Context con, DoneLogFragment ft, Db_Controller db, ArrayLi
@NonNull
@Override
- public DoneLogAdapter.RecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
+ public RecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
View view = inflater.inflate(R.layout.recyclerview_layout, viewGroup, false);
return new RecyclerViewHolder(view);
}
@Override
- public void onBindViewHolder(@NonNull DoneLogAdapter.RecyclerViewHolder holder, final int position) {
+ public void onBindViewHolder(@NonNull RecyclerViewHolder holder, final int position) {
db.show_done_data();
String dTask=donotTask.get(position);
String date= Helper.donedata.get(position)[1];
@@ -76,74 +78,378 @@ public void onBindViewHolder(@NonNull DoneLogAdapter.RecyclerViewHolder holder,
holder.task.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
- final BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(con,
- R.style.BottomSheetDialogTheme);
- final View bottomsheetview = LayoutInflater.from(con.getApplicationContext()).
- inflate(R.layout.update_layout_bottom_sheet_test,
- view.findViewById(R.id.bottomsheetContainer));
- final Spinner spinner = bottomsheetview.findViewById(R.id.updatespinner);
- Button saveTaskButton = bottomsheetview.findViewById(R.id.updateTaskButton);
- final EditText habit = bottomsheetview.findViewById(R.id.updatehabit);
- final EditText detail = bottomsheetview.findViewById(R.id.updatedetail);
- TextView txt=bottomsheetview.findViewById(R.id.txt);
- if (Helper.labels_array.size() == 0) {
- txt.setVisibility(View.VISIBLE);
- spinner.setVisibility(View.INVISIBLE);
+ final BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(con, R.style.BottomSheetDialogTheme);
+ final UpdateLayoutBottomSheetTestBinding bottomsheetview = UpdateLayoutBottomSheetTestBinding.inflate(LayoutInflater.from(con));
+
+// if (Helper.labels_array.size() == 0) {
+// txt.setVisibility(View.VISIBLE);
+// } else {
+// txt.setVisibility(View.INVISIBLE);
+// }
+
+ bottomsheetview.titleText.setText(dTask);
+ bottomsheetview.details.setText(Helper.habitsdata.get(position)[3]);
+ bottomSheetDialog.setContentView(bottomsheetview.getRoot());
+ bottomSheetDialog.show();
+ db.show_avoided_data();
+ db.show_done_data();
+ if (Helper.avoidedData.size() == 0) {
+ bottomsheetview.avoidedCount.setText("0");
+ } else {
+ bottomsheetview.avoidedCount.setText(getAvoidedCount(Helper.habitsdata.get(position)[2]));
+ }
+ if (Helper.donedata.size() == 0) {
+ bottomsheetview.doneCount.setText("0");
} else {
- txt.setVisibility(View.INVISIBLE);
- spinner.setVisibility(View.VISIBLE);
+ bottomsheetview.doneCount.setText(getDoneCount(Helper.habitsdata.get(position)[2]));
}
- habit.setText("" + Helper.donedata.get(position)[2]);
- detail.setText("" + Helper.donedata.get(position)[3]);
- final Adapter adapter = new ArrayAdapter(con, android.R.layout.simple_list_item_1,
- Helper.labels_array) {
+ bottomsheetview.avoidedPlusButton.setOnClickListener(new View.OnClickListener() {
@Override
- public boolean isEnabled(int position) {
- return position != 0;
+ public void onClick(View view) {
+ db.show_avoided_data();
+ db.show_habits_data();
+ Log.d("asize", "" + Helper.avoidedData.size());
+ int count = 0;
+ int countAll = 0;
+ int ids = Integer.parseInt(Helper.habitsdata.get(position)[0]);
+ if (Helper.avoidedData.size() != 0) {
+ for (int i = 0; i < Helper.avoidedData.size(); i++) {
+ String getdate = Helper.avoidedData.get(i)[1];
+ String gethabit = Helper.avoidedData.get(i)[2];
+ /* if ((Helper.habitsdata.get(position)[2].equals(gethabit)) && (getdate.equals(df.format(c)))) {
+// Toast.makeText(con, " Already Added ", Toast.LENGTH_SHORT).show();
+ count++;
+ }
+
+*/
+ if ((Helper.habitsdata.get(position)[2].equals(gethabit)) && (getdate.equals(df.format(c)))) {
+// Toast.makeText(con, " Already Added ", Toast.LENGTH_SHORT).show();
+ count++;
+ countAll = Integer.parseInt(Helper.avoidedData.get(i)[4]);
+ Log.i("tariq", "onClick: " + Helper.avoidedData.get(i)[4]);
+ }
+ }
+ if (count == 0) {
+ int res = count + countAll;
+ db.insert_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, " Added To Avoided", Toast.LENGTH_SHORT).show();
+ } else {
+ int res = count + countAll;
+ db.update_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, " Added To Avoided", Toast.LENGTH_SHORT).show();
+ }
+ } else {
+ int res = 1;
+ db.insert_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, " Added To Avoided out", Toast.LENGTH_SHORT).show();
+ }
+
+ db.show_avoided_data();
+ db.show_done_data();
+ if (Helper.avoidedData.size() == 0) {
+ bottomsheetview.avoidedCount.setText("0");
+ } else {
+ bottomsheetview.avoidedCount.setText(getAvoidedCount(Helper.habitsdata.get(position)[2]));
+ }
+ //holder.catagoryoftask.setText(String.valueOf(getCount(position)));
}
+ });
+
+ bottomsheetview.avoidedMinusButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+
+ db.show_avoided_data();
+ db.show_habits_data();
+ Log.d("asize", "" + Helper.avoidedData.size());
+ int count = 0;
+ int countAll = 0;
+ int ids = Integer.parseInt(Helper.habitsdata.get(position)[0]);
+ if (Helper.avoidedData.size() != 0) {
+ for (int i = 0; i < Helper.avoidedData.size(); i++) {
+ String getdate = Helper.avoidedData.get(i)[1];
+ String gethabit = Helper.avoidedData.get(i)[2];
+ /* if ((Helper.habitsdata.get(position)[2].equals(gethabit)) && (getdate.equals(df.format(c)))) {
+// Toast.makeText(con, " Already Added ", Toast.LENGTH_SHORT).show();
+ count++;
+ }
+
+*/
+ if ((Helper.habitsdata.get(position)[2].equals(gethabit)) && (getdate.equals(df.format(c)))) {
+// Toast.makeText(con, " Already Added ", Toast.LENGTH_SHORT).show();
+ count--;
+ countAll = Integer.parseInt(Helper.avoidedData.get(i)[4]);
+ Log.i("tariq", "onClick: " + Helper.avoidedData.get(i)[4]);
+ }
+ }
+ if ((count + countAll) >= 0 && count == 0) {
+ int res = count + countAll;
+ db.insert_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, " Added To Avoided", Toast.LENGTH_SHORT).show();
+ } else if ((count + countAll) >= 0) {
+ int res = count + countAll;
+ db.update_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, " Added To Avoided", Toast.LENGTH_SHORT).show();
+ }
+ }
- };
- spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+ db.show_avoided_data();
+ db.show_done_data();
+ if (Helper.avoidedData.size() == 0) {
+ bottomsheetview.avoidedCount.setText("0");
+ } else {
+ bottomsheetview.avoidedCount.setText(getAvoidedCount(Helper.habitsdata.get(position)[2]));
+ }
+ //holder.catagoryoftask.setText(String.valueOf(getCount(position)));
+ }
+ });
+ bottomsheetview.donePlusButton.setOnClickListener(new View.OnClickListener() {
@Override
- public void onItemSelected(AdapterView> adapterView, View view, int i, long l) {
- catagoryselected = adapterView.getItemAtPosition(i).toString();
- TextView selectedText = (TextView) adapterView.getChildAt(i);
- if (selectedText != null) {
- selectedText.setTextColor(ContextCompat.getColor(con,R.color.g2));
+ public void onClick(View view) {
+ db.show_done_data();
+ db.show_habits_data();
+ int count = 0;
+ int countAll = 0;
+ int ids = Integer.parseInt(Helper.habitsdata.get(position)[0]);
+ if (Helper.donedata.size() != 0) {
+ for (int i = 0; i < Helper.donedata.size(); i++) {
+ String getdate = Helper.donedata.get(i)[1];
+ String gethabit = Helper.donedata.get(i)[2];
+ if ((Helper.habitsdata.get(position)[2].equals(gethabit)) && (getdate.equals(df.format(c)))) {
+// Toast.makeText(con, " Already Added ", Toast.LENGTH_SHORT).show();
+ count++;
+ countAll = Integer.parseInt(Helper.donedata.get(i)[4]);
+ }
+ }
+ if (count == 0) {
+ int res = count + countAll;
+ db.insert_done_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, "Added To Done", Toast.LENGTH_SHORT).show();
+ } else {
+ int res = count + countAll;
+ db.update_done_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, "Added To Done ", Toast.LENGTH_SHORT).show();
+ }
+ } else {
+ int res = 1;
+ db.insert_done_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, "Added To Done out", Toast.LENGTH_SHORT).show();
}
+
+ db.show_avoided_data();
+ db.show_done_data();
+ if (Helper.donedata.size() == 0) {
+ bottomsheetview.doneCount.setText("0");
+ } else {
+ bottomsheetview.doneCount.setText(getDoneCount(Helper.habitsdata.get(position)[2]));
+ }
+ // holder.catagoryoftask.setText(String.valueOf(getCount(position)));
+
}
+ });
+ bottomsheetview.doneMinusButton.setOnClickListener(new View.OnClickListener() {
@Override
- public void onNothingSelected(AdapterView> adapterView) {
+ public void onClick(View view) {
+ db.show_done_data();
+ db.show_habits_data();
+ int count = 0;
+ int countAll = 0;
+ int ids = Integer.parseInt(Helper.habitsdata.get(position)[0]);
+ if (Helper.donedata.size() != 0) {
+ for (int i = 0; i < Helper.donedata.size(); i++) {
+ String getdate = Helper.donedata.get(i)[1];
+ String gethabit = Helper.donedata.get(i)[2];
+ if ((Helper.habitsdata.get(position)[2].equals(gethabit)) && (getdate.equals(df.format(c)))) {
+// Toast.makeText(con, " Already Added ", Toast.LENGTH_SHORT).show();
+ count--;
+ countAll = Integer.parseInt(Helper.donedata.get(i)[4]);
+ }
+ }
+ if ((count + countAll) >= 0) {
+ if (count == 0) {
+ int res = count + countAll;
+ db.insert_done_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, "Added To Done", Toast.LENGTH_SHORT).show();
+ } else {
+ int res = count + countAll;
+ db.update_done_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, "Added To Done ", Toast.LENGTH_SHORT).show();
+ }
+ }
+ }
+ db.show_avoided_data();
+ db.show_done_data();
+ if (Helper.donedata.size() == 0) {
+ bottomsheetview.doneCount.setText("0");
+ } else {
+ bottomsheetview.doneCount.setText(getDoneCount(Helper.habitsdata.get(position)[2]));
+ }
+ // holder.catagoryoftask.setText(String.valueOf(getCount(position)));
}
});
- saveTaskButton.setOnClickListener(new View.OnClickListener() {
+ bottomsheetview.tvNotification.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
- String habit_text = Helper.donedata.get(position)[2];
- String detail_text = detail.getText().toString();
- String formattedDate = df.format(c);
- try {
- } catch (SQLiteException e) {
+ // check if the user has the permission to post notificaiton
+ // else ask for the permission
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ NotificationManager notificationManager = ( NotificationManager) con.getSystemService(Context.NOTIFICATION_SERVICE);
+ if (!notificationManager.areNotificationsEnabled()) {
+ // Request notification permission
+ Intent intent = new Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS)
+ .putExtra(Settings.EXTRA_APP_PACKAGE, con.getPackageName());
+ con.startActivity(intent);
+ }else{
+ showDialog();
+ }
+ }else{
+ showDialog();
}
- db.update_done_data(position,formattedDate, habit_text, detail_text,Integer.parseInt( Helper.donedata.get(position)[4]), catagoryselected);
- db.show_data();
- Intent intent = new Intent(con, MainActivity.class);
- con.startActivity(intent);
- ((Activity)con).overridePendingTransition(0,0);
- bottomSheetDialog.dismiss();
}
+ private void showDialog(){
+ // Get current time
+ final Calendar calendar = Calendar.getInstance();
+ int hour = calendar.get(Calendar.HOUR_OF_DAY);
+ int minute = calendar.get(Calendar.MINUTE);
+
+ // Create and show TimePickerDialog
+ TimePickerDialog timePickerDialog = new TimePickerDialog(
+ view.getContext(),
+ new TimePickerDialog.OnTimeSetListener() {
+
+ @Override
+ public void onTimeSet(TimePicker timePicker, int hourOfDay, int minute) {
+ // Update the calendar with the selected time
+ calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
+ calendar.set(Calendar.MINUTE, minute);
+
+ // After selecting time, show dialog for repetition frequency
+ showFrequencyDialog(calendar, hourOfDay, minute);
+ }
+ },
+ hour,
+ minute,
+ true // Use 24-hour format
+ );
+ timePickerDialog.show();
+ }
+
+ private void showFrequencyDialog(Calendar calendar, int hourOfDay, int minute) {
+ // Options for repetition frequency
+ final String[] frequencies = {"Once", "Daily", "Weekly"};
+
+ // Show an AlertDialog to select frequency
+ AlertDialog.Builder builder = new AlertDialog.Builder(con);
+ builder.setTitle("Select Repetition Frequency");
+ builder.setItems(frequencies, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ String frequency = frequencies[which];
+
+ // Update tvNotification with selected time and frequency
+ String notificationText = String.format("Time: %02d:%02d, Frequency: %s", hourOfDay, minute, frequency);
+ bottomsheetview.tvNotification.setText(notificationText);
+
+ // Schedule notification based on selected time and frequency
+ scheduleNotification(Integer.parseInt(Helper.habitsdata.get(position)[0]), calendar, frequency);
+ }
+ });
+ builder.show();
+ }
+
+ private void scheduleNotification(int taskId, Calendar calendar, String frequency) {
+ Context context = con;
+ AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
+
+ Intent intent = new Intent(context, NotificationReceiver.class);
+ intent.putExtra("task_id", taskId); // Pass task ID in intent
+ intent.putExtra("task",Helper.habitsdata.get(position)[2]);
+ PendingIntent pendingIntent = PendingIntent.getBroadcast(context, taskId, intent, PendingIntent.FLAG_IMMUTABLE);
+
+ long triggerTime = calendar.getTimeInMillis();
+ long interval = 0;
+
+ // Determine repetition interval based on frequency
+ if (frequency.equals("Daily")) {
+ interval = AlarmManager.INTERVAL_DAY;
+ } else if (frequency.equals("Weekly")) {
+ interval = AlarmManager.INTERVAL_DAY * 7;
+ }
+
+ // Store alarm details in database
+ db.insertOrUpdateAlarm(new Alarm(taskId, triggerTime, frequency));
+
+ // Set the alarm
+ if (interval > 0) {
+ alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, triggerTime, interval, pendingIntent);
+ } else {
+ alarmManager.setExact(AlarmManager.RTC_WAKEUP, triggerTime, pendingIntent); // For "Once" frequency
+ }
+
+ Toast.makeText(context, "Notification scheduled: " + frequency, Toast.LENGTH_SHORT).show();
+ }
+
+ private void deleteAlarm(int taskId) {
+ Context context = con;
+ AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
+
+ // Cancel alarm with taskId
+ Intent intent = new Intent(context, NotificationReceiver.class);
+ PendingIntent pendingIntent = PendingIntent.getBroadcast(context, taskId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
+ alarmManager.cancel(pendingIntent);
+
+ // Remove alarm from the database
+ db.deleteAlarm(taskId);
+
+ Toast.makeText(context, "Notification cancelled", Toast.LENGTH_SHORT).show();
+ }
+
+ private void updateAlarm(int taskId, Calendar newCalendar, String newFrequency) {
+ // First, cancel the existing alarm
+ deleteAlarm(taskId);
+
+ // Then, set a new alarm with updated time and frequency
+ scheduleNotification(taskId, newCalendar, newFrequency);
+ }
});
- spinner.setAdapter((SpinnerAdapter) adapter);
- bottomSheetDialog.setContentView(bottomsheetview);
- bottomSheetDialog.show();
+
}
});
//ft.setDataInList();
+ }
+ private int getCount(int position) {
+ int count = Integer.parseInt(getAvoidedCount(Helper.habitsdata.get(position)[2])) - Integer.parseInt(getDoneCount(Helper.habitsdata.get(position)[2]));
+ db.update_habitsdata(Integer.parseInt(Helper.habitsdata.get(position)[0]),
+ Helper.habitsdata.get(position)[1],
+ Helper.habitsdata.get(position)[2],
+ Helper.habitsdata.get(position)[3],
+ count,
+ Helper.habitsdata.get(position)[5]);
+ return count;
+ }
+
+ private String getDoneCount(String s) {
+ for (String x[] : Helper.donedata) {
+ if (x[2].equalsIgnoreCase(s)) {
+ return x[4];
+ }
+ }
+ return "0";
+ }
+
+ private String getAvoidedCount(String s) {
+ for (String x[] : Helper.avoidedData) {
+ if (x[2].equalsIgnoreCase(s)) {
+ return x[4];
+ }
+ }
+ return "0";
+
}
@Override
diff --git a/app/src/main/java/rocks/poopjournal/todont/Adapters/HabitsAdapter.java b/app/src/main/java/rocks/poopjournal/todont/Adapters/HabitsAdapter.java
index b9bea9b6..8be336ba 100644
--- a/app/src/main/java/rocks/poopjournal/todont/Adapters/HabitsAdapter.java
+++ b/app/src/main/java/rocks/poopjournal/todont/Adapters/HabitsAdapter.java
@@ -1,25 +1,26 @@
package rocks.poopjournal.todont.Adapters;
-import android.app.Activity;
+import android.app.AlarmManager;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.app.TimePickerDialog;
import android.content.Context;
+import android.content.DialogInterface;
import android.content.Intent;
-import android.database.sqlite.SQLiteException;
+import android.os.Build;
+import android.provider.Settings;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.Adapter;
-import android.widget.AdapterView;
-import android.widget.ArrayAdapter;
import android.widget.Button;
-import android.widget.EditText;
-import android.widget.Spinner;
-import android.widget.SpinnerAdapter;
+import android.widget.LinearLayout;
import android.widget.TextView;
+import android.widget.TimePicker;
import android.widget.Toast;
import androidx.annotation.NonNull;
-import androidx.core.content.ContextCompat;
+import androidx.appcompat.app.AlertDialog;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.bottomsheet.BottomSheetDialog;
@@ -30,11 +31,19 @@
import java.util.Date;
import java.util.Locale;
+import rocks.poopjournal.todont.Alarm;
import rocks.poopjournal.todont.Db_Controller;
import rocks.poopjournal.todont.Fragments.HabitsFragment;
import rocks.poopjournal.todont.Helper;
-import rocks.poopjournal.todont.MainActivity;
+import rocks.poopjournal.todont.NotificationReceiver;
import rocks.poopjournal.todont.R;
+import rocks.poopjournal.todont.databinding.UpdateLayoutBottomSheetTestBinding;
+import rocks.poopjournal.todont.utils.SharedPrefUtils;
+import smartdevelop.ir.eram.showcaseviewlib.GuideView;
+import smartdevelop.ir.eram.showcaseviewlib.config.DismissType;
+import smartdevelop.ir.eram.showcaseviewlib.config.Gravity;
+import smartdevelop.ir.eram.showcaseviewlib.config.PointerType;
+import smartdevelop.ir.eram.showcaseviewlib.listener.GuideListener;
public class HabitsAdapter extends RecyclerView.Adapter {
@@ -42,6 +51,9 @@ public class HabitsAdapter extends RecyclerView.Adapter donotCatagory = new ArrayList<>();
HabitsFragment ft;
Context con;
+
+ private SharedPrefUtils prefUtils;
+
Date c = Calendar.getInstance().getTime();
String[] catagories;
String catagoryselected;
@@ -55,115 +67,407 @@ public HabitsAdapter(Context con, HabitsFragment ft, Db_Controller db, ArrayList
this.con = con;
this.ft = ft;
this.db = db;
-
+ prefUtils = new SharedPrefUtils(con);
}
@NonNull
@Override
- public HabitsAdapter.RecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
+ public RecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
View view = inflater.inflate(R.layout.recyclerview_layout_habits, viewGroup, false);
return new RecyclerViewHolder(view);
}
@Override
- public void onBindViewHolder(@NonNull final HabitsAdapter.RecyclerViewHolder holder, final int position) {
+ public void onBindViewHolder(@NonNull final RecyclerViewHolder holder, final int position) {
String dTask = donotTask.get(position);
// String dCatagory = donotCatagory.get(position).replace("''", "'");
- String dCatagory = donotCatagory.get(position).replace("''", "'");
+ String dCatagory = Helper.habitsdata.get(position)[5];
holder.task.setText(dTask);
holder.catagoryoftask.setText(dCatagory);
+ db.show_avoided_data();
+ db.show_done_data();
+ holder.tvAvoided.setText(getAvoidedCount(Helper.habitsdata.get(position)[2]));
+ holder.tvDone.setText(getDoneCount(Helper.habitsdata.get(position)[2]));
+
holder.task.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(con, R.style.BottomSheetDialogTheme);
- final View bottomsheetview = LayoutInflater.from(con.getApplicationContext()).inflate(R.layout.update_layout_bottom_sheet_test, view.findViewById(R.id.bottomsheetContainer));
- final Spinner spinner = bottomsheetview.findViewById(R.id.updatespinner);
- Button saveTaskButton = bottomsheetview.findViewById(R.id.updateTaskButton);
- final EditText habit = bottomsheetview.findViewById(R.id.updatehabit);
- final EditText detail = bottomsheetview.findViewById(R.id.updatedetail);
- TextView txt = bottomsheetview.findViewById(R.id.txt);
- if (Helper.labels_array.size() == 0) {
- txt.setVisibility(View.VISIBLE);
- spinner.setVisibility(View.INVISIBLE);
+ final UpdateLayoutBottomSheetTestBinding bottomsheetview = UpdateLayoutBottomSheetTestBinding.inflate(LayoutInflater.from(con));
+
+// if (Helper.labels_array.size() == 0) {
+// txt.setVisibility(View.VISIBLE);
+// } else {
+// txt.setVisibility(View.INVISIBLE);
+// }
+
+ bottomsheetview.titleText.setText(dTask);
+ bottomsheetview.details.setText(Helper.habitsdata.get(position)[3]);
+ bottomsheetview.tvTag.setText(Helper.habitsdata.get(position)[5]);
+ bottomSheetDialog.setContentView(bottomsheetview.getRoot());
+ bottomSheetDialog.show();
+ db.show_done_data();
+ db.show_avoided_data();
+ if (Helper.avoidedData.size() == 0) {
+ bottomsheetview.avoidedCount.setText("0");
} else {
- txt.setVisibility(View.INVISIBLE);
- spinner.setVisibility(View.VISIBLE);
+ bottomsheetview.avoidedCount.setText(getAvoidedCount(Helper.habitsdata.get(position)[2]));
}
- habit.setText("" + Helper.habitsdata.get(position)[2]);
- detail.setText("" + Helper.habitsdata.get(position)[3].replace("''", "'"));
-
- ArrayList reformed_labels = new ArrayList<>();
- for (int i = 0; i < Helper.labels_array.size(); i++) {
- reformed_labels.add(Helper.labels_array.get(i).toString().replace("''", "'"));
+ if (Helper.donedata.size() == 0) {
+ bottomsheetview.doneCount.setText("0");
+ } else {
+ bottomsheetview.doneCount.setText(getDoneCount(Helper.habitsdata.get(position)[2]));
}
-
- final Adapter adapter = new ArrayAdapter(con, android.R.layout.simple_list_item_1, reformed_labels) {
+ bottomsheetview.avoidedPlusButton.setOnClickListener(new View.OnClickListener() {
@Override
- public boolean isEnabled(int position) {
- return position != 0;
+ public void onClick(View view) {
+ db.show_done_data();
+ db.show_avoided_data();
+ Log.d("asize", "" + Helper.avoidedData.size());
+ int count = 0;
+ int countAll = 0;
+ int ids = Integer.parseInt(Helper.habitsdata.get(position)[0]);
+ if (Helper.avoidedData.size() != 0) {
+ for (int i = 0; i < Helper.avoidedData.size(); i++) {
+ String getdate = Helper.avoidedData.get(i)[1];
+ String gethabit = Helper.avoidedData.get(i)[2];
+ /* if ((Helper.habitsdata.get(position)[2].equals(gethabit)) && (getdate.equals(df.format(c)))) {
+// Toast.makeText(con, " Already Added ", Toast.LENGTH_SHORT).show();
+ count++;
+ }
+
+*/
+ if ((Helper.habitsdata.get(position)[2].equals(gethabit)) && (getdate.equals(df.format(c)))) {
+// Toast.makeText(con, " Already Added ", Toast.LENGTH_SHORT).show();
+ count++;
+ countAll = Integer.parseInt(Helper.avoidedData.get(i)[4]);
+ Log.i("tariq", "onClick: " + Helper.avoidedData.get(i)[4]);
+ }
+ }
+ if (count == 0) {
+ int res = count + countAll;
+ db.insert_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, " Added To Avoided", Toast.LENGTH_SHORT).show();
+ } else {
+ int res = count + countAll;
+ db.update_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, " Added To Avoided", Toast.LENGTH_SHORT).show();
+ }
+ } else {
+ int res = 1;
+ db.insert_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, " Added To Avoided out", Toast.LENGTH_SHORT).show();
+ }
+
+ db.show_avoided_data();
+ db.show_done_data();
+ if (Helper.avoidedData.size() == 0) {
+ bottomsheetview.avoidedCount.setText("0");
+ } else {
+ bottomsheetview.avoidedCount.setText(getAvoidedCount(Helper.habitsdata.get(position)[2]));
+ }
+ holder.tvAvoided.setText(getAvoidedCount(Helper.habitsdata.get(position)[2]));
+ holder.tvDone.setText(getDoneCount(Helper.habitsdata.get(position)[2]));
}
+ });
- };
- spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+ bottomsheetview.avoidedMinusButton.setOnClickListener(new View.OnClickListener() {
@Override
- public void onItemSelected(AdapterView> adapterView, View view, int i, long l) {
- catagoryselected = adapterView.getItemAtPosition(i).toString().replace("'", "''");
- TextView selectedText = (TextView) adapterView.getChildAt(i);
- if (selectedText != null) {
- selectedText.setTextColor(ContextCompat.getColor(con, R.color.g2));
+ public void onClick(View view) {
+
+ db.show_avoided_data();
+ db.show_habits_data();
+ Log.d("asize", "" + Helper.avoidedData.size());
+ int count = 0;
+ int countAll = 0;
+ int ids = Integer.parseInt(Helper.habitsdata.get(position)[0]);
+ if (Helper.avoidedData.size() != 0) {
+ for (int i = 0; i < Helper.avoidedData.size(); i++) {
+ String getdate = Helper.avoidedData.get(i)[1];
+ String gethabit = Helper.avoidedData.get(i)[2];
+ /* if ((Helper.habitsdata.get(position)[2].equals(gethabit)) && (getdate.equals(df.format(c)))) {
+// Toast.makeText(con, " Already Added ", Toast.LENGTH_SHORT).show();
+ count++;
+ }
+
+*/
+ if ((Helper.habitsdata.get(position)[2].equals(gethabit)) && (getdate.equals(df.format(c)))) {
+// Toast.makeText(con, " Already Added ", Toast.LENGTH_SHORT).show();
+ count--;
+ countAll = Integer.parseInt(Helper.avoidedData.get(position)[4]);
+ Log.i("tariq", "onClick: " + Helper.avoidedData.get(position)[4]);
+ }
+ }
+ if ((count + countAll) >= 0 && count == 0) {
+ int res = count + countAll;
+ db.insert_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, " Added To Avoided", Toast.LENGTH_SHORT).show();
+ } else if ((count + countAll) >= 0) {
+ int res = count + countAll;
+ db.update_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, " Added To Avoided", Toast.LENGTH_SHORT).show();
+ }
+ }
+
+ db.show_avoided_data();
+ db.show_done_data();
+ if (Helper.avoidedData.size() == 0) {
+ bottomsheetview.avoidedCount.setText("0");
+ } else {
+ bottomsheetview.avoidedCount.setText(getAvoidedCount(Helper.habitsdata.get(position)[2]));
+ }
+ holder.tvAvoided.setText(getAvoidedCount(Helper.habitsdata.get(position)[2]));
+ holder.tvDone.setText(getDoneCount(Helper.habitsdata.get(position)[2]));
+ }
+ });
+ bottomsheetview.donePlusButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ db.show_done_data();
+ db.show_habits_data();
+ int count = 0;
+ int countAll = 0;
+ int ids = Integer.parseInt(Helper.habitsdata.get(position)[0]);
+ if (Helper.donedata.size() != 0) {
+ for (int i = 0; i < Helper.donedata.size(); i++) {
+ String getdate = Helper.donedata.get(i)[1];
+ String gethabit = Helper.donedata.get(i)[2];
+ if ((Helper.habitsdata.get(position)[2].equals(gethabit)) && (getdate.equals(df.format(c)))) {
+// Toast.makeText(con, " Already Added ", Toast.LENGTH_SHORT).show();
+ count++;
+ countAll = Integer.parseInt(Helper.donedata.get(position)[4]);
+ }
+ }
+ if (count == 0) {
+ int res = count + countAll;
+ db.insert_done_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, "Added To Done", Toast.LENGTH_SHORT).show();
+ } else {
+ int res = count + countAll;
+ db.update_done_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, "Added To Done ", Toast.LENGTH_SHORT).show();
+ }
+ } else {
+ int res = 1;
+ db.insert_done_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, "Added To Done out", Toast.LENGTH_SHORT).show();
}
+
+ db.show_avoided_data();
+ db.show_done_data();
+ if (Helper.donedata.size() == 0) {
+ bottomsheetview.doneCount.setText("0");
+ } else {
+ bottomsheetview.doneCount.setText(getDoneCount(Helper.habitsdata.get(position)[2]));
+ }
+ holder.tvAvoided.setText(getAvoidedCount(Helper.habitsdata.get(position)[2]));
+ holder.tvDone.setText(getDoneCount(Helper.habitsdata.get(position)[2]));
}
+ });
+ bottomsheetview.doneMinusButton.setOnClickListener(new View.OnClickListener() {
@Override
- public void onNothingSelected(AdapterView> adapterView) {
+ public void onClick(View view) {
+ db.show_done_data();
+ db.show_habits_data();
+ int count = 0;
+ int countAll = 0;
+ int ids = Integer.parseInt(Helper.habitsdata.get(position)[0]);
+ if (Helper.donedata.size() != 0) {
+ for (int i = 0; i < Helper.donedata.size(); i++) {
+ String getdate = Helper.donedata.get(i)[1];
+ String gethabit = Helper.donedata.get(i)[2];
+ if ((Helper.habitsdata.get(position)[2].equals(gethabit)) && (getdate.equals(df.format(c)))) {
+// Toast.makeText(con, " Already Added ", Toast.LENGTH_SHORT).show();
+ count--;
+ countAll = Integer.parseInt(Helper.donedata.get(position)[4]);
+ }
+ }
+ if ((count + countAll) >= 0) {
+ if (count == 0) {
+ int res = count + countAll;
+ db.insert_done_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, "Added To Done", Toast.LENGTH_SHORT).show();
+ } else {
+ int res = count + countAll;
+ db.update_done_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, "Added To Done ", Toast.LENGTH_SHORT).show();
+ }
+ }
+ }
+ db.show_avoided_data();
+ db.show_done_data();
+ if (Helper.donedata.size() == 0) {
+ bottomsheetview.doneCount.setText("0");
+ } else {
+ bottomsheetview.doneCount.setText(getDoneCount(Helper.habitsdata.get(position)[2]));
+ }
+ holder.tvAvoided.setText(getAvoidedCount(Helper.habitsdata.get(position)[2]));
+ holder.tvDone.setText(getDoneCount(Helper.habitsdata.get(position)[2]));
}
});
- saveTaskButton.setOnClickListener(new View.OnClickListener() {
+ bottomsheetview.tvNotification.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
- String formattedDate = df.format(c);
- try {
- } catch (SQLiteException e) {
+ // check if the user has the permission to post notificaiton
+ // else ask for the permission
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ NotificationManager notificationManager = ( NotificationManager) con.getSystemService(Context.NOTIFICATION_SERVICE);
+ if (!notificationManager.areNotificationsEnabled()) {
+ // Request notification permission
+ Intent intent = new Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS)
+ .putExtra(Settings.EXTRA_APP_PACKAGE, con.getPackageName());
+ con.startActivity(intent);
+ }else{
+ showDialog();
+ }
+ }else{
+ showDialog();
}
- String str = habit.getText().toString();
- if (str.contains("'")) {
- str = str.replace("'", "geodhola");
- Log.d("kuttistring", "" + str);
+ }
+
+ private void showDialog(){
+ // Get current time
+ final Calendar calendar = Calendar.getInstance();
+ int hour = calendar.get(Calendar.HOUR_OF_DAY);
+ int minute = calendar.get(Calendar.MINUTE);
+
+ // Create and show TimePickerDialog
+ TimePickerDialog timePickerDialog = new TimePickerDialog(
+ view.getContext(),
+ new TimePickerDialog.OnTimeSetListener() {
+
+ @Override
+ public void onTimeSet(TimePicker timePicker, int hourOfDay, int minute) {
+ // Update the calendar with the selected time
+ calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
+ calendar.set(Calendar.MINUTE, minute);
+
+ // After selecting time, show dialog for repetition frequency
+ showFrequencyDialog(calendar, hourOfDay, minute);
+ }
+ },
+ hour,
+ minute,
+ true // Use 24-hour format
+ );
+ timePickerDialog.show();
+ }
+
+ private void showFrequencyDialog(Calendar calendar, int hourOfDay, int minute) {
+ // Options for repetition frequency
+ final String[] frequencies = {"Once", "Daily", "Weekly"};
+
+ // Show an AlertDialog to select frequency
+ AlertDialog.Builder builder = new AlertDialog.Builder(con);
+ builder.setTitle("Select Repetition Frequency");
+ builder.setItems(frequencies, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ String frequency = frequencies[which];
+
+ // Update tvNotification with selected time and frequency
+ String notificationText = String.format("Time: %02d:%02d, Frequency: %s", hourOfDay, minute, frequency);
+ bottomsheetview.tvNotification.setText(notificationText);
+
+ // Schedule notification based on selected time and frequency
+ scheduleNotification(Integer.parseInt(Helper.habitsdata.get(position)[0]), calendar, frequency);
+ }
+ });
+ builder.show();
+ }
+
+ private void scheduleNotification(int taskId, Calendar calendar, String frequency) {
+ Context context = con;
+ AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
+
+ Intent intent = new Intent(context, NotificationReceiver.class);
+ intent.putExtra("task_id", taskId); // Pass task ID in intent
+ intent.putExtra("task",Helper.habitsdata.get(position)[2]);
+ PendingIntent pendingIntent = PendingIntent.getBroadcast(context, taskId, intent, PendingIntent.FLAG_IMMUTABLE);
+
+ long triggerTime = calendar.getTimeInMillis();
+ long interval = 0;
+
+ // Determine repetition interval based on frequency
+ if (frequency.equals("Daily")) {
+ interval = AlarmManager.INTERVAL_DAY;
+ } else if (frequency.equals("Weekly")) {
+ interval = AlarmManager.INTERVAL_DAY * 7;
}
- db.update_habitsdata(position, formattedDate, str, detail.getText().toString().replace("'", "''"), catagoryselected);
- db.show_habits_data();
- Intent intent = new Intent(con, MainActivity.class);
- con.startActivity(intent);
- ((Activity) con).overridePendingTransition(0, 0);
- bottomSheetDialog.dismiss();
+
+ // Store alarm details in database
+ db.insertOrUpdateAlarm(new Alarm(taskId, triggerTime, frequency));
+
+ // Set the alarm
+ if (interval > 0) {
+ alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, triggerTime, interval, pendingIntent);
+ } else {
+ alarmManager.setExact(AlarmManager.RTC_WAKEUP, triggerTime, pendingIntent); // For "Once" frequency
+ }
+
+ Toast.makeText(context, "Notification scheduled: " + frequency, Toast.LENGTH_SHORT).show();
}
- });
+ private void deleteAlarm(int taskId) {
+ Context context = con;
+ AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
- spinner.setAdapter((SpinnerAdapter) adapter);
- spinner.setSelection(reformed_labels.indexOf(dCatagory));
+ // Cancel alarm with taskId
+ Intent intent = new Intent(context, NotificationReceiver.class);
+ PendingIntent pendingIntent = PendingIntent.getBroadcast(context, taskId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
+ alarmManager.cancel(pendingIntent);
+
+ // Remove alarm from the database
+ db.deleteAlarm(taskId);
+
+ Toast.makeText(context, "Notification cancelled", Toast.LENGTH_SHORT).show();
+ }
+
+ private void updateAlarm(int taskId, Calendar newCalendar, String newFrequency) {
+ // First, cancel the existing alarm
+ deleteAlarm(taskId);
+
+ // Then, set a new alarm with updated time and frequency
+ scheduleNotification(taskId, newCalendar, newFrequency);
+ }
+ });
- bottomSheetDialog.setContentView(bottomsheetview);
- bottomSheetDialog.show();
}
});
+
+
holder.btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
- if (Helper.isTodaySelected == true) {
- db.show_data();
- db.show_habits_data();
- Log.d("asize", "" + Helper.data.size());
+ if (!prefUtils.getBool(SharedPrefUtils.KEY_ADD_OR_AVOIDED)) {
+ GuideView.Builder guideView = new GuideView.Builder(con)
+ .setContentText("Mark as done or avoided.")
+ .setTargetView(holder.viewDoneOrAvoided)
+ .setDismissType(DismissType.anywhere)
+ .setPointerType(PointerType.arrow)
+ .setGravity(Gravity.center)
+ .setGuideListener(new GuideListener() {
+ @Override
+ public void onDismiss(View view) {
+ prefUtils.setBool(SharedPrefUtils.KEY_ADD_OR_AVOIDED, true);
+ }
+ });
+ guideView.build().show();
+ } else if (Helper.isTodaySelected == true) {
+ db.show_done_data();
+ db.show_avoided_data();
+ Log.d("asize", "" + Helper.avoidedData.size());
int count = 0;
int countAll = 0;
- int ids = 0;
- if (Helper.data.size() != 0) {
- for (int i = 0; i < Helper.data.size(); i++) {
- String getdate = Helper.data.get(i)[1];
- String gethabit = Helper.data.get(i)[2];
+ int ids = Integer.parseInt(Helper.habitsdata.get(position)[0]);
+ if (Helper.avoidedData.size() != 0) {
+ for (int i = 0; i < Helper.avoidedData.size(); i++) {
+ String getdate = Helper.avoidedData.get(i)[1];
+ String gethabit = Helper.avoidedData.get(i)[2];
/* if ((Helper.habitsdata.get(position)[2].equals(gethabit)) && (getdate.equals(df.format(c)))) {
// Toast.makeText(con, " Already Added ", Toast.LENGTH_SHORT).show();
count++;
@@ -173,9 +477,8 @@ public void onClick(View view) {
if ((Helper.habitsdata.get(position)[2].equals(gethabit)) && (getdate.equals(df.format(c)))) {
// Toast.makeText(con, " Already Added ", Toast.LENGTH_SHORT).show();
count++;
- ids = i;
- countAll = Integer.parseInt(Helper.data.get(position)[4]);
- Log.i("tariq", "onClick: " + Helper.data.get(position)[4]);
+ countAll = Integer.parseInt(Helper.avoidedData.get(i)[4]);
+ Log.i("tariq", "onClick: " + Helper.avoidedData.get(i)[4]);
}
}
if (count == 0) {
@@ -188,22 +491,42 @@ public void onClick(View view) {
Toast.makeText(con, " Added To Avoided", Toast.LENGTH_SHORT).show();
}
} else {
- int res = count + countAll;
+ int res = 1;
db.insert_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
Toast.makeText(con, " Added To Avoided out", Toast.LENGTH_SHORT).show();
}
+
+ db.show_done_data();
+ db.show_avoided_data();
+ holder.tvAvoided.setText(getAvoidedCount(Helper.habitsdata.get(position)[2]));
+ holder.tvDone.setText(getDoneCount(Helper.habitsdata.get(position)[2]));
}
}
});
holder.btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
- if (Helper.isTodaySelected == true) {
+ if (!prefUtils.getBool(SharedPrefUtils.KEY_ADD_OR_AVOIDED)) {
+ GuideView.Builder guideView = new GuideView.Builder(con)
+ .setContentText("Mark as done or avoided.")
+ .setTargetView(holder.viewDoneOrAvoided)
+ .setDismissType(DismissType.anywhere)
+ .setPointerType(PointerType.arrow)
+ .setGravity(Gravity.center)
+ .setGuideListener(new GuideListener() {
+ @Override
+ public void onDismiss(View view) {
+ prefUtils.setBool(SharedPrefUtils.KEY_ADD_OR_AVOIDED, true);
+ }
+ });
+ guideView.build().show();
+ } else if (Helper.isTodaySelected == true) {
db.show_done_data();
- db.show_habits_data();
+ db.show_avoided_data();
+
int count = 0;
int countAll = 0;
- int ids = 0;
+ int ids = Integer.parseInt(Helper.habitsdata.get(position)[0]);
if (Helper.donedata.size() != 0) {
for (int i = 0; i < Helper.donedata.size(); i++) {
String getdate = Helper.donedata.get(i)[1];
@@ -211,8 +534,7 @@ public void onClick(View view) {
if ((Helper.habitsdata.get(position)[2].equals(gethabit)) && (getdate.equals(df.format(c)))) {
// Toast.makeText(con, " Already Added ", Toast.LENGTH_SHORT).show();
count++;
- ids = i;
- countAll = Integer.parseInt(Helper.donedata.get(position)[4]);
+ countAll = Integer.parseInt(Helper.donedata.get(i)[4]);
}
}
if (count == 0) {
@@ -225,15 +547,39 @@ public void onClick(View view) {
Toast.makeText(con, "Added To Done ", Toast.LENGTH_SHORT).show();
}
} else {
- int res = count + countAll;
+ int res = 1;
db.insert_done_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
Toast.makeText(con, "Added To Done out", Toast.LENGTH_SHORT).show();
}
+ db.show_done_data();
+ db.show_avoided_data();
+
+ holder.tvAvoided.setText(getAvoidedCount(Helper.habitsdata.get(position)[2]));
+ holder.tvDone.setText(getDoneCount(Helper.habitsdata.get(position)[2]));
}
}
});
}
+ private String getDoneCount(String s) {
+ for (String x[] : Helper.donedata) {
+ if (x[2].equalsIgnoreCase(s)) {
+ return x[4];
+ }
+ }
+ return "0";
+ }
+
+ private String getAvoidedCount(String s) {
+ for (String x[] : Helper.avoidedData) {
+ if (x[2].equalsIgnoreCase(s)) {
+ return x[4];
+ }
+ }
+ return "0";
+
+ }
+
@Override
public int getItemCount() {
return donotTask.size();
@@ -242,7 +588,8 @@ public int getItemCount() {
public class RecyclerViewHolder extends RecyclerView.ViewHolder {
Button btn1, btn2;
TextView task;
- TextView catagoryoftask;
+ TextView catagoryoftask, tvAvoided, tvDone;
+ LinearLayout viewDoneOrAvoided;
public RecyclerViewHolder(@NonNull View itemView) {
super(itemView);
@@ -252,6 +599,9 @@ public RecyclerViewHolder(@NonNull View itemView) {
catagoryoftask = itemView.findViewById(R.id.catagoryoftask);
btn1.setBackgroundResource(R.drawable._cross);
btn2.setBackgroundResource(R.drawable._tick);
+ viewDoneOrAvoided = itemView.findViewById(R.id.viewDoneOrAvoided);
+ tvAvoided = itemView.findViewById(R.id.tvAvoided);
+ tvDone = itemView.findViewById(R.id.tvDone);
}
}
}
diff --git a/app/src/main/java/rocks/poopjournal/todont/Adapters/HabitsLogAdapter.java b/app/src/main/java/rocks/poopjournal/todont/Adapters/HabitsLogAdapter.java
index ec715ad1..7256f5ee 100644
--- a/app/src/main/java/rocks/poopjournal/todont/Adapters/HabitsLogAdapter.java
+++ b/app/src/main/java/rocks/poopjournal/todont/Adapters/HabitsLogAdapter.java
@@ -1,25 +1,25 @@
package rocks.poopjournal.todont.Adapters;
-import android.app.Activity;
+import android.app.AlarmManager;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.app.TimePickerDialog;
import android.content.Context;
+import android.content.DialogInterface;
import android.content.Intent;
-import android.database.sqlite.SQLiteException;
+import android.os.Build;
+import android.provider.Settings;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.Adapter;
-import android.widget.AdapterView;
-import android.widget.ArrayAdapter;
import android.widget.Button;
-import android.widget.EditText;
-import android.widget.RelativeLayout;
-import android.widget.Spinner;
-import android.widget.SpinnerAdapter;
import android.widget.TextView;
+import android.widget.TimePicker;
+import android.widget.Toast;
import androidx.annotation.NonNull;
-import androidx.core.content.ContextCompat;
+import androidx.appcompat.app.AlertDialog;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.bottomsheet.BottomSheetDialog;
@@ -30,11 +30,13 @@
import java.util.Date;
import java.util.Locale;
+import rocks.poopjournal.todont.Alarm;
import rocks.poopjournal.todont.Db_Controller;
import rocks.poopjournal.todont.Fragments.HabitsLogFragment;
import rocks.poopjournal.todont.Helper;
-import rocks.poopjournal.todont.MainActivity;
+import rocks.poopjournal.todont.NotificationReceiver;
import rocks.poopjournal.todont.R;
+import rocks.poopjournal.todont.databinding.UpdateLayoutBottomSheetTestBinding;
public class HabitsLogAdapter extends RecyclerView.Adapter {
@@ -46,7 +48,7 @@ public class HabitsLogAdapter extends RecyclerView.Adapter donotTask, ArrayList donotCatagory) {
@@ -60,91 +62,397 @@ public HabitsLogAdapter(Context con, HabitsLogFragment ft, Db_Controller db, Arr
@NonNull
@Override
- public HabitsLogAdapter.RecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
+ public RecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
View view = inflater.inflate(R.layout.recyclerview_layout_log_habits, viewGroup, false);
return new RecyclerViewHolder(view);
}
@Override
- public void onBindViewHolder(@NonNull final HabitsLogAdapter.RecyclerViewHolder holder, final int position) {
+ public void onBindViewHolder(@NonNull final RecyclerViewHolder holder, final int position) {
String dTask = donotTask.get(position);
- String dCatagory = donotCatagory.get(position);
+ String dCatagory = Helper.habitsdata.get(position)[5];
Log.d("dCat",""+dCatagory);
holder.task.setText(dTask);
- holder.catagoryoftask.setText(dCatagory);
+ holder.catagoryoftask.setText(Helper.habitsdata.get(position)[5]);
holder.task.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
- final BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(con,
- R.style.BottomSheetDialogTheme);
- final View bottomsheetview = LayoutInflater.from(con.getApplicationContext()).
- inflate(R.layout.update_layout_bottom_sheet_test,
- view.findViewById(R.id.bottomsheetContainer));
- /* final Spinner spinner = bottomsheetview.findViewById(R.id.updatespinner);
- Button saveTaskButton = bottomsheetview.findViewById(R.id.updateTaskButton);
- final EditText habit = bottomsheetview.findViewById(R.id.updatehabit);
- final EditText detail = bottomsheetview.findViewById(R.id.updatedetail);
- TextView txt = bottomsheetview.findViewById(R.id.txt);
- if (Helper.labels_array.size() == 0) {
- txt.setVisibility(View.VISIBLE);
- spinner.setVisibility(View.INVISIBLE);
+ final BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(con, R.style.BottomSheetDialogTheme);
+ final UpdateLayoutBottomSheetTestBinding bottomsheetview = UpdateLayoutBottomSheetTestBinding.inflate(LayoutInflater.from(con));
+
+// if (Helper.labels_array.size() == 0) {
+// txt.setVisibility(View.VISIBLE);
+// } else {
+// txt.setVisibility(View.INVISIBLE);
+// }
+
+ bottomsheetview.titleText.setText(dTask);
+ bottomsheetview.tvTag.setText(Helper.habitsdata.get(position)[5]);
+ bottomsheetview.details.setText(Helper.habitsdata.get(position)[3]);
+ bottomSheetDialog.setContentView(bottomsheetview.getRoot());
+ bottomSheetDialog.show();
+ db.show_avoided_data();
+ db.show_done_data();
+ if (Helper.avoidedData.size() == 0) {
+ bottomsheetview.avoidedCount.setText("0");
+ } else {
+ bottomsheetview.avoidedCount.setText(getAvoidedCount(Helper.habitsdata.get(position)[2]));
+ }
+ if (Helper.donedata.size() == 0) {
+ bottomsheetview.doneCount.setText("0");
} else {
- txt.setVisibility(View.INVISIBLE);
- spinner.setVisibility(View.VISIBLE);
+ bottomsheetview.doneCount.setText(getDoneCount(Helper.habitsdata.get(position)[2]));
}
- habit.setText("" + Helper.habitsdata.get(position)[2]);
- detail.setText("" + Helper.habitsdata.get(position)[3]);*/
- final Adapter adapter = new ArrayAdapter(con, android.R.layout.simple_list_item_1,
- Helper.labels_array) {
+ bottomsheetview.avoidedPlusButton.setOnClickListener(new View.OnClickListener() {
@Override
- public boolean isEnabled(int position) {
- return position != 0;
+ public void onClick(View view) {
+ db.show_avoided_data();
+ db.show_avoided_data();
+ Log.d("asize", "" + Helper.avoidedData.size());
+ int count = 0;
+ int countAll = 0;
+ int ids = Integer.parseInt(Helper.habitsdata.get(position)[0]);
+ if (Helper.avoidedData.size() != 0) {
+ for (int i = 0; i < Helper.avoidedData.size(); i++) {
+ String getdate = Helper.avoidedData.get(i)[1];
+ String gethabit = Helper.avoidedData.get(i)[2];
+ /* if ((Helper.habitsdata.get(position)[2].equals(gethabit)) && (getdate.equals(df.format(c)))) {
+// Toast.makeText(con, " Already Added ", Toast.LENGTH_SHORT).show();
+ count++;
+ }
+
+*/
+ if ((Helper.habitsdata.get(position)[2].equals(gethabit)) && (getdate.equals(df.format(c)))) {
+// Toast.makeText(con, " Already Added ", Toast.LENGTH_SHORT).show();
+ count++;
+ countAll = Integer.parseInt(Helper.avoidedData.get(i)[4]);
+ Log.i("tariq", "onClick: " + Helper.avoidedData.get(i)[4]);
+ }
+ }
+ if (count == 0) {
+ int res = count + countAll;
+ db.insert_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, " Added To Avoided", Toast.LENGTH_SHORT).show();
+ } else {
+ int res = count + countAll;
+ db.update_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, " Added To Avoided", Toast.LENGTH_SHORT).show();
+ }
+ } else {
+ int res = 1;
+ db.insert_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, " Added To Avoided out", Toast.LENGTH_SHORT).show();
+ }
+
+ db.show_avoided_data();
+ db.show_done_data();
+ if (Helper.avoidedData.size() == 0) {
+ bottomsheetview.avoidedCount.setText("0");
+ } else {
+ bottomsheetview.avoidedCount.setText(getAvoidedCount(Helper.habitsdata.get(position)[2]));
+ }
+ // holder.catagoryoftask.setText(String.valueOf(getCount(position)));
}
+ });
+
+ bottomsheetview.avoidedMinusButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+
+ db.show_avoided_data();
+ db.show_avoided_data();
+ Log.d("asize", "" + Helper.avoidedData.size());
+ int count = 0;
+ int countAll = 0;
+ int ids = Integer.parseInt(Helper.habitsdata.get(position)[0]);
+ if (Helper.avoidedData.size() != 0) {
+ for (int i = 0; i < Helper.avoidedData.size(); i++) {
+ String getdate = Helper.avoidedData.get(i)[1];
+ String gethabit = Helper.avoidedData.get(i)[2];
+ /* if ((Helper.habitsdata.get(position)[2].equals(gethabit)) && (getdate.equals(df.format(c)))) {
+// Toast.makeText(con, " Already Added ", Toast.LENGTH_SHORT).show();
+ count++;
+ }
+
+*/
+ if ((Helper.habitsdata.get(position)[2].equals(gethabit)) && (getdate.equals(df.format(c)))) {
+// Toast.makeText(con, " Already Added ", Toast.LENGTH_SHORT).show();
+ count--;
+ countAll = Integer.parseInt(Helper.avoidedData.get(i)[4]);
+ Log.i("tariq", "onClick: " + Helper.avoidedData.get(i)[4]);
+ }
+ }
+ if ((count + countAll) >= 0 && count == 0) {
+ int res = count + countAll;
+ db.insert_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, " Added To Avoided", Toast.LENGTH_SHORT).show();
+ } else if ((count + countAll) >= 0) {
+ int res = count + countAll;
+ db.update_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, " Added To Avoided", Toast.LENGTH_SHORT).show();
+ }
+ }
+
+ db.show_avoided_data();
+ db.show_done_data();
+ if (Helper.avoidedData.size() == 0) {
+ bottomsheetview.avoidedCount.setText("0");
+ } else {
+ bottomsheetview.avoidedCount.setText(getAvoidedCount(Helper.habitsdata.get(position)[2]));
+ }
+ //holder.catagoryoftask.setText(String.valueOf(getCount(position)));
+ }
+ });
+ bottomsheetview.donePlusButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ db.show_done_data();
+ db.show_avoided_data();
+ int count = 0;
+ int countAll = 0;
+ int ids = Integer.parseInt(Helper.habitsdata.get(position)[0]);
+ if (Helper.donedata.size() != 0) {
+ for (int i = 0; i < Helper.donedata.size(); i++) {
+ String getdate = Helper.donedata.get(i)[1];
+ String gethabit = Helper.donedata.get(i)[2];
+ if ((Helper.habitsdata.get(position)[2].equals(gethabit)) && (getdate.equals(df.format(c)))) {
+// Toast.makeText(con, " Already Added ", Toast.LENGTH_SHORT).show();
+ count++;
+ countAll = Integer.parseInt(Helper.donedata.get(i)[4]);
+ }
+ }
+ if (count == 0) {
+ int res = count + countAll;
+ db.insert_done_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, "Added To Done", Toast.LENGTH_SHORT).show();
+ } else {
+ int res = count + countAll;
+ db.update_done_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, "Added To Done ", Toast.LENGTH_SHORT).show();
+ }
+ } else {
+ int res = 1;
+ db.insert_done_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, "Added To Done out", Toast.LENGTH_SHORT).show();
+ }
+
+ db.show_avoided_data();
+ db.show_done_data();
+ if (Helper.donedata.size() == 0) {
+ bottomsheetview.doneCount.setText("0");
+ } else {
+ bottomsheetview.doneCount.setText(getDoneCount(Helper.habitsdata.get(position)[2]));
+ }
+ //holder.catagoryoftask.setText(String.valueOf(getCount(position)));
+
+ }
+
+ });
+ bottomsheetview.doneMinusButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ db.show_done_data();
+ db.show_avoided_data();
+ int count = 0;
+ int countAll = 0;
+ int ids = Integer.parseInt(Helper.habitsdata.get(position)[0]);
+ if (Helper.donedata.size() != 0) {
+ for (int i = 0; i < Helper.donedata.size(); i++) {
+ String getdate = Helper.donedata.get(i)[1];
+ String gethabit = Helper.donedata.get(i)[2];
+ if ((Helper.habitsdata.get(position)[2].equals(gethabit)) && (getdate.equals(df.format(c)))) {
+// Toast.makeText(con, " Already Added ", Toast.LENGTH_SHORT).show();
+ count--;
+ countAll = Integer.parseInt(Helper.donedata.get(i)[4]);
+ }
+ }
+ if ((count + countAll) >= 0) {
+ if (count == 0) {
+ int res = count + countAll;
+ db.insert_done_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, "Added To Done", Toast.LENGTH_SHORT).show();
+ } else {
+ int res = count + countAll;
+ db.update_done_data(ids, df.format(c), Helper.habitsdata.get(position)[2], Helper.habitsdata.get(position)[3], res, catagoryselected);
+ Toast.makeText(con, "Added To Done ", Toast.LENGTH_SHORT).show();
+ }
+ }
+ }
+
+ db.show_avoided_data();
+ db.show_done_data();
+ if (Helper.donedata.size() == 0) {
+ bottomsheetview.doneCount.setText("0");
+ } else {
+ bottomsheetview.doneCount.setText(getDoneCount(Helper.habitsdata.get(position)[2]));
+ }
+ // holder.catagoryoftask.setText(String.valueOf(getCount(position)));
+ }
+ });
+ bottomsheetview.tvNotification.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+
+ // check if the user has the permission to post notificaiton
+ // else ask for the permission
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ NotificationManager notificationManager = ( NotificationManager) con.getSystemService(Context.NOTIFICATION_SERVICE);
+ if (!notificationManager.areNotificationsEnabled()) {
+ // Request notification permission
+ Intent intent = new Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS)
+ .putExtra(Settings.EXTRA_APP_PACKAGE, con.getPackageName());
+ con.startActivity(intent);
+ }else{
+ showDialog();
+ }
+ }else{
+ showDialog();
+ }
+ }
+
+ private void showDialog(){
+ // Get current time
+ final Calendar calendar = Calendar.getInstance();
+ int hour = calendar.get(Calendar.HOUR_OF_DAY);
+ int minute = calendar.get(Calendar.MINUTE);
+
+ // Create and show TimePickerDialog
+ TimePickerDialog timePickerDialog = new TimePickerDialog(
+ view.getContext(),
+ new TimePickerDialog.OnTimeSetListener() {
+
+ @Override
+ public void onTimeSet(TimePicker timePicker, int hourOfDay, int minute) {
+ // Update the calendar with the selected time
+ calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
+ calendar.set(Calendar.MINUTE, minute);
+
+ // After selecting time, show dialog for repetition frequency
+ showFrequencyDialog(calendar, hourOfDay, minute);
+ }
+ },
+ hour,
+ minute,
+ true // Use 24-hour format
+ );
+ timePickerDialog.show();
+ }
+
+ private void showFrequencyDialog(Calendar calendar, int hourOfDay, int minute) {
+ // Options for repetition frequency
+ final String[] frequencies = {"Once", "Daily", "Weekly"};
+
+ // Show an AlertDialog to select frequency
+ AlertDialog.Builder builder = new AlertDialog.Builder(con);
+ builder.setTitle("Select Repetition Frequency");
+ builder.setItems(frequencies, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ String frequency = frequencies[which];
+
+ // Update tvNotification with selected time and frequency
+ String notificationText = String.format("Time: %02d:%02d, Frequency: %s", hourOfDay, minute, frequency);
+ bottomsheetview.tvNotification.setText(notificationText);
+
+ // Schedule notification based on selected time and frequency
+ scheduleNotification(Integer.parseInt(Helper.habitsdata.get(position)[0]), calendar, frequency);
+ }
+ });
+ builder.show();
+ }
+
+ private void scheduleNotification(int taskId, Calendar calendar, String frequency) {
+ Context context = con;
+ AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
+
+ Intent intent = new Intent(context, NotificationReceiver.class);
+ intent.putExtra("task_id", taskId); // Pass task ID in intent
+ intent.putExtra("task",Helper.habitsdata.get(position)[2]);
+ PendingIntent pendingIntent = PendingIntent.getBroadcast(context, taskId, intent, PendingIntent.FLAG_IMMUTABLE);
+
+ long triggerTime = calendar.getTimeInMillis();
+ long interval = 0;
+
+ // Determine repetition interval based on frequency
+ if (frequency.equals("Daily")) {
+ interval = AlarmManager.INTERVAL_DAY;
+ } else if (frequency.equals("Weekly")) {
+ interval = AlarmManager.INTERVAL_DAY * 7;
+ }
+
+ // Store alarm details in database
+ db.insertOrUpdateAlarm(new Alarm(taskId, triggerTime, frequency));
+
+ // Set the alarm
+ if (interval > 0) {
+ alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, triggerTime, interval, pendingIntent);
+ } else {
+ alarmManager.setExact(AlarmManager.RTC_WAKEUP, triggerTime, pendingIntent); // For "Once" frequency
+ }
+
+ Toast.makeText(context, "Notification scheduled: " + frequency, Toast.LENGTH_SHORT).show();
+ }
+
+ private void deleteAlarm(int taskId) {
+ Context context = con;
+ AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
+
+ // Cancel alarm with taskId
+ Intent intent = new Intent(context, NotificationReceiver.class);
+ PendingIntent pendingIntent = PendingIntent.getBroadcast(context, taskId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
+ alarmManager.cancel(pendingIntent);
+
+ // Remove alarm from the database
+ db.deleteAlarm(taskId);
+
+ Toast.makeText(context, "Notification cancelled", Toast.LENGTH_SHORT).show();
+ }
+
+ private void updateAlarm(int taskId, Calendar newCalendar, String newFrequency) {
+ // First, cancel the existing alarm
+ deleteAlarm(taskId);
+
+ // Then, set a new alarm with updated time and frequency
+ scheduleNotification(taskId, newCalendar, newFrequency);
+ }
+ });
- };
-// spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
-// @Override
-// public void onItemSelected(AdapterView> adapterView, View view, int i, long l) {
-// catagoryselected = adapterView.getItemAtPosition(i).toString();
-// TextView selectedText = (TextView) adapterView.getChildAt(i);
-// if (selectedText != null) {
-// selectedText.setTextColor(ContextCompat.getColor(con, R.color.g2));
-// }
-// }
-//
-// @Override
-// public void onNothingSelected(AdapterView> adapterView) {
-//
-// }
-// });
-// saveTaskButton.setOnClickListener(new View.OnClickListener() {
-// @Override
-// public void onClick(View view) {
-// String formattedDate = df.format(c);
-// try {
-//
-// } catch (SQLiteException e) {
-// }
-// db.update_habitsdata(position, formattedDate, habit.getText().toString()
-// , detail.getText().toString(), catagoryselected);
-// db.show_habits_data();
-// Intent intent = new Intent(con, MainActivity.class);
-// con.startActivity(intent);
-// ((Activity) con).overridePendingTransition(0, 0);
-// bottomSheetDialog.dismiss();
-// }
-//
-// });
-
-// spinner.setAdapter((SpinnerAdapter) adapter);
- bottomSheetDialog.setContentView(bottomsheetview);
- bottomSheetDialog.show();
}
});
}
+ private int getCount(int position) {
+ int count = Integer.parseInt(getAvoidedCount(Helper.habitsdata.get(position)[2])) - Integer.parseInt(getDoneCount(Helper.habitsdata.get(position)[2]));
+ db.update_habitsdata(Integer.parseInt(Helper.habitsdata.get(position)[0]),
+ Helper.habitsdata.get(position)[1],
+ Helper.habitsdata.get(position)[2],
+ Helper.habitsdata.get(position)[3],
+ count,
+ Helper.habitsdata.get(position)[5]);
+ return count;
+ }
+
+ private String getDoneCount(String s) {
+ for (String x[] : Helper.donedata) {
+ if (x[2].equalsIgnoreCase(s)) {
+ return x[4];
+ }
+ }
+ return "0";
+ }
+
+ private String getAvoidedCount(String s) {
+ for (String x[] : Helper.avoidedData) {
+ if (x[2].equalsIgnoreCase(s)) {
+ return x[4];
+ }
+ }
+ return "0";
+
+ }
+
@Override
public int getItemCount() {
return donotTask.size();
diff --git a/app/src/main/java/rocks/poopjournal/todont/Alarm.java b/app/src/main/java/rocks/poopjournal/todont/Alarm.java
new file mode 100644
index 00000000..b66cb79a
--- /dev/null
+++ b/app/src/main/java/rocks/poopjournal/todont/Alarm.java
@@ -0,0 +1,50 @@
+package rocks.poopjournal.todont;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+
+public class Alarm {
+ private int taskId;
+ private long alarmTime;
+ private String frequency;
+
+ // Constructor
+ public Alarm(int taskId, long alarmTime, String frequency) {
+ this.taskId = taskId;
+ this.alarmTime = alarmTime;
+ this.frequency = frequency;
+ }
+
+ // Getters and setters
+ public int getTaskId() {
+ return taskId;
+ }
+
+ public void setTaskId(int taskId) {
+ this.taskId = taskId;
+ }
+
+ public long getAlarmTime() {
+ return alarmTime;
+ }
+
+ public void setAlarmTime(long alarmTime) {
+ this.alarmTime = alarmTime;
+ }
+
+ public String getFrequency() {
+ return frequency;
+ }
+
+ public void setFrequency(String frequency) {
+ this.frequency = frequency;
+ }
+
+ // Optional: Convert alarm time to readable format (for display purposes)
+ public String getFormattedAlarmTime() {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.getDefault());
+ return sdf.format(new Date(alarmTime));
+ }
+}
+
diff --git a/app/src/main/java/rocks/poopjournal/todont/DatabaseManager.java b/app/src/main/java/rocks/poopjournal/todont/DatabaseManager.java
new file mode 100644
index 00000000..070ad085
--- /dev/null
+++ b/app/src/main/java/rocks/poopjournal/todont/DatabaseManager.java
@@ -0,0 +1,73 @@
+package rocks.poopjournal.todont;
+
+import android.content.Context;
+import android.os.Environment;
+import android.util.Log;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+public class DatabaseManager {
+ private Context context;
+ private static final String DATABASE_NAME = "todont.sqlite";
+ private static final String BACKUP_FILE_NAME = "todont.sqlite"; // Name of the backup file
+ private static final String TAG = "DatabaseManager";
+
+ public DatabaseManager(Context context) {
+ this.context = context;
+ }
+
+ public void deleteCurrentDatabase() {
+ // Get the path of the current database
+ File currentDatabase = context.getDatabasePath(DATABASE_NAME);
+
+ // Check if the current database exists
+ if (currentDatabase.exists()) {
+ // Delete the existing database
+ if (currentDatabase.delete()) {
+ Log.d(TAG, "Existing database deleted successfully.");
+ } else {
+ Log.e(TAG, "Failed to delete existing database.");
+ return; // Exit if unable to delete
+ }
+ }
+ }
+
+ public void restoreDatabase() {
+ File currentDatabase = context.getDatabasePath(DATABASE_NAME);
+ deleteCurrentDatabase();
+
+ // Now proceed to restore the new database from the backup file
+ File backupFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), DATABASE_NAME);
+
+ if (!backupFile.exists()) {
+ Log.e(TAG, "Backup file does not exist.");
+ return; // Exit if backup file is not found
+ }
+
+ // Copy the backup file to the database location
+ try {
+ copyDatabase(backupFile, currentDatabase);
+ Log.d(TAG, "Database restored successfully.");
+ } catch (IOException e) {
+ Log.e(TAG, "Failed to restore database: " + e.getMessage());
+ }
+ }
+
+ private void copyDatabase(File sourceFile, File destFile) throws IOException {
+ FileInputStream fis = new FileInputStream(sourceFile);
+ FileOutputStream fos = new FileOutputStream(destFile);
+
+ byte[] buffer = new byte[1024];
+ int length;
+ while ((length = fis.read(buffer)) > 0) {
+ fos.write(buffer, 0, length);
+ }
+
+ fos.flush();
+ fos.close();
+ fis.close();
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/rocks/poopjournal/todont/DatabaseUtils.java b/app/src/main/java/rocks/poopjournal/todont/DatabaseUtils.java
new file mode 100644
index 00000000..6c9461f0
--- /dev/null
+++ b/app/src/main/java/rocks/poopjournal/todont/DatabaseUtils.java
@@ -0,0 +1,92 @@
+package rocks.poopjournal.todont;
+
+import android.content.ContentResolver;
+import android.content.ContentValues;
+import android.content.Context;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Environment;
+import android.provider.MediaStore;
+import android.widget.Toast;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.OutputStream;
+
+public class DatabaseUtils {
+
+ public static void copyDatabaseToDownloads(Context context, String dbName) {
+ try {
+ // Get the database file from the app's private directory
+ File dbFile = context.getDatabasePath(dbName);
+
+ // For Android 10 (API 29) and above, use the MediaStore API to write to Downloads folder
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
+ saveFileToDownloadsUsingMediaStore(context, dbFile);
+ } else {
+ // For Android 9 (API 28) and below, use traditional file writing with WRITE_EXTERNAL_STORAGE permission
+ File downloadsDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
+ File destFile = new File(downloadsDir, dbFile.getName());
+ copyFile(dbFile, destFile);
+ Toast.makeText(context, "Database copied to: " + destFile.getAbsolutePath(), Toast.LENGTH_LONG).show();
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ Toast.makeText(context, "Failed to copy database: " + e.getMessage(), Toast.LENGTH_LONG).show();
+ }
+ }
+
+ // Method for copying the file for Android 10 and above using MediaStore API
+ private static void saveFileToDownloadsUsingMediaStore(Context context, File sourceFile) {
+ ContentResolver contentResolver = context.getContentResolver();
+ ContentValues values = new ContentValues();
+
+ // Set up the details for the file in MediaStore
+ values.put(MediaStore.MediaColumns.DISPLAY_NAME, sourceFile.getName());
+ values.put(MediaStore.MediaColumns.MIME_TYPE, "application/octet-stream");
+ values.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DOWNLOADS);
+
+ // Insert the file details to MediaStore, getting the URI
+ Uri fileUri = contentResolver.insert(MediaStore.Downloads.EXTERNAL_CONTENT_URI, values);
+
+ if (fileUri != null) {
+ try (OutputStream outputStream = contentResolver.openOutputStream(fileUri);
+ FileInputStream inputStream = new FileInputStream(sourceFile)) {
+
+ // Copy the data from the source file to the destination stream
+ byte[] buffer = new byte[1024];
+ int length;
+ while ((length = inputStream.read(buffer)) > 0) {
+ outputStream.write(buffer, 0, length);
+ }
+
+ Toast.makeText(context, "Database copied to Downloads folder", Toast.LENGTH_LONG).show();
+ } catch (Exception e) {
+ e.printStackTrace();
+ Toast.makeText(context, "Failed to save file: " + e.getMessage(), Toast.LENGTH_LONG).show();
+ }
+ }
+ }
+
+ // Method for copying the file in older Android versions
+ private static void copyFile(File sourceFile, File destFile) throws Exception {
+ FileInputStream inputStream = null;
+ OutputStream outputStream = null;
+
+ try {
+ inputStream = new FileInputStream(sourceFile);
+ outputStream = new FileOutputStream(destFile);
+
+ byte[] buffer = new byte[1024];
+ int length;
+ while ((length = inputStream.read(buffer)) > 0) {
+ outputStream.write(buffer, 0, length);
+ }
+ } finally {
+ if (inputStream != null) inputStream.close();
+ if (outputStream != null) outputStream.close();
+ }
+ }
+}
diff --git a/app/src/main/java/rocks/poopjournal/todont/Db_Controller.java b/app/src/main/java/rocks/poopjournal/todont/Db_Controller.java
index 2982e37b..3c45b406 100644
--- a/app/src/main/java/rocks/poopjournal/todont/Db_Controller.java
+++ b/app/src/main/java/rocks/poopjournal/todont/Db_Controller.java
@@ -9,20 +9,31 @@
import android.util.Log;
import java.util.ArrayList;
+import java.util.List;
public class Db_Controller extends SQLiteOpenHelper {
+
+ private static final String TABLE_ALARMS = "alarms";
+ private static final String COLUMN_TASK_ID = "task_id";
+ private static final String COLUMN_ALARM_TIME = "alarm_time";
+ private static final String COLUMN_FREQUENCY = "frequency";
+ private static final String CREATE_TABLE_ALARMS = "CREATE TABLE " + TABLE_ALARMS + " (" +
+ COLUMN_TASK_ID + " INTEGER PRIMARY KEY, " +
+ COLUMN_ALARM_TIME + " INTEGER, " + // store alarm time as Unix timestamp
+ COLUMN_FREQUENCY + " TEXT)";
public Db_Controller(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
- super(context, "e.db", factory, version);
+ super(context, "todont.sqlite", factory, 3);
}
@Override
public void onCreate(SQLiteDatabase db) {
//ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
- db.execSQL("CREATE TABLE HABITS(ID INTEGER,DATE TEXT,HABIT TEXT,DETAIL TEXT,TIMES INTEGER,CATAGORY TEXT);");
- db.execSQL("CREATE TABLE AVOIDED(ID INTEGER,DATE TEXT,HABIT TEXT,DETAIL TEXT,TIMES INTEGER,CATAGORY TEXT);");
- db.execSQL("CREATE TABLE DONE(ID INTEGER,DATE TEXT,HABIT TEXT,DETAIL TEXT,TIMES INTEGER,CATAGORY TEXT);");
+ db.execSQL("CREATE TABLE HABITS(ID INTEGER Primary key ,DATE TEXT,HABIT TEXT,DETAIL TEXT,TIMES INTEGER,CATAGORY TEXT);");
+ db.execSQL("CREATE TABLE AVOIDED(ID INTEGER Primary key ,DATE TEXT,HABIT TEXT,DETAIL TEXT,TIMES INTEGER,CATAGORY TEXT);");
+ db.execSQL("CREATE TABLE DONE(ID INTEGER Primary key ,DATE TEXT,HABIT TEXT,DETAIL TEXT,TIMES INTEGER,CATAGORY TEXT);");
db.execSQL("CREATE TABLE LABELS(LABEL TEXT);");
db.execSQL("CREATE TABLE CHECKNIGHTMODE(NIGHTMODE TEXT);");
+ db.execSQL(CREATE_TABLE_ALARMS);
}
@Override
@@ -32,9 +43,65 @@ public void onUpgrade(SQLiteDatabase db, int i, int i1) {
db.execSQL("DROP TABLE IF EXISTS DONE;");
db.execSQL("DROP TABLE IF EXISTS LABELS;");
db.execSQL("DROP TABLE IF EXISTS CHECKNIGHTMODE;");
+ db.execSQL("DROP TABLE IF EXISTS "+TABLE_ALARMS+";");
onCreate(db);
}
+ // Insert or Update alarm
+ public void insertOrUpdateAlarm(Alarm alarm) {
+ SQLiteDatabase db = this.getWritableDatabase();
+ ContentValues values = new ContentValues();
+ values.put(COLUMN_TASK_ID, alarm.getTaskId());
+ values.put(COLUMN_ALARM_TIME, alarm.getAlarmTime());
+ values.put(COLUMN_FREQUENCY, alarm.getFrequency());
+
+ db.replace(TABLE_ALARMS, null, values); // Use replace to update if task_id exists
+ db.close();
+ }
+ // Delete alarm by task ID
+ public void deleteAlarm(int taskId) {
+ SQLiteDatabase db = this.getWritableDatabase();
+ db.delete(TABLE_ALARMS, COLUMN_TASK_ID + " = ?", new String[]{String.valueOf(taskId)});
+ db.close();
+ }
+ // Get alarm details by task ID
+ public Alarm getAlarm(int taskId) {
+ SQLiteDatabase db = this.getReadableDatabase();
+ Cursor cursor = db.query(TABLE_ALARMS, null, COLUMN_TASK_ID + " = ?", new String[]{String.valueOf(taskId)}, null, null, null);
+
+ if (cursor != null && cursor.moveToFirst()) {
+ long alarmTime = cursor.getLong(cursor.getColumnIndexOrThrow(COLUMN_ALARM_TIME));
+ String frequency = cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_FREQUENCY));
+ cursor.close();
+ db.close();
+ return new Alarm(taskId, alarmTime, frequency);
+ } else {
+ if (cursor != null) cursor.close();
+ db.close();
+ return null; // Alarm not found
+ }
+ }
+ // Get all alarms
+ public List getAllAlarms() {
+ List alarmList = new ArrayList<>();
+ SQLiteDatabase db = this.getReadableDatabase();
+ Cursor cursor = db.query(TABLE_ALARMS, null, null, null, null, null, null);
+
+ if (cursor != null && cursor.moveToFirst()) {
+ do {
+ int taskId = cursor.getInt(cursor.getColumnIndexOrThrow(COLUMN_TASK_ID));
+ long alarmTime = cursor.getLong(cursor.getColumnIndexOrThrow(COLUMN_ALARM_TIME));
+ String frequency = cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_FREQUENCY));
+ alarmList.add(new Alarm(taskId, alarmTime, frequency));
+ } while (cursor.moveToNext());
+ }
+
+ if (cursor != null) cursor.close();
+ db.close();
+ return alarmList;
+ }
+
+
public void insert_label(String label) {
Log.d("insert_label...", "" + label);
ContentValues con = new ContentValues();
@@ -103,7 +170,7 @@ public void show_habits_data() {
Cursor cursor = this.getReadableDatabase().rawQuery("SELECT * FROM HABITS", null);
Helper.habitsdata = new ArrayList<>();
while (cursor.moveToNext()) {
- String[] temp = new String[5];
+ String[] temp = new String[6];
temp[0] = (cursor.getString(0));
temp[1] = (cursor.getString(1));
String str = (cursor.getString(2));
@@ -113,25 +180,26 @@ public void show_habits_data() {
temp[2] = str;
temp[3] = (cursor.getString(3));
temp[4] = (cursor.getString(4));
+ temp[5] = (cursor.getString(5));
Helper.habitsdata.add(temp);
}
}
- public void show_data() {
+ public void show_avoided_data() {
Cursor cursor = this.getReadableDatabase().rawQuery("SELECT * FROM AVOIDED", null);
- Helper.data = new ArrayList<>();
+ Helper.avoidedData = new ArrayList<>();
while (cursor.moveToNext()) {
- String[] temp = new String[5];
+ String[] temp = new String[6];
temp[0] = (cursor.getString(0));
temp[1] = (cursor.getString(1));
temp[2] = (cursor.getString(2));
temp[3] = (cursor.getString(3));
temp[4] = (cursor.getString(4));
-// temp[5] = (cursor.getString(5));
+ temp[5] = (cursor.getString(5));
- Helper.data.add(temp);
+ Helper.avoidedData.add(temp);
}
}
@@ -142,13 +210,13 @@ public void show_done_data() {
Helper.donedata = new ArrayList<>();
while (cursor.moveToNext()) {
- String[] temp = new String[5];
+ String[] temp = new String[6];
temp[0] = (cursor.getString(0));
temp[1] = (cursor.getString(1));
temp[2] = (cursor.getString(2));
temp[3] = (cursor.getString(3));
temp[4] = (cursor.getString(4));
-// temp[5] = (cursor.getString(5));
+ temp[5] = (cursor.getString(5));
Helper.donedata.add(temp);
@@ -164,9 +232,8 @@ public void show_labels() {
}
}
- public void update_habitsdata(int id, String date, String habit, String detail, String catagory) {
-
- this.getWritableDatabase().execSQL("UPDATE HABITS SET DATE='" + date + "',HABIT='" + habit + "',DETAIL='" + detail + "',CATAGORY='" + catagory + "' WHERE ID='" + id + "'");
+ public void update_habitsdata(int id, String date, String habit, String detail,int count, String catagory) {
+ this.getWritableDatabase().execSQL("UPDATE HABITS SET DATE='" + date + "',HABIT='" + habit + "',DETAIL='" + detail + "',TIMES='" + count + "',CATAGORY='" + catagory + "' WHERE ID='" + id + "'");
}
/* public void update_habitsdata(int id, String date, String habit, String detail, int times, String category) {
@@ -538,4 +605,5 @@ public int countLabels(String catagory) {
cursor.close();
return count;
}
+
}
\ No newline at end of file
diff --git a/app/src/main/java/rocks/poopjournal/todont/Db_Helper.java b/app/src/main/java/rocks/poopjournal/todont/Db_Helper.java
new file mode 100644
index 00000000..e029eb30
--- /dev/null
+++ b/app/src/main/java/rocks/poopjournal/todont/Db_Helper.java
@@ -0,0 +1,244 @@
+package rocks.poopjournal.todont;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.Cursor;
+import android.database.SQLException;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+import android.util.Log;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+
+public class Db_Helper extends SQLiteOpenHelper {
+ private static final String DATABASE_NAME = "todont.sqlite";
+ private static final int DATABASE_VERSION = 2;
+
+ // Table names
+ private static final String TABLE_HABITS = "HABITS";
+ private static final String TABLE_AVOIDED = "AVOIDED";
+ private static final String TABLE_DONE = "DONE";
+ private static final String TABLE_LABELS = "LABELS";
+ private static final String TABLE_CHECKNIGHTMODE = "CHECKNIGHTMODE";
+
+ // Common column names
+ private static final String KEY_ID = "ID INTEGER PRIMARY KEY AUTOINCREMENT"; // Using AUTOINCREMENT
+ private static final String KEY_DATE = "DATE TEXT";
+ private static final String KEY_HABIT = "HABIT TEXT";
+ private static final String KEY_DETAIL = "DETAIL TEXT";
+ private static final String KEY_TIMES = "TIMES INTEGER";
+ private static final String KEY_CATEGORY = "CATEGORY TEXT";
+
+ // Table specific columns
+ private static final String KEY_LABEL = "LABEL TEXT";
+ private static final String KEY_NIGHTMODE = "NIGHTMODE TEXT";
+
+ private SQLiteDatabase database;
+ private Context context;
+
+ public Db_Helper(Context context) {
+ super(context, DATABASE_NAME, null, DATABASE_VERSION);
+ this.context = context;
+ }
+
+ @Override
+ public void onCreate(SQLiteDatabase db) {
+ String CREATE_HABITS_TABLE = "CREATE TABLE " + TABLE_HABITS + "("
+ + KEY_ID + ", " + KEY_DATE + ", " + KEY_HABIT + ", "
+ + KEY_DETAIL + ", " + KEY_TIMES + ", " + KEY_CATEGORY + ");";
+
+ String CREATE_AVOIDED_TABLE = "CREATE TABLE " + TABLE_AVOIDED + "("
+ + KEY_ID + ", " + KEY_DATE + ", " + KEY_HABIT + ", "
+ + KEY_DETAIL + ", " + KEY_TIMES + ", " + KEY_CATEGORY + ");";
+
+ String CREATE_DONE_TABLE = "CREATE TABLE " + TABLE_DONE + "("
+ + KEY_ID + ", " + KEY_DATE + ", " + KEY_HABIT + ", "
+ + KEY_DETAIL + ", " + KEY_TIMES + ", " + KEY_CATEGORY + ");";
+
+ String CREATE_LABELS_TABLE = "CREATE TABLE " + TABLE_LABELS + "(" + KEY_LABEL + ");";
+ String CREATE_NIGHTMODE_TABLE = "CREATE TABLE " + TABLE_CHECKNIGHTMODE + "(" + KEY_NIGHTMODE + ");";
+
+ db.execSQL(CREATE_HABITS_TABLE);
+ db.execSQL(CREATE_AVOIDED_TABLE);
+ db.execSQL(CREATE_DONE_TABLE);
+ db.execSQL(CREATE_LABELS_TABLE);
+ db.execSQL(CREATE_NIGHTMODE_TABLE);
+ }
+
+ @Override
+ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+ db.execSQL("DROP TABLE IF EXISTS " + TABLE_HABITS);
+ db.execSQL("DROP TABLE IF EXISTS " + TABLE_AVOIDED);
+ db.execSQL("DROP TABLE IF EXISTS " + TABLE_DONE);
+ db.execSQL("DROP TABLE IF EXISTS " + TABLE_LABELS);
+ db.execSQL("DROP TABLE IF EXISTS " + TABLE_CHECKNIGHTMODE);
+ onCreate(db);
+ }
+
+ // Method to restore the database from backup
+ public void restoreDatabase(File backupFile) {
+ File dbFile = context.getDatabasePath(DATABASE_NAME);
+ if (dbFile.exists() && dbFile.length() > 0) {
+ Log.d("Db_Helper", "Existing database found, not restoring.");
+ return; // Don't restore if the database already exists and is not empty
+ }
+
+ try (FileInputStream fis = new FileInputStream(backupFile);
+ FileOutputStream fos = new FileOutputStream(dbFile)) {
+ byte[] buffer = new byte[1024];
+ int length;
+ while ((length = fis.read(buffer)) > 0) {
+ fos.write(buffer, 0, length);
+ }
+ Log.d("Db_Helper", "Database restored from backup.");
+ } catch (IOException e) {
+ Log.e("Db_Helper", "Error restoring database: " + e.getMessage());
+ }
+ }
+
+ // Open the database
+ public void open() throws SQLException {
+ database = this.getWritableDatabase();
+ }
+
+ // Close the database
+ public void closeDatabase() {
+ if (database != null && database.isOpen()) {
+ database.close();
+ }
+ }
+
+ // Insert methods
+ public void insertLabel(String label) {
+ ContentValues values = new ContentValues();
+ values.put(KEY_LABEL, label);
+ this.getWritableDatabase().insertOrThrow(TABLE_LABELS, null, values);
+ }
+
+ public void insertHabit(String date, String habit, String detail, int times, String category) {
+ ContentValues values = new ContentValues();
+ values.put(KEY_DATE, date);
+ values.put(KEY_HABIT, habit);
+ values.put(KEY_DETAIL, detail);
+ values.put(KEY_TIMES, times);
+ values.put(KEY_CATEGORY, category);
+ this.getWritableDatabase().insertOrThrow(TABLE_HABITS, null, values);
+ }
+
+ public void insertDoneData(String date, String habit, String detail, int times, String category) {
+ ContentValues values = new ContentValues();
+ values.put(KEY_DATE, date);
+ values.put(KEY_HABIT, habit);
+ values.put(KEY_DETAIL, detail);
+ values.put(KEY_TIMES, times);
+ values.put(KEY_CATEGORY, category);
+ this.getWritableDatabase().insertOrThrow(TABLE_DONE, null, values);
+ }
+
+ public void insertAvoidedData(String date, String habit, String detail, int times, String category) {
+ ContentValues values = new ContentValues();
+ values.put(KEY_DATE, date);
+ values.put(KEY_HABIT, habit);
+ values.put(KEY_DETAIL, detail);
+ values.put(KEY_TIMES, times);
+ values.put(KEY_CATEGORY, category);
+ this.getWritableDatabase().insertOrThrow(TABLE_AVOIDED, null, values);
+ }
+
+ public void setNightMode(String mode) {
+ ContentValues values = new ContentValues();
+ values.put(KEY_NIGHTMODE, mode);
+ this.getWritableDatabase().insertOrThrow(TABLE_CHECKNIGHTMODE, null, values);
+ }
+
+ // Fetch methods
+ public void getNightMode() {
+ Cursor cursor = this.getReadableDatabase().rawQuery("SELECT * FROM " + TABLE_CHECKNIGHTMODE, null);
+ if (cursor.moveToFirst()) {
+ Helper.isnightmodeon = cursor.getString(0);
+ }
+ cursor.close();
+ }
+
+ public void showHabitsData() {
+ Cursor cursor = this.getReadableDatabase().rawQuery("SELECT * FROM " + TABLE_HABITS, null);
+ Helper.habitsdata = new ArrayList<>();
+ while (cursor.moveToNext()) {
+ String[] data = new String[5];
+ data[0] = cursor.getString(0);
+ data[1] = cursor.getString(1);
+ data[2] = cursor.getString(2).replace("geodhola", "'");
+ data[3] = cursor.getString(3);
+ data[4] = cursor.getString(4);
+ Helper.habitsdata.add(data);
+ }
+ cursor.close();
+ }
+
+ public void showAvoidedData() {
+ Cursor cursor = this.getReadableDatabase().rawQuery("SELECT * FROM " + TABLE_AVOIDED, null);
+ Helper.avoidedData = new ArrayList<>();
+ while (cursor.moveToNext()) {
+ String[] data = new String[5];
+ data[0] = cursor.getString(0);
+ data[1] = cursor.getString(1);
+ data[2] = cursor.getString(2);
+ data[3] = cursor.getString(3);
+ data[4] = cursor.getString(4);
+ Helper.avoidedData.add(data);
+ }
+ cursor.close();
+ }
+
+ // Update methods
+ public void updateHabit(int id, String date, String habit, String detail, String category) {
+ ContentValues values = new ContentValues();
+ values.put(KEY_DATE, date);
+ values.put(KEY_HABIT, habit);
+ values.put(KEY_DETAIL, detail);
+ values.put(KEY_CATEGORY, category);
+
+ this.getWritableDatabase().update(TABLE_HABITS, values, KEY_ID + "=?", new String[]{String.valueOf(id)});
+ }
+
+ public void updateDoneData(int id, String date, String habit, String detail, int times, String category) {
+ ContentValues values = new ContentValues();
+ values.put(KEY_DATE, date);
+ values.put(KEY_HABIT, habit);
+ values.put(KEY_DETAIL, detail);
+ values.put(KEY_TIMES, times);
+ values.put(KEY_CATEGORY, category);
+
+ this.getWritableDatabase().update(TABLE_DONE, values, KEY_ID + "=?", new String[]{String.valueOf(id)});
+ }
+
+ public void updateNightMode(String mode) {
+ ContentValues values = new ContentValues();
+ values.put(KEY_NIGHTMODE, mode);
+ this.getWritableDatabase().update(TABLE_CHECKNIGHTMODE, values, null, null);
+ Helper.isnightmodeon = mode;
+ }
+
+ // Delete methods
+ public void deleteHabit(int id) {
+ this.getWritableDatabase().delete(TABLE_HABITS, KEY_ID + "=?", new String[]{String.valueOf(id)});
+ }
+
+ public void deleteAvoided(int id) {
+ this.getWritableDatabase().delete(TABLE_AVOIDED, KEY_ID + "=?", new String[]{String.valueOf(id)});
+ }
+
+ public void deleteDone(int id) {
+ this.getWritableDatabase().delete(TABLE_DONE, KEY_ID + "=?", new String[]{String.valueOf(id)});
+ }
+
+ // Initialize the database with restoration
+ public void initializeDatabase(File backupFile) {
+ restoreDatabase(backupFile);
+ open(); // Open the database after restoring it
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/rocks/poopjournal/todont/Fragments/AvoidedFragment.java b/app/src/main/java/rocks/poopjournal/todont/Fragments/AvoidedFragment.java
index 60067c46..cb545d25 100644
--- a/app/src/main/java/rocks/poopjournal/todont/Fragments/AvoidedFragment.java
+++ b/app/src/main/java/rocks/poopjournal/todont/Fragments/AvoidedFragment.java
@@ -45,16 +45,16 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
rv = view.findViewById(R.id.rv);
db = new Db_Controller(getActivity(), "", null, 2);
db.show_labels();
- db.show_data();
+ db.show_avoided_data();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
setDataInList();
return view;
}
public void setDataInList() {
- for (int i = 0; i < Helper.data.size(); i++) {
- gettingtasks.add(Helper.data.get(i)[2]);
- gettingcatagory.add(Helper.data.get(i)[4]);
+ for (int i = 0; i < Helper.avoidedData.size(); i++) {
+ gettingtasks.add(Helper.avoidedData.get(i)[2]);
+ gettingcatagory.add(Helper.avoidedData.get(i)[4]);
}
rv.setLayoutManager(new LinearLayoutManager(getActivity()));
new ItemTouchHelper(itemtouchhelper).attachToRecyclerView(rv);
@@ -83,11 +83,11 @@ public void onSwiped(@NonNull final RecyclerView.ViewHolder viewHolder, int dire
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
int i = viewHolder.getAdapterPosition();
- Log.d("aaaasize",""+Helper.data.size());
+ Log.d("aaaasize",""+Helper.avoidedData.size());
db.delete_avoided(i);
- for (int j = i + 1; j < Helper.data.size(); j++) {
- Log.d("aaaaforloop",""+Integer.parseInt(Helper.data.get(j)[0]));
- db.updateIdsAfterDeletion(Integer.parseInt(Helper.data.get(j)[0]));
+ for (int j = i + 1; j < Helper.avoidedData.size(); j++) {
+ Log.d("aaaaforloop",""+Integer.parseInt(Helper.avoidedData.get(j)[0]));
+ db.updateIdsAfterDeletion(Integer.parseInt(Helper.avoidedData.get(j)[0]));
}
Helper.SelectedButtonOfTodayTab = 1;
Intent intent = new Intent(getActivity(), MainActivity.class);
diff --git a/app/src/main/java/rocks/poopjournal/todont/Fragments/AvoidedLogFragment.java b/app/src/main/java/rocks/poopjournal/todont/Fragments/AvoidedLogFragment.java
index c1ee45ef..d128748d 100644
--- a/app/src/main/java/rocks/poopjournal/todont/Fragments/AvoidedLogFragment.java
+++ b/app/src/main/java/rocks/poopjournal/todont/Fragments/AvoidedLogFragment.java
@@ -1,28 +1,19 @@
package rocks.poopjournal.todont.Fragments;
-import android.app.AlertDialog;
-import android.content.DialogInterface;
-import android.content.Intent;
import android.os.Bundle;
-import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
-import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
-import java.text.SimpleDateFormat;
import java.util.ArrayList;
-import java.util.Locale;
import rocks.poopjournal.todont.Adapters.AvoidedLogAdapter;
import rocks.poopjournal.todont.Db_Controller;
import rocks.poopjournal.todont.Helper;
-import rocks.poopjournal.todont.MainActivity;
import rocks.poopjournal.todont.R;
public class AvoidedLogFragment extends Fragment {
diff --git a/app/src/main/java/rocks/poopjournal/todont/Fragments/DoneFragment.java b/app/src/main/java/rocks/poopjournal/todont/Fragments/DoneFragment.java
index f22bc20c..0e59d048 100644
--- a/app/src/main/java/rocks/poopjournal/todont/Fragments/DoneFragment.java
+++ b/app/src/main/java/rocks/poopjournal/todont/Fragments/DoneFragment.java
@@ -4,6 +4,9 @@
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
@@ -11,18 +14,14 @@
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
-import rocks.poopjournal.todont.Db_Controller;
import rocks.poopjournal.todont.Adapters.DoneAdapter;
+import rocks.poopjournal.todont.Db_Controller;
import rocks.poopjournal.todont.Helper;
import rocks.poopjournal.todont.MainActivity;
import rocks.poopjournal.todont.R;
@@ -52,7 +51,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
// @SuppressLint("ResourceAsColor")
// @Override
// public void onClick(View view) {
-// final SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy", Locale.getDefault());
+// final SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
// String formattedDate = df.format(c);
// final View bottomsheetview ;
// final BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(getActivity(),
diff --git a/app/src/main/java/rocks/poopjournal/todont/Fragments/FragmentLog.java b/app/src/main/java/rocks/poopjournal/todont/Fragments/FragmentLog.java
index 22a74e78..9efc449f 100644
--- a/app/src/main/java/rocks/poopjournal/todont/Fragments/FragmentLog.java
+++ b/app/src/main/java/rocks/poopjournal/todont/Fragments/FragmentLog.java
@@ -1,6 +1,5 @@
package rocks.poopjournal.todont.Fragments;
-import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
diff --git a/app/src/main/java/rocks/poopjournal/todont/Fragments/FragmentToday.java b/app/src/main/java/rocks/poopjournal/todont/Fragments/FragmentToday.java
index d63acb4d..86f477b3 100644
--- a/app/src/main/java/rocks/poopjournal/todont/Fragments/FragmentToday.java
+++ b/app/src/main/java/rocks/poopjournal/todont/Fragments/FragmentToday.java
@@ -1,6 +1,5 @@
package rocks.poopjournal.todont.Fragments;
-import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
@@ -10,9 +9,6 @@
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
-
-import java.util.Collection;
-
import rocks.poopjournal.todont.Helper;
import rocks.poopjournal.todont.R;
diff --git a/app/src/main/java/rocks/poopjournal/todont/Fragments/HabitsFragment.java b/app/src/main/java/rocks/poopjournal/todont/Fragments/HabitsFragment.java
index d53907a1..142b26b2 100644
--- a/app/src/main/java/rocks/poopjournal/todont/Fragments/HabitsFragment.java
+++ b/app/src/main/java/rocks/poopjournal/todont/Fragments/HabitsFragment.java
@@ -8,8 +8,6 @@
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
-import android.util.TypedValue;
-import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -44,6 +42,11 @@
import rocks.poopjournal.todont.R;
import rocks.poopjournal.todont.showcaseview.ShowcaseViewBuilder;
import rocks.poopjournal.todont.utils.SharedPrefUtils;
+import smartdevelop.ir.eram.showcaseviewlib.GuideView;
+import smartdevelop.ir.eram.showcaseviewlib.config.DismissType;
+import smartdevelop.ir.eram.showcaseviewlib.config.Gravity;
+import smartdevelop.ir.eram.showcaseviewlib.config.PointerType;
+import smartdevelop.ir.eram.showcaseviewlib.listener.GuideListener;
public class HabitsFragment extends Fragment {
@@ -55,7 +58,7 @@ public class HabitsFragment extends Fragment {
String catagoryselected;
Db_Controller db;
HabitsAdapter adapter;
- TextView tv1, tv2;
+ TextView tv2;
public ShowcaseViewBuilder showcaseViewBuilder;
private SharedPrefUtils prefUtils;
@@ -68,19 +71,20 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
db = new Db_Controller(getActivity(), "", null, 2);
db.show_labels();
db.show_habits_data();
+
showcaseViewBuilder = ShowcaseViewBuilder.init(requireActivity());
prefUtils = new SharedPrefUtils(requireActivity());
db.getNightMode();
- tv1 = view.findViewById(R.id.a);
+ // tv1 = view.findViewById(R.id.a);
tv2 = view.findViewById(R.id.b);
floatingActionButton = view.findViewById(R.id.floatingbtn);
floatingActionButton.bringToFront();
floatingActionButton.setVisibility(View.VISIBLE);
if (Helper.habitsdata.size() != 0) {
- tv1.setVisibility(View.INVISIBLE);
+ // tv1.setVisibility(View.INVISIBLE);
tv2.setVisibility(View.INVISIBLE);
} else if (Helper.habitsdata.size() == 0) {
- tv1.setVisibility(View.VISIBLE);
+ // tv1.setVisibility(View.VISIBLE);
tv2.setVisibility(View.VISIBLE);
}
@@ -280,38 +284,56 @@ public void onClick(View view) {
}
private void showcaseFab() {
- showcaseViewBuilder.setTargetView(floatingActionButton).setBackgroundOverlayColor(0xcc000000)
- .setBgOverlayShape(ShowcaseViewBuilder.ROUND_RECT)
- .setRoundRectCornerDirection(ShowcaseViewBuilder.TOP_RIGHT)
- .setRoundRectOffset(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 170, getResources().getDisplayMetrics())).setRingColor(0xcc8e8e8e)
- .setShowcaseShape(ShowcaseViewBuilder.SHAPE_CIRCLE).setRingWidth(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 18, getResources().getDisplayMetrics()))
- .setMarkerDrawable(getResources().getDrawable(R.drawable.arrow_up), Gravity.LEFT)
- .addCustomView(R.layout.fab_description_view, Gravity.LEFT, TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 0, getResources().getDisplayMetrics()), TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, -228, getResources()
- .getDisplayMetrics()), TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 100, getResources().getDisplayMetrics()), -300);
-// .addCustomView(R.layout.fab_description_view, Gravity.CENTER);
-
- showcaseViewBuilder.show();
-
- showcaseViewBuilder.setClickListenerOnView(R.id.btn, new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- prefUtils.setBool("plus", true);
- showcaseViewBuilder.hide();
- }
- });
+// showcaseViewBuilder.setTargetView(floatingActionButton).setBackgroundOverlayColor(0xcc000000)
+// .setBgOverlayShape(ShowcaseViewBuilder.ROUND_RECT)
+// .setRoundRectCornerDirection(ShowcaseViewBuilder.TOP_RIGHT)
+// .setRoundRectOffset(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 170, getResources().getDisplayMetrics())).setRingColor(0xcc8e8e8e)
+// .setShowcaseShape(ShowcaseViewBuilder.SHAPE_CIRCLE).setRingWidth(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 18, getResources().getDisplayMetrics()))
+// .setMarkerDrawable(getResources().getDrawable(R.drawable.arrow_up), Gravity.LEFT)
+// .addCustomView(R.layout.fab_description_view, Gravity.LEFT, TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 0, getResources().getDisplayMetrics()), TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, -228, getResources()
+// .getDisplayMetrics()), TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 100, getResources().getDisplayMetrics()), -300);
+//// .addCustomView(R.layout.fab_description_view, Gravity.CENTER);
+//
+// showcaseViewBuilder.show();
+//
+// showcaseViewBuilder.setClickListenerOnView(R.id.btn, new View.OnClickListener() {
+// @Override
+// public void onClick(View v) {
+// prefUtils.setBool("plus", true);
+// showcaseViewBuilder.hide();
+// }
+// });
+ GuideView.Builder guideView=new GuideView.Builder(requireContext())
+ .setContentText("To Start Off, put down a bad habit.")
+ .setTargetView(floatingActionButton)
+ .setDismissType(DismissType.anywhere)
+ .setPointerType(PointerType.arrow)
+ .setGravity(Gravity.center)
+ .setGuideListener(new GuideListener() {
+ @Override
+ public void onDismiss(View view) {
+ prefUtils.setBool("plus", true);
+ }
+ });
+
+
+ guideView.build().show();
+
}
public void setDataInList() {
for (int i = 0; i < Helper.habitsdata.size(); i++) {
gettingtasks.add(Helper.habitsdata.get(i)[2]);
- gettingcatagory.add(Helper.habitsdata.get(i)[4]);
+ gettingcatagory.add(Helper.habitsdata.get(i)[5]);
}
- rv.setLayoutManager(new LinearLayoutManager(getActivity()));
- new ItemTouchHelper(itemtouchhelper).attachToRecyclerView(rv);
- adapter = new HabitsAdapter(getActivity(), HabitsFragment.this, db, gettingtasks, gettingcatagory);
- rv.setAdapter(adapter);
- rv.setLayoutManager(new LinearLayoutManager(getActivity()));
+ if(!Helper.habitsdata.isEmpty()){
+ rv.setLayoutManager(new LinearLayoutManager(getActivity()));
+ new ItemTouchHelper(itemtouchhelper).attachToRecyclerView(rv);
+ adapter = new HabitsAdapter(getActivity(), HabitsFragment.this, db, gettingtasks, gettingcatagory);
+ rv.setAdapter(adapter);
+ rv.setLayoutManager(new LinearLayoutManager(getActivity()));
+ }
}
ItemTouchHelper.SimpleCallback itemtouchhelper = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.RIGHT) {
diff --git a/app/src/main/java/rocks/poopjournal/todont/Fragments/HabitsLogFragment.java b/app/src/main/java/rocks/poopjournal/todont/Fragments/HabitsLogFragment.java
index fdf41b51..6764c78b 100644
--- a/app/src/main/java/rocks/poopjournal/todont/Fragments/HabitsLogFragment.java
+++ b/app/src/main/java/rocks/poopjournal/todont/Fragments/HabitsLogFragment.java
@@ -1,44 +1,20 @@
package rocks.poopjournal.todont.Fragments;
-import android.annotation.SuppressLint;
-import android.app.AlertDialog;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.database.sqlite.SQLiteException;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.AdapterView;
-import android.widget.ArrayAdapter;
-import android.widget.Button;
-import android.widget.EditText;
-import android.widget.RelativeLayout;
-import android.widget.Spinner;
-import android.widget.SpinnerAdapter;
-import android.widget.TextView;
-import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
-import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
-import com.google.android.material.bottomsheet.BottomSheetDialog;
-import com.google.android.material.floatingactionbutton.FloatingActionButton;
-
-import java.text.SimpleDateFormat;
import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.Locale;
-import rocks.poopjournal.todont.Adapters.HabitsAdapter;
import rocks.poopjournal.todont.Adapters.HabitsLogAdapter;
import rocks.poopjournal.todont.Db_Controller;
import rocks.poopjournal.todont.Helper;
-import rocks.poopjournal.todont.MainActivity;
import rocks.poopjournal.todont.R;
diff --git a/app/src/main/java/rocks/poopjournal/todont/Fragments/LabelsAdapter.java b/app/src/main/java/rocks/poopjournal/todont/Fragments/LabelsAdapter.java
index 074a4bdd..353eb53c 100644
--- a/app/src/main/java/rocks/poopjournal/todont/Fragments/LabelsAdapter.java
+++ b/app/src/main/java/rocks/poopjournal/todont/Fragments/LabelsAdapter.java
@@ -1,10 +1,6 @@
package rocks.poopjournal.todont.Fragments;
-import android.app.Activity;
-import android.app.AlertDialog;
import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -17,8 +13,6 @@
import java.util.ArrayList;
import rocks.poopjournal.todont.Db_Controller;
-import rocks.poopjournal.todont.Helper;
-import rocks.poopjournal.todont.Labels;
import rocks.poopjournal.todont.R;
@@ -36,14 +30,14 @@ public LabelsAdapter(Context con, Db_Controller db, ArrayList labels_lis
@NonNull
@Override
- public LabelsAdapter.RecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
+ public RecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
View view = inflater.inflate(R.layout.labels_recyclerview_layout, viewGroup, false);
return new RecyclerViewHolder(view);
}
@Override
- public void onBindViewHolder(@NonNull LabelsAdapter.RecyclerViewHolder holder, final int position) {
+ public void onBindViewHolder(@NonNull RecyclerViewHolder holder, final int position) {
final String dTask=labels_list.get(position);
holder.tv_label.setText(dTask.replace("''","'"));
db.getNightMode();
diff --git a/app/src/main/java/rocks/poopjournal/todont/Fragments/MonthlyFragment.java b/app/src/main/java/rocks/poopjournal/todont/Fragments/MonthlyFragment.java
index 0e00e501..88b9441e 100644
--- a/app/src/main/java/rocks/poopjournal/todont/Fragments/MonthlyFragment.java
+++ b/app/src/main/java/rocks/poopjournal/todont/Fragments/MonthlyFragment.java
@@ -1,5 +1,7 @@
package rocks.poopjournal.todont.Fragments;
+import static java.util.Calendar.getInstance;
+
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Color;
@@ -11,6 +13,7 @@
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
+
import androidx.fragment.app.Fragment;
import com.github.mikephil.charting.charts.PieChart;
@@ -30,8 +33,6 @@
import rocks.poopjournal.todont.Helper;
import rocks.poopjournal.todont.R;
-import static java.util.Calendar.getInstance;
-
public class MonthlyFragment extends Fragment {
Calendar c = getInstance();
Calendar d = getInstance();
diff --git a/app/src/main/java/rocks/poopjournal/todont/Fragments/WeeklyFragment.java b/app/src/main/java/rocks/poopjournal/todont/Fragments/WeeklyFragment.java
index 4044e432..297a464b 100644
--- a/app/src/main/java/rocks/poopjournal/todont/Fragments/WeeklyFragment.java
+++ b/app/src/main/java/rocks/poopjournal/todont/Fragments/WeeklyFragment.java
@@ -1,18 +1,18 @@
package rocks.poopjournal.todont.Fragments;
+import static java.util.Calendar.getInstance;
+
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
-import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
-import android.widget.Toast;
import androidx.fragment.app.Fragment;
@@ -33,8 +33,6 @@
import rocks.poopjournal.todont.Helper;
import rocks.poopjournal.todont.R;
-import static java.util.Calendar.getInstance;
-
public class WeeklyFragment extends Fragment {
Calendar c = getInstance();
Calendar d = getInstance();
diff --git a/app/src/main/java/rocks/poopjournal/todont/Fragments/YearlyFragment.java b/app/src/main/java/rocks/poopjournal/todont/Fragments/YearlyFragment.java
index ad6263e1..3be8a6a4 100644
--- a/app/src/main/java/rocks/poopjournal/todont/Fragments/YearlyFragment.java
+++ b/app/src/main/java/rocks/poopjournal/todont/Fragments/YearlyFragment.java
@@ -1,5 +1,7 @@
package rocks.poopjournal.todont.Fragments;
+import static java.util.Calendar.getInstance;
+
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Color;
@@ -11,13 +13,16 @@
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
+
import androidx.fragment.app.Fragment;
+
import com.github.mikephil.charting.charts.PieChart;
import com.github.mikephil.charting.components.Description;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.data.PieData;
import com.github.mikephil.charting.data.PieDataSet;
import com.github.mikephil.charting.data.PieEntry;
+
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
@@ -28,8 +33,6 @@
import rocks.poopjournal.todont.Helper;
import rocks.poopjournal.todont.R;
-import static java.util.Calendar.getInstance;
-
public class YearlyFragment extends Fragment {
Calendar c = getInstance();
Calendar d = getInstance();
diff --git a/app/src/main/java/rocks/poopjournal/todont/Fragments/menuFragment.java b/app/src/main/java/rocks/poopjournal/todont/Fragments/menuFragment.java
index 4bbe5a8e..237c716d 100644
--- a/app/src/main/java/rocks/poopjournal/todont/Fragments/menuFragment.java
+++ b/app/src/main/java/rocks/poopjournal/todont/Fragments/menuFragment.java
@@ -1,30 +1,12 @@
package rocks.poopjournal.todont.Fragments;
-import android.app.AlertDialog;
-import android.content.DialogInterface;
-import android.content.Intent;
import android.os.Bundle;
-import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
-import androidx.recyclerview.widget.ItemTouchHelper;
-import androidx.recyclerview.widget.LinearLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.Locale;
-
-import rocks.poopjournal.todont.Adapters.AvoidedAdapter;
-import rocks.poopjournal.todont.Db_Controller;
-import rocks.poopjournal.todont.Helper;
-import rocks.poopjournal.todont.MainActivity;
+
import rocks.poopjournal.todont.R;
public class menuFragment extends Fragment {
diff --git a/app/src/main/java/rocks/poopjournal/todont/Helper.java b/app/src/main/java/rocks/poopjournal/todont/Helper.java
index d057ae15..20800e2f 100644
--- a/app/src/main/java/rocks/poopjournal/todont/Helper.java
+++ b/app/src/main/java/rocks/poopjournal/todont/Helper.java
@@ -1,12 +1,10 @@
package rocks.poopjournal.todont;
-import android.content.Context;
-
import java.util.ArrayList;
public class Helper {
public static ArrayList labels_array = new ArrayList();
- public static ArrayList data=new ArrayList<>();
+ public static ArrayList avoidedData =new ArrayList<>();
public static ArrayList avoidedlogdata=new ArrayList<>();
public static ArrayList donedata=new ArrayList<>();
public static ArrayList donelogdata=new ArrayList<>();
diff --git a/app/src/main/java/rocks/poopjournal/todont/Labels.java b/app/src/main/java/rocks/poopjournal/todont/Labels.java
index 6b5df461..83694a93 100644
--- a/app/src/main/java/rocks/poopjournal/todont/Labels.java
+++ b/app/src/main/java/rocks/poopjournal/todont/Labels.java
@@ -8,38 +8,33 @@
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
-import android.util.Log;
-import android.util.TypedValue;
-import android.view.Gravity;
-import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
-import android.widget.RelativeLayout;
import android.widget.TextView;
-import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
-import androidx.appcompat.app.AppCompatDelegate;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
-import com.google.android.material.bottomsheet.BottomSheetDialog;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import java.util.ArrayList;
-import rocks.poopjournal.todont.Adapters.HabitsAdapter;
-import rocks.poopjournal.todont.Fragments.HabitsFragment;
import rocks.poopjournal.todont.Fragments.LabelsAdapter;
import rocks.poopjournal.todont.showcaseview.RippleBackground;
import rocks.poopjournal.todont.showcaseview.ShowcaseViewBuilder;
import rocks.poopjournal.todont.utils.SharedPrefUtils;
+import smartdevelop.ir.eram.showcaseviewlib.GuideView;
+import smartdevelop.ir.eram.showcaseviewlib.config.DismissType;
+import smartdevelop.ir.eram.showcaseviewlib.config.Gravity;
+import smartdevelop.ir.eram.showcaseviewlib.config.PointerType;
+import smartdevelop.ir.eram.showcaseviewlib.listener.GuideListener;
public class Labels extends AppCompatActivity {
RecyclerView rv_labels;
@@ -217,28 +212,44 @@ public void backbtnclicked(View view) {
startActivity(i);
}
private void showcaseFab() {
- showcaseViewBuilder.setTargetView(labels_floatingbutton)
- .setBackgroundOverlayColor(0xcc000000)
- .setBgOverlayShape(ShowcaseViewBuilder.ROUND_RECT)
- .setRoundRectCornerDirection(ShowcaseViewBuilder.TOP_LEFT)
- .setRoundRectOffset(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 170, getResources().getDisplayMetrics()))
- .setRingColor(0xcc8e8e8e)
- .setShowcaseShape(ShowcaseViewBuilder.SHAPE_CIRCLE)
- .setRingWidth(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, getResources().getDisplayMetrics()))
- .setMarkerDrawable(getResources().getDrawable(R.drawable.arrow_up), Gravity.LEFT)
- .addCustomView(R.layout.fab_label_description_view, Gravity.LEFT, TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 0, getResources().getDisplayMetrics()), TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, -228, getResources().getDisplayMetrics()), TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, -160, getResources().getDisplayMetrics()) ,0);
-// .addCustomView(R.layout.fab_description_view, Gravity.CENTER);
-
- showcaseViewBuilder.show();
-
- showcaseViewBuilder.setClickListenerOnView(R.id.btn, new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- prefUtils.setBool("plus1", true);
+// showcaseViewBuilder.setTargetView(labels_floatingbutton)
+// .setBackgroundOverlayColor(0xcc000000)
+// .setBgOverlayShape(ShowcaseViewBuilder.ROUND_RECT)
+// .setRoundRectCornerDirection(ShowcaseViewBuilder.TOP_LEFT)
+// .setRoundRectOffset(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 170, getResources().getDisplayMetrics()))
+// .setRingColor(0xcc8e8e8e)
+// .setShowcaseShape(ShowcaseViewBuilder.SHAPE_CIRCLE)
+// .setRingWidth(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, getResources().getDisplayMetrics()))
+// .setMarkerDrawable(getResources().getDrawable(R.drawable.arrow_up), Gravity.LEFT)
+// .addCustomView(R.layout.fab_label_description_view, Gravity.LEFT, TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 0, getResources().getDisplayMetrics()), TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, -228, getResources().getDisplayMetrics()), TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, -160, getResources().getDisplayMetrics()) ,0);
+//// .addCustomView(R.layout.fab_description_view, Gravity.CENTER);
+//
+// showcaseViewBuilder.show();
+//
+// showcaseViewBuilder.setClickListenerOnView(R.id.btn, new View.OnClickListener() {
+// @Override
+// public void onClick(View v) {
+// prefUtils.setBool("plus1", true);
+//
+// showcaseViewBuilder.hide();
+// }
+// });
+
+
+ GuideView.Builder guideView = new GuideView.Builder(Labels.this)
+ .setContentText("Add Label.")
+ .setTargetView(labels_floatingbutton)
+ .setDismissType(DismissType.anywhere)
+ .setPointerType(PointerType.arrow)
+ .setGravity(Gravity.center)
+ .setGuideListener(new GuideListener() {
+ @Override
+ public void onDismiss(View view) {
+ prefUtils.setBool("plus1", true);
+ }
+ });
+ guideView.build().show();
- showcaseViewBuilder.hide();
- }
- });
/* if (!fabHighlighter.isRippleAnimationRunning()) {
fabHighlighter.startRippleAnimation();
diff --git a/app/src/main/java/rocks/poopjournal/todont/MainActivity.kt b/app/src/main/java/rocks/poopjournal/todont/MainActivity.kt
index 1973c358..45077130 100644
--- a/app/src/main/java/rocks/poopjournal/todont/MainActivity.kt
+++ b/app/src/main/java/rocks/poopjournal/todont/MainActivity.kt
@@ -9,22 +9,28 @@ import com.google.android.material.bottomnavigation.BottomNavigationView
import rocks.poopjournal.todont.Fragments.FragmentLog
import rocks.poopjournal.todont.Fragments.FragmentToday
import rocks.poopjournal.todont.databinding.ActivityMainBinding
+import rocks.poopjournal.todont.utils.SharedPrefUtils
+import smartdevelop.ir.eram.showcaseviewlib.GuideView
+import smartdevelop.ir.eram.showcaseviewlib.config.DismissType
+import smartdevelop.ir.eram.showcaseviewlib.config.Gravity
+import smartdevelop.ir.eram.showcaseviewlib.config.PointerType
class MainActivity : AppCompatActivity() {
// Database controller instance
var db: Db_Controller? = null
lateinit var binding: ActivityMainBinding
+ var prefUtils: SharedPrefUtils?=null;
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// setContentView(R.layout.activity_main)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
// Initialize the database controller
val fragment = FragmentToday()
+ prefUtils = SharedPrefUtils(this);
db = Db_Controller(applicationContext, "", null, 2)
- // Replace the current fragment with the 'FragmentToday'
- supportFragmentManager.beginTransaction()
- .replace(R.id.container, fragment, fragment.javaClass.simpleName).commit()
+
+
// Set toolbar text to "Today"
@@ -67,17 +73,29 @@ class MainActivity : AppCompatActivity() {
}
R.id.navigation_log -> {
- // Switch to the 'FragmentLog' when "Log" is selected
- val fragment = FragmentLog()
- supportFragmentManager.beginTransaction()
- .replace(R.id.container, fragment, fragment.javaClass.simpleName)
- .commit()
- // Update the toolbar text
- binding.toolbartext.setText(R.string.log)
- // Hide the label and settings views
- binding.label.visibility = View.INVISIBLE
- binding.settings.visibility = View.INVISIBLE
- return@OnNavigationItemSelectedListener true
+ if(!(prefUtils!!.getBool(SharedPrefUtils.KEY_LOG))&&!intent.getBooleanExtra("openLog",false)){
+
+ val guideView = GuideView.Builder(this@MainActivity)
+ .setContentText("View your stats.")
+ .setTargetView(binding.navigationView.findViewById(R.id.navigation_log))
+ .setDismissType(DismissType.anywhere)
+ .setPointerType(PointerType.arrow)
+ .setGravity(Gravity.center)
+ .setGuideListener { prefUtils!!.setBool(SharedPrefUtils.KEY_LOG, true) }
+ guideView.build().show()
+ }else{
+ // Switch to the 'FragmentLog' when "Log" is selected
+ val fragment = FragmentLog()
+ supportFragmentManager.beginTransaction()
+ .replace(R.id.container, fragment, fragment.javaClass.simpleName)
+ .commit()
+ // Update the toolbar text
+ binding.toolbartext.setText(R.string.log)
+ // Hide the label and settings views
+ binding.label.visibility = View.INVISIBLE
+ binding.settings.visibility = View.INVISIBLE
+ return@OnNavigationItemSelectedListener true
+ }
}
}
false
@@ -92,6 +110,23 @@ class MainActivity : AppCompatActivity() {
startActivity(intent)
finish()
}
+ if(intent.getBooleanExtra("openLog",false)){
+// // Switch to the 'FragmentLog' when "Log" is selected
+// val frag = FragmentLog()
+// supportFragmentManager.beginTransaction()
+// .replace(R.id.container, frag, frag.javaClass.simpleName)
+// .commit()
+// // Update the toolbar text
+// binding.toolbartext.setText(R.string.log)
+// // Hide the label and settings views
+// binding.label.visibility = View.INVISIBLE
+// binding.settings.visibility = View.INVISIBLE
+ binding.navigationView.selectedItemId = R.id.navigation_log
+ }else{
+ // Replace the current fragment with the 'FragmentToday'
+ supportFragmentManager.beginTransaction()
+ .replace(R.id.container, fragment, fragment.javaClass.simpleName).commit()
+ }
}
// Handle the "Settings" action when a view is clicked
diff --git a/app/src/main/java/rocks/poopjournal/todont/NotificationReceiver.java b/app/src/main/java/rocks/poopjournal/todont/NotificationReceiver.java
new file mode 100644
index 00000000..2a52c8ed
--- /dev/null
+++ b/app/src/main/java/rocks/poopjournal/todont/NotificationReceiver.java
@@ -0,0 +1,43 @@
+package rocks.poopjournal.todont;
+
+import static androidx.core.content.ContextCompat.getSystemService;
+
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+
+import androidx.core.app.ActivityCompat;
+import androidx.core.app.NotificationCompat;
+import androidx.core.app.NotificationManagerCompat;
+
+public class NotificationReceiver extends BroadcastReceiver {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ NotificationChannel channel = new NotificationChannel("Tasks", "tasks reminder", NotificationManager.IMPORTANCE_HIGH);
+ NotificationManager manager = getSystemService(context,NotificationManager.class);
+ manager.createNotificationChannel(channel);
+ String task=intent.getStringExtra("task");
+ // Create notification when the alarm is triggered
+ Intent pendingIntent=new Intent(context,MainActivity.class);
+ pendingIntent.putExtra("openLog",true);
+ NotificationCompat.Builder builder = new NotificationCompat.Builder(context, "Tasks")
+ .setSmallIcon(R.mipmap.ic_launcher)
+ .setContentTitle("ToDon't Reminder")
+ .setContentText("Mark your ToDon't task "+task)
+ .setPriority(NotificationCompat.PRIORITY_HIGH)
+ .setAutoCancel(true)
+ .setContentIntent(PendingIntent.getActivity(context, 0, pendingIntent, PendingIntent.FLAG_IMMUTABLE)); // Pass the pending intent here
+
+
+ NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
+ if (ActivityCompat.checkSelfPermission(context, android.Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {
+ return;
+ }
+ notificationManager.notify(1, builder.build());
+ }
+}
+
diff --git a/app/src/main/java/rocks/poopjournal/todont/OnBoardingActivity.java b/app/src/main/java/rocks/poopjournal/todont/OnBoardingActivity.java
index c0212f51..167bb2ef 100644
--- a/app/src/main/java/rocks/poopjournal/todont/OnBoardingActivity.java
+++ b/app/src/main/java/rocks/poopjournal/todont/OnBoardingActivity.java
@@ -1,23 +1,22 @@
package rocks.poopjournal.todont;
-import androidx.appcompat.app.AppCompatActivity;
-import androidx.core.content.ContextCompat;
+import static java.util.Calendar.getInstance;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
-import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.content.ContextCompat;
+
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;
-import static java.util.Calendar.getInstance;
-
public class OnBoardingActivity extends AppCompatActivity {
Button btn;
SharedPreferences sharedPreferences;
diff --git a/app/src/main/java/rocks/poopjournal/todont/Settings.java b/app/src/main/java/rocks/poopjournal/todont/Settings.java
index 25416761..9eac5e72 100644
--- a/app/src/main/java/rocks/poopjournal/todont/Settings.java
+++ b/app/src/main/java/rocks/poopjournal/todont/Settings.java
@@ -1,24 +1,22 @@
package rocks.poopjournal.todont;
-import androidx.annotation.RequiresApi;
-import androidx.appcompat.app.AppCompatActivity;
-import androidx.appcompat.app.AppCompatDelegate;
-
import android.app.Dialog;
import android.app.LocaleManager;
+import android.content.ContentResolver;
import android.content.Intent;
+import android.content.pm.PackageManager;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
-import android.media.audiofx.EnvironmentalReverb;
+import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
+import android.os.Environment;
import android.os.LocaleList;
+import android.provider.DocumentsContract;
import android.util.Log;
-import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
-import android.widget.AdapterView;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.RadioButton;
@@ -26,28 +24,84 @@
import android.widget.TextView;
import android.widget.Toast;
+import androidx.activity.OnBackPressedCallback;
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.app.AppCompatDelegate;
+import androidx.core.app.ActivityCompat;
+import androidx.core.content.ContextCompat;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
+import rocks.poopjournal.todont.utils.SharedPrefUtils;
+import smartdevelop.ir.eram.showcaseviewlib.GuideView;
+import smartdevelop.ir.eram.showcaseviewlib.config.DismissType;
+import smartdevelop.ir.eram.showcaseviewlib.config.Gravity;
+import smartdevelop.ir.eram.showcaseviewlib.config.PointerType;
+import smartdevelop.ir.eram.showcaseviewlib.listener.GuideListener;
+
public class Settings extends AppCompatActivity {
Db_Controller db;
TextView modetitle;
+ private static final int REQUEST_CODE = 100;
LinearLayout language;
Spinner lang;
-
+ private SharedPrefUtils prefUtils;
View view;
+
private List localeList = Arrays.asList("cs", "da", "de", "en", "es", "it", "fr");
+ private static final int REQUEST_CODE_WRITE_EXTERNAL_STORAGE = 100;
+ private static final int REQUEST_CODE_PICK_DB_FILE = 200;
+ private Db_Helper dbHelper; // Database helper to manage DB connection
+ private static final String TAG = "DatabaseManager";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
- db = new Db_Controller(getApplicationContext(), "", null, 2);
+ prefUtils = new SharedPrefUtils(this);
+ db = new Db_Controller(getApplicationContext(), "", null, 3);
language = findViewById(R.id.language);
view = findViewById(R.id.viww);
lang = findViewById(R.id.spLanguagePicker);
+ // Initialize your DatabaseHelper (assuming it's properly configured)
+ dbHelper = new Db_Helper(this);
+
+
+ getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
+ @Override
+ public void handleOnBackPressed() {
+ Intent i = new Intent(Settings.this, MainActivity.class);
+ finishAffinity();
+ startActivity(i);
+ overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
+ }
+ });
+
+ findViewById(R.id.btnBack).setOnClickListener(new View.OnClickListener() {
+
+ @Override
+ public void onClick(View view) {
+ Intent i = new Intent(Settings.this, MainActivity.class);
+ finishAffinity();
+ startActivity(i);
+ overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
+ }
+ });
+
+
+// checkPermissionAndRestoreDatabase();
+
+
/* if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
language.setVisibility(View.VISIBLE);
view.setVisibility(View.VISIBLE);
@@ -65,9 +119,9 @@ public void onNothingSelected(AdapterView> p0) {
}
});*/
- modetitle=findViewById(R.id.modetitle);
- Log.d("heyyyymode",""+Helper.isnightmodeon);
- switch(Helper.isnightmodeon){
+ modetitle = findViewById(R.id.modetitle);
+ Log.d("heyyyymode", "" + Helper.isnightmodeon);
+ switch (Helper.isnightmodeon) {
case "followsys":
modetitle.setText(R.string.followsys);
break;
@@ -81,69 +135,87 @@ public void onNothingSelected(AdapterView> p0) {
// db.getNightMode();
}
+
public void changeMode(View view) {
- final Dialog d = new Dialog(this);
- d.requestWindowFeature(Window.FEATURE_NO_TITLE);
- d.setContentView(R.layout.dialogbox);
- d.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
- Button btndone=d.findViewById(R.id.btndone);
- RadioButton light,dark,fsys,dracula;
- light=d.findViewById(R.id.light);
- dark=d.findViewById(R.id.dark);
- dracula=d.findViewById(R.id.dracula);
- fsys=d.findViewById(R.id.followsys);
- String getmodetitle= modetitle.getText().toString();
- if(getmodetitle.equals("Follow System")){
- fsys.setChecked(true);
- }
- if(getmodetitle.equals("Light")){
- light.setChecked(true);
- }
- if(getmodetitle.equals("Dark")){
- dark.setChecked(true);
- }
- if(getmodetitle.equals("Dracula")){
- dracula.setChecked(true);
- }
- WindowManager.LayoutParams lp = d.getWindow().getAttributes();
- lp.dimAmount=0.9f;
- d.getWindow().setAttributes(lp);
+ if (prefUtils.getBool(SharedPrefUtils.KEY_APPEAR_VIEW)) {
+ GuideView.Builder guideView = new GuideView.Builder(this)
+ .setContentText("Help make \"To Don't\" better.")
+ .setTargetView(view)
+ .setDismissType(DismissType.anywhere)
+ .setPointerType(PointerType.arrow)
+ .setGravity(Gravity.center)
+ .setGuideListener(new GuideListener() {
+ @Override
+ public void onDismiss(View view) {
+ prefUtils.setBool(SharedPrefUtils.KEY_APPEAR_VIEW, true);
+ }
+ });
+ guideView.build().show();
+ } else {
+ final Dialog d = new Dialog(this);
+ d.requestWindowFeature(Window.FEATURE_NO_TITLE);
+ d.setContentView(R.layout.dialogbox);
+ d.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
+ Button btndone = d.findViewById(R.id.btndone);
+ RadioButton light, dark, fsys, dracula;
+ light = d.findViewById(R.id.light);
+ dark = d.findViewById(R.id.dark);
+ dracula = d.findViewById(R.id.dracula);
+ fsys = d.findViewById(R.id.followsys);
+ String getmodetitle = modetitle.getText().toString();
+ if (getmodetitle.equals("Follow System")) {
+ fsys.setChecked(true);
+ }
+ if (getmodetitle.equals("Light")) {
+ light.setChecked(true);
+ }
+ if (getmodetitle.equals("Dark")) {
+ dark.setChecked(true);
+ }
+ if (getmodetitle.equals("Dracula")) {
+ dracula.setChecked(true);
+ }
+ WindowManager.LayoutParams lp = d.getWindow().getAttributes();
+ lp.dimAmount = 0.9f;
+ d.getWindow().setAttributes(lp);
- btndone.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- db.getNightMode();
- Log.d("modeisbuttondone:",""+Helper.isnightmodeon);
- if(Helper.isnightmodeon.equals("followsys")){
- AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
- Log.d("checkmode","f .. "+AppCompatDelegate.getDefaultNightMode());
- Toast.makeText(getApplicationContext(), (R.string.toast_system), Toast.LENGTH_SHORT).show();
- modetitle.setText(R.string.followsys);
- d.dismiss();
- }
- if(Helper.isnightmodeon.equals("light")){
- AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
- Log.d("checkmode","l .. "+AppCompatDelegate.getDefaultNightMode());
- modetitle.setText(R.string.dark);
- Toast.makeText(getApplicationContext(), (R.string.toast_light), Toast.LENGTH_SHORT).show();
- d.dismiss();
- }
- if(Helper.isnightmodeon.equals("dark")){
- AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
- Toast.makeText(getApplicationContext(), R.string.toast_dark, Toast.LENGTH_SHORT).show();
- modetitle.setText(R.string.light);
- d.dismiss();
- }
- if(Helper.isnightmodeon.equals("Dracula")){
- AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
+ btndone.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ db.getNightMode();
+ Log.d("modeisbuttondone:", "" + Helper.isnightmodeon);
+ if (Helper.isnightmodeon.equals("followsys")) {
+ AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
+ Log.d("checkmode", "f .. " + AppCompatDelegate.getDefaultNightMode());
+ Toast.makeText(getApplicationContext(), (R.string.toast_system), Toast.LENGTH_SHORT).show();
+ modetitle.setText(R.string.followsys);
+ d.dismiss();
+ }
+ if (Helper.isnightmodeon.equals("light")) {
+ AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
+ Log.d("checkmode", "l .. " + AppCompatDelegate.getDefaultNightMode());
+ modetitle.setText(R.string.dark);
+ Toast.makeText(getApplicationContext(), (R.string.toast_light), Toast.LENGTH_SHORT).show();
+ d.dismiss();
+ }
+ if (Helper.isnightmodeon.equals("dark")) {
+ AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
+ Toast.makeText(getApplicationContext(), R.string.toast_dark, Toast.LENGTH_SHORT).show();
+ modetitle.setText(R.string.light);
+ d.dismiss();
+ }
+ if (Helper.isnightmodeon.equals("Dracula")) {
+ AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
// setTheme(R.style.DraculaTheme);
- Toast.makeText(getApplicationContext(), R.string.toast_dark, Toast.LENGTH_SHORT).show();
- modetitle.setText(R.string.light);
- d.dismiss();
+ Toast.makeText(getApplicationContext(), R.string.toast_dark, Toast.LENGTH_SHORT).show();
+ modetitle.setText(R.string.light);
+ d.dismiss();
+ }
}
- }
- });d.show();
+ });
+ d.show();
+ }
// db.getNightMode();
// Log.d("qqq","infunc : "+Helper.isnightmodeon );
@@ -179,46 +251,59 @@ public void onRadioButtonClicked(View view) {
// Is the button now checked?
boolean checked = ((RadioButton) view).isChecked();
// Check which radio button was clicked
- switch(view.getId()) {
+ switch (view.getId()) {
case R.id.followsys:
- if (checked)
- {
+ if (checked) {
modetitle.setText("Follow System");
db.update_nightmode("followsys");
- Log.d("modeisf:",""+Helper.isnightmodeon);
+ Log.d("modeisf:", "" + Helper.isnightmodeon);
break;
}
case R.id.light:
- if (checked)
- {
+ if (checked) {
modetitle.setText("Light");
db.update_nightmode("light");
- Log.d("modeisl:",""+Helper.isnightmodeon);
+ Log.d("modeisl:", "" + Helper.isnightmodeon);
break;
}
case R.id.dark:
- if (checked)
- {
+ if (checked) {
modetitle.setText("Dark");
db.update_nightmode("dark");
- Log.d("modeisd:",""+Helper.isnightmodeon);
+ Log.d("modeisd:", "" + Helper.isnightmodeon);
break;
}
case R.id.dracula:
- if (checked)
- {
+ if (checked) {
modetitle.setText("Dracula");
db.update_nightmode("Dracula");
- Log.d("modei sd:",""+Helper.isnightmodeon);
+ Log.d("modei sd:", "" + Helper.isnightmodeon);
break;
}
}
}
+
public void backbtn(View view) {
- Intent i = new Intent(Settings.this, MainActivity.class);
+ /* Intent i = new Intent(Settings.this, MainActivity.class);
finishAffinity();
startActivity(i);
- overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
+ overridePendingTransition(R.anim.fade_in, R.anim.fade_out);*/
+
+/*
+ // Check if the write permission is granted
+ if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
+ != PackageManager.PERMISSION_GRANTED) {
+
+ // Request permission
+ ActivityCompat.requestPermissions(this,
+ new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
+ REQUEST_CODE_WRITE_EXTERNAL_STORAGE);
+ } else {
+ // Permission already granted, proceed with copying the database
+ copyDatabase();
+ }*/
+
+ copyDatabase();
}
@@ -229,16 +314,147 @@ public void aboutus(View view) {
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
}
- @Override
- public void onBackPressed() {
- Intent i = new Intent(Settings.this, MainActivity.class);
- finishAffinity();
- startActivity(i);
- overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
+
+ public void restore(View view) {
+
+ openFilePicker();
}
+
@RequiresApi(api = Build.VERSION_CODES.TIRAMISU)
private void setAppLocale(Locale locale) {
- LocaleManager localeManager = getSystemService(LocaleManager.class);
+ LocaleManager localeManager = (LocaleManager) getSystemService(String.valueOf(LocaleManager.class));
localeManager.setApplicationLocales(new LocaleList(locale));
}
+
+ @Override
+ public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+
+ if (requestCode == REQUEST_CODE_WRITE_EXTERNAL_STORAGE) {
+ if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+ // Permission granted, copy the database
+ copyDatabase();
+ } else {
+ // Permission denied, show a message
+ Toast.makeText(this, "Permission denied to write to external storage", Toast.LENGTH_LONG).show();
+ }
+ }
+ if (requestCode == REQUEST_CODE) {
+ if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+ // Permission granted, restore the database
+ Log.e(TAG, "granted");
+
+ } else {
+ // Permission denied, handle accordingly
+ Log.e(TAG, "Permission denied to read external storage");
+ // Check if the user denied the permission permanently
+ if (!ActivityCompat.shouldShowRequestPermissionRationale(this, "android.permission.WRITE_EXTERNAL_STORAGE")) {
+ // Permission denied permanently, inform the user and direct them to settings
+ showPermissionDeniedDialog();
+ } else {
+ // Permission denied but not permanently
+ Toast.makeText(this, "Permission is required to restore the database.", Toast.LENGTH_SHORT).show();
+ }
+ }
+ }
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+
+ if (requestCode == REQUEST_CODE_PICK_DB_FILE && resultCode == RESULT_OK && data != null) {
+ Uri fileUri = data.getData();
+ if (fileUri != null) {
+ // Close the database before restoring
+ dbHelper.closeDatabase();
+
+ // Restore the selected file to the app's database directory
+ restoreDatabase(fileUri);
+ dbHelper = new Db_Helper(this);
+ // Reopen the database after restoring
+ dbHelper.getWritableDatabase(); // This reopens the DB connection
+ }
+ }
+ }
+
+
+ private void showPermissionDeniedDialog() {
+ new AlertDialog.Builder(this)
+ .setTitle("Permission Required")
+ .setMessage("This app requires access to your external storage to restore the database. Please enable this permission in the app settings.")
+ .setPositiveButton("Open Settings", (dialog, which) -> {
+ Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
+ Uri uri = Uri.fromParts("package", getPackageName(), null);
+ intent.setData(uri);
+ startActivity(intent);
+ })
+ .setNegativeButton("Cancel", (dialog, which) -> dialog.dismiss())
+ .show();
+ }
+
+
+ // Method to copy the selected file back to the app's database directory
+ private void restoreDatabase(Uri fileUri) {
+ ContentResolver contentResolver = getContentResolver();
+ dbHelper.close();
+ dbHelper = null;
+ DatabaseManager databaseManager = new DatabaseManager(this);
+ databaseManager.deleteCurrentDatabase();
+ try (InputStream inputStream = contentResolver.openInputStream(fileUri)) {
+
+ // Get the app's internal database directory
+ File dbFile = getDatabasePath("todont.sqlite"); // Replace with actual DB name
+
+ // If the file doesn't exist, create it
+ if (!dbFile.exists()) {
+ dbFile.getParentFile().mkdirs();
+ dbFile.createNewFile();
+ }
+
+ // Copy the selected file to the app's database directory
+ try (OutputStream outputStream = new FileOutputStream(dbFile)) {
+ byte[] buffer = new byte[1024];
+ int length;
+ while ((length = inputStream.read(buffer)) > 0) {
+ outputStream.write(buffer, 0, length);
+ }
+ /* File backupFile = new File(this.getFilesDir(), "todont.sqlite"); // Ensure this file exists before using
+ dbHelper.initializeDatabase(backupFile);*/
+
+ Toast.makeText(this, "Database restored successfully", Toast.LENGTH_LONG).show();
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ Toast.makeText(this, "Failed to restore database: " + e.getMessage(), Toast.LENGTH_LONG).show();
+ }
+ }
+
+ private void checkPermissionAndRestoreDatabase() {
+ if (ContextCompat.checkSelfPermission(this, "android.permission.WRITE_EXTERNAL_STORAGE")
+ != PackageManager.PERMISSION_GRANTED) {
+ // Request permission
+ ActivityCompat.requestPermissions(this, new String[]{"android.permission.WRITE_EXTERNAL_STORAGE"}, REQUEST_CODE);
+ }
+ }
+
+ // Method to copy the database
+ private void copyDatabase() {
+ DatabaseUtils.copyDatabaseToDownloads(this, "todont.sqlite"); // Replace with actual DB name
+ }
+
+
+ // Method to open the file picker and allow the user to select the database file
+ private void openFilePicker() {
+ Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
+ intent.addCategory(Intent.CATEGORY_OPENABLE);
+ intent.setType("application/octet-stream"); // MIME type for .db files
+
+ // Optional: Specify a specific folder (App's folder in Downloads)
+ Uri downloadsFolderUri = Uri.parse(String.valueOf(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)));
+ intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, downloadsFolderUri);
+
+ startActivityForResult(intent, REQUEST_CODE_PICK_DB_FILE);
+ }
}
diff --git a/app/src/main/java/rocks/poopjournal/todont/Splash_Screen.java b/app/src/main/java/rocks/poopjournal/todont/Splash_Screen.java
index 887cda4f..2188f25c 100644
--- a/app/src/main/java/rocks/poopjournal/todont/Splash_Screen.java
+++ b/app/src/main/java/rocks/poopjournal/todont/Splash_Screen.java
@@ -5,7 +5,6 @@
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
-import android.util.Log;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatDelegate;
diff --git a/app/src/main/java/rocks/poopjournal/todont/utils/Constant.java b/app/src/main/java/rocks/poopjournal/todont/utils/Constant.java
index 1089de42..fba0bd2d 100644
--- a/app/src/main/java/rocks/poopjournal/todont/utils/Constant.java
+++ b/app/src/main/java/rocks/poopjournal/todont/utils/Constant.java
@@ -1,7 +1,6 @@
package rocks.poopjournal.todont.utils;
-import java.util.ArrayList;
public class Constant {
// ********************************** Main Shared Pref Constants ********************************
diff --git a/app/src/main/java/rocks/poopjournal/todont/utils/SharedPrefUtils.java b/app/src/main/java/rocks/poopjournal/todont/utils/SharedPrefUtils.java
index 02dd980a..452b59dc 100644
--- a/app/src/main/java/rocks/poopjournal/todont/utils/SharedPrefUtils.java
+++ b/app/src/main/java/rocks/poopjournal/todont/utils/SharedPrefUtils.java
@@ -14,9 +14,16 @@
public class SharedPrefUtils {
public static final String MY_PREFS_NAME = "MiApp";
+ public static final String KEY_ADD_OR_AVOIDED="AddOrAvoided";
+ public static final String KEY_LOG="Log";
+ public static final String KEY_CONTRIBUTION_VIEW="CONTRIBUTION_VIEW";
+ public static final String KEY_APPEAR_VIEW="APPEAR_VIEW";
+
private final Context activity;
+
+
public SharedPrefUtils(Context activity) {
this.activity = activity;
}
@@ -92,4 +99,7 @@ public Map getMap(String key){
return outputMap;
}
+
+
+
}
diff --git a/app/src/main/java/rocks/poopjournal/todont/utils/Utils.java b/app/src/main/java/rocks/poopjournal/todont/utils/Utils.java
index 27518a29..f36bbf4d 100644
--- a/app/src/main/java/rocks/poopjournal/todont/utils/Utils.java
+++ b/app/src/main/java/rocks/poopjournal/todont/utils/Utils.java
@@ -1,15 +1,16 @@
package rocks.poopjournal.todont.utils;
+
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;
-import androidx.appcompat.content.res.AppCompatResources;
+import androidx.appcompat.content.res.AppCompatResources;
import androidx.core.graphics.drawable.DrawableCompat;
+
import java.io.File;
import java.text.ParseException;
import java.text.SimpleDateFormat;
-
import java.util.Date;
import java.util.Locale;
diff --git a/app/src/main/res/drawable/bell.xml b/app/src/main/res/drawable/bell.xml
new file mode 100644
index 00000000..6f70868f
--- /dev/null
+++ b/app/src/main/res/drawable/bell.xml
@@ -0,0 +1,20 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/bottom_sheet.xml b/app/src/main/res/drawable/bottom_sheet.xml
index 03d5ecf8..6dd8d6c0 100644
--- a/app/src/main/res/drawable/bottom_sheet.xml
+++ b/app/src/main/res/drawable/bottom_sheet.xml
@@ -6,5 +6,4 @@
android:topLeftRadius="20dp"
android:topRightRadius="20dp"
/>
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/dis.xml b/app/src/main/res/drawable/dis.xml
new file mode 100644
index 00000000..a71c3712
--- /dev/null
+++ b/app/src/main/res/drawable/dis.xml
@@ -0,0 +1,13 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml
index 942ec086..d07eccae 100644
--- a/app/src/main/res/layout/activity_about.xml
+++ b/app/src/main/res/layout/activity_about.xml
@@ -550,120 +550,128 @@
-
-
-
+
+
+ android:text="@string/contribute"
+ android:textColor="@color/colorPrimary"
+ android:textSize="18sp" />
-
+
-
-
+
+
+
-
+
+
-
+
-
+
+
+
-
-
+
+
-
+ android:layout_marginTop="13dp"
+ android:background="@color/innerfragmentsColor2" />
-
+
+
+
-
+
+
+
-
-
+
+ android:layout_height="wrap_content"
+ android:orientation="horizontal">
+
+ android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi arcu libero, congue id rhoncus vel, ultricies ac diam."
+ android:textColor="@color/textcolor"
+ android:textSize="14sp" />
-
+ android:background="@android:color/transparent"
+ android:src="@drawable/frame__6_" />
+
+
+
+
+
+
+
+
+
diff --git a/build.gradle b/build.gradle
index c9f3be27..74fba8bd 100644
--- a/build.gradle
+++ b/build.gradle
@@ -5,6 +5,7 @@ buildscript {
jcenter()
google()
mavenCentral()
+
}
dependencies {
classpath 'com.android.tools.build:gradle:8.5.0'