diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser
index 7e933b1..f98a02b 100644
Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ
diff --git a/.idea/caches/gradle_models.ser b/.idea/caches/gradle_models.ser
index c2a7823..c401a33 100644
Binary files a/.idea/caches/gradle_models.ser and b/.idea/caches/gradle_models.ser differ
diff --git a/app/build.gradle b/app/build.gradle
index 238f8a0..71bc54c 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -22,6 +22,8 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
+ implementation 'com.android.support:recyclerview-v7:27.1.1'
+ implementation 'com.android.support:cardview-v7:27.1.1'
implementation 'com.android.support:design:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.android.support:support-v4:27.1.1'
@@ -30,5 +32,5 @@ dependencies {
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
- implementation 'com.android.support:cardview-v7:27.1.1'
+
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index ed3909b..449e454 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -9,9 +9,10 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
-
+
+
-
+
{
+ private Context mctx;
+ private List listWorkout;
+ /*for Btn click event in the recycler view*/
+ private OnItemClickListner mListner;
+ public interface OnItemClickListner{
+ void onBtnClick(int position);/*for the add button*/
+ void onWorkoutItemClick(int position);/*for whole item*/
+ }
+
+ public void setOnItemClickListner(OnItemClickListner listner){
+ mListner = listner;
+ }
+
+ public WorkoutAdapter(Context mctx, List listWorkout) {
+ this.mctx = mctx;
+ this.listWorkout = listWorkout;
+ }
+
+ @NonNull
+ @Override
+ public WorkoutViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ LayoutInflater inflater=LayoutInflater.from(mctx);
+ View view=inflater.inflate(R.layout.workoutrow,null);
+ WorkoutViewHolder wHolder=new WorkoutViewHolder(view);
+ return wHolder;
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull WorkoutViewHolder holder, int position) {
+ Workout workout=listWorkout.get(position);
+
+ holder.txtTitle.setText(workout.getName());
+ holder.txtMins.setText(String.valueOf(workout.getMinute()));
+ holder.txtCal.setText(String.valueOf(workout.getCalorie()));
+
+
+ }
+
+ @Override
+ public int getItemCount() {
+ return listWorkout.size();
+ }
+
+ class WorkoutViewHolder extends RecyclerView.ViewHolder{
+ ImageView imgBg;
+ TextView txtTitle,txtMins,txtCal;
+ Button btnworkoutAdd;
+ public WorkoutViewHolder(View itemView) {
+ super(itemView);
+ imgBg=itemView.findViewById(R.id.imageViewWorkoutContainer);
+ txtTitle=itemView.findViewById(R.id.textViewWorkoutTitle);
+ txtMins=itemView.findViewById(R.id.textViewMinutes);
+ txtCal=itemView.findViewById(R.id.textViewCalorie);
+ btnworkoutAdd=itemView.findViewById(R.id.btnWorkout_add);
+ /*btn onclick listner Add button*/
+ btnworkoutAdd.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ if(mListner != null){
+ int position=getAdapterPosition();
+ if(position != RecyclerView.NO_POSITION){
+ mListner.onBtnClick(position);
+ }
+ }
+ }
+ });
+ itemView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ if(mListner != null){
+ int position=getAdapterPosition();
+ if(position != RecyclerView.NO_POSITION){
+ mListner.onWorkoutItemClick(position);
+ }
+ }
+ }
+ });
+ }
+ }
+}
diff --git a/app/src/main/java/com/dasun/soulfit/Workouts.java b/app/src/main/java/com/dasun/soulfit/Workouts.java
deleted file mode 100644
index 64d9611..0000000
--- a/app/src/main/java/com/dasun/soulfit/Workouts.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.dasun.soulfit;
-
-import android.content.Intent;
-import android.support.v7.app.AppCompatActivity;
-import android.os.Bundle;
-import android.view.View;
-import android.widget.Button;
-import android.widget.ImageView;
-
-public class Workouts extends AppCompatActivity {
-
- ImageView btn;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_workouts);
-
- btn = findViewById(R.id.imageView5);
-
- }
-
- public void goBack(View view){
- Intent my = new Intent(this,user_create.class);
- startActivity(my);
- }
-
-}
diff --git a/app/src/main/java/com/dasun/soulfit/WorkoutsActivity.java b/app/src/main/java/com/dasun/soulfit/WorkoutsActivity.java
new file mode 100644
index 0000000..ed05e8b
--- /dev/null
+++ b/app/src/main/java/com/dasun/soulfit/WorkoutsActivity.java
@@ -0,0 +1,263 @@
+package com.dasun.soulfit;
+
+import android.content.Intent;
+import android.support.annotation.NonNull;
+import android.support.v7.app.AlertDialog;
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.google.firebase.database.DataSnapshot;
+import com.google.firebase.database.DatabaseError;
+import com.google.firebase.database.DatabaseReference;
+import com.google.firebase.database.FirebaseDatabase;
+import com.google.firebase.database.ValueEventListener;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+
+public class WorkoutsActivity extends AppCompatActivity {
+
+ RecyclerView recyclerView;
+ WorkoutAdapter workoutAdapter;
+ List workoutList;
+ DatabaseReference dbShowCompleted;
+ DatabaseReference dbScheduleRef;
+ DatabaseReference dbListShowRef;
+ Schedule newDaySchedule;
+
+
+ ImageView btn;
+ TextView burnedCal,workoutCounter;
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_workouts);
+ dbListShowRef= FirebaseDatabase.getInstance().getReference("Workout");
+ dbScheduleRef= FirebaseDatabase.getInstance().getReference("workoutSchedule");
+
+ workoutList =new ArrayList<>();
+ recyclerView=findViewById(R.id.recycleViewWorkout);
+ recyclerView.setHasFixedSize(true);
+ recyclerView.setLayoutManager(new LinearLayoutManager(this));
+
+ /*Showing single Row Db Burned Cals and Completed Workouts*/
+
+ dbShowCompleted=FirebaseDatabase.getInstance().getReference("workoutSchedule").child("-Lp8BrKKaPR1PKovCru8");
+ dbShowCompleted.addValueEventListener(new ValueEventListener() {
+ @Override
+ public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
+ String burnedCals=dataSnapshot.child("caloriesBurned").getValue().toString();
+ String completedWorkouts=dataSnapshot.child("workoutsCount").getValue().toString();
+
+ workoutCounter.setText(completedWorkouts);
+ burnedCal.setText(burnedCals);
+ }
+
+ @Override
+ public void onCancelled(@NonNull DatabaseError databaseError) {
+
+ }
+ });
+
+ /*END - Showing single Row Db Burned Cals and Completed Workouts*/
+
+
+
+
+
+
+ btn = findViewById(R.id.imageView5);
+ burnedCal=findViewById(R.id.textViewCalBurned);
+ workoutCounter=findViewById(R.id.TextViewDoneCount);
+
+ }
+
+ @Override
+ protected void onStart() {
+ super.onStart();
+
+ /*Showing the workout list*/
+
+ dbListShowRef.addValueEventListener(new ValueEventListener() {
+ @Override
+ public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
+ //clearing the previous artist list
+ workoutList.clear();
+
+ for (DataSnapshot workoutSnapList:dataSnapshot.getChildren()){
+ //Workout wkouts=workoutSnapList.getValue(Workout.class);
+ //workoutList.add(wkouts);
+
+ String wName=workoutSnapList.child("name").getValue().toString();
+ String wCal=workoutSnapList.child("calorie").getValue().toString();
+ String wMin=workoutSnapList.child("minute").getValue().toString();
+ String wId=workoutSnapList.child("workoutId").getValue().toString();
+
+ double wCalD=Double.parseDouble(wCal);
+ double wMinD=Double.parseDouble(wMin);
+
+ Workout wkouts=new Workout(wId,wName, wMinD, wCalD);
+ workoutList.add(wkouts);
+
+
+
+
+ }
+ workoutAdapter=new WorkoutAdapter(WorkoutsActivity.this,workoutList);
+ recyclerView.setAdapter(workoutAdapter);
+ /*workout onclick event for update burned cals and completed workouts*/
+ workoutAdapter.setOnItemClickListner(new WorkoutAdapter.OnItemClickListner() {
+ @Override
+ public void onWorkoutItemClick(int position) {
+ Workout wkfromDb=workoutList.get(position);
+ updateWorkout(wkfromDb.getWorkoutId(),wkfromDb.getName());
+ }
+
+ @Override
+ public void onBtnClick(int position) {
+ /*Calories Calculator*/
+ Double cal=workoutList.get(position).getCalorie();
+
+ Double tCal = Double.parseDouble(burnedCal.getText().toString());
+ tCal+=cal;
+ String tmpCal=Double.toString(tCal);
+ burnedCal.setText(tmpCal);
+ /*Exercises Count Calculator*/
+ int eCount=Integer.parseInt(workoutCounter.getText().toString());
+ eCount++;
+ String sECount=Integer.toString(eCount);
+ workoutCounter.setText(sECount);
+ /*Date*/
+ /*
+ String date = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(new Date());
+ workoutCounter.setText(date);
+ */
+
+ /*adding burned Cals and completed workouts to the db */
+
+ DatabaseReference dbRefSingleRow=FirebaseDatabase.getInstance().getReference("workoutSchedule").child("-Lp8BrKKaPR1PKovCru8");
+ Schedule singleRowShedule=new Schedule();
+ singleRowShedule.setCaloriesBurned(tCal);
+ singleRowShedule.setWorkoutsCount(eCount);
+ dbRefSingleRow.setValue(singleRowShedule);
+
+
+ /*END - adding burned cals and completed workouts to the db*/
+ }
+ });/*END - workout onclick event for update burned cals and completed workouts*/
+
+ }
+
+ @Override
+ public void onCancelled(@NonNull DatabaseError databaseError) {
+
+ }
+ });
+
+
+
+
+ /*END Showing the workout list*/
+
+
+
+ }
+
+ public void goBack(View view){
+ Intent my = new Intent(this,user_create.class);
+ startActivity(my);
+ }
+
+ public void calBurned(View v){
+
+ burnedCal.setText("+"+200);
+ }
+
+ public void resetDay(View v){
+ newDaySchedule=new Schedule();
+ burnedCal.setText("0");
+ workoutCounter.setText("0");
+ newDaySchedule.setCaloriesBurned(0);
+ newDaySchedule.setWorkoutsCount(0);
+ String id=dbScheduleRef.push().getKey();
+ newDaySchedule.setScheuleId(id);
+ dbScheduleRef.child(id).setValue(newDaySchedule);
+
+ Toast.makeText(this,"New Schedule Assigned",Toast.LENGTH_LONG).show();
+
+ }
+
+ public void createWorkout(View view){
+ Intent next=new Intent(this,createWorkoutActivity.class);
+ startActivity(next);
+ }
+ /*This function will show the update dialog box*/
+ public void updateWorkout(final String workoutId, String workoutName){
+ AlertDialog.Builder dialogBuilder=new AlertDialog.Builder(this);
+ LayoutInflater inflater=getLayoutInflater();
+ final View dialogView=inflater.inflate(R.layout.update_dialog,null);
+ dialogBuilder.setView(dialogView);
+
+ final EditText edTxtUpdateName=dialogView.findViewById(R.id.editTextUpdateName);
+ final EditText edTxtUpdateMinute=dialogView.findViewById(R.id.editTextUpdateMinute);
+ final EditText edTxtUpdateCals=dialogView.findViewById(R.id.editTextUpdateCalories);
+ final Button btnUpdate=dialogView.findViewById(R.id.btn_w_update);
+ final Button btnDelete=dialogView.findViewById(R.id.btn_w_delete);
+
+ dialogBuilder.setTitle("updating "+workoutName);
+ final AlertDialog alertDialog=dialogBuilder.create();
+ alertDialog.show();
+
+ btnUpdate.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ String name=edTxtUpdateName.getText().toString().trim();
+ String min=edTxtUpdateMinute.getText().toString().trim();
+ String cal=edTxtUpdateCals.getText().toString().trim();
+ double minD=Double.parseDouble(min);
+ double calD=Double.parseDouble(cal);
+ funcUpdateWorkout(workoutId,name,minD,calD);
+ alertDialog.dismiss();
+ }
+ });
+
+ btnDelete.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ funcDeleteWorkout(workoutId);
+ alertDialog.dismiss();
+ }
+ });
+
+
+
+ }
+
+ private boolean funcDeleteWorkout(String workoutId) {
+ DatabaseReference databaseReference=FirebaseDatabase.getInstance().getReference("Workout").child(workoutId);
+ databaseReference.removeValue();
+ Toast.makeText(this,"Workout Deleted Successfully.",Toast.LENGTH_LONG).show();
+ return true;
+ }
+
+ /*function for the update, This will call inside the updateWorkout big function*/
+ private boolean funcUpdateWorkout(String id,String name,double min,double cal){
+ DatabaseReference databaseReference=FirebaseDatabase.getInstance().getReference("Workout").child(id);
+ Workout workoutUpd=new Workout(id,name,min,cal);
+ databaseReference.setValue(workoutUpd);
+ Toast.makeText(this,"Workout updated succesfully.",Toast.LENGTH_LONG).show();
+ return true;
+ }
+}
diff --git a/app/src/main/java/com/dasun/soulfit/createWorkoutActivity.java b/app/src/main/java/com/dasun/soulfit/createWorkoutActivity.java
new file mode 100644
index 0000000..819672a
--- /dev/null
+++ b/app/src/main/java/com/dasun/soulfit/createWorkoutActivity.java
@@ -0,0 +1,104 @@
+package com.dasun.soulfit;
+
+import android.content.Intent;
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.Toast;
+
+import com.google.firebase.database.DatabaseReference;
+import com.google.firebase.database.FirebaseDatabase;
+
+public class createWorkoutActivity extends AppCompatActivity {
+
+ EditText workoutName;
+ EditText minutes;
+ EditText calories;
+ Button btncreate;
+ DatabaseReference df;
+ Workout wko;
+ ImageView btnBack;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_create_workout);
+
+ workoutName =findViewById(R.id.editText_workout_name);
+ minutes=findViewById(R.id.editText_minutes);
+ calories=findViewById(R.id.editText_burned_cal);
+ btncreate=findViewById(R.id.btn_create);
+
+ btnBack=findViewById(R.id.btnBackImg);
+
+ wko =new Workout();
+
+
+ }
+ private void clearControls(){
+ workoutName.setText("");
+ minutes.setText("");
+ calories.setText("");
+ }
+ public void createWorkouts(View view){
+ df=FirebaseDatabase.getInstance().getReference().child("Workout");
+
+
+ if(TextUtils.isEmpty(workoutName.getText().toString())){
+ Toast.makeText(getApplicationContext(),"please enter a Name",Toast.LENGTH_SHORT).show();
+ }else if(TextUtils.isEmpty(minutes.getText().toString())){
+ Toast.makeText(getApplicationContext(),"please enter minutes",Toast.LENGTH_SHORT).show();
+ }else if(TextUtils.isEmpty(calories.getText().toString())){
+ Toast.makeText(getApplicationContext(),"Enter value for calories",Toast.LENGTH_SHORT).show();
+ }else{
+ wko.setName(workoutName.getText().toString().trim());
+ double dMinute;
+ double dCalorie;
+
+ //====== Minute Error Handling and assigning part
+ String sMinute =minutes.getText().toString();
+ if(!sMinute.isEmpty()) {
+ try {
+ dMinute = Double.parseDouble(sMinute);
+ // it means it is double
+ wko.setMinute(dMinute);//Assign it to the Workout object
+ } catch (Exception e1) {
+ // this means it is not double
+ Toast.makeText(getApplicationContext(), "Only numericals allows.", Toast.LENGTH_SHORT).show();
+ }
+ }//minute error handling end
+ //====== Calories Error Handling and assigning part
+ String sCalorie=calories.getText().toString();
+ if(!sCalorie.isEmpty()){
+ try{
+ dCalorie=Double.parseDouble(sCalorie);
+ wko.setCalorie(dCalorie);//Assign it to the Workout object
+ }catch (Exception cal){
+ Toast.makeText(getApplicationContext(),"only numericals allowed",Toast.LENGTH_SHORT).show();
+ }
+ }//======end Error handling assigning
+ String id=df.push().getKey();
+ wko.setWorkoutId(id);
+ //Insert into DB
+ df.child(id).setValue(wko);
+
+
+ //Feedback to the user Via Toast
+ Toast.makeText(getApplicationContext(),"Workout successfully added.",Toast.LENGTH_SHORT).show();
+ //Clearing text fields
+ clearControls();
+ }
+ }
+
+ public void goBacktoWorkot(View view){
+ Intent back = new Intent(this,WorkoutsActivity.class);
+ startActivity(back);
+ }
+
+
+
+}
diff --git a/app/src/main/res/layout/activity_create_workout.xml b/app/src/main/res/layout/activity_create_workout.xml
new file mode 100644
index 0000000..3474e8a
--- /dev/null
+++ b/app/src/main/res/layout/activity_create_workout.xml
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_workouts.xml b/app/src/main/res/layout/activity_workouts.xml
index 2c80f78..2a19c70 100644
--- a/app/src/main/res/layout/activity_workouts.xml
+++ b/app/src/main/res/layout/activity_workouts.xml
@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- tools:context=".Workouts">
+ tools:context=".WorkoutsActivity">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ app:layout_constraintHorizontal_bias="0.0"
+ app:layout_constraintStart_toStartOf="@+id/guidelineLeft"
+ app:layout_constraintTop_toBottomOf="@+id/imageViewWorkoutContainer3"
+ app:layout_constraintVertical_bias="0.0" />
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/update_dialog.xml b/app/src/main/res/layout/update_dialog.xml
new file mode 100644
index 0000000..52820fa
--- /dev/null
+++ b/app/src/main/res/layout/update_dialog.xml
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/workoutrow.xml b/app/src/main/res/layout/workoutrow.xml
new file mode 100644
index 0000000..9d6ac1b
--- /dev/null
+++ b/app/src/main/res/layout/workoutrow.xml
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index fd6d9a2..8bef34d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -51,6 +51,12 @@
Let\'s get started!
Female
Male
+ Custom Workouts
+ Minutes
+ Calories
+ Create
+ delete
+ update