diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 1719529..7ec1c97 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -44,10 +44,11 @@
implementation(libs.retrofit2.retrofit)
implementation(libs.converter.jackson)
implementation(libs.navigation.runtime.android)
+ implementation (libs.material.v1100)
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 012205b..0ff4bd5 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,6 +1,7 @@
+
+
-
\ No newline at end of file
+
diff --git a/app/src/main/java/com/example/tampopo_client/models/User.java b/app/src/main/java/com/example/tampopo_client/models/User.java
index c5092a1..706145d 100644
--- a/app/src/main/java/com/example/tampopo_client/models/User.java
+++ b/app/src/main/java/com/example/tampopo_client/models/User.java
@@ -2,7 +2,7 @@
public class User {
- private Integer id; //ユーザーID
+ private String userId; //ユーザーID
private String name; //ニックネーム
private String email; //メールアドレス
private String icon; //アイコン
@@ -16,12 +16,16 @@
this.icon = icon;
}
+ public User() {
- public Integer getId() {
- return id;
}
- public void setId(Integer id) {
- this.id = id;
+
+
+ public String getId() {
+ return userId;
+ }
+ public void setId(String userId) {
+ this.userId = userId;
}
public String getName() {
diff --git a/app/src/main/java/com/example/tampopo_client/resources/UserResource.java b/app/src/main/java/com/example/tampopo_client/resources/UserResource.java
index 7db852b..5e9f426 100644
--- a/app/src/main/java/com/example/tampopo_client/resources/UserResource.java
+++ b/app/src/main/java/com/example/tampopo_client/resources/UserResource.java
@@ -20,7 +20,7 @@
@GET("users")
Call> getUsers();
- // 新規アカウントを作る
+ // 新規アカウントを作成
@FormUrlEncoded
@POST("users")
Call createUser(
diff --git a/app/src/main/java/com/example/tampopo_client/ui/notifications/NotificationsFragment.java b/app/src/main/java/com/example/tampopo_client/ui/notifications/NotificationsFragment.java
new file mode 100644
index 0000000..16eba68
--- /dev/null
+++ b/app/src/main/java/com/example/tampopo_client/ui/notifications/NotificationsFragment.java
@@ -0,0 +1,37 @@
+package com.example.tampopo_client.ui.notifications;
+
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.fragment.app.Fragment;
+import androidx.lifecycle.ViewModelProvider;
+
+import com.example.tampopo_client.databinding.FragmentNotificationsBinding;
+
+public class NotificationsFragment extends Fragment {
+
+ private FragmentNotificationsBinding binding;
+
+ public View onCreateView(@NonNull LayoutInflater inflater,
+ ViewGroup container, Bundle savedInstanceState) {
+ NotificationsViewModel notificationsViewModel =
+ new ViewModelProvider(this).get(NotificationsViewModel.class);
+
+ binding = FragmentNotificationsBinding.inflate(inflater, container, false);
+ View root = binding.getRoot();
+
+ final TextView textView = binding.textNotifications;
+ notificationsViewModel.getText().observe(getViewLifecycleOwner(), textView::setText);
+ return root;
+ }
+
+ @Override
+ public void onDestroyView() {
+ super.onDestroyView();
+ binding = null;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/tampopo_client/ui/notifications/NotificationsViewModel.java b/app/src/main/java/com/example/tampopo_client/ui/notifications/NotificationsViewModel.java
new file mode 100644
index 0000000..403564e
--- /dev/null
+++ b/app/src/main/java/com/example/tampopo_client/ui/notifications/NotificationsViewModel.java
@@ -0,0 +1,19 @@
+package com.example.tampopo_client.ui.notifications;
+
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.MutableLiveData;
+import androidx.lifecycle.ViewModel;
+
+public class NotificationsViewModel extends ViewModel {
+
+ private final MutableLiveData 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/ActivityViewModel.java b/app/src/main/java/com/example/tampopo_client/viewmodels/ActivityViewModel.java
index 72d5f07..5a2e999 100644
--- a/app/src/main/java/com/example/tampopo_client/viewmodels/ActivityViewModel.java
+++ b/app/src/main/java/com/example/tampopo_client/viewmodels/ActivityViewModel.java
@@ -31,7 +31,7 @@
public ActivityViewModel() {
final Retrofit retrofit = new Retrofit.Builder()
- .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/tampopo-server/")
+ .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/tampopo/")
.addConverterFactory(JacksonConverterFactory.create())
.build();
activitiesResource = retrofit.create(ActivitiesResource.class);
diff --git a/app/src/main/java/com/example/tampopo_client/viewmodels/FriendReceivedRequestViewModel.java b/app/src/main/java/com/example/tampopo_client/viewmodels/FriendReceivedRequestViewModel.java
index fb1c277..596ddc4 100644
--- a/app/src/main/java/com/example/tampopo_client/viewmodels/FriendReceivedRequestViewModel.java
+++ b/app/src/main/java/com/example/tampopo_client/viewmodels/FriendReceivedRequestViewModel.java
@@ -8,6 +8,9 @@
import java.util.List;
+import retrofit2.Call;
+import retrofit2.Callback;
+import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.jackson.JacksonConverterFactory;
@@ -17,24 +20,77 @@
//APIの窓口
private final FriendRequestsResource friendRequestsResource;
//自分が受け取った申請
- private final MutableLiveData> receivedRequests ;
+ private final MutableLiveData> receivedRequests;
//通信結果の状態
- private final MutableLiveData operationResult ;
+ private final MutableLiveData operationResult;
public FriendReceivedRequestViewModel() {
this.retrofit = new Retrofit.Builder()
- .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/tampopo-server/")
+ .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/tampopo/")
.addConverterFactory(JacksonConverterFactory.create())
.build();
this.friendRequestsResource = retrofit.create(FriendRequestsResource.class);
this.receivedRequests = new MutableLiveData<>();
this.operationResult = new MutableLiveData<>();
}
+
//viewがobserve出来るように
public MutableLiveData> getSentRequestsLiveData() {
return receivedRequests;
}
+ //サーバーから受け取ったFriendReceivedRequestのデータを格納してキャッシュしていくぞ
+ public void loadReceivedRequests(String token) {
+ //tokenを渡して、受信フレンド申請一覧を取得するHTTPリクエスト(Webのサーバーに対して何かをお願いするメッセージ」)を作る準備をしている
+ Call> call = friendRequestsResource.getFriendRequests(token);
+ //call.enqueueでサーバーへ送信(何を?)
+ call.enqueue(new Callback>() {
+ @Override
+ public void onResponse(Call> call, Response> response) {
+ if (response.isSuccessful()) {
+ //通信が成功したらLiveDataへのキャッシュ
+ receivedRequests.setValue(response.body());
+ operationResult.setValue("Success");
+ System.out.println("Success SetValue" + response.body());
+ } else {
+ operationResult.setValue("Error: " + response.code());
+ System.out.println("response error");
+ }
+ }
+ @Override
+ public void onFailure(Call> call, Throwable t) {
+ operationResult.setValue("Network error: " + t.getMessage());
+ System.out.println("ネットワークエラー: " + t);
+ }
+ });
+ }
+ // フレンドリクエスト削除メソッド
+ public void deleteFriendRequest(String friendRequestId, String token) {
+ Call call = friendRequestsResource.deleteFriendRequest(friendRequestId, token);
+
+ call.enqueue(new Callback() {
+ @Override
+ public void onResponse(Call call, Response response) {
+ if (response.isSuccessful()) {
+ operationResult.setValue("Friend request deleted successfully.");
+ loadReceivedRequests(token); // 削除後、一覧を更新
+ System.out.println("Deleted friend request ID: " + friendRequestId);
+ } else {
+ operationResult.setValue("Error deleting request: " + response.code());
+ System.out.println("Error deleting request: " + response.code());
+ }
+ }
+
+ @Override
+ public void onFailure(Call call, Throwable t) {
+ operationResult.setValue("Network error: " + t.getMessage());
+ System.out.println("Network error: " + t);
+ }
+ });
+ }
}
+
+
+
diff --git a/app/src/main/java/com/example/tampopo_client/viewmodels/FriendSentRequestViewModel.java b/app/src/main/java/com/example/tampopo_client/viewmodels/FriendSentRequestViewModel.java
index 6676003..c9a99ea 100644
--- a/app/src/main/java/com/example/tampopo_client/viewmodels/FriendSentRequestViewModel.java
+++ b/app/src/main/java/com/example/tampopo_client/viewmodels/FriendSentRequestViewModel.java
@@ -6,44 +6,107 @@
import com.example.tampopo_client.models.FriendRequest;
import com.example.tampopo_client.resources.FriendRequestsResource;
-
import java.util.List;
+import retrofit2.Call;
+import retrofit2.Callback;
+import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.jackson.JacksonConverterFactory;
public class FriendSentRequestViewModel extends ViewModel {
- //サーバー(API)と通信するためのツール
+ // サーバー(API)と通信するためのツール
private final Retrofit retrofit;
+
// APIの窓口
private final FriendRequestsResource friendRequestsResource;
- //自分が送った申請
- private final MutableLiveData> sentRequests ;
- //変数がfinalやから一回しか代入できません
- //sentRequestで呼び出される、viewモデルの下のコンストラクターがアンドロイドがで呼び出される
- // 処理の進行中
- private final MutableLiveData operationResult ;
+ // 自分が送ったフレンド申請一覧
+ private final MutableLiveData> sentRequests;
+ // 処理の進行状況や結果を表示するためのステータスメッセージ
+ private final MutableLiveData operationResult;
+ // コンストラクタ(ViewModel生成時に呼び出される)
public FriendSentRequestViewModel() {
-
this.retrofit = new Retrofit.Builder()
- .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/tampopo-server/")
+ .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/tampopo/")
.addConverterFactory(JacksonConverterFactory.create())
.build();
this.friendRequestsResource = retrofit.create(FriendRequestsResource.class);
this.sentRequests = new MutableLiveData<>();
this.operationResult = new MutableLiveData<>();
-
}
- //viewがobserve出来るように
- public MutableLiveData> getSentRequestsLiveData() {
- return sentRequests;
- }
-//Mutable Livedataの宣言
+ // Viewがobserveできるようにgetterを用意
+ public MutableLiveData> getSentRequestsLiveData() {
+ return sentRequests;
+ }
+
+ public MutableLiveData getOperationResult() {
+ return operationResult;
+ }
+
+ // サーバーから送信済みフレンドリクエスト一覧を取得してキャッシュに保存
+ public void loadSentRequests(String token) {
+ Call> call = friendRequestsResource.getFriendRequests(token);
+
+ call.enqueue(new Callback>() {
+ @Override
+ public void onResponse(Call> call, Response> response) {
+ if (response.isSuccessful()) {
+ sentRequests.setValue(response.body());
+ operationResult.setValue("Success");
+ System.out.println("Success SetValue: " + response.body());
+ } else {
+ operationResult.setValue("Error: " + response.code());
+ System.out.println("Response error: " + response.code());
+ }
+ }
+
+ @Override
+ public void onFailure(Call> call, Throwable t) {
+ operationResult.setValue("Network error: " + t.getMessage());
+ System.out.println("Network error: " + t);
+ }
+ });
+ }
+
+ // サーバーにフレンド申請を送信するメソッド
+ public void sendFriendRequest(String senderId, String receiverId, String token) {
+ Call call = friendRequestsResource.postFriendRequest(token, senderId, receiverId);
+
+ call.enqueue(new Callback() {
+ @Override
+ public void onResponse(Call call, Response response) {
+ if (response.isSuccessful()) {
+ //Retrofitでサーバーにリクエストを送った後、その結果が帰ってくる。成功
+ operationResult.setValue("Friend request sent successfully.");
+
+ // 成功時に送信済みリストを更新
+ loadSentRequests(token);
+
+ System.out.println("Friend request sent: " + response.body());
+ } else {
+ operationResult.setValue("Error sending request: " + response.code());
+ System.out.println("Error sending request: " + response.code());
+ }
+ }
+
+ @Override
+ public void onFailure(Call call, Throwable t) {
+ operationResult.setValue("Network error: " + t.getMessage());
+ System.out.println("Network error: " + t);
+ }
+ });
+ }
+}
+
+
+
+
+
@@ -123,4 +186,4 @@
// }
//}
-}
+
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 a4e6274..9c4005c 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
@@ -64,7 +64,7 @@
});
}
- public void addFriend(String token, String user0Id, String user1Id){
+ public void createFriend(String token, String user0Id, String user1Id){
Call call = friendsResource.createFriend(token, user0Id, user1Id);
call.enqueue(new Callback() {
diff --git a/app/src/main/java/com/example/tampopo_client/viewmodels/UserViewModel.java b/app/src/main/java/com/example/tampopo_client/viewmodels/UserViewModel.java
index e106806..f16fdf6 100644
--- a/app/src/main/java/com/example/tampopo_client/viewmodels/UserViewModel.java
+++ b/app/src/main/java/com/example/tampopo_client/viewmodels/UserViewModel.java
@@ -48,7 +48,7 @@
//コンストラクタ
public UserViewModel(){
this.retrofit = new Retrofit.Builder()
- .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/tampopo-server/")
+ .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/tampopo/")
.addConverterFactory(JacksonConverterFactory.create())
.build();
this.userResource = 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/LaunchActivity.java b/app/src/main/java/com/example/tampopo_client/views/LaunchActivity.java
index d36fa48..c3076d4 100644
--- a/app/src/main/java/com/example/tampopo_client/views/LaunchActivity.java
+++ b/app/src/main/java/com/example/tampopo_client/views/LaunchActivity.java
@@ -10,8 +10,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.viewmodels.UserViewModel;
+
+import retrofit2.Retrofit;
public class LaunchActivity extends AppCompatActivity {
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 c253be2..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
@@ -3,19 +3,41 @@
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.ArrayAdapter;
import android.widget.Button;
+import android.widget.EditText;
+import android.widget.GridView;
import android.widget.ImageButton;
+import android.widget.LinearLayout;
import androidx.activity.EdgeToEdge;
+import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
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 {
+ private EditText editMessage;
+ private ImageButton sendButton;
+ private GridView wordGroup;
+ private LinearLayout messageList;
+ //アクティビティの選択肢
+ private String[] words = {"ひまnow", "あそぼ!", "そろそろ会いたない〜?", "勉強なう", "電話しよ~", "お風呂入ってくる~", "今暇だよー!", "いそがしい~!!"};
+ private Button openDialogButton;
+
+ ActivityViewModel activityViewModel;
+ Tampopo tampopo;
+
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -36,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() {
@@ -54,5 +82,67 @@
// }
// });
+ messageList = findViewById(R.id.messageList);
+
+ // ボタンを押すとダイアログ表示(トリガー用)
+ openDialogButton = findViewById(R.id.openDialogButton);
+ openDialogButton.setOnClickListener(v -> showInputDialog());
+
}
+
+ private void showInputDialog() {
+ // カスタムビュー読み込み
+ View dialogView = getLayoutInflater().inflate(R.layout.main_dialog, null);
+ EditText editTextInput = dialogView.findViewById(R.id.editTextInput);
+ 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);
+
+ // 語群クリックで入力欄にセット
+ wordGrid.setOnItemClickListener((parent, view, position, id) -> {
+ editTextInput.setText(words[position]);
+ // 入力欄にフォーカス&キーボード表示
+ editTextInput.requestFocus();
+ InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
+ imm.showSoftInput(editTextInput, InputMethodManager.SHOW_IMPLICIT);
+ });
+
+ // ダイアログ生成
+ AlertDialog dialog = new AlertDialog.Builder(this)
+ .setView(dialogView)
+ .create();
+
+ // 送信ボタン処理
+ sendButton.setOnClickListener(v -> {
+ String message = editTextInput.getText().toString().trim();
+ int length = message.length();
+ if (!message.isEmpty()) {
+ activityViewModel.createActivity(userId, token, message);
+ if (length > 20) {
+ openDialogButton.setTextSize(7);
+ } else if (length > 10) {
+ openDialogButton.setTextSize(10);
+ } else {
+ openDialogButton.setTextSize(12);
+ }
+ openDialogButton.setMaxLines(10);
+ openDialogButton.setLineSpacing(4.0f, 1.2f);
+ openDialogButton.setText(message);
+ editTextInput.setText("");
+ dialog.dismiss(); // ダイアログを閉じる
+ } else {
+ openDialogButton.setText("");
+ }
+ });
+
+ 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..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/RegisterActivity.java b/app/src/main/java/com/example/tampopo_client/views/RegisterActivity.java
index 4ba2800..625e438 100644
--- a/app/src/main/java/com/example/tampopo_client/views/RegisterActivity.java
+++ b/app/src/main/java/com/example/tampopo_client/views/RegisterActivity.java
@@ -4,16 +4,23 @@
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
+import android.widget.EditText;
+import android.widget.Toast;
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 androidx.lifecycle.ViewModelProvider;
import com.example.tampopo_client.R;
+import com.example.tampopo_client.Tampopo;
+import com.example.tampopo_client.viewmodels.UserViewModel;
public class RegisterActivity extends AppCompatActivity {
+ private Tampopo tampopo;
+ UserViewModel userViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -25,19 +32,55 @@
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
});
- Button button_register = (Button) findViewById(R.id.Registerbutton);
- button_register.setOnClickListener(new View.OnClickListener() {
+
+ //Tampopoの取得
+ tampopo = (Tampopo) this.getApplication();
+ //ViewModel の取得
+ userViewModel = new ViewModelProvider(this).get(UserViewModel.class);
+
+ //入力欄の取得
+ EditText userIdEditText = findViewById(R.id.editTextUserId);
+ EditText passwordEditText = findViewById(R.id.editTextPassword);
+
+
+ //登録
+ Button registerButton = (Button) findViewById(R.id.Registerbutton);
+ registerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
- Intent intent = new Intent(RegisterActivity.this,LoginActivity.class);
- startActivity(intent);
+ String userId = userIdEditText.getText().toString().trim();
+ String password = passwordEditText.getText().toString().trim();
+
+ //空文字チェック
+ if (userId.isEmpty() || password.isEmpty()) {
+ Toast.makeText(RegisterActivity.this, "IDとパスワードを入力してください", Toast.LENGTH_SHORT).show();
+ return;
+ }
+
+ //通信
+ userViewModel.createUser(userId, password);
+
+
+ //アカウントの確認、問題なければ通信
+ if (userViewModel.getUser().getValue() != null) {
+ userViewModel.login(userId, password);
+ tampopo.setUserId(userId);
+ tampopo.setPassword(password);
+ Intent intent = new Intent(RegisterActivity.this, MainActivity.class);
+ startActivity(intent);
+ } else {
+ Toast.makeText(RegisterActivity.this, "アカウント作成に失敗しました", Toast.LENGTH_SHORT).show();
+ }
+
}
});
- button_register = (Button) findViewById(R.id.Loginbutton2);
- button_register.setOnClickListener(new View.OnClickListener() {
+
+ //ログイン画面へ
+ Button loginButton = findViewById(R.id.Loginbutton2);
+ loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
- Intent intent = new Intent(RegisterActivity.this,LoginActivity.class);
+ Intent intent = new Intent(RegisterActivity.this, LoginActivity.class);
startActivity(intent);
}
});
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/drawable/comment.png b/app/src/main/res/drawable/comment.png
new file mode 100644
index 0000000..963fbb5
--- /dev/null
+++ b/app/src/main/res/drawable/comment.png
Binary files differ
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_launch.xml b/app/src/main/res/layout/activity_launch.xml
index 7ccbd4b..cc3237c 100644
--- a/app/src/main/res/layout/activity_launch.xml
+++ b/app/src/main/res/layout/activity_launch.xml
@@ -23,7 +23,7 @@
+ app:layout_constraintVertical_bias="0.692"
+ app:cornerRadius="0dp" />