Advertisement
Mausica

JavaAndXmlFiles

Apr 6th, 2024
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.82 KB | None | 0 0
  1. // CreateTaskBottomSheetFragment.java
  2.  
  3. // Note that the dialog that I want to create is inside an fragment
  4.  
  5.  
  6. package com.learn.simplify.activities;
  7.  
  8. import android.annotation.SuppressLint;
  9. import android.app.DatePickerDialog;
  10. import android.app.Dialog;
  11. import android.app.TimePickerDialog;
  12. import android.os.AsyncTask;
  13. import android.os.Build;
  14. import android.view.MotionEvent;
  15. import android.view.View;
  16. import android.widget.Button;
  17. import android.widget.EditText;
  18. import android.widget.Toast;
  19.  
  20. import androidx.annotation.NonNull;
  21. import androidx.annotation.RequiresApi;
  22.  
  23. import com.google.android.material.bottomsheet.BottomSheetBehavior;
  24. import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
  25. import com.learn.simplify.R;
  26. import com.learn.simplify.database.DatabaseClient;
  27. import com.learn.simplify.model.Task;
  28. import com.learn.simplify.ui.home.HomeFragment4;
  29.  
  30. import java.util.Calendar;
  31. import java.util.GregorianCalendar;
  32.  
  33.  
  34. public class CreateTaskBottomSheetFragment extends BottomSheetDialogFragment {
  35.  
  36. EditText addTaskTitle;
  37. EditText addTaskDescription;
  38. EditText taskDate;
  39. EditText taskTime;
  40. Button addTask;
  41. int taskId;
  42. boolean isEdit;
  43. Task task;
  44. int mYear, mMonth, mDay;
  45. int mHour, mMinute;
  46. setRefreshListener setRefreshListener;
  47. TimePickerDialog timePickerDialog;
  48. DatePickerDialog datePickerDialog;
  49. Home activity;
  50. public static int count = 0;
  51.  
  52. private BottomSheetBehavior.BottomSheetCallback mBottomSheetBehaviorCallback = new BottomSheetBehavior.BottomSheetCallback() {
  53.  
  54. @Override
  55. public void onStateChanged(@NonNull View bottomSheet, int newState) {
  56. if (newState == BottomSheetBehavior.STATE_HIDDEN) {
  57. dismiss();
  58. }
  59. }
  60.  
  61. @Override
  62. public void onSlide(@NonNull View bottomSheet, float slideOffset) {
  63. }
  64. };
  65.  
  66. public void setTaskId(int taskId, boolean isEdit, HomeFragment4 setRefreshListener, Home activity) {
  67. this.taskId = taskId;
  68. this.isEdit = isEdit;
  69. this.activity = activity;
  70. this.setRefreshListener = (CreateTaskBottomSheetFragment.setRefreshListener) setRefreshListener;
  71. }
  72.  
  73. @RequiresApi(api = Build.VERSION_CODES.O)
  74. @SuppressLint({"RestrictedApi", "ClickableViewAccessibility"})
  75. @Override
  76. public void setupDialog(Dialog dialog, int style) {
  77. super.setupDialog(dialog, style);
  78. View contentView = View.inflate(getContext(), R.layout.fragment_create_task, null);
  79.  
  80. addTask = contentView.findViewById(R.id.buttonAdd);
  81. taskTime = contentView.findViewById(R.id.taskTime);
  82. taskDate = contentView.findViewById(R.id.taskDate);
  83. addTaskDescription = contentView.findViewById(R.id.inputTaskDescription);
  84. addTaskTitle = contentView.findViewById(R.id.inputTaskTitle);
  85.  
  86. dialog.setContentView(contentView);
  87.  
  88. addTask.setOnClickListener(view -> {
  89. if(validateFields())createTask();
  90. });
  91. if (isEdit) {
  92. showTaskFromId();
  93. }
  94.  
  95. taskDate.setOnTouchListener((view, motionEvent) -> {
  96. if(motionEvent.getAction() == MotionEvent.ACTION_UP) {
  97. final Calendar c = Calendar.getInstance();
  98. mYear = c.get(Calendar.YEAR);
  99. mMonth = c.get(Calendar.MONTH);
  100. mDay = c.get(Calendar.DAY_OF_MONTH);
  101. datePickerDialog = new DatePickerDialog(getActivity(), R.style.DatePickerDark,(view1, year, monthOfYear, dayOfMonth) -> {
  102. taskDate.setText(dayOfMonth + "-" + (monthOfYear + 1) + "-" + year);
  103. datePickerDialog.dismiss();
  104. }, mYear, mMonth, mDay);
  105. datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);
  106.  
  107. datePickerDialog.show();
  108. }
  109. return true;
  110. });
  111.  
  112. taskTime.setOnTouchListener((view, motionEvent) -> {
  113. if(motionEvent.getAction() == MotionEvent.ACTION_UP) {
  114. // Get Current Time
  115. final Calendar c = Calendar.getInstance();
  116. mHour = c.get(Calendar.HOUR_OF_DAY);
  117. mMinute = c.get(Calendar.MINUTE);
  118.  
  119. // Launch Time Picker Dialog
  120. timePickerDialog = new TimePickerDialog(getActivity(), R.style.TimePickerDark, (view12, hourOfDay, minute) -> {
  121. taskTime.setText(hourOfDay + ":" + minute);
  122. timePickerDialog.dismiss();
  123. }, mHour, mMinute, false);
  124.  
  125. timePickerDialog.show();
  126. }
  127. return true;
  128. });
  129. }
  130.  
  131. public boolean validateFields() {
  132. if(addTaskTitle.getText().toString().equalsIgnoreCase("")) {
  133. Toast.makeText(activity, "Please enter a valid title", Toast.LENGTH_SHORT).show();
  134. return false;
  135. }
  136. else if(addTaskDescription.getText().toString().equalsIgnoreCase("")) {
  137. Toast.makeText(activity, "Please enter a valid description", Toast.LENGTH_SHORT).show();
  138. return false;
  139. }
  140. else if(taskDate.getText().toString().equalsIgnoreCase("")) {
  141. Toast.makeText(activity, "Please enter date", Toast.LENGTH_SHORT).show();
  142. return false;
  143. }
  144. else if(taskTime.getText().toString().equalsIgnoreCase("")) {
  145. Toast.makeText(activity, "Please enter time", Toast.LENGTH_SHORT).show();
  146. return false;
  147. }
  148. else {
  149. return true;
  150. }
  151. }
  152.  
  153. @Override
  154. public void onDestroyView() {
  155. super.onDestroyView();
  156. }
  157.  
  158. private void createTask() {
  159. class saveTaskInBackend extends AsyncTask<Void, Void, Void> {
  160. @SuppressLint("WrongThread")
  161. @Override
  162. protected Void doInBackground(Void... voids) {
  163. Task createTask = new Task();
  164. createTask.setTaskTitle(addTaskTitle.getText().toString());
  165. createTask.setTaskDescrption(addTaskDescription.getText().toString());
  166. createTask.setDate(taskDate.getText().toString());
  167. createTask.setLastAlarm(taskTime.getText().toString());
  168.  
  169. if (!isEdit)
  170. DatabaseClient.getInstance(getActivity()).getAppDatabase()
  171. .dataBaseAction()
  172. .insertDataIntoTaskList(createTask);
  173. else
  174. DatabaseClient.getInstance(getActivity()).getAppDatabase()
  175. .dataBaseAction()
  176. .updateAnExistingRow(taskId, addTaskTitle.getText().toString(),
  177. addTaskDescription.getText().toString(),
  178. taskDate.getText().toString(),
  179. taskTime.getText().toString());
  180.  
  181. return null;
  182. }
  183.  
  184. @Override
  185. protected void onPostExecute(Void aVoid) {
  186. super.onPostExecute(aVoid);
  187. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
  188. createAnAlarm();
  189. }
  190. setRefreshListener.refresh();
  191. Toast.makeText(getActivity(), "Your event is been added", Toast.LENGTH_SHORT).show();
  192. dismiss();
  193.  
  194. }
  195. }
  196. saveTaskInBackend st = new saveTaskInBackend();
  197. st.execute();
  198. }
  199.  
  200. @RequiresApi(api = Build.VERSION_CODES.M)
  201. public void createAnAlarm() {
  202. try {
  203. String[] items1 = taskDate.getText().toString().split("-");
  204. String dd = items1[0];
  205. String month = items1[1];
  206. String year = items1[2];
  207.  
  208. String[] itemTime = taskTime.getText().toString().split(":");
  209. String hour = itemTime[0];
  210. String min = itemTime[1];
  211.  
  212. Calendar cur_cal = new GregorianCalendar();
  213. cur_cal.setTimeInMillis(System.currentTimeMillis());
  214.  
  215. Calendar cal = new GregorianCalendar();
  216. cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(hour));
  217. cal.set(Calendar.MINUTE, Integer.parseInt(min));
  218. cal.set(Calendar.SECOND, 0);
  219. cal.set(Calendar.MILLISECOND, 0);
  220. cal.set(Calendar.DATE, Integer.parseInt(dd));
  221.  
  222.  
  223. } catch (Exception e) {
  224. e.printStackTrace();
  225. }
  226. }
  227.  
  228. private void showTaskFromId() {
  229. class showTaskFromId extends AsyncTask<Void, Void, Void> {
  230. @SuppressLint("WrongThread")
  231. @Override
  232. protected Void doInBackground(Void... voids) {
  233. task = DatabaseClient.getInstance(getActivity()).getAppDatabase()
  234. .dataBaseAction().selectDataFromAnId(taskId);
  235. return null;
  236. }
  237.  
  238. @Override
  239. protected void onPostExecute(Void aVoid) {
  240. super.onPostExecute(aVoid);
  241. setDataInUI();
  242. }
  243. }
  244. showTaskFromId st = new showTaskFromId();
  245. st.execute();
  246. }
  247.  
  248. private void setDataInUI() {
  249. addTaskTitle.setText(task.getTaskTitle());
  250. addTaskDescription.setText(task.getTaskDescrption());
  251. taskDate.setText(task.getDate());
  252. taskTime.setText(task.getLastAlarm());
  253. }
  254.  
  255. public interface setRefreshListener {
  256. void refresh();
  257. }
  258. }
  259.  
  260. // style.xml
  261.  
  262. <resources xmlns:tools="http://schemas.android.com/tools">
  263. <!-- Base application theme. -->
  264. <style name="Base.Theme.Simplify" parent="Theme.AppCompat.DayNight.NoActionBar">
  265. <item name="colorPrimary">@color/primary</item>
  266. <item name="android:windowBackground">@color/background</item>
  267. <item name="android:statusBarColor">@color/blur</item>
  268. </style>
  269.  
  270. <style name="CustomInactiveBottomNavigationTextAppearance">
  271. <item name="android:textSize">@dimen/_8ssp</item>
  272. <item name="android:fontFamily">@font/circular_regular</item>
  273. </style>
  274.  
  275. <style name="CustomActiveBottomNavigationTextAppearance">
  276. <item name="android:textSize">@dimen/_8ssp</item>
  277. <item name="android:fontFamily">@font/circular_regular</item>
  278. </style>
  279. <style name="SquareShapeOverlay">
  280. <item name="cornerSize">@dimen/_14sdp</item>
  281. </style>
  282.  
  283. <style name="Theme.Simplify" parent="Base.Theme.Simplify" />
  284.  
  285. <style name="TimePickerDark" parent="@style/ThemeOverlay.MaterialComponents.Dialog">
  286. <item name="colorAccent">@color/primary</item>
  287. <item name="color">@color/primary</item>
  288. <item name="colorSecondaryFixed">@color/primary</item>
  289. <item name="android:numbersBackgroundColor">@color/secondary</item>
  290. <item name="android:windowBackground">@color/background</item>
  291. <item name="android:headerBackground">@color/secondary</item>
  292. </style>
  293.  
  294. <style name="DatePickerDark" parent="Theme.AppCompat.Light.Dialog">
  295. <item name="colorAccent">@color/secondary</item>
  296. <item name="colorControlActivated">@color/primary</item>
  297. <item name="android:selectableItemBackgroundBorderless">@color/background</item>
  298. <item name="colorControlHighlight">@color/primary</item>
  299. <item name="android:windowBackground">@color/background</item>
  300. <item name="android:textColor">#4CAF50</item>
  301. <item name="fontFamily">@font/circular_medium</item>
  302. <item name="android:fontFamily">@font/circular_regular</item>
  303. <item name="android:textColorSecondary">@color/primary</item>
  304. <item name="android:textColorPrimary">@color/white</item>
  305. <item name="android:textColorPrimaryInverse">@color/white</item>
  306. <item name="android:textColorSecondaryInverse">@color/light</item>
  307.  
  308. </style>
  309.  
  310.  
  311.  
  312. </resources>
Tags: Java
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement