SettingMainFragmentリファクタリング #121

Merged
Fujimatsu merged 8 commits from improve/refactor2 into main 2024-07-02 14:20:52 +00:00

View File

@ -3,7 +3,6 @@ package one.nem.kidshift.feature.setting;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.os.Bundle; import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
@ -16,8 +15,8 @@ import android.widget.TextView;
import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import javax.inject.Inject; import javax.inject.Inject;
@ -48,7 +47,7 @@ public class SettingMainFragment extends Fragment {
TextView username; TextView username;
TextView useradress; TextView userMailAddress;
SettingAdapter mainAdapter; SettingAdapter mainAdapter;
SwipeRefreshLayout swipeRefreshLayout; SwipeRefreshLayout swipeRefreshLayout;
@ -63,6 +62,10 @@ public class SettingMainFragment extends Fragment {
logger = ksLoggerFactory.create("SettingMainFragment"); logger = ksLoggerFactory.create("SettingMainFragment");
} }
/**
* 親情報を更新する
* @return CompletableFuture<Void>
*/
private CompletableFuture<Void> updateParentInfo(){ private CompletableFuture<Void> updateParentInfo(){
return parentData.getParent(new ParentModelCallback() { return parentData.getParent(new ParentModelCallback() {
@Override @Override
@ -81,11 +84,15 @@ public class SettingMainFragment extends Fragment {
} }
}).thenAccept(parentModel -> { }).thenAccept(parentModel -> {
username.setText(parentModel.getName() != null ? parentModel.getName() : "親の名前"); username.setText(parentModel.getName() != null ? parentModel.getName() : "親の名前");
useradress.setText(parentModel.getEmail() != null ? parentModel.getEmail() : "親のアドレス"); userMailAddress.setText(parentModel.getEmail() != null ? parentModel.getEmail() : "親のアドレス");
}); });
} }
/**
* 子供情報を更新する
* @return CompletableFuture<Void>
*/
@SuppressLint("NotifyDataSetChanged") @SuppressLint("NotifyDataSetChanged")
private CompletableFuture<Void> updateChildInfo(){ private CompletableFuture<Void> updateChildInfo(){
return childData.getChildList(new ChildModelCallback() { return childData.getChildList(new ChildModelCallback() {
@ -113,6 +120,9 @@ public class SettingMainFragment extends Fragment {
}); });
} }
/**
* ユーザー情報を更新するラッパー
*/
private void updateInfo() { private void updateInfo() {
CompletableFuture<Void> updateParent = updateParentInfo(); CompletableFuture<Void> updateParent = updateParentInfo();
CompletableFuture<Void> updateChildList = updateChildInfo(); CompletableFuture<Void> updateChildList = updateChildInfo();
@ -125,6 +135,10 @@ public class SettingMainFragment extends Fragment {
updateParent.thenCombine(updateChildList, (res1, res2) -> null).thenRun(() -> { updateParent.thenCombine(updateChildList, (res1, res2) -> null).thenRun(() -> {
logger.debug("アップデート完了"); logger.debug("アップデート完了");
swipeRefreshLayout.setRefreshing(false); swipeRefreshLayout.setRefreshing(false);
}).exceptionally(e -> {
logger.error("アップデート失敗: " + e.getMessage());
swipeRefreshLayout.setRefreshing(false);
return null;
}); });
} }
@ -135,60 +149,49 @@ public class SettingMainFragment extends Fragment {
View view = inflater.inflate(R.layout.fragment_setting_main, container, false); View view = inflater.inflate(R.layout.fragment_setting_main, container, false);
// ビューの取得
username = view.findViewById(R.id.username); username = view.findViewById(R.id.username);
useradress = view.findViewById(R.id.useradress); userMailAddress = view.findViewById(R.id.useradress);
swipeRefreshLayout = view.findViewById(R.id.swipe_refresh_layout);
RecyclerView recyclerView = view.findViewById(R.id.childrecyclerview); RecyclerView recyclerView = view.findViewById(R.id.childrecyclerview);
// RecyclerViewの設定
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getContext()); RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getContext());
recyclerView.setLayoutManager(layoutManager); recyclerView.setLayoutManager(layoutManager);
mainAdapter = new SettingAdapter(); mainAdapter = new SettingAdapter();
recyclerView.setAdapter(mainAdapter); recyclerView.setAdapter(mainAdapter);
// Pull-to-refreshスワイプで更新 // ユーザー情報の更新(初回)
swipeRefreshLayout = view.findViewById(R.id.swipe_refresh_layout);
try {
/*
TODO:
- コールバックの処理を実装
- 結果に応じてRecyclerViewを更新する
- キャッシュ受け取りの時にjoinでUIスレッドをブロックしないように
- Placeholderの表示?
- エラーハンドリング try catch文
- onFailed時にそれを通知
*/
updateInfo();
swipeRefreshLayout.setOnRefreshListener(() ->{
updateInfo(); updateInfo();
// スワイプリフレッシュのリスナー
swipeRefreshLayout.setOnRefreshListener(() -> {
updateInfo(); // ユーザー情報の更新
}); });
} catch (Exception e) { // ダイアログの設定
// LayoutInflater dialogInflater = requireActivity().getLayoutInflater();
} View childListView = dialogInflater.inflate(R.layout.add_child_list_dialog,null);
LayoutInflater inflater1 = requireActivity().getLayoutInflater();
View view1 = inflater1.inflate(R.layout.add_child_list_dialog,null);
//子供の名前追加のダイアログ //子供の名前追加のダイアログ
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(getContext()); MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(requireContext());
builder.setTitle("お子様の名前を入力してください。") builder.setTitle("お子様の名前を入力してください。")
.setView(view1) .setView(childListView)
.setPositiveButton("追加",null) .setPositiveButton("追加",null)
.setNeutralButton("閉じる",null); .setNeutralButton("閉じる",null);
builder.create(); builder.create();
// ダイアログの表示
view.findViewById(R.id.addchildname).setOnClickListener(v -> { view.findViewById(R.id.addchildname).setOnClickListener(v -> {
builder.show(); builder.show();
}); });
return view; return view;
} }
@Override
public void onResume() {
super.onResume();
// TODO: 更新する?
}
} }