diff --git a/app/src/main/java/com/example/citrusclient/Citrus.java b/app/src/main/java/com/example/citrusclient/Citrus.java index 07637ce..52505ac 100644 --- a/app/src/main/java/com/example/citrusclient/Citrus.java +++ b/app/src/main/java/com/example/citrusclient/Citrus.java @@ -26,7 +26,6 @@ public Integer getCurDay(){return curDay;} public String getCurLookingAccountId(){return curLookingAccountId;} public Integer getCurLookingBookId(){return curLookingBookId;} - //setter public void setToken(String token){ this.token = token; diff --git a/app/src/main/java/com/example/citrusclient/rest/AccountsRest.java b/app/src/main/java/com/example/citrusclient/rest/AccountsRest.java index 0941f37..592ecd2 100644 --- a/app/src/main/java/com/example/citrusclient/rest/AccountsRest.java +++ b/app/src/main/java/com/example/citrusclient/rest/AccountsRest.java @@ -1,10 +1,15 @@ package com.example.citrusclient.rest; +import dalvik.annotation.optimization.FastNative; import retrofit2.Call; +import retrofit2.http.DELETE; import retrofit2.http.Field; import retrofit2.http.FormUrlEncoded; +import retrofit2.http.GET; import retrofit2.http.POST; +import retrofit2.http.PUT; import retrofit2.http.Path; +import retrofit2.http.Query; public interface AccountsRest { @@ -27,4 +32,53 @@ @Path("account_id") String account_id, @Field("password") String password ); + + //仮 + //パスワード変更 + @FormUrlEncoded + @PUT("accounts/{account_id}/password") + Call changePW( + @Path("account_id") String account_id, + @Field("new_password") String new_password, + @Field("old_password") String old_password, + @Field("token") String token + ); + + //仮 + //アカウント削除 + @FormUrlEncoded + @DELETE("accounts/{account_id}") + Call deleteId( + @Path("account_id") String account_id, + @Query("token") String token, + @Query("password") String password + ); + //仮 + //アカウントの色を返す + @FormUrlEncoded + @GET("accounts/{account_id}/accountColor") + Call getAccountColor( + @Path("account_id") String account_id + ); + + //仮 + //アカウントカラー変更 + @FormUrlEncoded + @PUT("accounts/{account_id}/accountColor") + Call changeColor( + @Path("account_id") String account_id, + @Field("accountColor") String accountColor, + @Field("token") String token + ); + + //仮 + //アカウント変更 + @FormUrlEncoded + @PUT("accounts/{account_id}") + Call changeAccount( + @Path("account_id") String account_id, + @Field("new_account_id") String new_account_id, + @Field("old_password") String old_password, + @Field("token") String token + ); } diff --git a/app/src/main/java/com/example/citrusclient/viewmodels/FavoritesViewModel.java b/app/src/main/java/com/example/citrusclient/viewmodels/FavoritesViewModel.java index 48322d5..e183844 100644 --- a/app/src/main/java/com/example/citrusclient/viewmodels/FavoritesViewModel.java +++ b/app/src/main/java/com/example/citrusclient/viewmodels/FavoritesViewModel.java @@ -88,4 +88,38 @@ } }); } + + public void setFavorite(String accountId,Integer bookId,String otherAccountId,String token){ + Call call = favoritesRest.putFavorite(accountId, bookId, otherAccountId, token); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if(response.isSuccessful()){ + System.out.println("success : putFavorite"); + }else System.out.println(response.code()); + } + + @Override + public void onFailure(Call call, Throwable t) { + System.out.println("NetworkError : putFavorite" + t); + } + }); + } + + public void deletefavorite(String accountId,Integer bookId,String otherAccountId,String token){ + Call call = favoritesRest.removeFavorite(accountId, bookId, otherAccountId, token); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if(response.isSuccessful()){ + System.out.println("success : removeFavorite"); + }else System.out.println(response.code()); + } + + @Override + public void onFailure(Call call, Throwable t) { + System.out.println("NetworkError : removeFavorite" + t); + } + }); + } } diff --git a/app/src/main/java/com/example/citrusclient/viewmodels/SettingsViewModel.java b/app/src/main/java/com/example/citrusclient/viewmodels/SettingsViewModel.java new file mode 100644 index 0000000..d58ef10 --- /dev/null +++ b/app/src/main/java/com/example/citrusclient/viewmodels/SettingsViewModel.java @@ -0,0 +1,142 @@ +package com.example.citrusclient.viewmodels; + +import com.example.citrusclient.Citrus; +import com.example.citrusclient.rest.AccountsRest; + +import java.net.HttpCookie; + +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.jackson.JacksonConverterFactory; + +public class SettingsViewModel extends ViewModel { + private final Retrofit retrofit; + private final AccountsRest accountsRest; + private final MutableLiveData accountColorLiveData; + + + public SettingsViewModel(){ + retrofit = new Retrofit.Builder() + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/citrus/") + .addConverterFactory(JacksonConverterFactory.create()) + .build(); + this.accountsRest = retrofit.create(AccountsRest.class); + this.accountColorLiveData = new MutableLiveData<>(); + } + public MutableLiveData getAccountColorLiveData(){return accountColorLiveData;} + + public void loadAccountColor(String accountId){ + Call call= accountsRest.getAccountColor(accountId); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + String strAccountColor = response.body(); + if (response.isSuccessful()){ + System.out.println("success"); + accountColorLiveData.setValue(strAccountColor); + }else{ + System.out.println("fail"); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + System.out.println("NetworkError"+t); + + } + }); + } + + //なんちゃって通信ver1 + //PW変更時のサーバ通信プログラム + public void changePW(String accountId, String old_password, String new_password,String token){ + Call call = accountsRest.changePW(accountId, old_password, new_password, token); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + System.out.println("success"); + //成功処理 + } else { + System.out.println("fail"); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + System.out.println("NetWorkError"+t); + } + }); + } + //通信ver2 + //アカウント削除 + public void deleteId(String accountId, String token, String password){ + Call call =accountsRest.deleteId(accountId,token,password); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if(response.isSuccessful()){ + System.out.println("success"); + //成功処理 + }else{ + System.out.println("fail"); + //もしコンソール表記をするならこの下に処理を記載 + } + } + + @Override + public void onFailure(Call call, Throwable t) { + System.out.println("NetWorkError"+t); + //もしコンソール表記をするならこの下に処理を記載 + } + }); + } + + //通信Ver3 + //色変更 + public void changeColor(String accountId, String accountColor, String token){ + Call call =accountsRest.changeColor(accountId, accountColor, token); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if(response.isSuccessful()){ + System.out.println("success"); + + }else{ + System.out.println("fail"); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + System.out.println("NetWorkError"+t); + } + }); + } + + //通信Ver4 + //アカウント名変更 + public void changeAccount(String accountId, String accountColor, String token){ + Call call =accountsRest.changeColor(accountId, accountColor, token); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if(response.isSuccessful()){ + System.out.println("success"); + }else{ + System.out.println("fail"); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + System.out.println("NetWorkError"+t); + } + }); + } + +} diff --git a/app/src/main/java/com/example/citrusclient/views/CalendarFragment.java b/app/src/main/java/com/example/citrusclient/views/CalendarFragment.java index 3dba52e..8e0360a 100644 --- a/app/src/main/java/com/example/citrusclient/views/CalendarFragment.java +++ b/app/src/main/java/com/example/citrusclient/views/CalendarFragment.java @@ -1,5 +1,6 @@ package com.example.citrusclient.views; +import android.app.Activity; import android.graphics.Color; import android.os.Bundle; @@ -60,9 +61,17 @@ private TableLayout tableLayout; private TableRow[] tableRows = new TableRow[6]; + private TextView curMonth; public CalendarFragment() { - // Required empty public constructor + Calendar calendar = Calendar.getInstance(); + year = calendar.get(Calendar.YEAR); //現在の年 + month = calendar.get(Calendar.MONTH) + 1; //現在の月 + } + + public CalendarFragment(int year, int month) { + this.year = year; + this.month = month; } /** @@ -236,9 +245,9 @@ booksViewModel.loadBooks(accountId, token); tableLayout = view.findViewById(R.id.calendarlayout); - Calendar calendar = Calendar.getInstance(); - year = calendar.get(Calendar.YEAR); //現在の年 - month = calendar.get(Calendar.MONTH) + 1; //現在の月 +// Calendar calendar = Calendar.getInstance(); +// year = calendar.get(Calendar.YEAR); //現在の年 +// month = calendar.get(Calendar.MONTH) + 1; //現在の月 scheduleViewModel.updateSchedulesByMonth(accountId, year, month, token); @@ -309,7 +318,6 @@ //カレンダーの初期表示 TableLayout tableLayout = view.findViewById(R.id.calendarlayout); TextView[][] days = calendar(firstDayOfWeek, prevMonthDay, lastDay); - String[][] daysString = calendarString(firstDayOfWeek, prevMonthDay, lastDay); for(int i = 0; i < 6; i++) { TableRow tableRow = (TableRow) tableLayout.getChildAt(i); for(int j = 0; j < 7; j++) { @@ -327,7 +335,26 @@ public void onClick(View view) { citrus.setCurMonth(month); citrus.setCurYear(year); + //指定した年月の一日の曜日を取得 + LocalDate firstDay = LocalDate.of(year, month, 1); + DayOfWeek dayOfWeek = firstDay.getDayOfWeek(); + int firstDayOfWeek = dayOfWeek.getValue(); + //前の月の最後の日付を取得 + LocalDate lastDate = LocalDate.of(year, month, 1); + LocalDate lastDayPrevMonth = lastDate.minusDays(1); + int prevMonthDay = lastDayPrevMonth.getDayOfMonth(); + //現在の月の最後の日付を取得 + YearMonth yearMonth = YearMonth.of(year, month); + LocalDate CurLastDay = yearMonth.atEndOfMonth(); + int lastDay = CurLastDay.getDayOfMonth(); + + String[][] daysString = calendarString(firstDayOfWeek, prevMonthDay, lastDay); citrus.setCurDay(Integer.parseInt(daysString[ii][jj])); + if(ii == 0 && Integer.parseInt(daysString[ii][jj]) > 8) { + citrus.setCurMonth(month - 1); + } else if (ii >= 4 && Integer.parseInt(daysString[ii][jj]) < 25) { + citrus.setCurMonth(month + 1); + } ((MainActivity) getActivity()).showFragment(new HomeFragment()); } }); diff --git a/app/src/main/java/com/example/citrusclient/views/CreateTodoFragment.java b/app/src/main/java/com/example/citrusclient/views/CreateTodoFragment.java index 250cbe2..2a2ea34 100644 --- a/app/src/main/java/com/example/citrusclient/views/CreateTodoFragment.java +++ b/app/src/main/java/com/example/citrusclient/views/CreateTodoFragment.java @@ -246,12 +246,16 @@ } if(isEdit){ //編集時 - todosViewModel.setTodo(accountId,editBook.getBookId() ,editTodo.getYear(),editTodo.getMonth(), - editTodo.getDay(), editTodo.getTodoId(), title,spinner.getSelectedItemPosition(), year, month, day, token); + //編集前のTodoは削除 + todosViewModel.deleteTodo(accountId,editBook.getBookId(),editTodo.getYear(), + editTodo.getMonth(),editTodo.getDay(), editTodo.getTodoId(), token); + //編集後の年月日にTodoを追加 + todosViewModel.createTodo(accountId,spinner.getSelectedItemPosition(),year,month,day,title,token); + ((MainActivity)getActivity()).backFragment(); }else{ //追加時 - todosViewModel.createTodo(accountId,spinner.getSelectedItemPosition(),year,month,day,title,token); + todosViewModel.createTodo(accountId,spinner.getSelectedItemPosition(),year,month,day,title ,token); ((MainActivity)getActivity()).backFragment(); } diff --git a/app/src/main/java/com/example/citrusclient/views/HomeFragment.java b/app/src/main/java/com/example/citrusclient/views/HomeFragment.java index 5f5762f..2d37c7a 100644 --- a/app/src/main/java/com/example/citrusclient/views/HomeFragment.java +++ b/app/src/main/java/com/example/citrusclient/views/HomeFragment.java @@ -139,7 +139,6 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - Citrus citrus = (Citrus)(getActivity().getApplication()); String token = citrus.getToken(); String accountId = citrus.getAccountId(); @@ -157,16 +156,20 @@ todoRecyclerView.setHasFixedSize(true); RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(view.getContext()); todoRecyclerView.setLayoutManager(layoutManager); - MyTodoshelfAdapter todoAdapter = new MyTodoshelfAdapter(todoList, integerBookHashMap, todosViewModel, citrus, getActivity()); + MyTodoshelfAdapter todoAdapter = new MyTodoshelfAdapter(todoList, integerBookHashMap, todosViewModel, getActivity()); todoRecyclerView.setAdapter(todoAdapter); RecyclerView scheduleRecyclerView = view.findViewById(R.id.my_schedule_list); scheduleRecyclerView.setHasFixedSize(true); RecyclerView.LayoutManager scheduleLayoutManager = new LinearLayoutManager(view.getContext()); scheduleRecyclerView.setLayoutManager(scheduleLayoutManager); - MyScheduleshelfAdapter scheduleAdapter = new MyScheduleshelfAdapter(scheduleList, integerBookHashMap); + MyScheduleshelfAdapter scheduleAdapter = new MyScheduleshelfAdapter(scheduleList, integerBookHashMap, curDate, getActivity()); scheduleRecyclerView.setAdapter(scheduleAdapter); + Button dateButton = view.findViewById(R.id.date_button); + dateButton.setOnClickListener(v -> { + ((MainActivity) getActivity()).showFragment(new CalendarFragment(year, month)); + }); FloatingActionButton todoAddButton = view.findViewById(R.id.todo_add_button); todoAddButton.setOnClickListener(v -> { @@ -197,6 +200,7 @@ day = curDate.getDayOfMonth(); curDateButton.setText(year + "年" + month + "月" + day + "日"); updateTodoSchedule(integerBookHashMap); + }); @@ -218,9 +222,9 @@ for(Todo todo : idTodoHashMap.values()){ if(!todo.containsTodo(todoList)){ todoList.add(todo); - todoAdapter.setTodos(todoList, integerBookHashMap); } } + todoAdapter.setTodos(todoList, integerBookHashMap); } else { todoAdapter.setTodos(todoList, integerBookHashMap); } @@ -284,17 +288,10 @@ private List todoList; private HashMap idBookHashMap; private TodosViewModel todosViewModel; - private Citrus citrus; - private String accountId; - private String token; private Context context; - - MyTodoshelfAdapter(List todos, HashMap idBookHashMap, TodosViewModel todosViewModel, Citrus citrus, Context context) { - this.citrus = citrus; - this.token = citrus.getToken(); - this.accountId = citrus.getAccountId(); + MyTodoshelfAdapter(List todos, HashMap idBookHashMap, TodosViewModel todosViewModel, Context context) { this.todoList = todos; this.todosViewModel = todosViewModel; if (idBookHashMap != null) { @@ -314,7 +311,6 @@ } sortTodosById(); - notifyDataSetChanged(); } @@ -327,6 +323,11 @@ @Override public void onBindViewHolder(@NonNull MyTodoViewHolder holder, int position) { + Activity activity = (Activity) context; + Citrus citrus = (Citrus)(activity.getApplication()); + String token = citrus.getToken(); + String accountId = citrus.getAccountId(); + Todo todoData = this.todoList.get(position); holder.todoButton.setText(todoData.getTitle()); holder.todoCheckBox.setChecked(todoData.getCheck()); @@ -340,10 +341,7 @@ } holder.todoButton.setOnClickListener(v -> { - Activity activity = (Activity) context; ((MainActivity) activity).showFragment(new CreateTodoFragment(todoData, book)); - notifyDataSetChanged(); - }); holder.todoCheckBox.setOnCheckedChangeListener((buttonView, isChecked) -> { @@ -375,7 +373,6 @@ return Integer.compare(todo1.getTodoId(), todo2.getTodoId()); // 同じbookIdの場合、todoIdで比較 } }); - notifyDataSetChanged(); // データ変更をアダプタに通知 } @@ -394,14 +391,19 @@ private List scheduleList; private HashMap idBookHashMap; + private Context context; + private LocalDate curDate; - MyScheduleshelfAdapter(List schedules, HashMap idBookHashMap) { + MyScheduleshelfAdapter(List schedules, HashMap idBookHashMap, LocalDate curDate, Context context) { this.scheduleList = schedules; if (idBookHashMap != null) { this.idBookHashMap = new HashMap<>(idBookHashMap); } else { this.idBookHashMap = new HashMap<>(); // 空のHashMapを作成 - } } + } + this.curDate = curDate; + this.context = context; + } public void setSchedules(List schedules, HashMap idBookHashMap) { scheduleList = schedules; @@ -423,12 +425,14 @@ @Override public void onBindViewHolder(@NonNull MyScheduleViewHolder holder, int position) { + Activity activity = (Activity) context; + int red = 169; int green = 169; int blue = 169; Schedule scheduleData = this.scheduleList.get(position); holder.scheduleButton.setText(scheduleData.getTitle()); - holder.scheduleButton.setText(scheduleData.getTitle() + "\n" + extractionTime(scheduleData.getStartTime()) + " ~ " + extractionTime(scheduleData.getEndTime())); + holder.scheduleButton.setText(scheduleData.getTitle() + "\n" + extractionTime(scheduleData.getStartTime(), curDate) + " ~ " + extractionTime(scheduleData.getEndTime(), curDate)); Book book = idBookHashMap.get(scheduleData.getBookId()); if(book != null) { red = Integer.parseInt(book.getColor().substring(1, 3), 16); @@ -438,8 +442,13 @@ holder.scheduleButton.setBackgroundColor(Color.rgb(red, green, blue)); holder.scheduleButton.setTextColor(Color.rgb(255 - red, 255 - green, 255 - blue)); + holder.scheduleButton.setOnClickListener(v -> { + ((MainActivity) activity).showFragment(new CreateScheduleFragment()); + }); } + + private void sortScheduleByTime() { Collections.sort(scheduleList, new Comparator() { @Override @@ -459,7 +468,6 @@ // StringをLocalDateTimeに変換 LocalDateTime dateTime = LocalDateTime.parse(scheduleTime, formatter); - System.out.println(dateTime); // 年、月、日、時、分を抽出 long year = dateTime.getYear(); @@ -467,11 +475,9 @@ long day = dateTime.getDayOfMonth(); long hour = dateTime.getHour(); long minute = dateTime.getMinute(); - System.out.println(year); // 必要に応じて整数を組み合わせる(例: YYYYMMDDHHMM) long result = year *100000000 +month * 1000000 + day * 10000 + hour * 100 + minute; - System.out.println(result); return result; } catch (DateTimeParseException e) { @@ -480,10 +486,27 @@ } } - private static String extractionTime(String scheduleTime) { + private static String extractionTime(String scheduleTime, LocalDate curDate) { + int year = curDate.getYear(); + int month = curDate.getMonthValue(); + int day = curDate.getDayOfMonth(); + long yearMonth = year * 10000 + month * 100 + day; + long scheduleYearMonth = convertTimeInteger(scheduleTime) / 1000000; + +// long scheduleYearMonth = extractUpperDigits(convertTimeInteger(scheduleTime), 8); + System.out.println(yearMonth); + System.out.println(scheduleYearMonth); return scheduleTime.substring(scheduleTime.length() - 5); } + public static long extractUpperDigits(long number, int digitCount) { + // 10の累乗を計算 + long divisor = (long) Math.pow(10, String.valueOf(number).length() - digitCount); +// System.out.println(divisor); +// System.out.println(number / divisor); + return number / divisor; // 上位の桁を抽出 + } + @Override public int getItemCount() { return scheduleList.size(); diff --git a/app/src/main/java/com/example/citrusclient/views/MainActivity.java b/app/src/main/java/com/example/citrusclient/views/MainActivity.java index 371c2d0..9e9b32e 100644 --- a/app/src/main/java/com/example/citrusclient/views/MainActivity.java +++ b/app/src/main/java/com/example/citrusclient/views/MainActivity.java @@ -81,7 +81,8 @@ showFragment(new HomeFragment()); }else if(itemId == R.id.calendar){ //カレンダ showFragment(new CalendarFragment()); - }else if(itemId == R.id.face){//マイページ + }else if(itemId == R.id.face){//マイページ//設定画面 + showFragment(new SettingsFragment()); } return true; } diff --git a/app/src/main/java/com/example/citrusclient/views/SignUpActivity.java b/app/src/main/java/com/example/citrusclient/views/SignUpActivity.java index 4b492b3..d1385fc 100644 --- a/app/src/main/java/com/example/citrusclient/views/SignUpActivity.java +++ b/app/src/main/java/com/example/citrusclient/views/SignUpActivity.java @@ -66,7 +66,6 @@ this.accountsRest = retrofit.create(AccountsRest.class); - findViewById(R.id.button_signup).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -102,7 +101,7 @@ //端末にtoken.id登録 String token = response.body(); citrus.setToken(token); - citrus.setAccountId(id); + //画面遷移 handler.post(new Runnable() { diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml index 49f1eb1..6090f93 100644 --- a/app/src/main/res/layout/fragment_settings.xml +++ b/app/src/main/res/layout/fragment_settings.xml @@ -1,6 +1,7 @@ + android:layout_width="match_parent" + android:layout_height="match_parent"> + + android:id="@+id/IconColor" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="アイコンの色の選択" + android:textColor="@color/black" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.498" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.18" /> + + android:id="@+id/IdChange" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="ユーザネーム変更" + android:textColor="@color/black" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.449" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.43" /> + + android:id="@+id/NowPassword1" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="現在のパスワード" + android:textColor="@color/black" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.151" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.494" /> + + android:id="@+id/EnterNowPassword" + android:layout_width="130dp" + android:layout_height="38dp" + android:ems="10" + android:inputType="text" + android:hint="nowpassword" + android:textColor="#80000000" + android:textSize="15sp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.697" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.487" /> + + android:id="@+id/NewUsername" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="新しいアカウント名" + android:textColor="@color/black" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.159" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.543" /> + + android:id="@+id/EnterNewUsename" + android:layout_width="130dp" + android:layout_height="41dp" + android:ems="10" + android:inputType="text" + android:hint="newusername" + android:textColor="#80000000" + android:textSize="15sp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.697" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.544" /> + + android:id="@+id/PasswordChange" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="パスワード変更" + android:textColor="@color/black" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.455" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.677" /> + + android:id="@+id/NowPassword2" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="現在のパスワード" + android:textColor="@color/black" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.144" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.735" /> + + android:id="@+id/NewPassword" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="新しいパスワード" + android:textColor="@color/black" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.151" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.79" /> + + android:id="@+id/EnterNowPassword2" + android:layout_width="130dp" + android:layout_height="wrap_content" + android:ems="10" + android:inputType="text" + android:hint="nowpassword" + android:textColor="#80000000" + android:textSize="15sp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.697" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.743" /> + + android:id="@+id/EnterNewPassword" + android:layout_width="130dp" + android:layout_height="wrap_content" + android:ems="10" + android:inputType="text" + android:hint="newpassword" + android:textColor="#80000000" + android:textSize="15sp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.697" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.802" /> + + android:id="@+id/FavoritePosts" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="いいねした投稿" + android:textColor="@color/black" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.471" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.943" /> +