diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2179e9b..012205b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,6 +3,7 @@ xmlns:tools="http://schemas.android.com/tools"> > friendIdsLiveData; + private final MutableLiveData friendPair; public FriendViewModel(){ 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.usersResource = retrofit.create(UserResource.class); this.friendsResource = retrofit.create(FriendsResource.class); this.friendIdsLiveData = new MutableLiveData<>(); + this.friendPair = new MutableLiveData<>(); } public MutableLiveData> getFriendIdsLiveData(){ return this.friendIdsLiveData; } + public MutableLiveData getFriendPair(){ + return this.friendPair; + } public void loadFriends(String userId, String token){ Call> call = usersResource.getFriends(userId, token); @@ -56,4 +63,25 @@ } }); } + + public void addFriend(String token, String user0Id, String user1Id){ + Call call = friendsResource.createFriend(token, user0Id, user1Id); + + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if(response.isSuccessful()){ + friendPair.setValue(response.body()); + System.out.println(response.code()); + }else{ + System.out.println(response.code()); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + System.out.println("NetWorkError" + t); + } + }); + } } 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 effcf58..6fc54b2 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 @@ -24,6 +24,16 @@ viewModel側  viewModelからsetValueで値を変えていく updateUserName、updateEmail、login、createUserもある。それらを書いていく。viewから必要なものを出していく + +viewとviewModels +イベントパターン +1.画面を表示するごとに値を取る +2.ボタンを押した際の通信をする +3.画面の途中で更新する + +view側がviewModelを使うための方法 +1.最初にUserViewModel userViewModelで宣言 88行目 userViewModelのインスタンスを作る + */ public class UserViewModel extends ViewModel { @@ -49,13 +59,19 @@ public LiveDataisLoading() { return loading;} public LiveData getError() { return error; } - //新規登録 + //新規登録 enqueueで非同期処理、Callbackで成功失敗の処理、LiveDataに反映 + //サーバーから返ってきた型と合わせないとFailureに流れる public void createUser(String id, String password) { loading.setValue(true); userResource.createUser(id, password).enqueue(new Callback() { @Override public void onResponse(Call c, Response res) { loading.setValue(false); if (res.isSuccessful()) { + User u = res.body(); + user.setValue(u); // ① ユーザ情報 + token.setValue(u.getToken()); + + // ついでにユーザ情報を取得したい場合 user.setValue(res.body()); } else { error.setValue("登録失敗: " + res.code()); @@ -63,7 +79,28 @@ } @Override public void onFailure(Call c, Throwable t) { loading.setValue(false); - error.setValue("ネットワークエラー: " + t.getMessage()); + error.setValue("エラー: " + t.getMessage()); + } + }); + } + + //ログイン + public void login(String id, String password) { + loading.setValue(true); + userResource.login(id, password).enqueue(new Callback() { + @Override public void onResponse(Call c, Response res) { + loading.setValue(false); + if (res.isSuccessful()) { + userResource.getUser(id); + token.setValue(res.body()); + + } else { + error.setValue("ログイン失敗: " + res.code()); + } + } + @Override public void onFailure(Call c, Throwable t) { + loading.setValue(false); + error.setValue("エラー: " + t.getMessage()); } }); } diff --git a/app/src/main/java/com/example/tampopo_client/views/FriendListFragment.java b/app/src/main/java/com/example/tampopo_client/views/FriendListFragment.java index b616b19..203ab3b 100644 --- a/app/src/main/java/com/example/tampopo_client/views/FriendListFragment.java +++ b/app/src/main/java/com/example/tampopo_client/views/FriendListFragment.java @@ -13,7 +13,7 @@ import android.view.ViewGroup; import com.example.tampopo_client.R; -import com.example.tampopo_client.views.placeholder.PlaceholderContent; +import com.example.tampopo_client.views.placeholder.FriendContent; /** * A fragment representing a list of Items. @@ -65,7 +65,7 @@ } else { recyclerView.setLayoutManager(new GridLayoutManager(context, mColumnCount)); } - recyclerView.setAdapter(new MyFriendRecyclerViewAdapter(PlaceholderContent.ITEMS)); + recyclerView.setAdapter(new MyFriendRecyclerViewAdapter(FriendContent.ITEMS)); } return view; } diff --git a/app/src/main/java/com/example/tampopo_client/views/LoginActivity.java b/app/src/main/java/com/example/tampopo_client/views/LoginActivity.java index a72efcb..d34fc94 100644 --- a/app/src/main/java/com/example/tampopo_client/views/LoginActivity.java +++ b/app/src/main/java/com/example/tampopo_client/views/LoginActivity.java @@ -1,15 +1,24 @@ package com.example.tampopo_client.views; +import android.content.Intent; import android.os.Bundle; +import android.content.Intent; +import android.view.View; +import android.view.View.OnClickListener; + +import android.widget.Button; 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.views.MainActivity; import com.example.tampopo_client.R; public class LoginActivity extends AppCompatActivity { + UserViewModel userViewModel; @Override protected void onCreate(Bundle savedInstanceState) { @@ -21,5 +30,26 @@ v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); return insets; }); + userViewModel = new ViewModelProvider(this).get(UserViewModel.class); + + Button button_login = (Button) findViewById(R.id.loginbutton); + button_login.setOnClickListener(new OnClickListener(){ + + public void onClick(View v){ + Intent intent = new Intent(LoginActivity.this, MainActivity.class); + startActivity(intent); + + } + }); + + Button button_createaccount = (Button) findViewById(R.id.createaccountbutton); + button_createaccount.setOnClickListener(new OnClickListener(){ + + public void onClick(View v){ + Intent intent = new Intent(LoginActivity.this, RegisterActivity.class); + startActivity(intent); + } + }); + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/tampopo_client/views/MyFriendRecyclerViewAdapter.java b/app/src/main/java/com/example/tampopo_client/views/MyFriendRecyclerViewAdapter.java index 5ee7ffe..bbcd4e4 100644 --- a/app/src/main/java/com/example/tampopo_client/views/MyFriendRecyclerViewAdapter.java +++ b/app/src/main/java/com/example/tampopo_client/views/MyFriendRecyclerViewAdapter.java @@ -1,26 +1,25 @@ 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.FragmentFriendListBinding; +import com.example.tampopo_client.views.placeholder.FriendContent; import java.util.List; +import androidx.recyclerview.widget.RecyclerView; + /** - * {@link RecyclerView.Adapter} that can display a {@link PlaceholderItem}. + * {@link RecyclerView.Adapter} that can display a {@link FriendContent.FriendItem}. * TODO: Replace the implementation with code for your data type. */ public class MyFriendRecyclerViewAdapter extends RecyclerView.Adapter { - private final List mValues; + private final List mValues; - public MyFriendRecyclerViewAdapter(List items) { + public MyFriendRecyclerViewAdapter(List items) { mValues = items; } @@ -46,7 +45,7 @@ public class ViewHolder extends RecyclerView.ViewHolder { public final TextView mIdView; public final TextView mContentView; - public PlaceholderItem mItem; + public FriendContent.FriendItem mItem; public ViewHolder(FragmentFriendListBinding binding) { super(binding.getRoot()); diff --git a/app/src/main/java/com/example/tampopo_client/views/placeholder/FriendContent.java b/app/src/main/java/com/example/tampopo_client/views/placeholder/FriendContent.java new file mode 100644 index 0000000..7db3489 --- /dev/null +++ b/app/src/main/java/com/example/tampopo_client/views/placeholder/FriendContent.java @@ -0,0 +1,81 @@ +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 FriendContent { + + /** + * 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(FriendItem item) { + + ITEMS.add(item); + ITEM_MAP.put(item.id, item); + } + + + private static FriendItem createPlaceholderItem(int position) { + return new FriendItem(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 FriendItem { + + public final String id; + public final String content; + public final String details; + + + public FriendItem(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/drawable/eye.png b/app/src/main/res/drawable/eye.png new file mode 100644 index 0000000..0cb343f --- /dev/null +++ b/app/src/main/res/drawable/eye.png Binary files differ diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index 072e326..15a2dfc 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -5,6 +5,115 @@ android:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".views.LoginActivity"> + tools:context=".views.LoginActivity" + android:background="#E0F7FA"> + + + + + +