|
| 1 | +# EdiMyDar ToDO android app with java |
| 2 | +#### Video Demo: <URL [HERE](https://youtu.be/mfIrvP7T0NM)> |
| 3 | +#### Description (Explainig what each of the files you wrote for the project contains and does): |
| 4 | +##### I.**package com.example.edimydar** : |
| 5 | +###### 1.**Activites**: |
| 6 | +###### 1.1.Home Activity: |
| 7 | +- **Purpose**:The first activity shown to the user. |
| 8 | +- **Functionality**: |
| 9 | + - A GetStarted button, that has an on-click listener. |
| 10 | + - this button triggers an intent (that launches another activity named Register which is the Activity responsible for Registring users). |
| 11 | + |
| 12 | +###### 1.2.HomePage_MAIN: |
| 13 | +- **Purpose**: The main home page activity has a navigation drawer and a bottom navigation bar. Handles switching between fragments. |
| 14 | +- **Functionality**: |
| 15 | + - *(ACCESS ONLY BY AUTHENTICATED USERS)* it contains the 3 main fragments |
| 16 | + - My_Day |
| 17 | + - Tasks |
| 18 | + - AI Help |
| 19 | + - Uses ViewBinding. |
| 20 | + - Listener on nav View that manages the logic on how to navigate between fragments. |
| 21 | + - it uses a switch that replaces the current frame. |
| 22 | + - it checks and requests notification permission if the user accepts it guides the user to app settings to enable the permission. |
| 23 | + - it also update FireBase notification stat respectively. |
| 24 | + - By default, it replaces the current fragment with the my_day fragment; |
| 25 | + |
| 26 | + |
| 27 | + |
| 28 | +###### 1.3.Login: |
| 29 | +- **Purpose**: Handles user login. Validates credentials and navigates to the HomePage_MAIN activity upon successful login. |
| 30 | +- **Functionality**: |
| 31 | + - it contains 3 button listeners: |
| 32 | + - on login |
| 33 | + - on forgotPassword |
| 34 | + - on sign-up |
| 35 | + - validates the inputs (empty, valid email format, valid password format,...) |
| 36 | + - login the user using fireBase. |
| 37 | + - if the user doesn't exist handle fireBase exceptions |
| 38 | + - also checks if the user is already logged in if so, redirect the user to The Main_Page |
| 39 | + |
| 40 | +###### 1.4.Register: |
| 41 | +- **Purpose**: Handles user registration. Validates inputs and saves user data to the database. |
| 42 | +- **Functionality**: |
| 43 | + - it contains 2 button listens: |
| 44 | + - on Sign In |
| 45 | + - on Register |
| 46 | + - Validate fields :(empty, valid email and password format, and matching password and Confirmation password) |
| 47 | + - register the user in FireBase. |
| 48 | + - handling FireBase exceptions if the registration fails: |
| 49 | + - storing data in FireStore |
| 50 | + |
| 51 | + |
| 52 | +###### 1.5.UsrProfileِActivity: |
| 53 | +- **Purpose**: Manages user profile. Allows users to view and edit their profile details. |
| 54 | +- **Functionality**: |
| 55 | + - it uses an image picker to pick the user in |
| 56 | + - img view listener to change the user profile: |
| 57 | + - Storing, loading this image as a Base64 in/from FireStore using the helper class Named: *ImageUtil* |
| 58 | + |
| 59 | + - using Glide to load this image into the image view; |
| 60 | + - loads user data from fireStore. |
| 61 | + - another listener on the update profile button that updates the user info in FireBase |
| 62 | + - listener on notification switch that requests the permissions and updates the notif stat in fireStore |
| 63 | + - Re-authentification dialog if the user wants to change email |
| 64 | + - log out the user |
| 65 | + |
| 66 | + |
| 67 | +###### 1.6 Other classes: |
| 68 | +- **ForgotPWD**: |
| 69 | + - **Purpose**: Handles forogt password, send password reset link to the user email. |
| 70 | + - **Functionality**: |
| 71 | + - On Click listener on submit button. |
| 72 | + - checks email format. |
| 73 | + - if email exists send the user to success Activity and send them reset password link (FireBase handles reseting password) |
| 74 | + - else redirect the usr to failure Activity. |
| 75 | + - validate email format before proceding. |
| 76 | + - ensure input is not empty. |
| 77 | + |
| 78 | +- **ForgotPWD_R_SUCCESS**: shows to the users steps how to reset the password, and password format, and also have an on click listener on return to login button |
| 79 | + |
| 80 | +- **ForgotPWD_R_FAILURE**: shows to the users that the operation failed and give them the option to return to login using and on click listener on a button |
| 81 | + |
| 82 | + |
| 83 | + |
| 84 | + |
| 85 | + |
| 86 | + |
| 87 | +###### 2.**Fragments**: |
| 88 | + |
| 89 | +###### 2.1 myDayFragment: |
| 90 | +- **Purpose**: Display and manage user Todays Tasks. |
| 91 | +- **Functionality**: |
| 92 | + - fetchUserTasks from FireStore. |
| 93 | + - load Profile picture from fireStore. |
| 94 | + - onClickListener on the user-profile Block. |
| 95 | + - set greeting depends on the current time. |
| 96 | + - get current user data. |
| 97 | + - Handling recycler view that contains the tasks |
| 98 | + - show a dialog to add Today's tasks to FireStore and local data (custom dialog). |
| 99 | + - this dialog is triggered when clicking on + image view. |
| 100 | + - Going to the Register page if the user is not logged in. |
| 101 | + - Failure on loading user data results in logout except not user signed in results redirection to Register page. |
| 102 | + |
| 103 | +###### 2.2 TaskFragment: |
| 104 | +- **Purpose**: Manage general tasks, allow users to add/remove tasks and schedule notification(reminders) about tasks. |
| 105 | +- **Functionality**: |
| 106 | + - show a dialog to add a Normal Task to FireStore and local data (custom dialog). |
| 107 | + - this dialog is triggered when clicking on + image View. |
| 108 | + - schedule notification based on time selected(Date and Time pickers in the custom dialog) |
| 109 | + - Handels alarm permission (check, request) |
| 110 | + - send notification |
| 111 | + - Handels Recycler View(tasks elements) |
| 112 | + - fetchUserData :(nbr of tasks, username,tasks) from fireStore |
| 113 | + - UpdatesTasks counter |
| 114 | + - Adding tasks cases : |
| 115 | + - Default: (no date nor time) : add it to Today Tasks without time |
| 116 | + - Today without time - > no notif |
| 117 | + - Today with time -> date: today | time: time specified |
| 118 | + - Date only -> date:Date specified | time:00.00 |
| 119 | + - Time only-> date:today | time :time specified |
| 120 | + - Both exist -> date:Date specified | time: time specified |
| 121 | + - No Date no Time -> date is today no notif |
| 122 | + |
| 123 | + |
| 124 | +###### 2.3 Ai Help |
| 125 | +- **Purpose**:implements gemini api to help users to manage their tasks. |
| 126 | +- **Functionality**: |
| 127 | + - REST API implmentations using OkHttp. |
| 128 | + - Recyler View to display chat messages (From Bot and user also) |
| 129 | + - on click listener to interact with the api |
| 130 | + |
| 131 | + |
| 132 | + |
| 133 | + |
| 134 | + |
| 135 | + |
| 136 | + |
| 137 | + |
| 138 | + |
| 139 | +###### 3.**Adapters**: |
| 140 | + |
| 141 | +###### 3.1 MessageAdapter: |
| 142 | +- **Purpose**: Adapter for chat messages |
| 143 | +- **Functionality**: |
| 144 | + - binds chat data to the Recycler View |
| 145 | + - implements the logic for every element in the recycler view |
| 146 | + - if the msg is sent by the user: make rightChat visible and leftChat Gone and set the user msg with the sent msg; |
| 147 | + - else make rightChat Gone and leftChat Visible and set the set the ai response to the bot msg; |
| 148 | + |
| 149 | +###### 3.2 TaskRecylerViewAdapter: |
| 150 | +- **Purpose**: Adapter for Todays Tasks recycler view |
| 151 | +- **Functionality**: |
| 152 | + - binds tasks data to the Recycler View. |
| 153 | + - set the listener for checkBox. |
| 154 | + - if it's checked Delete the task, notify the adapter and updates fireStore data, and local data |
| 155 | + |
| 156 | +###### 3.3 normalTaskRecycler_V_Adapter: |
| 157 | +- **Purpose**: Adapter for Normal Tasks recycler view. |
| 158 | +- **Functionality**: |
| 159 | + - create an interface that allows the Tasks fragment to updates the tasks counter when items are deleted |
| 160 | + - binds normal tasks data to the recycler view. |
| 161 | + - set the listener for checkBox. |
| 162 | + - if it's checked Delete the task, notify the adapter and updates fireStore data, and local data. |
| 163 | + |
| 164 | + |
| 165 | + |
| 166 | +###### 4.**Models**: |
| 167 | + |
| 168 | +###### 4.1 Message: |
| 169 | +- Represents messages with attributes like: |
| 170 | + - String msg. |
| 171 | + - String sentByWho. |
| 172 | + - 2 final attributes : |
| 173 | + - String SENT_BY_USR = "usr" |
| 174 | + - String SENT_BY_BOT= "bot" |
| 175 | + |
| 176 | + |
| 177 | +###### 4.2 DailyTask: |
| 178 | +- Represents Todays Tasks with attributes like: |
| 179 | + - String title. |
| 180 | + - boolean checked. |
| 181 | + |
| 182 | +###### 4.3 NormalTask(Extends DailyTask): |
| 183 | +- Represents Normal Tasks with attributes like: |
| 184 | + - String title. |
| 185 | + - boolean checked. |
| 186 | + |
| 187 | + - String dueDate. |
| 188 | + - String dueTime. |
| 189 | + |
| 190 | + |
| 191 | +###### 5.**Utils**: |
| 192 | + |
| 193 | +###### 5.1 ImageUtils: |
| 194 | +- Helps convertion from Base64 to String and vis-versa |
| 195 | + |
| 196 | + |
| 197 | +###### 5.2 NotificationReceiver: |
| 198 | +- BroadCast Receiver for handling tasks notifications, triggers notifications at specified times.(scheduled times ) |
| 199 | + |
| 200 | + |
| 201 | + |
| 202 | +###### 5. **Resources**: |
| 203 | +- **Drawable**: containes : |
| 204 | + - icons. |
| 205 | + - images. |
| 206 | + - custom shapes. |
| 207 | + - cutom components like (Custom checkBox) |
| 208 | + |
| 209 | +- **Layout**: containes (XML): |
| 210 | + - custom xml layout for every Activity/Fragment. |
| 211 | + - custom dialog. |
| 212 | + - custom recycler view. |
| 213 | + - custom chat item. |
| 214 | + |
| 215 | +- **Menu**: Containes custom menu nav bar (XML) |
| 216 | + |
| 217 | +- **MipMap**: Containes app icon. |
| 218 | + |
| 219 | +- **Values**: Containes: |
| 220 | + - Colors, dimentions,strings,themes. |
| 221 | + - colors and diments and string added to avoid hardcoding stuff. |
| 222 | + - themes containes: |
| 223 | + - Custom Active Indicator. |
| 224 | + - Custom Button Style. |
| 225 | + - Custom CheckBox Style. |
| 226 | + |
| 227 | + - 3 themes : |
| 228 | + - app with action Bar. |
| 229 | + - app without action Bar. |
| 230 | + - Base theme |
| 231 | + |
| 232 | + |
| 233 | + |
| 234 | + |
| 235 | +###### 6. **Local Properties** |
| 236 | +- Containes api key |
| 237 | + |
| 238 | +###### 7. **Dependecies**: |
| 239 | +- google secrets gradle plugin. |
| 240 | +- OkHttp |
| 241 | +- ImagePicker |
| 242 | +- Glide |
| 243 | +- FireBase: |
| 244 | + - auth |
| 245 | + - FireStore |
| 246 | + - Analysis |
| 247 | + - BOM |
| 248 | + |
| 249 | +###### 8. **Manifest permissions**: |
| 250 | +- android.permission.INTERNET |
| 251 | +- android.permission.POST_NOTIFICATIONS |
| 252 | +- android.permission.SCHEDULE_EXACT_ALARM |
0 commit comments