diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 84d6898..efd7422 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -29,6 +29,9 @@ sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } + buildFeatures { + viewBinding = true + } } dependencies { @@ -37,6 +40,8 @@ implementation(libs.material) implementation(libs.activity) implementation(libs.constraintlayout) + implementation(libs.legacy.support.v4) + implementation(libs.recyclerview) testImplementation(libs.junit) androidTestImplementation(libs.ext.junit) androidTestImplementation(libs.espresso.core) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 4194129..9efad1f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,29 +1,32 @@ + xmlns:tools="http://schemas.android.com/tools"> - - - - - + + + + + + - - - - + + + + \ No newline at end of file diff --git a/app/src/main/java/com/example/tampopo_client/views/FriendActivity.java b/app/src/main/java/com/example/tampopo_client/views/FriendActivity.java new file mode 100644 index 0000000..c7bb399 --- /dev/null +++ b/app/src/main/java/com/example/tampopo_client/views/FriendActivity.java @@ -0,0 +1,26 @@ +package com.example.tampopo_client.views; + +import android.os.Bundle; + +import androidx.activity.EdgeToEdge; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; + +import com.example.tampopo_client.R; + +public class FriendActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + EdgeToEdge.enable(this); + setContentView(R.layout.activity_friend); + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> { + Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); + return insets; + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/tampopo_client/views/FriendReceivedFragment.java b/app/src/main/java/com/example/tampopo_client/views/FriendReceivedFragment.java new file mode 100644 index 0000000..b320d46 --- /dev/null +++ b/app/src/main/java/com/example/tampopo_client/views/FriendReceivedFragment.java @@ -0,0 +1,72 @@ +package com.example.tampopo_client.views; + +import android.content.Context; +import android.os.Bundle; + +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.example.tampopo_client.R; +import com.example.tampopo_client.views.placeholder.PlaceholderContent; + +/** + * A fragment representing a list of Items. + */ +public class FriendReceivedFragment extends Fragment { + + // TODO: Customize parameter argument names + private static final String ARG_COLUMN_COUNT = "column-count"; + // TODO: Customize parameters + private int mColumnCount = 1; + + /** + * Mandatory empty constructor for the fragment manager to instantiate the + * fragment (e.g. upon screen orientation changes). + */ + public FriendReceivedFragment() { + } + + // TODO: Customize parameter initialization + @SuppressWarnings("unused") + public static FriendReceivedFragment newInstance(int columnCount) { + FriendReceivedFragment fragment = new FriendReceivedFragment(); + Bundle args = new Bundle(); + args.putInt(ARG_COLUMN_COUNT, columnCount); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + if (getArguments() != null) { + mColumnCount = getArguments().getInt(ARG_COLUMN_COUNT); + } + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_friend_received_list, container, false); + + // Set the adapter + if (view instanceof RecyclerView) { + Context context = view.getContext(); + RecyclerView recyclerView = (RecyclerView) view; + if (mColumnCount <= 1) { + recyclerView.setLayoutManager(new LinearLayoutManager(context)); + } else { + recyclerView.setLayoutManager(new GridLayoutManager(context, mColumnCount)); + } + recyclerView.setAdapter(new MyFriendRequestRecyclerViewAdapter(PlaceholderContent.ITEMS)); + } + return view; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/tampopo_client/views/MyFriendRequestRecyclerViewAdapter.java b/app/src/main/java/com/example/tampopo_client/views/MyFriendRequestRecyclerViewAdapter.java new file mode 100644 index 0000000..09d6193 --- /dev/null +++ b/app/src/main/java/com/example/tampopo_client/views/MyFriendRequestRecyclerViewAdapter.java @@ -0,0 +1,62 @@ +package com.example.tampopo_client.views; + +import androidx.recyclerview.widget.RecyclerView; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.example.tampopo_client.views.placeholder.PlaceholderContent.PlaceholderItem; +import com.example.tampopo_client.databinding.FragmentFriendReceivedBinding; + +import java.util.List; + +/** + * {@link RecyclerView.Adapter} that can display a {@link PlaceholderItem}. + * TODO: Replace the implementation with code for your data type. + */ +public class MyFriendRequestRecyclerViewAdapter extends RecyclerView.Adapter { + + private final List mValues; + + public MyFriendRequestRecyclerViewAdapter(List items) { + mValues = items; + } + + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + + return new ViewHolder(FragmentFriendReceivedBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); + + } + + @Override + public void onBindViewHolder(final ViewHolder holder, int position) { + holder.mItem = mValues.get(position); + holder.mIdView.setText(mValues.get(position).id); + holder.mContentView.setText(mValues.get(position).content); + } + + @Override + public int getItemCount() { + return mValues.size(); + } + + public class ViewHolder extends RecyclerView.ViewHolder { + public final TextView mIdView; + public final TextView mContentView; + public PlaceholderItem mItem; + + public ViewHolder(FragmentFriendReceivedBinding binding) { + super(binding.getRoot()); + mIdView = binding.itemNumber; + mContentView = binding.content; + } + + @Override + public String toString() { + return super.toString() + " '" + mContentView.getText() + "'"; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/tampopo_client/views/placeholder/PlaceholderContent.java b/app/src/main/java/com/example/tampopo_client/views/placeholder/PlaceholderContent.java new file mode 100644 index 0000000..00871a5 --- /dev/null +++ b/app/src/main/java/com/example/tampopo_client/views/placeholder/PlaceholderContent.java @@ -0,0 +1,72 @@ +package com.example.tampopo_client.views.placeholder; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Helper class for providing sample content for user interfaces created by + * Android template wizards. + *

+ * TODO: Replace all uses of this class before publishing your app. + */ +public class PlaceholderContent { + + /** + * An array of sample (placeholder) items. + */ + public static final List ITEMS = new ArrayList(); + + /** + * A map of sample (placeholder) items, by ID. + */ + public static final Map ITEM_MAP = new HashMap(); + + private static final int COUNT = 25; + + static { + // Add some sample items. + for (int i = 1; i <= COUNT; i++) { + addItem(createPlaceholderItem(i)); + } + } + + private static void addItem(PlaceholderItem item) { + ITEMS.add(item); + ITEM_MAP.put(item.id, item); + } + + private static PlaceholderItem createPlaceholderItem(int position) { + return new PlaceholderItem(String.valueOf(position), "Item " + position, makeDetails(position)); + } + + private static String makeDetails(int position) { + StringBuilder builder = new StringBuilder(); + builder.append("Details about Item: ").append(position); + for (int i = 0; i < position; i++) { + builder.append("\nMore details information here."); + } + return builder.toString(); + } + + /** + * A placeholder item representing a piece of content. + */ + public static class PlaceholderItem { + public final String id; + public final String content; + public final String details; + + public PlaceholderItem(String id, String content, String details) { + this.id = id; + this.content = content; + this.details = details; + } + + @Override + public String toString() { + return content; + } + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_friend.xml b/app/src/main/res/layout/activity_friend.xml new file mode 100644 index 0000000..79295c8 --- /dev/null +++ b/app/src/main/res/layout/activity_friend.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_friend_received.xml b/app/src/main/res/layout/fragment_friend_received.xml new file mode 100644 index 0000000..1877568 --- /dev/null +++ b/app/src/main/res/layout/fragment_friend_received.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_friend_received_list.xml b/app/src/main/res/layout/fragment_friend_received_list.xml new file mode 100644 index 0000000..0367055 --- /dev/null +++ b/app/src/main/res/layout/fragment_friend_received_list.xml @@ -0,0 +1,13 @@ + + \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml new file mode 100644 index 0000000..ca514d8 --- /dev/null +++ b/app/src/main/res/values/dimens.xml @@ -0,0 +1,4 @@ + + + 16dp + \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0ddbe6f..efc9070 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -7,6 +7,8 @@ material = "1.12.0" activity = "1.9.3" constraintlayout = "2.2.0" +legacySupportV4 = "1.0.0" +recyclerview = "1.3.2" [libraries] junit = { group = "junit", name = "junit", version.ref = "junit" } @@ -16,6 +18,8 @@ material = { group = "com.google.android.material", name = "material", version.ref = "material" } activity = { group = "androidx.activity", name = "activity", version.ref = "activity" } constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" } +legacy-support-v4 = { group = "androidx.legacy", name = "legacy-support-v4", version.ref = "legacySupportV4" } +recyclerview = { group = "androidx.recyclerview", name = "recyclerview", version.ref = "recyclerview" } [plugins] android-application = { id = "com.android.application", version.ref = "agp" }