diff --git a/Frontend/app/src/main/java/com/example/mobileapp/MemberFragment.java b/Frontend/app/src/main/java/com/example/mobileapp/MemberFragment.java index 9e20317758603533c708377d0fa7d4780d397f93..cbfb3624bbd659dc2b00174de63a3e3549071b99 100644 --- a/Frontend/app/src/main/java/com/example/mobileapp/MemberFragment.java +++ b/Frontend/app/src/main/java/com/example/mobileapp/MemberFragment.java @@ -1,5 +1,7 @@ package com.example.mobileapp; +import android.content.DialogInterface; +import android.content.Intent; import android.os.Bundle; import androidx.fragment.app.Fragment; @@ -9,6 +11,9 @@ import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Button; + +import com.google.android.material.dialog.MaterialAlertDialogBuilder; import java.util.ArrayList; @@ -20,7 +25,6 @@ public class MemberFragment extends Fragment { private ArrayList<String> mUserImages = new ArrayList<>(); private ArrayList<Boolean> mUserAdmin = new ArrayList<>(); - @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -31,19 +35,57 @@ public class MemberFragment extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + + initImageBitmaps(); View rootView = inflater.inflate(R.layout.fragment_member_fragement, container, false); + + RecyclerView recyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_user_view) ; Recycler_View_Adapter_User adapter = new Recycler_View_Adapter_User(this,mUserNames, mUserImages, mUserAdmin); recyclerView.setAdapter(adapter); recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); + rootView.findViewById(R.id.leave_trip).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + leaveTripButton(); + } + }); return rootView; } + public void leaveTripButton() { + MaterialAlertDialogBuilder leaveTrip = new MaterialAlertDialogBuilder(getActivity()); + leaveTrip.setTitle("Leave Trip"); + + //Kommende IF Abfrage ob + //1. Man ein Admin ist + //2. Eine Aktive Transaktion hat + //Punkte 1 und 2 können ignoriert werden falls der Trip in der Vergangenheit liegt. + + leaveTrip.setMessage("Do you want to leave this trip? Be aware that once you leave this trip only an admin can add you back."); + leaveTrip.setPositiveButton("Confirm", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + //Delete User from Group, so he cant see it anymore + //startActivity(new Intent(getActivity(), Trip_Overview_Screen.class)); + getActivity().finish(); + } + }); + leaveTrip.setNegativeButton("Decline", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + return; + } + }); + leaveTrip.show(); + } + + private void initImageBitmaps() { @@ -51,12 +93,10 @@ public class MemberFragment extends Fragment { mUserNames.add("Bruno"); mUserAdmin.add(true); - mUserImages.add("https://i.redd.it/qn7f9oqu7o501.jpg"); mUserNames.add("Dennis"); mUserAdmin.add(true); - mUserImages.add("https://i.redd.it/j6myfqglup501.jpg"); mUserNames.add("Filip"); mUserAdmin.add(false); @@ -73,11 +113,5 @@ public class MemberFragment extends Fragment { mUserNames.add("Dani"); mUserAdmin.add(false); - } - - - - - } diff --git a/Frontend/app/src/main/java/com/example/mobileapp/Recycler_View_Adapter_User.java b/Frontend/app/src/main/java/com/example/mobileapp/Recycler_View_Adapter_User.java index dfa7d2f59719290e2dd3a62687ff033e93791af2..4840f453325009f5f8b3ffa206a9fea8eea609e0 100644 --- a/Frontend/app/src/main/java/com/example/mobileapp/Recycler_View_Adapter_User.java +++ b/Frontend/app/src/main/java/com/example/mobileapp/Recycler_View_Adapter_User.java @@ -1,7 +1,9 @@ package com.example.mobileapp; import android.app.Activity; +import android.content.DialogInterface; import android.content.Intent; +import android.graphics.drawable.Drawable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -12,6 +14,9 @@ import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.RecyclerView; import com.bumptech.glide.Glide; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; +import com.google.android.material.dialog.MaterialDialogs; + import java.util.ArrayList; import de.hdodenhof.circleimageview.CircleImageView; @@ -53,29 +58,75 @@ public class Recycler_View_Adapter_User extends RecyclerView.Adapter<Recycler_Vi } + holder.userName.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + MaterialAlertDialogBuilder deleteUser = new MaterialAlertDialogBuilder(mContext.getActivity()); + deleteUser.setTitle("Remove User"); + deleteUser.setMessage("Are you sure you want to remove " + mUserNames.get(position) + " from this trip? Only an admin can add him back to this trip"); + deleteUser.setPositiveButton("Confirm", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + mContext.getActivity().finish(); + } + }); + deleteUser.setNegativeButton("Decline", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + return; + } + }); + deleteUser.show(); + } + }); + + + //Set Admin holder.userAdmin.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - if(changeAdminStatus(position)) { - mUserAdmin.set(position,true); - Recycler_View_Adapter_User.this.notifyItemChanged(position); + + MaterialAlertDialogBuilder confirmAdmin = new MaterialAlertDialogBuilder(mContext.getActivity()); + confirmAdmin.setTitle("Admin rights"); + if (!mUserAdmin.get(position)) { + confirmAdmin.setIcon(R.drawable.no_admin_crown); + confirmAdmin.setMessage("Do you want to give " + mUserNames.get(position) + " Admin rights?"); + confirmAdmin.setPositiveButton("Confirm", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + mUserAdmin.set(position, true); + Recycler_View_Adapter_User.this.notifyItemChanged(position); + } + }); + confirmAdmin.setNegativeButton("Decline", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + return; + } + }); } else { - mUserAdmin.set(position,false); - Recycler_View_Adapter_User.this.notifyItemChanged(position); + confirmAdmin.setIcon(R.drawable.admin_crown); + //Check ob er nicht der letzte Admin ist, wenn ja ist keine Admin entnahme möglich + confirmAdmin.setMessage("Do you want to remove your own Admin rights?"); + confirmAdmin.setPositiveButton("Confirm", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + mUserAdmin.set(position, false); + Recycler_View_Adapter_User.this.notifyItemChanged(position); + } + }); + confirmAdmin.setNegativeButton("Decline", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + return; + } + }); } + confirmAdmin.show(); } }); } - - public boolean changeAdminStatus(int position) { - if (mUserAdmin.get(position)) { - return false; - } else { - return true; - } - } - @Override public int getItemCount() { return mUserNames.size(); diff --git a/Frontend/app/src/main/java/com/example/mobileapp/Trip_Overview_Screen.java b/Frontend/app/src/main/java/com/example/mobileapp/Trip_Overview_Screen.java index 035c390834506386cdd51621dfd5b70c4baff53f..e948d70e699926527d9418d61041a97f7e8b3f5c 100644 --- a/Frontend/app/src/main/java/com/example/mobileapp/Trip_Overview_Screen.java +++ b/Frontend/app/src/main/java/com/example/mobileapp/Trip_Overview_Screen.java @@ -23,15 +23,10 @@ public class Trip_Overview_Screen extends AppCompatActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.trip_main_screen); - - initImageBitmaps(); } private void initImageBitmaps(){ - mTripImages.add("https://c1.staticflickr.com/5/4636/25316407448_de5fbf183d_o.jpg"); - mTripNames.add("Havasu Falls"); - mTripDuration.add("21.05 - 28.08"); mTripImages.add("https://i.redd.it/tpsnoz5bzo501.jpg"); mTripNames.add("Trondheim"); diff --git a/Frontend/app/src/main/res/drawable/scrollbar.xml b/Frontend/app/src/main/res/drawable/scrollbar.xml new file mode 100644 index 0000000000000000000000000000000000000000..cd737de2402c4e80ecba32f6a5bb4c1ce6534325 --- /dev/null +++ b/Frontend/app/src/main/res/drawable/scrollbar.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<layer-list xml:android="http://schemas.android.com/apk/res/android" + xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:right="8dp"> + <shape > + <solid android:color="#C5B358"/> + <corners android:radius="15dp"/> + </shape> + </item> +</layer-list> + + diff --git a/Frontend/app/src/main/res/layout/fragment_member_fragement.xml b/Frontend/app/src/main/res/layout/fragment_member_fragement.xml index 60f9e49231fef091063fd9675733ff12643ad0fc..c0ee69d5a92456f5b92c90dc371020e2d3b9207e 100644 --- a/Frontend/app/src/main/res/layout/fragment_member_fragement.xml +++ b/Frontend/app/src/main/res/layout/fragment_member_fragement.xml @@ -1,18 +1,59 @@ <?xml version="1.0" encoding="utf-8"?> -<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#141412" + android:orientation="vertical" tools:context=".MemberFragment"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recycler_user_view" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_marginBottom="90dp" - android:layout_marginTop="10dp"> + android:layout_marginTop="10dp" + android:layout_marginBottom="100dp" + android:fadeScrollbars="false" + android:scrollbarSize="10dp" + android:scrollbarThumbVertical="@drawable/scrollbar" + android:scrollbars="vertical"> </androidx.recyclerview.widget.RecyclerView> -</FrameLayout> \ No newline at end of file + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="-80dp" + android:layout_gravity="center"> + + + <Button + android:id="@+id/leave_trip" + android:layout_width="200dp" + android:layout_height="40dp" + android:layout_marginRight="30dp" + android:layout_gravity="center_vertical|left" + android:background="@drawable/btn_rounded" + android:text="Leave Trip" + android:textAppearance="@style/TextAppearance.AppCompat.Small" + android:textColor="#141414" + android:textSize="20dp" + android:visibility="visible" /> + + <Button + android:id="@+id/add_member" + android:layout_width="60dp" + android:layout_height="60dp" + android:background="@drawable/rnd_button" + android:fontFamily="@font/msyi" + android:gravity="bottom|center" + android:text="+" + android:textAppearance="@style/TextAppearance.AppCompat.Small" + android:textColor="#141414" + android:visibility="visible" + android:textSize="78dp" /> + + </LinearLayout> + + +</LinearLayout> \ No newline at end of file diff --git a/Frontend/app/src/main/res/layout/fragment_transaction_fragement.xml b/Frontend/app/src/main/res/layout/fragment_transaction_fragement.xml index f8683a1d659d137ffacdd11cbf7b0f8b68a64e47..226566966307a51eea4608410831078b4d220a19 100644 --- a/Frontend/app/src/main/res/layout/fragment_transaction_fragement.xml +++ b/Frontend/app/src/main/res/layout/fragment_transaction_fragement.xml @@ -1,18 +1,47 @@ <?xml version="1.0" encoding="utf-8"?> -<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#141412" + android:orientation="vertical" tools:context=".TransactionFragment"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recycler_transaction_view" android:layout_width="match_parent" android:layout_height="match_parent" + android:layout_marginTop="10dp" android:layout_marginBottom="90dp" - android:layout_marginTop="10dp"> + android:fadeScrollbars="false" + android:scrollbarSize="10dp" + android:scrollbarThumbVertical="@drawable/scrollbar" + android:scrollbars="vertical"> </androidx.recyclerview.widget.RecyclerView> -</FrameLayout> \ No newline at end of file + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="right" + android:layout_marginTop="-80dp"> + + + <Button + android:id="@+id/add_member" + android:layout_marginRight="30dp" + android:layout_width="60dp" + android:layout_height="60dp" + android:background="@drawable/rnd_button" + android:fontFamily="@font/msyi" + android:gravity="bottom|center" + android:text="+" + android:textAppearance="@style/TextAppearance.AppCompat.Small" + android:textColor="#141414" + android:textSize="78dp" + android:visibility="visible" /> + + </LinearLayout> + +</LinearLayout> \ No newline at end of file diff --git a/Frontend/app/src/main/res/layout/layout_trip.xml b/Frontend/app/src/main/res/layout/layout_trip.xml index cfa6cfe8f562e3d265b04986de64f00aa6f59593..e1c47bfd83507d9c44e7219dc21547633d18523c 100644 --- a/Frontend/app/src/main/res/layout/layout_trip.xml +++ b/Frontend/app/src/main/res/layout/layout_trip.xml @@ -8,7 +8,7 @@ android:layout_gravity="center_horizontal" android:background="@drawable/btn_rounded" android:id="@+id/trip_element" - android:layout_marginTop="20dp"> + android:layout_marginBottom="20dp"> <de.hdodenhof.circleimageview.CircleImageView android:id="@+id/trip_image" diff --git a/Frontend/app/src/main/res/layout/single_trip.xml b/Frontend/app/src/main/res/layout/single_trip.xml index e4893089dfc45682a7a6a2b1be884579bc033aae..6f7af1841652726017829e92db048d59cd69d6bf 100644 --- a/Frontend/app/src/main/res/layout/single_trip.xml +++ b/Frontend/app/src/main/res/layout/single_trip.xml @@ -28,7 +28,7 @@ android:gravity="center_horizontal" android:layout_gravity="center_horizontal" android:layout_height="wrap_content" - android:layout_marginTop="50dp" + android:layout_marginTop="40dp" android:layout_marginRight="20dp" android:layout_marginLeft="33dp" android:orientation="horizontal"> diff --git a/Frontend/app/src/main/res/layout/trip_main_screen.xml b/Frontend/app/src/main/res/layout/trip_main_screen.xml index 566bb2943b9d68e0f205fa4683f844781034b708..86fcbdd18dcfb6d6edec4659eb781f1b0a891914 100644 --- a/Frontend/app/src/main/res/layout/trip_main_screen.xml +++ b/Frontend/app/src/main/res/layout/trip_main_screen.xml @@ -50,13 +50,17 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="40dp" - android:layout_marginBottom="120dp" /> + android:layout_marginBottom="100dp" + android:scrollbars="vertical" + android:scrollbarSize="10dp" + android:fadeScrollbars="false" + android:scrollbarThumbVertical="@drawable/scrollbar"/> <Button android:layout_width="60dp" android:layout_height="60dp" android:layout_gravity="right" - android:layout_marginTop="-90dp" + android:layout_marginTop="-80dp" android:layout_marginRight="30dp" android:background="@drawable/rnd_button" android:fontFamily="@font/msyi" diff --git a/Frontend/app/src/main/res/values/styles.xml b/Frontend/app/src/main/res/values/styles.xml index 74ace14bccdf368bb71529a5882afeef24e432a9..9f7c289c3570a1aa60e30278ef56a2ca75f54f4f 100644 --- a/Frontend/app/src/main/res/values/styles.xml +++ b/Frontend/app/src/main/res/values/styles.xml @@ -1,7 +1,7 @@ <resources> <!-- Base application theme. --> - <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> + <style name="AppTheme" parent="Theme.MaterialComponents.Bridge"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item>