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 @@ + + + + + + + + + + + + + +