diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 1a4e8be..0fbac27 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -45,10 +45,11 @@ implementation(libs.converter.jackson) implementation(libs.navigation.runtime.android) implementation (libs.material.v1100) + implementation(libs.converter.scalars) testImplementation(libs.junit) androidTestImplementation(libs.ext.junit) 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 e826e0d..0ff4bd5 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -34,6 +34,7 @@ + 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/viewmodels/FriendViewModel.java b/app/src/main/java/com/example/tampopo_client/viewmodels/FriendViewModel.java index 9c4005c..91b8021 100644 --- a/app/src/main/java/com/example/tampopo_client/viewmodels/FriendViewModel.java +++ b/app/src/main/java/com/example/tampopo_client/viewmodels/FriendViewModel.java @@ -14,6 +14,7 @@ import retrofit2.Response; import retrofit2.Retrofit; import retrofit2.converter.jackson.JacksonConverterFactory; +import retrofit2.converter.scalars.ScalarsConverterFactory; import retrofit2.http.Field; public class FriendViewModel extends ViewModel { @@ -27,6 +28,7 @@ public FriendViewModel(){ this.retrofit = new Retrofit.Builder() .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/tampopo/") + .addConverterFactory(ScalarsConverterFactory.create()) .addConverterFactory(JacksonConverterFactory.create()) .build(); this.usersResource = retrofit.create(UserResource.class); 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/FriendReceivedFragment.java b/app/src/main/java/com/example/tampopo_client/views/FriendReceivedFragment.java index abe19ae..a836ccc 100644 --- a/app/src/main/java/com/example/tampopo_client/views/FriendReceivedFragment.java +++ b/app/src/main/java/com/example/tampopo_client/views/FriendReceivedFragment.java @@ -56,6 +56,10 @@ Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_friend_received_list, container, false); + // Add some sample items. + for (int i = 1; i <= 30; i++) + FriendRequestContent.addItem(new FriendRequestContent.FriendRequestItem(Integer.toString(i), "ユーザ名" + i)); + // Set the adapter if (view instanceof RecyclerView) { Context context = view.getContext(); diff --git a/app/src/main/java/com/example/tampopo_client/views/MainActivity.java b/app/src/main/java/com/example/tampopo_client/views/MainActivity.java index 21e3aae..5fb81c2 100644 --- a/app/src/main/java/com/example/tampopo_client/views/MainActivity.java +++ b/app/src/main/java/com/example/tampopo_client/views/MainActivity.java @@ -1,7 +1,6 @@ package com.example.tampopo_client.views; import android.content.Intent; -import android.graphics.Color; import android.os.Bundle; import android.view.View; import android.view.inputmethod.InputMethodManager; @@ -11,7 +10,6 @@ import android.widget.GridView; import android.widget.ImageButton; import android.widget.LinearLayout; -import android.widget.TextView; import androidx.activity.EdgeToEdge; import androidx.appcompat.app.AlertDialog; @@ -19,8 +17,12 @@ import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; +import androidx.lifecycle.ViewModelProvider; import com.example.tampopo_client.R; +import com.example.tampopo_client.Tampopo; +import com.example.tampopo_client.viewmodels.ActivityViewModel; +import com.example.tampopo_client.viewmodels.UserViewModel; public class MainActivity extends AppCompatActivity { @@ -29,9 +31,13 @@ private GridView wordGroup; private LinearLayout messageList; //アクティビティの選択肢 - private String[] words = {"ひまnow","あそぼ!","そろそろ会いたない〜?", "勉強なう", "電話しよ~", "お風呂入ってくる~","今暇だよー!","いそがしい~!!"}; + private String[] words = {"ひまnow", "あそぼ!", "そろそろ会いたない〜?", "勉強なう", "電話しよ~", "お風呂入ってくる~", "今暇だよー!", "いそがしい~!!"}; private Button openDialogButton; + ActivityViewModel activityViewModel; + Tampopo tampopo; + + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -52,6 +58,12 @@ } }); + //activityViewModelを宣言する + activityViewModel = new ViewModelProvider(this).get(ActivityViewModel.class); + //tampopoを宣言する + tampopo = (Tampopo) getApplication(); + + //メイン画面から通知一覧画面への遷移 // ImageButton notificationButton = (ImageButton)findViewById(R.id.notification); // notificationButton.setOnClickListener(new View.OnClickListener() { @@ -77,6 +89,7 @@ openDialogButton.setOnClickListener(v -> showInputDialog()); } + private void showInputDialog() { // カスタムビュー読み込み View dialogView = getLayoutInflater().inflate(R.layout.main_dialog, null); @@ -84,6 +97,10 @@ GridView wordGrid = dialogView.findViewById(R.id.wordGrid); ImageButton sendButton = dialogView.findViewById(R.id.sendButton); + //tokenとuserIdを代入する + String token = tampopo.getToken(); + String userId = tampopo.getUserId(); + // 語群セット ArrayAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, words); wordGrid.setAdapter(adapter); @@ -107,19 +124,20 @@ String message = editTextInput.getText().toString().trim(); int length = message.length(); if (!message.isEmpty()) { - if(length > 20){ + activityViewModel.createActivity(userId, token, message); + if (length > 20) { openDialogButton.setTextSize(7); - }else if(length > 10){ + } else if (length > 10) { openDialogButton.setTextSize(10); - }else{ + } else { openDialogButton.setTextSize(12); } openDialogButton.setMaxLines(10); - openDialogButton.setLineSpacing(4.0f,1.2f); + openDialogButton.setLineSpacing(4.0f, 1.2f); openDialogButton.setText(message); editTextInput.setText(""); dialog.dismiss(); // ダイアログを閉じる - }else{ + } else { openDialogButton.setText(""); } }); @@ -127,21 +145,4 @@ dialog.show(); } - private void addMessageToHome(String message) { - TextView textView = new TextView(this); - textView.setText(message); - textView.setPadding(10, 10, 10, 10); - textView.setBackgroundColor(Color.parseColor("#E0E0E0")); - int length = message.length(); - if(length > 10){ - textView.setTextSize(5); - }else if(length > 7){ - textView.setTextSize(8); - }else{ - textView.setTextSize(10); - } - textView.setMaxLines(10); - textView.setLineSpacing(4.0f,1.2f); - messageList.addView(textView); - } } \ 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..5786821 --- /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 FriendListFragment(); + } else { + // フラグメント②:友達リスト + return new FriendReceivedFragment(); + } + } + + @Override + public int getItemCount() { + return 2; + } +} 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 index 9640389..7df07fc 100644 --- a/app/src/main/java/com/example/tampopo_client/views/MyFriendRequestRecyclerViewAdapter.java +++ b/app/src/main/java/com/example/tampopo_client/views/MyFriendRequestRecyclerViewAdapter.java @@ -34,7 +34,7 @@ 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); + holder.mContentView.setText(mValues.get(position).name); } @Override diff --git a/app/src/main/java/com/example/tampopo_client/views/placeholder/FriendRequestContent.java b/app/src/main/java/com/example/tampopo_client/views/placeholder/FriendRequestContent.java index cd141e8..7882221 100644 --- a/app/src/main/java/com/example/tampopo_client/views/placeholder/FriendRequestContent.java +++ b/app/src/main/java/com/example/tampopo_client/views/placeholder/FriendRequestContent.java @@ -13,26 +13,26 @@ //各アイテムにアクセスするためのID付きマップ*/ public static final Map ITEM_MAP = new HashMap(); - private static final int COUNT = 30; //データ30個作成 + public static final int COUNT = 30; //データ30個作成 //アイテムを初期化時に追加する - static { - // Add some sample items. - for (int i = 1; i <= COUNT; i++) { - addItem(createPlaceholderItem(i)); - } - } +// static { +// // Add some sample items. +// for (int i = 1; i <= COUNT; i++) { +// addItem(createPlaceholderItem(i)); +// } +// } //アイテムをリストとマップの両方に登録するメソッド - private static void addItem(FriendRequestItem item) { + public static void addItem(FriendRequestItem item) { ITEMS.add(item); ITEM_MAP.put(item.id, item); } //位置(1,2,...)に応じたFriendRequestItem を生成するメソッド - private static FriendRequestItem createPlaceholderItem(int position) { - return new FriendRequestItem(String.valueOf(position), "ユーザー名 ", makeDetails(position)); - } +// public static FriendRequestItem createPlaceholderItem(int position) { +// return new FriendRequestItem(String.valueOf(position), "ユーザー名 ", makeDetails(position)); +// } //詳細説明用の文字列を作るメソッド。position に応じて「詳細情報」がたくさん増える private static String makeDetails(int position) { @@ -47,18 +47,18 @@ //FriendRequestを表す1件のデータ public static class FriendRequestItem { public final String id; //アイテムのID - public final String content; //表示される名前 - public final String details; //詳細説明 + public final String name; //表示される名前 + //public final String details; //詳細説明 - public FriendRequestItem(String id, String content, String details) { + public FriendRequestItem(String id, String name) { this.id = id; - this.content = content; - this.details = details; + this.name = name; + //this.details = details; } @Override public String toString() { - return content; + return name + " " + id; } } } \ 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 index 880385d..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/activity_main.xml b/app/src/main/res/layout/activity_main.xml index ff32829..368f625 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -95,6 +95,7 @@ @@ -106,7 +107,7 @@ android:id="@+id/openDialogButton" android:layout_width="158dp" android:layout_height="53dp" - android:backgroundTint="@color/white" + android:background="@android:color/transparent" android:text="今何してる?" android:textColor="@color/black" app:layout_constraintBottom_toBottomOf="parent" 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 @@ + + + + + + + + + + + + + +