diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 1719529..b1a2f41 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -49,5 +49,5 @@ androidTestImplementation(libs.espresso.core) implementation(libs.navigation.fragment) implementation(libs.navigation.ui) - + implementation(libs.viewpager2) } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2179e9b..cbab318 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -18,7 +18,11 @@ + + + + - - - - mText; + + public NotificationsViewModel() { + mText = new MutableLiveData<>(); + mText.setValue("This is notifications fragment"); + } + + public LiveData getText() { + return mText; + } +} \ 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 index 4e60537..362994f 100644 --- a/app/src/main/java/com/example/tampopo_client/views/FriendActivity.java +++ b/app/src/main/java/com/example/tampopo_client/views/FriendActivity.java @@ -1,58 +1,78 @@ package com.example.tampopo_client.views; - +import android.app.Dialog; +import android.content.Context; +import android.content.Intent; import android.os.Bundle; -import android.view.LayoutInflater; import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.Toast; -import androidx.activity.EdgeToEdge; -import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.widget.Toolbar; -import androidx.core.graphics.Insets; -import androidx.core.view.ViewCompat; -import androidx.core.view.WindowInsetsCompat; -import androidx.lifecycle.ViewModelProvider; -import androidx.navigation.NavController; -import androidx.navigation.Navigation; -import com.example.tampopo_client.databinding.ActivityFriendBinding; -import androidx.navigation.ui.AppBarConfiguration; -import androidx.navigation.ui.NavigationUI; +import androidx.viewpager2.widget.ViewPager2; import com.example.tampopo_client.R; -import com.google.android.material.bottomnavigation.BottomNavigationView; +import com.example.tampopo_client.views.MyFragmentAdapter; +import com.google.android.material.tabs.TabLayout; +import com.google.android.material.tabs.TabLayoutMediator; public class FriendActivity extends AppCompatActivity { - private ActivityFriendBinding binding; + + private ViewPager2 viewPager; + private TabLayout tabLayout; + private MyFragmentAdapter adapter; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + setContentView(R.layout.activity_friend); -// 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; -// }); -// } - binding = ActivityFriendBinding.inflate(getLayoutInflater()); - setContentView(binding.getRoot()); + viewPager = findViewById(R.id.view_pager); + tabLayout = findViewById(R.id.tab_layout); - Toolbar toolbar = findViewById(R.id.actionbar); - setSupportActionBar(toolbar); + adapter = new MyFragmentAdapter(this); + viewPager.setAdapter(adapter); - BottomNavigationView navView = findViewById(R.id.nav_view); - // Passing each menu ID as a set of Ids because each - // menu should be considered as top level destinations. - AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder( - R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications) - .build(); - NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_activity_main); - NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration); - NavigationUI.setupWithNavController(binding.navView, navController); + new TabLayoutMediator(tabLayout, viewPager, (tab, position) -> { + if (position == 0) { + tab.setText("フレンド"); + } else if (position == 1) { + tab.setText("保留中"); + } + }).attach(); + + //フレンド画面からメイン画面への遷移 + ImageButton buttonReturn = (ImageButton) findViewById(R.id.buttonReturn); + buttonReturn.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + Intent intent = new Intent(FriendActivity.this, MainActivity.class); + startActivity(intent); + } + }); + ImageButton openDialogButton = findViewById(R.id.buttonAdd); + openDialogButton.setOnClickListener(v -> showAddFriendDialog(this)); + + } + public void showAddFriendDialog(Context context) { + Dialog dialog = new Dialog(context); + dialog.setContentView(R.layout.dialog_add_friend); + dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent); + dialog.getWindow().setDimAmount(0.5f); + EditText editFriendId = dialog.findViewById(R.id.edit_friend_id); + Button buttonSearch = dialog.findViewById(R.id.button_search); + ImageView buttonClose = dialog.findViewById(R.id.button_close); + + buttonClose.setOnClickListener(v -> dialog.dismiss()); + + buttonSearch.setOnClickListener(v -> { + String id = editFriendId.getText().toString(); + // TODO: IDを使って検索処理を行う + Toast.makeText(context, "検索: " + id, Toast.LENGTH_SHORT).show(); + }); + + dialog.show(); } - -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/tampopo_client/views/MyFragmentAdapter.java b/app/src/main/java/com/example/tampopo_client/views/MyFragmentAdapter.java new file mode 100644 index 0000000..5528201 --- /dev/null +++ b/app/src/main/java/com/example/tampopo_client/views/MyFragmentAdapter.java @@ -0,0 +1,30 @@ +package com.example.tampopo_client.views; + +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; +import androidx.viewpager2.adapter.FragmentStateAdapter; + +public class MyFragmentAdapter extends FragmentStateAdapter { + + public MyFragmentAdapter(@NonNull FragmentActivity fragmentActivity) { + super(fragmentActivity); + } + + @NonNull + @Override + public Fragment createFragment(int position) { + if (position == 0) { + // フラグメント①:申請を受けた + return new FriendReceivedFragment(); + } else { + // フラグメント②:友達リスト + return new FriendListFragment(); + } + } + + @Override + public int getItemCount() { + return 2; + } +} diff --git a/app/src/main/res/layout/activity_friend.xml b/app/src/main/res/layout/activity_friend.xml index 6f2939d..5217891 100644 --- a/app/src/main/res/layout/activity_friend.xml +++ b/app/src/main/res/layout/activity_friend.xml @@ -1,86 +1,81 @@ - + android:background="#BDE6FA"> - - + - - - + app:layout_constraintVertical_bias="0.016" /> - - - - - - - - - - + - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - + - + + + + + + + + + diff --git a/app/src/main/res/layout/dialog_add_friend.xml b/app/src/main/res/layout/dialog_add_friend.xml new file mode 100644 index 0000000..4ea31db --- /dev/null +++ b/app/src/main/res/layout/dialog_add_friend.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + +