diff --git a/app/src/main/java/com/example/tampopo_client/Tampopo.java b/app/src/main/java/com/example/tampopo_client/Tampopo.java index 6ca0763..52a0285 100644 --- a/app/src/main/java/com/example/tampopo_client/Tampopo.java +++ b/app/src/main/java/com/example/tampopo_client/Tampopo.java @@ -1,11 +1,14 @@ package com.example.tampopo_client; import android.app.Application; +import android.content.SharedPreferences; public class Tampopo extends Application { - public String getUserId; + private SharedPreferences prefs; - public String getToken; + //public String getUserId; + + //public String getToken; private String token; private String userId; private String password; @@ -13,11 +16,28 @@ private String mailaddress; private String nickname; private String icon; +// +// @Override +// public void onCreate() { +// super.onCreate(); +// prefs = getSharedPreferences("user_prefs", MODE_PRIVATE); +// +// // 起動時に保存された値を読み込む +// token = prefs.getString("token", ""); +// userId = prefs.getString("userId", ""); +// password = prefs.getString("password", ""); +// chatroomId = prefs.getString("chatroomId", ""); +// mailaddress = prefs.getString("mailaddress", ""); +// nickname = prefs.getString("nickname", ""); +// icon = prefs.getString("icon", ""); +// } + public String getToken() {return token;} public void setToken(String token) { this.token = token; + //prefs.edit().putString("token", token).apply(); } public String getUserId() { @@ -26,14 +46,25 @@ public void setUserId(String userId) { this.userId = userId; + //prefs.edit().putString("userId", userId).apply(); } + public String getMailaddress() { return mailaddress; } + + public void setMailaddress(String mailaddress) { + this.mailaddress = mailaddress; + //prefs.edit().putString("mailaddress", mailaddress).apply(); + } + + + public String getPassword() { return password; } public void setPassword(String password) { this.password = password; + //prefs.edit().putString("password", password).apply(); } public String getChatroomId() { @@ -44,15 +75,19 @@ this.chatroomId = ChatroomId; } - public String getMailaddress() { return mailaddress; } - public void setMailaddress(String mailaddress) {this.mailaddress = mailaddress; } public String getNickname() { return nickname; } - public void setNickname(String nickname) {this.nickname = nickname; } + public void setNickname(String nickname) { + this.nickname = nickname; + //prefs.edit().putString("nickname", nickname).apply(); + } public String getIcon() { return icon; } - public void setIcon(String icon) {this.icon = icon; } + public void setIcon(String icon) { + this.icon = icon; + //prefs.edit().putString("icon", icon).apply(); + } } 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 706145d..6533361 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 @@ -55,4 +55,7 @@ public void setToken(String token){ this.token = token; } + + public void setPassword(String body) { + } } 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 4fe101d..4fc6812 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 @@ -40,11 +40,11 @@ public class UserViewModel extends ViewModel { private final Retrofit retrofit; - private final UserResource userResource; - private final MutableLiveData user = new MutableLiveData<>(); + private static UserResource userResource; + private static final MutableLiveData user = new MutableLiveData<>(); private final MutableLiveData token = new MutableLiveData<>(); - private final MutableLiveDataloading = new MutableLiveData<>(false); - private final MutableLiveData error = new MutableLiveData<>(); + private static final MutableLiveDataloading = new MutableLiveData<>(false); + private static final MutableLiveData error = new MutableLiveData<>(); //コンストラクタ public UserViewModel(){ @@ -59,7 +59,7 @@ public LiveData getUser() { return user; } public LiveData getToken() { return token; } public LiveDataisLoading() { return loading;} - public LiveData getError() { return error; } + public static LiveData getError() { return error; } //新規登録 enqueueで非同期処理、Callbackで成功失敗の処理、LiveDataに反映 //サーバーから返ってきた型と合わせないとFailureに流れる @@ -104,5 +104,90 @@ }); } + //ニックネームの変更(市井) + public void updateName(String userId, String newName, String tokenValue) { + loading.setValue(true); + + userResource.updateName(userId, newName, tokenValue).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + loading.setValue(false); + if (response.isSuccessful()) { + // LiveData に更新 + User currentUser = user.getValue(); + if (currentUser != null) { + currentUser.setName(response.body()); + user.setValue(currentUser); + } + } else { + error.setValue("ニックネーム変更失敗: " + response.code()); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + loading.setValue(false); + error.setValue("通信エラー: " + t.getMessage()); + } + }); + } + //パスワードの変更(市井) + public void updatePassword(String userId, String newPassword) { + loading.setValue(true); + + userResource.updatePassword(userId, newPassword).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + loading.setValue(false); + if (response.isSuccessful()) { + // LiveData に更新 + User currentUser = user.getValue(); + if (currentUser != null) { + currentUser.setPassword(newPassword); + user.setValue(currentUser); + } + } else { + error.setValue("パスワード変更失敗: " + response.code()); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + loading.setValue(false); + error.setValue("通信エラー: " + t.getMessage()); + } + }); + } + + + //emailの変更(市井) + public void updateEmail(String userId, String newEmale, String tokenValue) { + loading.setValue(true); + + userResource.updateEmail(userId, newEmale, tokenValue).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + loading.setValue(false); + if (response.isSuccessful()) { + // LiveData に更新 + User currentUser = user.getValue(); + if (currentUser != null) { + currentUser.setEmail(response.body()); + user.setValue(currentUser); + } + } else { + error.setValue("メールアドレス変更失敗: " + response.code()); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + loading.setValue(false); + error.setValue("通信エラー: " + t.getMessage()); + } + }); + } + + //viewModelのところでを呼び出すがフレンド系は西村さんの方で管理する } diff --git a/app/src/main/java/com/example/tampopo_client/views/AccountActivity.java b/app/src/main/java/com/example/tampopo_client/views/AccountActivity.java index 90ed189..fbc4948 100644 --- a/app/src/main/java/com/example/tampopo_client/views/AccountActivity.java +++ b/app/src/main/java/com/example/tampopo_client/views/AccountActivity.java @@ -6,18 +6,24 @@ import android.widget.Button; import android.widget.EditText; import android.widget.ImageButton; +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 androidx.lifecycle.Observer; import com.example.tampopo_client.R; import com.example.tampopo_client.Tampopo; +import com.example.tampopo_client.viewmodels.UserViewModel; public class AccountActivity extends AppCompatActivity { + private UserViewModel userViewModel; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -29,78 +35,107 @@ return insets; }); + // ViewModel初期化 + userViewModel = new ViewModelProvider(this).get(UserViewModel.class); //アカウント編集画面から設定画面への遷移 - ImageButton buttonReturn = (ImageButton)findViewById(R.id.buttonReturn); - buttonReturn.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - Intent intent = new Intent(AccountActivity.this, SettingActivity.class); - startActivity(intent); - } + ImageButton buttonReturn = findViewById(R.id.buttonReturn); + buttonReturn.setOnClickListener(v -> { + Intent intent = new Intent(AccountActivity.this, SettingActivity.class); + startActivity(intent); }); //もともとのメールアドレスを表示 - EditText mailbuttonInput = (EditText) findViewById(R.id.mailbutton); + EditText mailbuttonInput = findViewById(R.id.mailbutton); mailbuttonInput.setText(((Tampopo) AccountActivity.this.getApplication()).getMailaddress()); //決定ボタンを押したときにパスワードとメールアドレスを保存 - Button dicisionbutton = (Button) findViewById(R.id.dicisionbutton); + Button dicisionbutton = findViewById(R.id.dicisionbutton); dicisionbutton.setOnClickListener(new View.OnClickListener() { - private Object getApplication; - + @Override public void onClick(View v) { - //現在のパスワード - EditText beforepasswordbuttonInput = (EditText) findViewById(R.id.beforepasswordbutton); - String beforepasswordbutton = beforepasswordbuttonInput.getText().toString(); + Tampopo app = (Tampopo) AccountActivity.this.getApplication(); - //パスワード変更 - EditText afterpasswordbutton1Input = (EditText) findViewById(R.id.afterpasswordbutton1); + //現在の(保存されている)パスワード + String currentStoredPassword = app.getPassword() == null ? "" : app.getPassword(); + + + System.out.println("【DEBUG】保存されているパスワード:" + currentStoredPassword); + String beforepasswordbutton = null; + System.out.println("【DEBUG】入力された現在のパスワード:" + beforepasswordbutton); + + + //入力された「現在のパスワード」 + EditText beforepasswordbuttonInput = findViewById(R.id.beforepasswordbutton); + beforepasswordbutton = beforepasswordbuttonInput.getText().toString(); + + //入力された「新しいパスワード」2回分 + EditText afterpasswordbutton1Input = findViewById(R.id.afterpasswordbutton1); String afterpasswordbutton1 = afterpasswordbutton1Input.getText().toString(); - EditText afterpasswordbutton2Input = (EditText) findViewById(R.id.afterpasswordbutton2); - String afterpasswordbutton2 = afterpasswordbutton1Input.getText().toString(); - ((Tampopo) AccountActivity.this.getApplication()).setPassword(afterpasswordbutton2); + EditText afterpasswordbutton2Input = findViewById(R.id.afterpasswordbutton2); + String afterpasswordbutton2 = afterpasswordbutton2Input.getText().toString(); - //メールアドレス登録 - EditText mailbuttonInput = (EditText) findViewById(R.id.mailbutton); + //メールアドレス登録用 + EditText mailbuttonInput = findViewById(R.id.mailbutton); String mailbutton = mailbuttonInput.getText().toString(); - ((Tampopo) AccountActivity.this.getApplication()).setMailaddress(mailbutton); - //もし前のパスワードが合っていなかったはじくようにする + // バリデーション + // 1) 現在のパスワードが一致するか + if (!beforepasswordbutton.equals(currentStoredPassword)) { + Toast.makeText(AccountActivity.this, "現在のパスワードが違います。", Toast.LENGTH_SHORT).show(); + return; + } + // 2) 新しいパスワードが2回一致しているか + if (!afterpasswordbutton1.equals(afterpasswordbutton2)) { + Toast.makeText(AccountActivity.this, "新しいパスワードが一致しません。", Toast.LENGTH_SHORT).show(); + return; + } + + // 3) 新しいパスワードが現在のものと同じでないか(同じならはじく) + if (afterpasswordbutton1.equals(currentStoredPassword)) { + Toast.makeText(AccountActivity.this, "新しいパスワードは現在のパスワードと同じです。別のパスワードを入力してください。", Toast.LENGTH_SHORT).show(); + return; + } + + // 全て通れば保存 + app.setPassword(afterpasswordbutton1); + app.setMailaddress(mailbutton); + + Toast.makeText(AccountActivity.this, "アカウント情報を更新しました。", Toast.LENGTH_SHORT).show(); + + // Application(Tampopo)に保存(→SharedPreferencesにも自動保存される) + app = (Tampopo) getApplication(); + app.setPassword(afterpasswordbutton1); + app.setMailaddress(mailbutton); + +// // ---- ★ サーバに送信する部分 ★ ---- +// String userId = app.getUserId(); +// String token = app.getToken(); +// +// UserViewModel.updatePassword(userId, afterpasswordbutton1, token); +// +// // サーバ送信の結果を監視して成功したら保存 +// UserViewModel.getError().observe(this, msg -> { +// if (msg != null) { +// Toast.makeText(AccountActivity.this, msg, Toast.LENGTH_SHORT).show(); +// } else { +// // 成功時のみアプリ内も更新 +// app.setPassword(afterpasswordbutton1); +// app.setMailaddress(mailbutton); +// Toast.makeText(AccountActivity.this, "アカウント情報を更新しました。", Toast.LENGTH_SHORT).show(); +// +// Intent intent = new Intent(AccountActivity.this, SettingActivity.class); +// startActivity(intent); +// } //決定を押したら設定画面に遷移 Intent intent = new Intent(AccountActivity.this, SettingActivity.class); startActivity(intent); + } }); - -// //もし前のパスワードが合っていなかったはじくようにする -// -// -// //決定を押したら設定画面に遷移 -// dicisionbutton.setOnClickListener(new View.OnClickListener() { -// -// private Object getApplication; -// -// public void onClick(View v) { -// -// Intent intent = new Intent(AccountActivity.this, SettingActivity.class); -// startActivity(intent); -// -// -// } -// }); - } - @Override - protected void onStart() { - super.onStart(); - - //もともとのメールアドレスを表示 - EditText mailbuttonInput = (EditText) findViewById(R.id.mailbutton); - mailbuttonInput.setText(((Tampopo) AccountActivity.this.getApplication()).getMailaddress()); - - } -} \ No newline at end of file +} 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 003375b..722c7b7 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 @@ -87,8 +87,8 @@ super.onViewCreated(view, savedInstanceState); FriendViewModel friendViewModel = new ViewModelProvider(this).get(FriendViewModel.class); - String userId = ((Tampopo) ((FriendActivity) view.getContext()).getApplication()).getUserId; - String token = ((Tampopo) ((FriendActivity) view.getContext()).getApplication()).getToken; + String userId = ((Tampopo) ((FriendActivity) view.getContext()).getApplication()).getUserId(); + String token = ((Tampopo) ((FriendActivity) view.getContext()).getApplication()).getToken(); friendViewModel.loadFriends(userId, token); friendViewModel.getFriendIdsLiveData().observe(getViewLifecycleOwner(), new Observer>() { 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 52837ad..5c7ced7 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 @@ -46,7 +46,14 @@ @Override public void onChanged(String token) { if (token != null){ - ((Tampopo) LoginActivity.this.getApplication()).setToken(token); + Tampopo app = (Tampopo) LoginActivity.this.getApplication(); + app.setToken(token); + + EditText passwordInput = findViewById(R.id.PasswordText); + String enteredPassword = passwordInput.getText().toString(); + app.setPassword(enteredPassword); + + Intent intent = new Intent(LoginActivity.this, MainActivity.class); startActivity(intent); } diff --git a/app/src/main/java/com/example/tampopo_client/views/LogoutActivity.java b/app/src/main/java/com/example/tampopo_client/views/LogoutActivity.java index 35b0561..f62b98c 100644 --- a/app/src/main/java/com/example/tampopo_client/views/LogoutActivity.java +++ b/app/src/main/java/com/example/tampopo_client/views/LogoutActivity.java @@ -40,7 +40,7 @@ Button logoutbutton = (Button) findViewById(R.id.logoutbutton); logoutbutton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { - Intent intent = new Intent(LogoutActivity.this, SettingActivity.class); + Intent intent = new Intent(LogoutActivity.this, LaunchActivity.class); startActivity(intent); } }); diff --git a/app/src/main/java/com/example/tampopo_client/views/ProfileActivity.java b/app/src/main/java/com/example/tampopo_client/views/ProfileActivity.java index 075b7ff..3d16dc4 100644 --- a/app/src/main/java/com/example/tampopo_client/views/ProfileActivity.java +++ b/app/src/main/java/com/example/tampopo_client/views/ProfileActivity.java @@ -43,9 +43,12 @@ EditText nicknameInput = (EditText) findViewById(R.id.nicknamebutton); nicknameInput.setText(((Tampopo) ProfileActivity.this.getApplication()).getNickname()); - EditText useridInput = (EditText) findViewById(R.id.idbutton); + EditText useridInput = findViewById(R.id.idbutton); useridInput.setText(((Tampopo) ProfileActivity.this.getApplication()).getUserId()); + //IDを変更できないようにする + useridInput.setEnabled(false); + //決定ボタンを押したときにidとニックネームを保存 Button dicisionbutton = findViewById(R.id.dicisionbutton); @@ -58,7 +61,7 @@ EditText useridInput = findViewById(R.id.idbutton); String userid = useridInput.getText().toString(); - // Application(Tampopo)に保存(→SharedPreferencesにも自動保存される) + // Application(Tampopo)に保存 Tampopo app = (Tampopo) getApplication(); app.setNickname(usernickname); app.setUserId(userid);