From a8ee7929289e111b7c708f304f14d951b9b567ea Mon Sep 17 00:00:00 2001 From: r-ca Date: Mon, 29 Jan 2024 04:38:00 +0900 Subject: [PATCH 01/67] =?UTF-8?q?Adapter=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/picker/LacertaFilePickerAdapter.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/component/common/src/main/java/one/nem/lacerta/component/common/picker/LacertaFilePickerAdapter.java b/component/common/src/main/java/one/nem/lacerta/component/common/picker/LacertaFilePickerAdapter.java index fa0163d2..29fd3eec 100644 --- a/component/common/src/main/java/one/nem/lacerta/component/common/picker/LacertaFilePickerAdapter.java +++ b/component/common/src/main/java/one/nem/lacerta/component/common/picker/LacertaFilePickerAdapter.java @@ -1,5 +1,7 @@ package one.nem.lacerta.component.common.picker; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + import one.nem.lacerta.component.common.picker.base.LacertaFilePickerAdapterBase; import one.nem.lacerta.model.ListItem; import one.nem.lacerta.model.ListItemType; @@ -9,6 +11,7 @@ public class LacertaFilePickerAdapter extends LacertaFilePickerAdapterBase { // Listener public interface LacertaFilePickerAdapterListener extends LacertaFilePickerAdapterBase.LacertaFilePickerAdapterListener { void onDocumentSelected(String documentId); + void onCombinedDocumentSelected(String documentId); } // Variables @@ -24,10 +27,16 @@ public class LacertaFilePickerAdapter extends LacertaFilePickerAdapterBase { public void onBindViewHolder(LacertaFilePickerViewHolder holder, int position) { super.onBindViewHolder(holder, position); if (libraryItemPage.getListItems().get(position).getItemType() == ListItemType.ITEM_TYPE_DOCUMENT) { - holder.itemView.setOnClickListener(v -> { - ListItem listItem = libraryItemPage.getListItems().get(position); - listener.onDocumentSelected(listItem.getItemId()); - }); + if (libraryItemPage.getListItems().get(position).getHasCombined()) { + holder.itemView.setOnClickListener(v -> { + listener.onCombinedDocumentSelected(libraryItemPage.getListItems().get(position).getItemId()); + }); + } else { + holder.itemView.setOnClickListener(v -> { + ListItem listItem = libraryItemPage.getListItems().get(position); + listener.onDocumentSelected(listItem.getItemId()); + }); + } } } } From 57fc9c5a73a68634c9133014b446066aff589c7c Mon Sep 17 00:00:00 2001 From: r-ca Date: Mon, 29 Jan 2024 04:48:51 +0900 Subject: [PATCH 02/67] =?UTF-8?q?Adapter=E5=AE=9F=E8=A3=85=20WIP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...acertaFilePickerSelectDocumentAdapter.java | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 component/common/src/main/java/one/nem/lacerta/component/common/picker/LacertaFilePickerSelectDocumentAdapter.java diff --git a/component/common/src/main/java/one/nem/lacerta/component/common/picker/LacertaFilePickerSelectDocumentAdapter.java b/component/common/src/main/java/one/nem/lacerta/component/common/picker/LacertaFilePickerSelectDocumentAdapter.java new file mode 100644 index 00000000..d76ff719 --- /dev/null +++ b/component/common/src/main/java/one/nem/lacerta/component/common/picker/LacertaFilePickerSelectDocumentAdapter.java @@ -0,0 +1,75 @@ +package one.nem.lacerta.component.common.picker; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import java.util.ArrayList; + +import one.nem.lacerta.component.common.R; +import one.nem.lacerta.model.ListItem; +import one.nem.lacerta.model.document.DocumentMeta; + +public class LacertaFilePickerSelectDocumentAdapter extends RecyclerView.Adapter{ + + // Listener + public interface LacertaFilePickerSelectDocumentAdapterListener { + void onDocumentSelected(String documentId); + } + + // Variables + LacertaFilePickerSelectDocumentAdapterListener listener; + + ArrayList listItems; + + // Setter + public LacertaFilePickerSelectDocumentAdapter setListener(LacertaFilePickerSelectDocumentAdapterListener listener) { + this.listener = listener; + return this; + } + + public void setListItems(ArrayList listItems) { + this.listItems = listItems; + } + + + @NonNull + @Override + public LacertaFilePickerSelectDocumentAdapter.LacertaFilePickerSelectDocumentViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(one.nem.lacerta.shared.ui.R.layout.common_list_item, null); + return new LacertaFilePickerSelectDocumentViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull LacertaFilePickerSelectDocumentAdapter.LacertaFilePickerSelectDocumentViewHolder holder, int position) { + ListItem listItem = listItems.get(position); + holder.title.setText(listItem.getTitle()); + holder.description.setVisibility(View.GONE); + holder.icon.setImageResource(listItem.getItemType().getIconId()); + holder.itemView.setOnClickListener(v -> listener.onDocumentSelected(listItem.getItemId())); + } + + @Override + public int getItemCount() { + return listItems == null ? 0 : listItems.size(); + } + + public class LacertaFilePickerSelectDocumentViewHolder extends RecyclerView.ViewHolder { + + ImageView icon; + TextView title; + TextView description; + + public LacertaFilePickerSelectDocumentViewHolder(@NonNull View itemView) { + super(itemView); + icon = itemView.findViewById(one.nem.lacerta.shared.ui.R.id.item_icon); + title = itemView.findViewById(one.nem.lacerta.shared.ui.R.id.item_title); + description = itemView.findViewById(one.nem.lacerta.shared.ui.R.id.item_description); + } + } +} From 65b87ef346f242d895d0bee103e2667b350048d8 Mon Sep 17 00:00:00 2001 From: r-ca Date: Mon, 29 Jan 2024 04:55:05 +0900 Subject: [PATCH 03/67] WIP --- .../picker/LacertaFilePickerDialog.java | 13 +++ ...LacertaFilePickerSelectDocumentDialog.java | 86 +++++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100644 component/common/src/main/java/one/nem/lacerta/component/common/picker/LacertaFilePickerSelectDocumentDialog.java diff --git a/component/common/src/main/java/one/nem/lacerta/component/common/picker/LacertaFilePickerDialog.java b/component/common/src/main/java/one/nem/lacerta/component/common/picker/LacertaFilePickerDialog.java index 5a082b74..09c497ce 100644 --- a/component/common/src/main/java/one/nem/lacerta/component/common/picker/LacertaFilePickerDialog.java +++ b/component/common/src/main/java/one/nem/lacerta/component/common/picker/LacertaFilePickerDialog.java @@ -76,6 +76,19 @@ public class LacertaFilePickerDialog extends LacertaFilePickerDialogBase { listener.onFileSelected(documentId, documentId); } } + + @Override + public void onCombinedDocumentSelected(String documentId) { + if (listener != null) { + LacertaFilePickerSelectDocumentDialog dialog = new LacertaFilePickerSelectDocumentDialog(); + dialog.setDocumentId(documentId); + dialog.setListener(documentId1 -> { + dismiss(); + listener.onFileSelected(documentId1, documentId1); + }); + dialog.show(getParentFragmentManager(), "select_document_dialog"); + } + } }); recyclerView.setAdapter(adapter); diff --git a/component/common/src/main/java/one/nem/lacerta/component/common/picker/LacertaFilePickerSelectDocumentDialog.java b/component/common/src/main/java/one/nem/lacerta/component/common/picker/LacertaFilePickerSelectDocumentDialog.java new file mode 100644 index 00000000..1c31db04 --- /dev/null +++ b/component/common/src/main/java/one/nem/lacerta/component/common/picker/LacertaFilePickerSelectDocumentDialog.java @@ -0,0 +1,86 @@ +package one.nem.lacerta.component.common.picker; + +import android.app.Dialog; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; + +import androidx.fragment.app.DialogFragment; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + +import java.util.ArrayList; + +import javax.inject.Inject; + +import dagger.hilt.android.AndroidEntryPoint; +import one.nem.lacerta.component.common.R; +import one.nem.lacerta.data.LacertaLibrary; +import one.nem.lacerta.model.ListItem; +import one.nem.lacerta.model.ListItemType; +import one.nem.lacerta.model.pref.ToxiDocumentModel; + +@AndroidEntryPoint +public class LacertaFilePickerSelectDocumentDialog extends DialogFragment { + + @Inject + LacertaLibrary lacertaLibrary; + + // Listener + public interface LacertaFilePickerSelectDocumentDialogListener { + void onDocumentSelected(String documentId); + } + + // Variables + LacertaFilePickerSelectDocumentDialogListener listener; + + String documentId; + + // Setter + public LacertaFilePickerSelectDocumentDialog setListener(LacertaFilePickerSelectDocumentDialogListener listener) { + this.listener = listener; + return this; + } + + public LacertaFilePickerSelectDocumentDialog setDocumentId(String documentId) { + this.documentId = documentId; + return this; + } + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + super.onCreateDialog(savedInstanceState); + + MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(getActivity()); + View view = LayoutInflater.from(getActivity()).inflate(R.layout.lacerta_dialog_select_doc, null); + + // 高さを画面の40%にする + int height = (int) (getResources().getDisplayMetrics().heightPixels * 0.4); + view.setMinimumHeight(height); + + RecyclerView recyclerView = view.findViewById(R.id.document_list_recycler_view); + + LacertaFilePickerSelectDocumentAdapter adapter = new LacertaFilePickerSelectDocumentAdapter(); + + adapter.setListener(documentId -> listener.onDocumentSelected(documentId)); + + recyclerView.setAdapter(adapter); + recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); + + lacertaLibrary.getCombinedDocumentToxiList(this.documentId).thenAccept(toxiDocumentModels -> { + ArrayList listItems = new ArrayList<>(); + for (ToxiDocumentModel toxiDocumentModel : toxiDocumentModels) { + listItems.add(new ListItem(toxiDocumentModel.titleCache, null, ListItemType.ITEM_TYPE_DOCUMENT, toxiDocumentModel.childDocumentId)); + } + adapter.setListItems(listItems); + adapter.notifyDataSetChanged(); + }); + + builder.setView(view); + return builder.create(); + } + + +} From e1c79e44aefe8bbb8e806ec8d3ea083d747dd0f0 Mon Sep 17 00:00:00 2001 From: r-ca Date: Mon, 29 Jan 2024 05:05:13 +0900 Subject: [PATCH 04/67] =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LacertaFilePickerSelectDocumentAdapter.java | 3 +-- .../LacertaFilePickerSelectDocumentDialog.java | 4 +++- .../main/res/layout/lacerta_dialog_select_doc.xml | 12 ++++++++++++ 3 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 component/common/src/main/res/layout/lacerta_dialog_select_doc.xml diff --git a/component/common/src/main/java/one/nem/lacerta/component/common/picker/LacertaFilePickerSelectDocumentAdapter.java b/component/common/src/main/java/one/nem/lacerta/component/common/picker/LacertaFilePickerSelectDocumentAdapter.java index d76ff719..b0d270af 100644 --- a/component/common/src/main/java/one/nem/lacerta/component/common/picker/LacertaFilePickerSelectDocumentAdapter.java +++ b/component/common/src/main/java/one/nem/lacerta/component/common/picker/LacertaFilePickerSelectDocumentAdapter.java @@ -41,7 +41,7 @@ public class LacertaFilePickerSelectDocumentAdapter extends RecyclerView.Adapter @NonNull @Override public LacertaFilePickerSelectDocumentAdapter.LacertaFilePickerSelectDocumentViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - View view = LayoutInflater.from(parent.getContext()).inflate(one.nem.lacerta.shared.ui.R.layout.common_list_item, null); + View view = LayoutInflater.from(parent.getContext()).inflate(one.nem.lacerta.shared.ui.R.layout.common_list_item, parent, false); return new LacertaFilePickerSelectDocumentViewHolder(view); } @@ -49,7 +49,6 @@ public class LacertaFilePickerSelectDocumentAdapter extends RecyclerView.Adapter public void onBindViewHolder(@NonNull LacertaFilePickerSelectDocumentAdapter.LacertaFilePickerSelectDocumentViewHolder holder, int position) { ListItem listItem = listItems.get(position); holder.title.setText(listItem.getTitle()); - holder.description.setVisibility(View.GONE); holder.icon.setImageResource(listItem.getItemType().getIconId()); holder.itemView.setOnClickListener(v -> listener.onDocumentSelected(listItem.getItemId())); } diff --git a/component/common/src/main/java/one/nem/lacerta/component/common/picker/LacertaFilePickerSelectDocumentDialog.java b/component/common/src/main/java/one/nem/lacerta/component/common/picker/LacertaFilePickerSelectDocumentDialog.java index 1c31db04..ede7e42e 100644 --- a/component/common/src/main/java/one/nem/lacerta/component/common/picker/LacertaFilePickerSelectDocumentDialog.java +++ b/component/common/src/main/java/one/nem/lacerta/component/common/picker/LacertaFilePickerSelectDocumentDialog.java @@ -68,6 +68,9 @@ public class LacertaFilePickerSelectDocumentDialog extends DialogFragment { recyclerView.setAdapter(adapter); recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); + builder.setTitle("Test"); + + builder.setView(view); lacertaLibrary.getCombinedDocumentToxiList(this.documentId).thenAccept(toxiDocumentModels -> { ArrayList listItems = new ArrayList<>(); @@ -78,7 +81,6 @@ public class LacertaFilePickerSelectDocumentDialog extends DialogFragment { adapter.notifyDataSetChanged(); }); - builder.setView(view); return builder.create(); } diff --git a/component/common/src/main/res/layout/lacerta_dialog_select_doc.xml b/component/common/src/main/res/layout/lacerta_dialog_select_doc.xml new file mode 100644 index 00000000..afd94234 --- /dev/null +++ b/component/common/src/main/res/layout/lacerta_dialog_select_doc.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file From 06f6048b78d312a6c7cc34e010e2a24f35fbe12c Mon Sep 17 00:00:00 2001 From: r-ca Date: Mon, 29 Jan 2024 05:06:05 +0900 Subject: [PATCH 05/67] =?UTF-8?q?Description=E3=82=92=E9=9D=9E=E8=A1=A8?= =?UTF-8?q?=E7=A4=BA=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/picker/LacertaFilePickerSelectDocumentAdapter.java | 1 + 1 file changed, 1 insertion(+) diff --git a/component/common/src/main/java/one/nem/lacerta/component/common/picker/LacertaFilePickerSelectDocumentAdapter.java b/component/common/src/main/java/one/nem/lacerta/component/common/picker/LacertaFilePickerSelectDocumentAdapter.java index b0d270af..489d07a9 100644 --- a/component/common/src/main/java/one/nem/lacerta/component/common/picker/LacertaFilePickerSelectDocumentAdapter.java +++ b/component/common/src/main/java/one/nem/lacerta/component/common/picker/LacertaFilePickerSelectDocumentAdapter.java @@ -49,6 +49,7 @@ public class LacertaFilePickerSelectDocumentAdapter extends RecyclerView.Adapter public void onBindViewHolder(@NonNull LacertaFilePickerSelectDocumentAdapter.LacertaFilePickerSelectDocumentViewHolder holder, int position) { ListItem listItem = listItems.get(position); holder.title.setText(listItem.getTitle()); + holder.description.setVisibility(View.GONE); holder.icon.setImageResource(listItem.getItemType().getIconId()); holder.itemView.setOnClickListener(v -> listener.onDocumentSelected(listItem.getItemId())); } From 7f82358fa8bae52da570f09214328ba1da5b1e43 Mon Sep 17 00:00:00 2001 From: r-ca Date: Mon, 29 Jan 2024 05:06:45 +0900 Subject: [PATCH 06/67] =?UTF-8?q?=E4=BB=AE=E7=BD=AE=E3=81=8D=E3=83=86?= =?UTF-8?q?=E3=82=AD=E3=82=B9=E3=83=88=E3=82=92=E7=BD=AE=E3=81=8D=E6=8F=9B?= =?UTF-8?q?=E3=81=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/picker/LacertaFilePickerSelectDocumentDialog.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/component/common/src/main/java/one/nem/lacerta/component/common/picker/LacertaFilePickerSelectDocumentDialog.java b/component/common/src/main/java/one/nem/lacerta/component/common/picker/LacertaFilePickerSelectDocumentDialog.java index ede7e42e..9d34d457 100644 --- a/component/common/src/main/java/one/nem/lacerta/component/common/picker/LacertaFilePickerSelectDocumentDialog.java +++ b/component/common/src/main/java/one/nem/lacerta/component/common/picker/LacertaFilePickerSelectDocumentDialog.java @@ -68,7 +68,7 @@ public class LacertaFilePickerSelectDocumentDialog extends DialogFragment { recyclerView.setAdapter(adapter); recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); - builder.setTitle("Test"); + builder.setTitle("追加先を選択"); builder.setView(view); From 8a64d84ff73689e40540bfdd28fa475523d2b6f6 Mon Sep 17 00:00:00 2001 From: r-ca Date: Mon, 29 Jan 2024 05:10:10 +0900 Subject: [PATCH 07/67] =?UTF-8?q?=E3=83=A1=E3=83=8B=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E3=83=AA=E3=82=BD=E3=83=BC=E3=82=B9=E4=BD=9C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../viewer/src/main/res/menu/viewer_tab_menu.xml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 component/viewer/src/main/res/menu/viewer_tab_menu.xml diff --git a/component/viewer/src/main/res/menu/viewer_tab_menu.xml b/component/viewer/src/main/res/menu/viewer_tab_menu.xml new file mode 100644 index 00000000..536a4f2e --- /dev/null +++ b/component/viewer/src/main/res/menu/viewer_tab_menu.xml @@ -0,0 +1,14 @@ + + + + + + + + \ No newline at end of file From 6413ffae88bed89eb30e632d919e4cac475eea72 Mon Sep 17 00:00:00 2001 From: r-ca Date: Mon, 29 Jan 2024 05:12:29 +0900 Subject: [PATCH 08/67] =?UTF-8?q?=E3=83=9D=E3=83=83=E3=83=97=E3=82=A2?= =?UTF-8?q?=E3=83=83=E3=83=97=E3=83=A1=E3=83=8B=E3=83=A5=E3=83=BC=E3=81=AB?= =?UTF-8?q?=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../viewer/ViewerContainerFragment.java | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java index 6152d199..98ff5f4b 100644 --- a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java +++ b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java @@ -10,6 +10,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageButton; +import android.widget.PopupMenu; import android.widget.TextView; import android.widget.Toast; @@ -148,11 +149,24 @@ public class ViewerContainerFragment extends Fragment { ImageButton imageButton = customView.findViewById(R.id.tab_modify); imageButton.setOnClickListener(v -> { - renameCombinedDocument( - this.documentId, - viewerViewPagerAdapter.getFragmentTargetId(position), - viewerViewPagerAdapter.getFragmentTitle(position), - position); + PopupMenu popupMenu = new PopupMenu(getContext(), v); + popupMenu.inflate(R.menu.viewer_tab_menu); + popupMenu.setOnMenuItemClickListener(item -> { + if (item.getItemId() == R.id.action_rename) { + renameCombinedDocument( + documentId, + viewerViewPagerAdapter.getFragmentTargetIdList().get(position), + viewerViewPagerAdapter.getFragmentTitle(position), + position); + return true; + } else if (item.getItemId() == R.id.action_delete) { + Toast.makeText(getContext(), "Work in progress", Toast.LENGTH_SHORT).show(); + return true; + } else { + return false; + } + }); + popupMenu.show(); }); tab.setCustomView(customView); From cc1d2d2756a48f85597254eca0bc6c5bcfe42838 Mon Sep 17 00:00:00 2001 From: r-ca Date: Mon, 29 Jan 2024 05:14:44 +0900 Subject: [PATCH 09/67] =?UTF-8?q?onItemLongClick=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../one/nem/lacerta/component/viewer/ItemClickListener.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ItemClickListener.java b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ItemClickListener.java index 91026a39..02cbae6e 100644 --- a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ItemClickListener.java +++ b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ItemClickListener.java @@ -2,4 +2,6 @@ package one.nem.lacerta.component.viewer; public interface ItemClickListener { void onItemClick(String fileName); // DEBUG + + void onItemLongClick(String fileName, int position); } From d38a60508d43feb875b9f6e97d919721bd1b7f00 Mon Sep 17 00:00:00 2001 From: r-ca Date: Mon, 29 Jan 2024 05:15:51 +0900 Subject: [PATCH 10/67] =?UTF-8?q?=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/viewer/ViewerBodyFragment.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerBodyFragment.java b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerBodyFragment.java index 3fe30549..69912bea 100644 --- a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerBodyFragment.java +++ b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerBodyFragment.java @@ -93,9 +93,16 @@ public class ViewerBodyFragment extends Fragment { RecyclerView recyclerView = view.findViewById(R.id.recycler_view); recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); - ViewerBodyAdapter viewerBodyAdapter = new ViewerBodyAdapter(fileName -> { - Toast.makeText(getContext(), fileName, Toast.LENGTH_SHORT).show(); - // TODO-rca: なにか処理をもたせる + ViewerBodyAdapter viewerBodyAdapter = new ViewerBodyAdapter(new ItemClickListener() { + @Override + public void onItemClick(String fileName) { + + } + + @Override + public void onItemLongClick(String fileName, int position) { + + } }); recyclerView.setAdapter(viewerBodyAdapter); From 8731855849302586a26b75d1a4bdff1a1ac9197d Mon Sep 17 00:00:00 2001 From: r-ca Date: Mon, 29 Jan 2024 05:15:56 +0900 Subject: [PATCH 11/67] =?UTF-8?q?=E4=B8=80=E5=BF=9C=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lacerta/component/viewer/ViewerListFragment.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerListFragment.java b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerListFragment.java index c4ba8a1c..a13620cc 100644 --- a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerListFragment.java +++ b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerListFragment.java @@ -106,8 +106,16 @@ public class ViewerListFragment extends Fragment { RecyclerView recyclerView = view.findViewById(R.id.body_recycler_view); recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); - ViewerBodyAdapter viewerBodyAdapter = new ViewerBodyAdapter(fileName -> { - Toast.makeText(getContext(), fileName, Toast.LENGTH_SHORT).show(); + ViewerBodyAdapter viewerBodyAdapter = new ViewerBodyAdapter(new ItemClickListener() { + @Override + public void onItemClick(String fileName) { + + } + + @Override + public void onItemLongClick(String fileName, int position) { + + } }); recyclerView.setAdapter(viewerBodyAdapter); From 83cadceefa9fc627edea1103f5ca6bbef6c41c2f Mon Sep 17 00:00:00 2001 From: r-ca Date: Mon, 29 Jan 2024 05:16:35 +0900 Subject: [PATCH 12/67] =?UTF-8?q?Long=20click=E3=81=AE=E3=83=AA=E3=82=B9?= =?UTF-8?q?=E3=83=8A=E3=83=BC=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../one/nem/lacerta/component/viewer/ViewerBodyAdapter.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerBodyAdapter.java b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerBodyAdapter.java index 8a430f96..398aaee7 100644 --- a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerBodyAdapter.java +++ b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerBodyAdapter.java @@ -44,8 +44,9 @@ public class ViewerBodyAdapter extends RecyclerView.Adapter { - + holder.itemView.setOnLongClickListener(v -> { + listener.onItemLongClick(pages.get(position).getFileName(), position); + return true; }); } From bdf6bae5faa398de82cc80bdd0d59f7d4f76b3ed Mon Sep 17 00:00:00 2001 From: r-ca Date: Mon, 29 Jan 2024 05:20:49 +0900 Subject: [PATCH 13/67] =?UTF-8?q?=E3=82=A2=E3=82=AF=E3=82=B7=E3=83=A7?= =?UTF-8?q?=E3=83=B3=E5=AE=9F=E8=A3=85=20WIP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/viewer/ViewerBodyFragment.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerBodyFragment.java b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerBodyFragment.java index 69912bea..82c98341 100644 --- a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerBodyFragment.java +++ b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerBodyFragment.java @@ -11,6 +11,8 @@ import android.view.View; import android.view.ViewGroup; import android.widget.Toast; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + import javax.inject.Inject; import dagger.hilt.android.AndroidEntryPoint; @@ -101,7 +103,18 @@ public class ViewerBodyFragment extends Fragment { @Override public void onItemLongClick(String fileName, int position) { + MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(getActivity()); + builder.setTitle("ページを更新しますか?"); + builder.setPositiveButton("更新", (dialog, which) -> { + // update + }); + builder.setNegativeButton("キャンセル", (dialog, which) -> { + // cancel + dialog.dismiss(); + }); + + builder.show(); } }); recyclerView.setAdapter(viewerBodyAdapter); From dbdb2b76d786a0da48acbad75c7e5f4975debf70 Mon Sep 17 00:00:00 2001 From: r-ca Date: Mon, 29 Jan 2024 05:22:19 +0900 Subject: [PATCH 14/67] =?UTF-8?q?=E4=BE=9D=E5=AD=98=E9=96=A2=E4=BF=82?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- component/viewer/build.gradle | 2 ++ 1 file changed, 2 insertions(+) diff --git a/component/viewer/build.gradle b/component/viewer/build.gradle index e1d552bb..e7d7a9eb 100644 --- a/component/viewer/build.gradle +++ b/component/viewer/build.gradle @@ -63,4 +63,6 @@ dependencies { // ViewPager2 implementation "androidx.viewpager2:viewpager2:1.0.0" + + implementation project(':component:scanner') // めちゃくちゃよくないけどもう正しくやってる時間がないので } \ No newline at end of file From afb40170cac13731febb6b2ed1db66a7909a84e2 Mon Sep 17 00:00:00 2001 From: r-ca Date: Mon, 29 Jan 2024 05:27:29 +0900 Subject: [PATCH 15/67] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=A9=9F=E8=83=BD=20WI?= =?UTF-8?q?P?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scanner/ScannerManagerActivity.java | 33 +++++++++++++++---- .../component/viewer/ViewerBodyFragment.java | 9 ++++- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/component/scanner/src/main/java/one/nem/lacerta/component/scanner/ScannerManagerActivity.java b/component/scanner/src/main/java/one/nem/lacerta/component/scanner/ScannerManagerActivity.java index c2c8ed69..5efd0652 100644 --- a/component/scanner/src/main/java/one/nem/lacerta/component/scanner/ScannerManagerActivity.java +++ b/component/scanner/src/main/java/one/nem/lacerta/component/scanner/ScannerManagerActivity.java @@ -35,6 +35,8 @@ import one.nem.lacerta.data.Document; import one.nem.lacerta.data.LacertaLibrary; import one.nem.lacerta.model.document.DocumentDetail; import one.nem.lacerta.model.document.DocumentMeta; +import one.nem.lacerta.model.document.page.Page; +import one.nem.lacerta.processor.DocumentProcessor; import one.nem.lacerta.processor.factory.DocumentProcessorFactory; import one.nem.lacerta.utils.LacertaLogger; import one.nem.lacerta.vcs.factory.LacertaVcsFactory; @@ -73,7 +75,9 @@ public class ScannerManagerActivity extends AppCompatActivity { // Variables private ArrayList croppedImages = new ArrayList<>(); - private boolean single = false; + private boolean update = false; + private String documentId; + private int index = 0; View view; @@ -104,7 +108,7 @@ public class ScannerManagerActivity extends AppCompatActivity { null ); - DocumentScanner documentScannerSingle = new DocumentScanner( // TODO-rca: ひどすぎるのでなんとかする + DocumentScanner documentScannerUpdate = new DocumentScanner( // TODO-rca: ひどすぎるのでなんとかする this, (croppedImageResults) -> { logger.debug(TAG, "croppedImage size: " + croppedImageResults.size()); @@ -160,11 +164,12 @@ public class ScannerManagerActivity extends AppCompatActivity { Intent intent = getIntent(); Bundle bundle = intent.getExtras(); if (bundle != null) { - this.single = bundle.getBoolean("single", false); + update = bundle.getBoolean("update", false); + documentId = bundle.getString("documentId"); + index = bundle.getInt("index", 0); } - - if (this.single) { - documentScanner = documentScannerSingle; + if (this.update) { + documentScanner = documentScannerUpdate; } documentScanner.startScan(); // Init @@ -251,6 +256,22 @@ public class ScannerManagerActivity extends AppCompatActivity { }); } + private void updatePage() { + logger.debug(TAG, "updatePage"); + // Deprecatedだが、中断機能が存在しないので操作をブロックする目的で(意図的に)使用 + ProgressDialog dialog = new ProgressDialog(this); + dialog.setMessage("保存中..."); // TODO-rca: テキストをリソースに移動 + dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); + dialog.setCancelable(false); + dialog.show(); + document.getDocument(documentId).thenAccept((documentDetail) -> { + DocumentProcessor documentProcessor = documentProcessorFactory.create(documentDetail); + documentProcessor.updatePageAtIndex(croppedImages.get(0), index); + document.updateDocument(documentProcessor.getDocumentDetail()).join(); + dialog.dismiss(); + }); + } + private void insertToExistDocument() { logger.debug(TAG, "insertToExistDocument"); LacertaFilePickerDialog dialog = new LacertaFilePickerDialog(); diff --git a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerBodyFragment.java b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerBodyFragment.java index 82c98341..f52576d4 100644 --- a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerBodyFragment.java +++ b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerBodyFragment.java @@ -1,5 +1,6 @@ package one.nem.lacerta.component.viewer; +import android.content.Intent; import android.os.Bundle; import androidx.fragment.app.Fragment; @@ -16,6 +17,7 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder; import javax.inject.Inject; import dagger.hilt.android.AndroidEntryPoint; +import one.nem.lacerta.component.scanner.ScannerManagerActivity; import one.nem.lacerta.data.Document; import one.nem.lacerta.data.LacertaLibrary; import one.nem.lacerta.utils.LacertaLogger; @@ -107,7 +109,12 @@ public class ViewerBodyFragment extends Fragment { builder.setTitle("ページを更新しますか?"); builder.setPositiveButton("更新", (dialog, which) -> { - // update + // ScannerをIntent + Intent intent = new Intent(getActivity(), ScannerManagerActivity.class); + intent.putExtra("update", true); + intent.putExtra("documentId", documentId); + intent.putExtra("index", position); + startActivity(intent); }); builder.setNegativeButton("キャンセル", (dialog, which) -> { // cancel From 1e046e7b9ed6b8168fd7438bf06d59c3ac8f9ca9 Mon Sep 17 00:00:00 2001 From: r-ca Date: Mon, 29 Jan 2024 05:28:47 +0900 Subject: [PATCH 16/67] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=AE=9F=E8=A3=85=20WI?= =?UTF-8?q?P?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../processor/impl/DocumentProcessorImpl.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/processor/src/main/java/one/nem/lacerta/processor/impl/DocumentProcessorImpl.java b/processor/src/main/java/one/nem/lacerta/processor/impl/DocumentProcessorImpl.java index fea8396f..98ff774a 100644 --- a/processor/src/main/java/one/nem/lacerta/processor/impl/DocumentProcessorImpl.java +++ b/processor/src/main/java/one/nem/lacerta/processor/impl/DocumentProcessorImpl.java @@ -130,7 +130,26 @@ public class DocumentProcessorImpl implements DocumentProcessor{ @Override public DocumentProcessor updatePageAtIndex(Bitmap bitmap, int index) { - return null; + logger.debug("updatePageAtIndex", "called"); + String filename = UUID.randomUUID().toString() + ".png"; // TODO-rca: 拡張子を動的にする + + try { + this.fileManager.getNewInstance().createDirectoryIfNotExist(DEFAULT_SAVE_DIR).resolve(DEFAULT_SAVE_DIR).saveBitmap(bitmap, filename); + } catch (Exception e) { + logger.error("updatePageAtIndex", "failed: Unknown error"); + logger.e_code("d9191286-6092-40b3-80ed-9239106a8c65"); + // Recover (Undo latest action) + lacertaVcs.undo(); + } + + Page page = new Page(); + page.setFileName(filename); + page.setBitmap(bitmap); + this.documentDetail.getPages().set(index, page); + + lacertaVcs.updatePage(index, filename); + + return this; } @Override From 426a3534c847a23c88371b9d18d31d4b79431fab Mon Sep 17 00:00:00 2001 From: r-ca Date: Mon, 29 Jan 2024 05:29:13 +0900 Subject: [PATCH 17/67] =?UTF-8?q?Vcs=E6=9B=B4=E6=96=B0=E5=AE=9F=E8=A3=85?= =?UTF-8?q?=20WIP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../one/nem/lacerta/vcs/impl/LacertaVcsImpl.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/vcs/src/main/java/one/nem/lacerta/vcs/impl/LacertaVcsImpl.java b/vcs/src/main/java/one/nem/lacerta/vcs/impl/LacertaVcsImpl.java index 5e193bcd..de0b3fd2 100644 --- a/vcs/src/main/java/one/nem/lacerta/vcs/impl/LacertaVcsImpl.java +++ b/vcs/src/main/java/one/nem/lacerta/vcs/impl/LacertaVcsImpl.java @@ -41,7 +41,20 @@ public class LacertaVcsImpl implements LacertaVcs { @Override public void updatePage(int index, String fileName) { + logger.debug(TAG, "updatePage"); + // UpdatePage + UpdatePage updatePage = new UpdatePage(index, fileName); + updatePage.setActionType(ActionType.UPDATE_PAGE); + + VcsLogEntity vcsLogEntity = new VcsLogEntity(); + vcsLogEntity.id = UUID.randomUUID().toString(); + vcsLogEntity.documentId = documentId; + vcsLogEntity.branchName = "master"; + vcsLogEntity.createdAt = new java.util.Date(); + vcsLogEntity.actionType = ActionType.UPDATE_PAGE.getValue(); + vcsLogEntity.action = JsonUtils.toJson(updatePage); + database.vcsLogDao().insert(vcsLogEntity); } @Override From 9042817d632b1336f3832ac005668a24df58d28c Mon Sep 17 00:00:00 2001 From: r-ca Date: Mon, 29 Jan 2024 05:45:10 +0900 Subject: [PATCH 18/67] WIP --- .../nem/lacerta/component/scanner/ScannerManagerActivity.java | 4 +++- .../one/nem/lacerta/processor/impl/DocumentProcessorImpl.java | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/component/scanner/src/main/java/one/nem/lacerta/component/scanner/ScannerManagerActivity.java b/component/scanner/src/main/java/one/nem/lacerta/component/scanner/ScannerManagerActivity.java index 5efd0652..ec7da90e 100644 --- a/component/scanner/src/main/java/one/nem/lacerta/component/scanner/ScannerManagerActivity.java +++ b/component/scanner/src/main/java/one/nem/lacerta/component/scanner/ScannerManagerActivity.java @@ -116,7 +116,7 @@ public class ScannerManagerActivity extends AppCompatActivity { for (String result : croppedImageResults) { croppedImages.add(BitmapFactory.decodeFile(result)); } - processResult(croppedImages); + updatePage(); return null; }, (errorMessage) -> { @@ -267,6 +267,8 @@ public class ScannerManagerActivity extends AppCompatActivity { document.getDocument(documentId).thenAccept((documentDetail) -> { DocumentProcessor documentProcessor = documentProcessorFactory.create(documentDetail); documentProcessor.updatePageAtIndex(croppedImages.get(0), index); + logger.debug(TAG, "documentProcessor.getPageCount(): " + documentProcessor.getPageCount() + + ", documentDetail.getPages().size(): " + documentDetail.getPages().size()); document.updateDocument(documentProcessor.getDocumentDetail()).join(); dialog.dismiss(); }); diff --git a/processor/src/main/java/one/nem/lacerta/processor/impl/DocumentProcessorImpl.java b/processor/src/main/java/one/nem/lacerta/processor/impl/DocumentProcessorImpl.java index 98ff774a..142a8e7b 100644 --- a/processor/src/main/java/one/nem/lacerta/processor/impl/DocumentProcessorImpl.java +++ b/processor/src/main/java/one/nem/lacerta/processor/impl/DocumentProcessorImpl.java @@ -133,6 +133,8 @@ public class DocumentProcessorImpl implements DocumentProcessor{ logger.debug("updatePageAtIndex", "called"); String filename = UUID.randomUUID().toString() + ".png"; // TODO-rca: 拡張子を動的にする + logger.debug("updatePageAtIndex", "filename1: " + filename); + try { this.fileManager.getNewInstance().createDirectoryIfNotExist(DEFAULT_SAVE_DIR).resolve(DEFAULT_SAVE_DIR).saveBitmap(bitmap, filename); } catch (Exception e) { @@ -142,6 +144,8 @@ public class DocumentProcessorImpl implements DocumentProcessor{ lacertaVcs.undo(); } + logger.debug("updatePageAtIndex", "filename: " + filename); + Page page = new Page(); page.setFileName(filename); page.setBitmap(bitmap); From 13efbaf9bb5ddcbeff08da568971321cc87d4f54 Mon Sep 17 00:00:00 2001 From: r-ca Date: Mon, 29 Jan 2024 05:48:26 +0900 Subject: [PATCH 19/67] =?UTF-8?q?=E6=9C=80=E5=88=9D=E3=81=AE=E7=94=BB?= =?UTF-8?q?=E5=83=8F=E3=82=92=E8=87=AA=E5=8B=95=E3=81=A7=E9=96=8B=E3=81=8F?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/scanner/ScannerManagerActivity.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/component/scanner/src/main/java/one/nem/lacerta/component/scanner/ScannerManagerActivity.java b/component/scanner/src/main/java/one/nem/lacerta/component/scanner/ScannerManagerActivity.java index ec7da90e..b7d7b9a5 100644 --- a/component/scanner/src/main/java/one/nem/lacerta/component/scanner/ScannerManagerActivity.java +++ b/component/scanner/src/main/java/one/nem/lacerta/component/scanner/ScannerManagerActivity.java @@ -266,7 +266,17 @@ public class ScannerManagerActivity extends AppCompatActivity { dialog.show(); document.getDocument(documentId).thenAccept((documentDetail) -> { DocumentProcessor documentProcessor = documentProcessorFactory.create(documentDetail); - documentProcessor.updatePageAtIndex(croppedImages.get(0), index); + if (croppedImages.size() != 1) { + logger.error(TAG, "croppedImages.size() != 1"); + logger.e_code("d8e2b8c9-9b7e-4b7e-9e1e-9e3b8b8b8b8b"); + return; + } + if (croppedImages.get(0) == null) { + logger.error(TAG, "croppedImages.get(0) == null"); + logger.e_code("d8e2b8c9-9b7e-4b7e-9e1e-9e3b8b8b8b8b"); + return; + } +// documentProcessor.updatePageAtIndex(croppedImages.get(0), index); logger.debug(TAG, "documentProcessor.getPageCount(): " + documentProcessor.getPageCount() + ", documentDetail.getPages().size(): " + documentDetail.getPages().size()); document.updateDocument(documentProcessor.getDocumentDetail()).join(); @@ -316,6 +326,8 @@ public class ScannerManagerActivity extends AppCompatActivity { resultView.addView(resultImageView); } + + selectedImage.setImageBitmap(resultImages.get(0)); } } \ No newline at end of file From 17590660c7f288ce2d032b38a964b5e3576fe4d8 Mon Sep 17 00:00:00 2001 From: r-ca Date: Mon, 29 Jan 2024 05:50:20 +0900 Subject: [PATCH 20/67] =?UTF-8?q?=E7=94=BB=E5=83=8F=E3=82=92=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nem/lacerta/component/scanner/ScannerManagerActivity.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/component/scanner/src/main/java/one/nem/lacerta/component/scanner/ScannerManagerActivity.java b/component/scanner/src/main/java/one/nem/lacerta/component/scanner/ScannerManagerActivity.java index b7d7b9a5..1a371c1b 100644 --- a/component/scanner/src/main/java/one/nem/lacerta/component/scanner/ScannerManagerActivity.java +++ b/component/scanner/src/main/java/one/nem/lacerta/component/scanner/ScannerManagerActivity.java @@ -116,6 +116,7 @@ public class ScannerManagerActivity extends AppCompatActivity { for (String result : croppedImageResults) { croppedImages.add(BitmapFactory.decodeFile(result)); } + processResult(croppedImages); updatePage(); return null; }, @@ -276,7 +277,7 @@ public class ScannerManagerActivity extends AppCompatActivity { logger.e_code("d8e2b8c9-9b7e-4b7e-9e1e-9e3b8b8b8b8b"); return; } -// documentProcessor.updatePageAtIndex(croppedImages.get(0), index); + documentProcessor.updatePageAtIndex(croppedImages.get(0), index); logger.debug(TAG, "documentProcessor.getPageCount(): " + documentProcessor.getPageCount() + ", documentDetail.getPages().size(): " + documentDetail.getPages().size()); document.updateDocument(documentProcessor.getDocumentDetail()).join(); From 282c09bbd1f2f0c61f02d731c9f2325adb7338cb Mon Sep 17 00:00:00 2001 From: r-ca Date: Mon, 29 Jan 2024 07:10:41 +0900 Subject: [PATCH 21/67] =?UTF-8?q?=E6=AD=A3=E5=B8=B8=E3=81=AB=E9=81=A1?= =?UTF-8?q?=E3=82=8C=E3=81=AA=E3=81=84=E5=95=8F=E9=A1=8C=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nem/lacerta/vcs/impl/LacertaVcsImpl.java | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/vcs/src/main/java/one/nem/lacerta/vcs/impl/LacertaVcsImpl.java b/vcs/src/main/java/one/nem/lacerta/vcs/impl/LacertaVcsImpl.java index de0b3fd2..5a89d6e4 100644 --- a/vcs/src/main/java/one/nem/lacerta/vcs/impl/LacertaVcsImpl.java +++ b/vcs/src/main/java/one/nem/lacerta/vcs/impl/LacertaVcsImpl.java @@ -1,6 +1,7 @@ package one.nem.lacerta.vcs.impl; import java.util.ArrayList; +import java.util.Comparator; import java.util.List; import java.util.UUID; import java.util.concurrent.CompletableFuture; @@ -195,16 +196,20 @@ public class LacertaVcsImpl implements LacertaVcs { } private CompletableFuture> getRevBeforeTargetIdAsync(String revId){ + logger.debug(TAG, "getRevBeforeTargetIdAsync called: " + revId); return CompletableFuture.supplyAsync(() -> { ArrayList vcsRevEntities = new ArrayList<>(database.vcsRevDao().findByDocumentId(this.documentId)); + // 古い順に並び替え + vcsRevEntities.sort(Comparator.comparing(a -> a.createdAt)); ArrayList vcsRevEntitiesBeforeTarget = new ArrayList<>(); - vcsRevEntities.forEach(vcsRevEntity -> { + for (VcsRevEntity vcsRevEntity : vcsRevEntities) { if(vcsRevEntity.id.equals(revId)){ + logger.debug(TAG, "getRevBeforeTargetIdAsync: Target found"); vcsRevEntitiesBeforeTarget.add(vcsRevEntity); - return; + break; } vcsRevEntitiesBeforeTarget.add(vcsRevEntity); - }); + } logger.debug(TAG, "getRevBeforeTargetIdAsync finished\nResult size: " + vcsRevEntitiesBeforeTarget.size()); return vcsRevEntitiesBeforeTarget; }); @@ -216,8 +221,8 @@ public class LacertaVcsImpl implements LacertaVcs { vcsRevEntities.forEach(vcsRevEntity -> { logIds.addAll(vcsRevEntity.logIds); }); - // TODO-rca: ソートしないといけないかも(順番が保証されているわけではない + 順番が変わるとほぼ確実に壊れる) ArrayList vcsLogEntities = new ArrayList<>(database.vcsLogDao().findByIds(logIds)); + vcsLogEntities.sort(Comparator.comparing(a -> a.createdAt)); logger.debug(TAG, "getLogInRevsAsync finished\nResult size: " + vcsLogEntities.size()); return vcsLogEntities; }); @@ -235,7 +240,13 @@ public class LacertaVcsImpl implements LacertaVcs { public CompletableFuture> getDocumentPagePathListRev(String revId) { return CompletableFuture.supplyAsync(() -> { logger.debug(TAG, "getDocumentPagePathListRev"); - ArrayList vcsLogEntities = getRevBeforeTargetIdAsync(revId).thenCompose(this::getLogInRevsAsync).join(); + ArrayList vcsRevEntities = getRevBeforeTargetIdAsync(revId).join(); + + logger.debug(TAG, "getDocumentPagePathListRev: vcsRevEntities size: " + vcsRevEntities.size()); + + ArrayList vcsLogEntities = getLogInRevsAsync(vcsRevEntities).join(); + + logger.debug(TAG, "getDocumentPagePathListRev: vcsLogEntities size: " + vcsLogEntities.size()); ArrayList fileNameList = new ArrayList<>(); for(VcsLogEntity vcsLogEntity : vcsLogEntities){ From 26b76fa3e099e1631a1eafa955788a18e4d35562 Mon Sep 17 00:00:00 2001 From: r-ca Date: Mon, 29 Jan 2024 07:10:51 +0900 Subject: [PATCH 22/67] =?UTF-8?q?=E3=81=84=E3=82=8D=E3=81=84=E3=82=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scanner/ScannerManagerActivity.java | 7 +++--- .../viewer/ViewerContainerFragment.java | 23 ++++++++++++++++++- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/component/scanner/src/main/java/one/nem/lacerta/component/scanner/ScannerManagerActivity.java b/component/scanner/src/main/java/one/nem/lacerta/component/scanner/ScannerManagerActivity.java index 1a371c1b..50713ced 100644 --- a/component/scanner/src/main/java/one/nem/lacerta/component/scanner/ScannerManagerActivity.java +++ b/component/scanner/src/main/java/one/nem/lacerta/component/scanner/ScannerManagerActivity.java @@ -237,7 +237,7 @@ public class ScannerManagerActivity extends AppCompatActivity { Bitmap[] bitmaps = new Bitmap[croppedImages.size()]; croppedImages.toArray(bitmaps); logger.debug(TAG, "bitmaps.length: " + bitmaps.length); - addPagesToDocumentDetail(documentDetail, bitmaps, null).join(); + addPagesToDocumentDetail(documentDetail, bitmaps, "Initial Commit").join(); document.updateDocument(documentDetail).join(); dialog.dismiss(); finish(); @@ -249,7 +249,7 @@ public class ScannerManagerActivity extends AppCompatActivity { return CompletableFuture.runAsync(() -> { try { document.updateDocument(documentProcessorFactory.create(documentDetail).addNewPagesToLast(bitmaps).getDocumentDetail()).join(); - lacertaVcsFactory.create(documentDetail.getMeta().getId()).generateRevisionAtCurrent(commitMessage == null ? "Update" : commitMessage); + lacertaVcsFactory.create(documentDetail.getMeta().getId()).generateRevisionAtCurrent(commitMessage == null ? "NONE" : commitMessage); } catch (Exception e) { logger.error(TAG, "Error: " + e.getMessage()); logger.e_code("9dff2a28-20e8-4ccd-9d04-f0c7646faa6a"); @@ -278,9 +278,8 @@ public class ScannerManagerActivity extends AppCompatActivity { return; } documentProcessor.updatePageAtIndex(croppedImages.get(0), index); - logger.debug(TAG, "documentProcessor.getPageCount(): " + documentProcessor.getPageCount() - + ", documentDetail.getPages().size(): " + documentDetail.getPages().size()); document.updateDocument(documentProcessor.getDocumentDetail()).join(); + lacertaVcsFactory.create(documentDetail.getMeta().getId()).generateRevisionAtCurrent(index + "ページ目を更新"); // TODO-rca: メッセージを動的にする, 指定できるようにする dialog.dismiss(); }); } diff --git a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java index 98ff5f4b..6ccd0b7c 100644 --- a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java +++ b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java @@ -27,6 +27,8 @@ import javax.inject.Inject; import dagger.hilt.android.AndroidEntryPoint; import one.nem.lacerta.component.common.LacertaApplyTagDialog; +import one.nem.lacerta.component.common.LacertaSelectRevDialog; +import one.nem.lacerta.component.common.LacertaSelectRevDialogListener; import one.nem.lacerta.component.common.picker.LacertaFilePickerDialog; import one.nem.lacerta.data.Document; import one.nem.lacerta.data.LacertaLibrary; @@ -236,7 +238,7 @@ public class ViewerContainerFragment extends Fragment { toolbar.inflateMenu(R.menu.viewer_menu); toolbar.setOnMenuItemClickListener(item -> { if (item.getItemId() == R.id.action_open_vcs_rev_list) { - Toast.makeText(getContext(), "Work in progress", Toast.LENGTH_SHORT).show(); + showRevList(); return true; } else if (item.getItemId() == R.id.action_rename) { renameDocument(); @@ -260,6 +262,25 @@ public class ViewerContainerFragment extends Fragment { }); } + private void showRevList() { + LacertaSelectRevDialog lacertaSelectRevDialog = new LacertaSelectRevDialog(); + lacertaSelectRevDialog.setDocumentId(this.documentId).setTitle("リビジョンの選択").setMessage("リビジョンを選択してください。").setNegativeButtonText("キャンセル"); + lacertaSelectRevDialog.setListener(new LacertaSelectRevDialogListener() { + @Override + public void onItemSelected(String revId) { + logger.debug("ViewerContainerFragment", "Dialog Result: revId: " + revId); + getParentFragmentManager().beginTransaction() + .replace(R.id.nav_host_fragment, ViewerListFragment.newInstance(documentId, documentName, revId)) + .commit(); + } + + @Override + public void onDialogCanceled() { + } + }); + lacertaSelectRevDialog.show(getParentFragmentManager(), "select_rev_dialog"); + } + private void applyTag() { LacertaApplyTagDialog lacertaApplyTagDialog = new LacertaApplyTagDialog(); lacertaApplyTagDialog From 6f37ed988b5a680a5f70b8cbb791edf07b2d7a3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 10:03:43 +0900 Subject: [PATCH 23/67] =?UTF-8?q?=E4=BB=AE=E3=83=A1=E3=83=8B=E3=83=A5?= =?UTF-8?q?=E3=83=BC=E3=82=A2=E3=82=A4=E3=83=86=E3=83=A0=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- feature/library/src/main/res/menu/dir_menu.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/feature/library/src/main/res/menu/dir_menu.xml b/feature/library/src/main/res/menu/dir_menu.xml index e5cea78a..e9760740 100644 --- a/feature/library/src/main/res/menu/dir_menu.xml +++ b/feature/library/src/main/res/menu/dir_menu.xml @@ -8,4 +8,10 @@ android:title="@string/create_new_folder" app:showAsAction="never"/> + + \ No newline at end of file From 21279e0c9a085debc3b896a6b7da3f936ea111ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 10:13:19 +0900 Subject: [PATCH 24/67] =?UTF-8?q?=E4=BE=9D=E5=AD=98=E9=96=A2=E4=BF=82?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- feature/library/build.gradle | 2 ++ 1 file changed, 2 insertions(+) diff --git a/feature/library/build.gradle b/feature/library/build.gradle index 6a661620..c46fe118 100644 --- a/feature/library/build.gradle +++ b/feature/library/build.gradle @@ -55,6 +55,8 @@ dependencies { implementation project(':component:viewer') + implementation project(':processor') + // TODO-rca: バージョンカタログに切り出す implementation "com.hendraanggrian.material:collapsingtoolbarlayout-subtitle:1.5.0" } \ No newline at end of file From 4c30def77b0929b03af461f60c42df0e59345943 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 10:16:53 +0900 Subject: [PATCH 25/67] =?UTF-8?q?=E4=BE=9D=E5=AD=98=E9=96=A2=E4=BF=82?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- feature/library/build.gradle | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/feature/library/build.gradle b/feature/library/build.gradle index c46fe118..a7ca4dde 100644 --- a/feature/library/build.gradle +++ b/feature/library/build.gradle @@ -55,7 +55,9 @@ dependencies { implementation project(':component:viewer') - implementation project(':processor') + implementation project(':processor') // TODO-rca: あんまり依存したくないけど時間がないので一旦 + + implementation project(':vcs') // TODO-rca: あんまり依存したくないけど時間がないので一旦 // TODO-rca: バージョンカタログに切り出す implementation "com.hendraanggrian.material:collapsingtoolbarlayout-subtitle:1.5.0" From 732f599df980493751f1e2b1b1549ed74d48eb98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 10:40:18 +0900 Subject: [PATCH 26/67] =?UTF-8?q?=E7=94=BB=E5=83=8F=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=82=A4=E3=83=AB=E3=82=92=E7=9B=B4=E6=8E=A5=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB(?= =?UTF-8?q?=E4=BB=AE)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../feature/library/LibraryPageFragment.java | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/feature/library/src/main/java/one/nem/lacerta/feature/library/LibraryPageFragment.java b/feature/library/src/main/java/one/nem/lacerta/feature/library/LibraryPageFragment.java index 158e61e1..92d2cbca 100644 --- a/feature/library/src/main/java/one/nem/lacerta/feature/library/LibraryPageFragment.java +++ b/feature/library/src/main/java/one/nem/lacerta/feature/library/LibraryPageFragment.java @@ -1,8 +1,13 @@ package one.nem.lacerta.feature.library; import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.net.Uri; import android.os.Bundle; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; import androidx.appcompat.widget.Toolbar; import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; @@ -17,6 +22,8 @@ import android.view.ViewGroup; import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.dialog.MaterialAlertDialogBuilder; +import java.util.concurrent.CompletableFuture; + import javax.inject.Inject; import dagger.hilt.android.AndroidEntryPoint; @@ -25,9 +32,12 @@ import one.nem.lacerta.data.Document; import one.nem.lacerta.data.LacertaLibrary; import one.nem.lacerta.model.LibraryItemPage; import one.nem.lacerta.model.ListItemType; +import one.nem.lacerta.model.document.DocumentDetail; import one.nem.lacerta.model.document.tag.DocumentTag; +import one.nem.lacerta.processor.factory.DocumentProcessorFactory; import one.nem.lacerta.utils.FeatureSwitch; import one.nem.lacerta.utils.LacertaLogger; +import one.nem.lacerta.vcs.factory.LacertaVcsFactory; /** @@ -48,6 +58,8 @@ public class LibraryPageFragment extends Fragment { String parentId; Toolbar toolbar; + // ActivityResultContracts + ActivityResultLauncher getContent; @Inject LacertaLibrary lacertaLibrary; @@ -58,6 +70,12 @@ public class LibraryPageFragment extends Fragment { @Inject Document document; + @Inject + DocumentProcessorFactory documentProcessorFactory; + + @Inject + LacertaVcsFactory lacertaVcsFactory; + ListItemAdapter listItemAdapter; public LibraryPageFragment() { @@ -97,6 +115,37 @@ public class LibraryPageFragment extends Fragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + getContent = registerForActivityResult(new ActivityResultContracts.GetMultipleContents(), uris -> { + for (int i = 0; i < uris.size(); i++) { + logger.debug("LibraryTopFragment", "uris.get(" + i + "): " + uris.get(i).getPath()); + } + // ここで取得したURIリストを使用して画像を操作します。 + if (uris != null) { + Bitmap[] bitmaps = new Bitmap[uris.size()]; + for (int i = 0; i < uris.size(); i++) { + Uri uri = uris.get(i); + try { + bitmaps[i] = BitmapFactory.decodeStream(requireContext().getContentResolver().openInputStream(uri)); + } catch (Exception e) { + logger.error("LibraryTopFragment", "Error: " + e.getMessage()); + logger.e_code("826da745-7fc9-43e6-9935-9daa17a3932f"); + } + } + + logger.debug("LibraryTopFragment", "bitmaps.length: " + bitmaps.length); + // ドキュメントを作成 + document.createDocument().thenApply(documentDetail -> { + logger.debug("LibraryTopFragment", "create document (may) success!"); + // ドキュメントにページを追加 + addPagesToDocumentDetail(documentDetail, bitmaps, "Initial commit(IMPORT)").join(); + document.updateDocument(documentDetail).join(); + return null; + }); + } else { + logger.debug("LibraryTopFragment", "uris is null"); + } + }); } @@ -277,10 +326,29 @@ public class LibraryPageFragment extends Fragment { if (item.getItemId() == R.id.menu_item_create_new_folder) { createFolder(this.folderId); return true; + } else if (item.getItemId() == R.id.menu_item_add_by_media) { + createDocByMediaPicker(); + return true; } else { return false; } }); }); } + + private void createDocByMediaPicker() { + getContent.launch("image/*"); + } + + private CompletableFuture addPagesToDocumentDetail(DocumentDetail documentDetail, Bitmap[] bitmaps, String commitMessage) { + return CompletableFuture.runAsync(() -> { + try { + document.updateDocument(documentProcessorFactory.create(documentDetail).addNewPagesToLast(bitmaps).getDocumentDetail()).join(); + lacertaVcsFactory.create(documentDetail.getMeta().getId()).generateRevisionAtCurrent(commitMessage == null ? "NONE" : commitMessage); + } catch (Exception e) { + logger.error("LibraryAddSupport", "Error: " + e.getMessage()); + logger.e_code("9dff2a28-20e8-4ccd-9d04-f0c7646faa6a"); + } + }); + } } From 9861dfe5b6f2734218f9d99de253c1fafdbc176d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 10:42:20 +0900 Subject: [PATCH 27/67] =?UTF-8?q?deleteDocument=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../viewer/ViewerContainerFragment.java | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java index 6ccd0b7c..b74d75d2 100644 --- a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java +++ b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java @@ -244,7 +244,7 @@ public class ViewerContainerFragment extends Fragment { renameDocument(); return true; } else if (item.getItemId() == R.id.action_delete) { - Toast.makeText(getContext(), "Work in progress", Toast.LENGTH_SHORT).show(); + deleteDocument(); return true; } else if (item.getItemId() == R.id.action_move) { Toast.makeText(getContext(), "Work in progress", Toast.LENGTH_SHORT).show(); @@ -281,6 +281,26 @@ public class ViewerContainerFragment extends Fragment { lacertaSelectRevDialog.show(getParentFragmentManager(), "select_rev_dialog"); } + private void deleteDocument() { + MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(getContext()); + builder.setTitle("ファイルの削除"); + builder.setMessage("ファイルを削除しますか?"); + + builder.setPositiveButton("削除", (dialog, which) -> { + document.deleteDocument(documentId).thenAccept(aVoid -> { + getActivity().runOnUiThread(() -> { + Toast.makeText(getContext(), "削除しました", Toast.LENGTH_SHORT).show(); + getActivity().finish(); // TODO-rca: 終了させずにUIを更新したい + }); + }); + }); + builder.setNegativeButton("キャンセル", (dialog, which) -> { + dialog.cancel(); + }); + + builder.show(); + } + private void applyTag() { LacertaApplyTagDialog lacertaApplyTagDialog = new LacertaApplyTagDialog(); lacertaApplyTagDialog From e583481b9ab6d5604096749ad5fa053aba58887d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 10:43:35 +0900 Subject: [PATCH 28/67] =?UTF-8?q?moveDocument=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../viewer/ViewerContainerFragment.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java index b74d75d2..ef60e938 100644 --- a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java +++ b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java @@ -29,6 +29,7 @@ import dagger.hilt.android.AndroidEntryPoint; import one.nem.lacerta.component.common.LacertaApplyTagDialog; import one.nem.lacerta.component.common.LacertaSelectRevDialog; import one.nem.lacerta.component.common.LacertaSelectRevDialogListener; +import one.nem.lacerta.component.common.picker.LacertaDirPickerDialog; import one.nem.lacerta.component.common.picker.LacertaFilePickerDialog; import one.nem.lacerta.data.Document; import one.nem.lacerta.data.LacertaLibrary; @@ -247,7 +248,7 @@ public class ViewerContainerFragment extends Fragment { deleteDocument(); return true; } else if (item.getItemId() == R.id.action_move) { - Toast.makeText(getContext(), "Work in progress", Toast.LENGTH_SHORT).show(); + moveDocument(); return true; } else if (item.getItemId() == R.id.action_combine) { combineDocument(); @@ -281,6 +282,24 @@ public class ViewerContainerFragment extends Fragment { lacertaSelectRevDialog.show(getParentFragmentManager(), "select_rev_dialog"); } + private void moveDocument() { + LacertaDirPickerDialog lacertaDirPickerDialog = new LacertaDirPickerDialog(); + lacertaDirPickerDialog.setListener((name, dirId) -> { + logger.debug("MoveDocument", "Selected dir: " + name + ", " + dirId); + document.moveDocument(documentId, dirId).thenAccept(aVoid -> { + getActivity().runOnUiThread(() -> { + // Stop Activity + getActivity().finish(); // TODO-rca: ファイル移動後に終了するべきかは検討 + }); + }); + }); + lacertaDirPickerDialog.setTitle("ファイルの移動") + .setMessage("ファイルを移動するフォルダを選択してください。") + .setPositiveButtonText("移動") + .setNegativeButtonText("キャンセル"); + lacertaDirPickerDialog.show(getParentFragmentManager(), "select_dir_dialog"); + } + private void deleteDocument() { MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(getContext()); builder.setTitle("ファイルの削除"); From 0410377c776dad7ebb6b6ea099b0f2f13f488cfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 10:44:59 +0900 Subject: [PATCH 29/67] =?UTF-8?q?Description=E3=81=AB=E8=A1=A8=E7=A4=BA?= =?UTF-8?q?=E3=81=95=E3=82=8C=E3=82=8B=E6=99=82=E9=96=93=E3=81=AB=E7=A7=92?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/one/nem/lacerta/data/impl/LacertaLibraryImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/src/main/java/one/nem/lacerta/data/impl/LacertaLibraryImpl.java b/data/src/main/java/one/nem/lacerta/data/impl/LacertaLibraryImpl.java index f35dee8c..42d04e83 100644 --- a/data/src/main/java/one/nem/lacerta/data/impl/LacertaLibraryImpl.java +++ b/data/src/main/java/one/nem/lacerta/data/impl/LacertaLibraryImpl.java @@ -111,7 +111,7 @@ public class LacertaLibraryImpl implements LacertaLibrary { listItems.add(listItem); } - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:"); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); for (DocumentEntity documentEntity : documentEntities) { logger.debug("LacertaLibraryImpl", "documentEntity.title: " + documentEntity.title); From 5da9e14d616a17b2a07a4d6a8fd6c5b2b96812f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 10:46:41 +0900 Subject: [PATCH 30/67] =?UTF-8?q?Workaround=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../one/nem/lacerta/feature/library/ListItemAdapter.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/feature/library/src/main/java/one/nem/lacerta/feature/library/ListItemAdapter.java b/feature/library/src/main/java/one/nem/lacerta/feature/library/ListItemAdapter.java index ee310413..579d1582 100644 --- a/feature/library/src/main/java/one/nem/lacerta/feature/library/ListItemAdapter.java +++ b/feature/library/src/main/java/one/nem/lacerta/feature/library/ListItemAdapter.java @@ -1,5 +1,6 @@ package one.nem.lacerta.feature.library; +import android.graphics.Color; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -49,11 +50,14 @@ public class ListItemAdapter extends RecyclerView.Adapter 0) { // ごまかし + holder.tagGroup.removeAllViews(); + } for (int i = 0; i < listItem.getTagList().size(); i++) { - Toast.makeText(holder.tagGroup.getContext(), listItem.getTagList().get(i).getName(), Toast.LENGTH_SHORT).show(); ChipGroup chipGroup = holder.tagGroup; Chip chip = new Chip(chipGroup.getContext()); chip.setText(listItem.getTagList().get(i).getName()); + chip.setBackgroundColor(Color.parseColor(listItem.getTagList().get(i).getColor())); chipGroup.addView(chip); } holder.tagGroup.setVisibility(View.VISIBLE); From 6693275dd98a65df6a271a14f7ca698e8b23ef79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 10:48:53 +0900 Subject: [PATCH 31/67] =?UTF-8?q?=E3=83=86=E3=82=AD=E3=82=B9=E3=83=88?= =?UTF-8?q?=E8=89=B2=E3=82=92=E5=A4=89=E6=9B=B4=E3=81=99=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/one/nem/lacerta/feature/library/ListItemAdapter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature/library/src/main/java/one/nem/lacerta/feature/library/ListItemAdapter.java b/feature/library/src/main/java/one/nem/lacerta/feature/library/ListItemAdapter.java index 579d1582..f16cb2cd 100644 --- a/feature/library/src/main/java/one/nem/lacerta/feature/library/ListItemAdapter.java +++ b/feature/library/src/main/java/one/nem/lacerta/feature/library/ListItemAdapter.java @@ -57,7 +57,7 @@ public class ListItemAdapter extends RecyclerView.Adapter Date: Mon, 29 Jan 2024 10:50:39 +0900 Subject: [PATCH 32/67] =?UTF-8?q?Home=E3=81=AE=E5=A0=B4=E5=90=88=E3=81=AE?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=99=82=E5=88=BB=E8=A1=A8=E7=A4=BA=E3=82=92?= =?UTF-8?q?=E3=83=A9=E3=82=A4=E3=83=96=E3=83=A9=E3=83=AA=E3=81=A8=E7=B5=B1?= =?UTF-8?q?=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/one/nem/lacerta/data/impl/LacertaLibraryImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/data/src/main/java/one/nem/lacerta/data/impl/LacertaLibraryImpl.java b/data/src/main/java/one/nem/lacerta/data/impl/LacertaLibraryImpl.java index 42d04e83..0df061f9 100644 --- a/data/src/main/java/one/nem/lacerta/data/impl/LacertaLibraryImpl.java +++ b/data/src/main/java/one/nem/lacerta/data/impl/LacertaLibraryImpl.java @@ -50,12 +50,13 @@ public class LacertaLibraryImpl implements LacertaLibrary { return CompletableFuture.supplyAsync(() -> { List documentEntities = database.documentDao().getRecentDocument(limit); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); ArrayList listItems = new ArrayList<>(); for (DocumentEntity documentEntity : documentEntities) { ListItem listItem = new ListItem(); listItem.setItemType(ListItemType.ITEM_TYPE_DOCUMENT); listItem.setTitle(documentEntity.title); - listItem.setDescription(DateFormat.getDateInstance().format(documentEntity.updatedAt)); + listItem.setDescription(simpleDateFormat.format(documentEntity.updatedAt)); listItem.setItemId(documentEntity.id); listItem.setHasCombined(documentEntity.isCombineParent); listItems.add(listItem); From 9a8180ab655e85c4629e4a0c706c51b746b33723 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 10:51:23 +0900 Subject: [PATCH 33/67] =?UTF-8?q?=E5=AE=9F=E8=A3=85=E3=82=92=E3=82=84?= =?UTF-8?q?=E3=82=81=E3=81=9F=E9=A0=85=E7=9B=AE=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- component/viewer/src/main/res/menu/viewer_menu.xml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/component/viewer/src/main/res/menu/viewer_menu.xml b/component/viewer/src/main/res/menu/viewer_menu.xml index 92dab962..156f36db 100644 --- a/component/viewer/src/main/res/menu/viewer_menu.xml +++ b/component/viewer/src/main/res/menu/viewer_menu.xml @@ -20,10 +20,6 @@ android:id="@+id/action_combine" android:title="結合" /> - - From aee7f523d9f7526abc7b78f0317a60dbcfb0a988 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 10:52:15 +0900 Subject: [PATCH 34/67] =?UTF-8?q?=E6=96=87=E5=AD=97=E5=88=97=E5=A4=89?= =?UTF-8?q?=E6=9B=B4(=E6=9A=AB=E5=AE=9A)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- component/viewer/src/main/res/menu/viewer_menu.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/component/viewer/src/main/res/menu/viewer_menu.xml b/component/viewer/src/main/res/menu/viewer_menu.xml index 156f36db..2d30f827 100644 --- a/component/viewer/src/main/res/menu/viewer_menu.xml +++ b/component/viewer/src/main/res/menu/viewer_menu.xml @@ -2,7 +2,7 @@ + android:title="バージョン履歴" /> Date: Mon, 29 Jan 2024 10:54:14 +0900 Subject: [PATCH 35/67] =?UTF-8?q?Resume=E6=99=82=E3=81=AB=E8=87=AA?= =?UTF-8?q?=E5=8B=95=E6=9B=B4=E6=96=B0=E3=81=99=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nem/lacerta/feature/library/LibraryPageFragment.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/feature/library/src/main/java/one/nem/lacerta/feature/library/LibraryPageFragment.java b/feature/library/src/main/java/one/nem/lacerta/feature/library/LibraryPageFragment.java index 92d2cbca..d74f32e7 100644 --- a/feature/library/src/main/java/one/nem/lacerta/feature/library/LibraryPageFragment.java +++ b/feature/library/src/main/java/one/nem/lacerta/feature/library/LibraryPageFragment.java @@ -287,6 +287,13 @@ public class LibraryPageFragment extends Fragment { }); } + @Override + public void onResume() { + super.onResume(); + + updateItem(this.folderId); + } + private void getTag(String documentId) { //debug } From 2cb6b45cbd7e45c3c84482e71fdc8a6b6d01e5e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 10:54:38 +0900 Subject: [PATCH 36/67] =?UTF-8?q?=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../one/nem/lacerta/feature/library/LibraryPageFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature/library/src/main/java/one/nem/lacerta/feature/library/LibraryPageFragment.java b/feature/library/src/main/java/one/nem/lacerta/feature/library/LibraryPageFragment.java index d74f32e7..8cc242ea 100644 --- a/feature/library/src/main/java/one/nem/lacerta/feature/library/LibraryPageFragment.java +++ b/feature/library/src/main/java/one/nem/lacerta/feature/library/LibraryPageFragment.java @@ -291,7 +291,7 @@ public class LibraryPageFragment extends Fragment { public void onResume() { super.onResume(); - updateItem(this.folderId); + updateItem(this.folderId); // 暫定, Pull-to-refreshを実装するまで } private void getTag(String documentId) { //debug From b60bc92495e592e447965e222cf4ca50c51faf25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 10:55:48 +0900 Subject: [PATCH 37/67] =?UTF-8?q?=E4=B8=8D=E8=A6=81=E3=81=AA=E3=83=A1?= =?UTF-8?q?=E3=82=BD=E3=83=83=E3=83=89=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../one/nem/lacerta/feature/library/LibraryPageFragment.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/feature/library/src/main/java/one/nem/lacerta/feature/library/LibraryPageFragment.java b/feature/library/src/main/java/one/nem/lacerta/feature/library/LibraryPageFragment.java index 8cc242ea..14daf72f 100644 --- a/feature/library/src/main/java/one/nem/lacerta/feature/library/LibraryPageFragment.java +++ b/feature/library/src/main/java/one/nem/lacerta/feature/library/LibraryPageFragment.java @@ -294,9 +294,6 @@ public class LibraryPageFragment extends Fragment { updateItem(this.folderId); // 暫定, Pull-to-refreshを実装するまで } - private void getTag(String documentId) { //debug - } - /** * Toolbarのサブタイトルを更新 * @param subtitle サブタイトル From e4418e6322409b6ca78824f2691064b92736ccf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 10:56:34 +0900 Subject: [PATCH 38/67] =?UTF-8?q?JavaDoc=E5=AF=BE=E5=BF=9C,=20=E3=82=B3?= =?UTF-8?q?=E3=83=A1=E3=83=B3=E3=83=88=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../feature/library/LibraryPageFragment.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/feature/library/src/main/java/one/nem/lacerta/feature/library/LibraryPageFragment.java b/feature/library/src/main/java/one/nem/lacerta/feature/library/LibraryPageFragment.java index 14daf72f..117f3ce6 100644 --- a/feature/library/src/main/java/one/nem/lacerta/feature/library/LibraryPageFragment.java +++ b/feature/library/src/main/java/one/nem/lacerta/feature/library/LibraryPageFragment.java @@ -202,10 +202,6 @@ public class LibraryPageFragment extends Fragment { @Override public void onFolderSelected(String folderId, String folderName) { logger.debug("LibraryTopFragment", "Folder selected! folderId: " + folderId + ", folderName: " + folderName); -// // 画面遷移 -// FragmentNavigation fragmentNavigation = (FragmentNavigation) getActivity(); -// // folderId: 推移先で表示するフォルダのID, folderName: 推移先で表示するフォルダの名前, parentId: このフラグメントで表示しているフォルダのID(推移先の親) -// fragmentNavigation.navigateToFragment(LibraryPageFragment.newInstance(folderId, folderName, libraryItemPage != null ? libraryItemPage.getParentId() : null), false); Bundle bundle = new Bundle(); bundle.putString("folderId", folderId); bundle.putString("title", folderName); @@ -340,10 +336,20 @@ public class LibraryPageFragment extends Fragment { }); } + /** + * メディアピッカーを使用してドキュメントを作成する(呼び出し部分) + */ private void createDocByMediaPicker() { getContent.launch("image/*"); } + /** + * ページを追加する + * @param documentDetail ドキュメント詳細 + * @param bitmaps ビットマップ + * @param commitMessage コミットメッセージ + * @return CompletableFuture + */ private CompletableFuture addPagesToDocumentDetail(DocumentDetail documentDetail, Bitmap[] bitmaps, String commitMessage) { return CompletableFuture.runAsync(() -> { try { From e460bcbe6ef1c91346c5f4bb05baa57b2c1fd81c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 10:57:29 +0900 Subject: [PATCH 39/67] =?UTF-8?q?RevID=E3=81=AE=E5=8F=96=E3=82=8A=E6=89=B1?= =?UTF-8?q?=E3=81=84=E3=82=92=E8=BF=BD=E5=8A=A0=20WIP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/viewer/ViewerContainerFragment.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java index ef60e938..0bf77039 100644 --- a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java +++ b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java @@ -61,6 +61,7 @@ public class ViewerContainerFragment extends Fragment { private String documentId; private String documentName; private boolean hasCombined = false; + private String revId; private ViewerViewPagerAdapter viewerViewPagerAdapter; public ViewerContainerFragment() { @@ -74,6 +75,7 @@ public class ViewerContainerFragment extends Fragment { args.putString("documentId", documentId); args.putString("documentName", documentName); args.putBoolean("hasCombined", hasCombined); + args.putString("revId", null); return fragment; } @@ -84,6 +86,18 @@ public class ViewerContainerFragment extends Fragment { args.putString("documentId", documentId); args.putString("documentName", documentName); args.putBoolean("hasCombined", false); + args.putString("revId", null); + return fragment; + } + + public static ViewerContainerFragment newInstance(String documentId, String documentName, String revId) { + ViewerContainerFragment fragment = new ViewerContainerFragment(); + Bundle args = new Bundle(); + fragment.setArguments(args); + args.putString("documentId", documentId); + args.putString("documentName", documentName); + args.putBoolean("hasCombined", false); + args.putString("revId", revId); return fragment; } From 756b73588463df5aa03bb9e2c5949d745f6376fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 10:57:37 +0900 Subject: [PATCH 40/67] =?UTF-8?q?RevID=E3=81=AE=E5=8F=96=E3=82=8A=E6=89=B1?= =?UTF-8?q?=E3=81=84=E3=82=92=E8=BF=BD=E5=8A=A0=20WIP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nem/lacerta/component/viewer/ViewerContainerFragment.java | 1 + 1 file changed, 1 insertion(+) diff --git a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java index 0bf77039..8d646e4c 100644 --- a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java +++ b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java @@ -108,6 +108,7 @@ public class ViewerContainerFragment extends Fragment { documentId = getArguments().getString("documentId"); documentName = getArguments().getString("documentName"); hasCombined = getArguments().getBoolean("hasCombined"); + revId = getArguments().getString("revId"); } } From a569182fd177bb32d47f12907e612bba9c58a8d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 11:03:15 +0900 Subject: [PATCH 41/67] =?UTF-8?q?Adapter=E3=81=ABRevList=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nem/lacerta/component/viewer/ViewerViewPagerAdapter.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerViewPagerAdapter.java b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerViewPagerAdapter.java index 66a6d8a9..b42634b5 100644 --- a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerViewPagerAdapter.java +++ b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerViewPagerAdapter.java @@ -15,6 +15,7 @@ public class ViewerViewPagerAdapter extends FragmentStateAdapter { // Variables private ArrayList fragmentTargetIdList = new ArrayList<>(); private ArrayList fragmentTitleList = new ArrayList<>(); + private ArrayList fragmentRevisionList = new ArrayList<>(); // Setter @@ -26,6 +27,10 @@ public class ViewerViewPagerAdapter extends FragmentStateAdapter { this.fragmentTitleList = fragmentTitleList; } + public void setFragmentRevisionList(ArrayList fragmentRevisionList) { + this.fragmentRevisionList = fragmentRevisionList; + } + public ViewerViewPagerAdapter(@NonNull FragmentActivity fragmentActivity) { super(fragmentActivity); } From d9a9cd0743368a39da1ddc94b37593cb75d21f28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 11:04:33 +0900 Subject: [PATCH 42/67] =?UTF-8?q?Revision=E3=81=8C=E6=8C=87=E5=AE=9A?= =?UTF-8?q?=E3=81=95=E3=82=8C=E3=81=A6=E3=81=84=E3=82=8B=E5=A0=B4=E5=90=88?= =?UTF-8?q?=E3=81=AFBody=E3=81=AB=E6=B8=A1=E3=81=99=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lacerta/component/viewer/ViewerViewPagerAdapter.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerViewPagerAdapter.java b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerViewPagerAdapter.java index b42634b5..e4646237 100644 --- a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerViewPagerAdapter.java +++ b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerViewPagerAdapter.java @@ -38,7 +38,11 @@ public class ViewerViewPagerAdapter extends FragmentStateAdapter { @NonNull @Override public Fragment createFragment(int position) { - return ViewerBodyFragment.newInstance(fragmentTargetIdList.get(position), fragmentTitleList.get(position)); + if (fragmentRevisionList != null && fragmentRevisionList.size() > position) { + return ViewerBodyFragment.newInstance(fragmentTargetIdList.get(position), fragmentTitleList.get(position), fragmentRevisionList.get(position)); + } else { + return ViewerBodyFragment.newInstance(fragmentTargetIdList.get(position), fragmentTitleList.get(position)); + } } @Override From f1d947e15929bba49f0a96cdeaa9619b6e18fc9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 11:07:00 +0900 Subject: [PATCH 43/67] =?UTF-8?q?=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../viewer/ViewerContainerFragment.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java index 8d646e4c..4b95caaa 100644 --- a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java +++ b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java @@ -37,6 +37,8 @@ import one.nem.lacerta.model.document.page.Page; import one.nem.lacerta.model.document.tag.DocumentTag; import one.nem.lacerta.model.pref.ToxiDocumentModel; import one.nem.lacerta.utils.LacertaLogger; +import one.nem.lacerta.vcs.LacertaVcs; +import one.nem.lacerta.vcs.factory.LacertaVcsFactory; /** * A simple {@link Fragment} subclass. @@ -57,6 +59,9 @@ public class ViewerContainerFragment extends Fragment { @Inject Document document; + @Inject + LacertaVcsFactory lacertaVcsFactory; + // Variables private String documentId; private String documentName; @@ -137,6 +142,26 @@ public class ViewerContainerFragment extends Fragment { Toolbar toolbar = view.findViewById(R.id.toolbar); initToolbar(toolbar, true, documentName); + if (this.revId != null) { // Revが指定されている場合 + LacertaVcs lacertaVcs = lacertaVcsFactory.create(documentId); + lacertaVcs.getDocumentPagePathListRev(this.revId).thenApply(pagePathList -> { + logger.debug("ViewerContainerFragment", "pagePathList: " + pagePathList.size()); + document.getDocumentPageListByFileNameList(this.documentId, pagePathList).thenApply(pageList -> { + logger.debug("ViewerContainerFragment", "pageList: " + pageList.size()); + // 暫定: 履歴を遡って表示している場合は結合を無視する + this.hasCombined = false; + + viewerViewPagerAdapter.setFragmentTargetIdList(new ArrayList(){{add(documentId);}}); // TODO-rca: 読みにくいので直接追加できるようにする + viewerViewPagerAdapter.setFragmentTitleList(new ArrayList(){{add(documentName);}}); // TODO-rca: 読みにくいので直接追加できるようにする + + viewerViewPagerAdapter.setFragmentRevisionList(new ArrayList(){{add(revId);}}); // TODO-rca: 読みにくいので直接追加できるようにする + viewerViewPagerAdapter.notifyItemRangeChanged(0, pageList.size()); + return null; + }); + return null; + }); + } + // Get document page if (this.hasCombined) { // 結合親の場合 logger.debug("ViewerContainerFragment", "hasCombined: " + hasCombined); From 7dcec94c03f088551c521d97389e1b8c76972836 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 11:09:27 +0900 Subject: [PATCH 44/67] =?UTF-8?q?RevID=E3=81=8C=E6=8C=87=E5=AE=9A=E3=81=95?= =?UTF-8?q?=E3=82=8C=E3=81=A6=E3=81=84=E3=82=8B=E5=A0=B4=E5=90=88=E3=81=AE?= =?UTF-8?q?=E5=91=BC=E3=81=B3=E5=87=BA=E3=81=97=E5=85=88=E3=82=82=E6=96=B0?= =?UTF-8?q?=E3=81=97=E3=81=84=E6=96=B9=E3=81=B8=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lacerta/component/viewer/ViewerContainerFragment.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java index 4b95caaa..791901a9 100644 --- a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java +++ b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java @@ -148,8 +148,9 @@ public class ViewerContainerFragment extends Fragment { logger.debug("ViewerContainerFragment", "pagePathList: " + pagePathList.size()); document.getDocumentPageListByFileNameList(this.documentId, pagePathList).thenApply(pageList -> { logger.debug("ViewerContainerFragment", "pageList: " + pageList.size()); - // 暫定: 履歴を遡って表示している場合は結合を無視する + // 暫定: 履歴を遡って表示している場合は結合を無視する(処理自体は単純だけどUI側の対応をする時間がないので) this.hasCombined = false; + tabLayout.setVisibility(View.GONE); viewerViewPagerAdapter.setFragmentTargetIdList(new ArrayList(){{add(documentId);}}); // TODO-rca: 読みにくいので直接追加できるようにする viewerViewPagerAdapter.setFragmentTitleList(new ArrayList(){{add(documentName);}}); // TODO-rca: 読みにくいので直接追加できるようにする @@ -311,7 +312,7 @@ public class ViewerContainerFragment extends Fragment { public void onItemSelected(String revId) { logger.debug("ViewerContainerFragment", "Dialog Result: revId: " + revId); getParentFragmentManager().beginTransaction() - .replace(R.id.nav_host_fragment, ViewerListFragment.newInstance(documentId, documentName, revId)) + .replace(R.id.nav_host_fragment, ViewerContainerFragment.newInstance(documentId, documentName, revId)) .commit(); } From 80941c39d6ac7b7ec4a38a85c6a61c565a77b436 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 11:14:02 +0900 Subject: [PATCH 45/67] =?UTF-8?q?=E3=83=86=E3=82=AD=E3=82=B9=E3=83=88?= =?UTF-8?q?=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- feature/library/src/main/res/menu/dir_menu.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature/library/src/main/res/menu/dir_menu.xml b/feature/library/src/main/res/menu/dir_menu.xml index e9760740..387474a1 100644 --- a/feature/library/src/main/res/menu/dir_menu.xml +++ b/feature/library/src/main/res/menu/dir_menu.xml @@ -11,7 +11,7 @@ \ No newline at end of file From b756eea9bb67293d76c9dc034ea07d42250c28d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 11:21:28 +0900 Subject: [PATCH 46/67] =?UTF-8?q?=E3=81=84=E3=82=8D=E3=81=84=E3=82=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/viewer/ViewerContainerFragment.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java index 791901a9..f5fd50b0 100644 --- a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java +++ b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java @@ -33,6 +33,7 @@ import one.nem.lacerta.component.common.picker.LacertaDirPickerDialog; import one.nem.lacerta.component.common.picker.LacertaFilePickerDialog; import one.nem.lacerta.data.Document; import one.nem.lacerta.data.LacertaLibrary; +import one.nem.lacerta.model.ListItemType; import one.nem.lacerta.model.document.page.Page; import one.nem.lacerta.model.document.tag.DocumentTag; import one.nem.lacerta.model.pref.ToxiDocumentModel; @@ -149,14 +150,13 @@ public class ViewerContainerFragment extends Fragment { document.getDocumentPageListByFileNameList(this.documentId, pagePathList).thenApply(pageList -> { logger.debug("ViewerContainerFragment", "pageList: " + pageList.size()); // 暫定: 履歴を遡って表示している場合は結合を無視する(処理自体は単純だけどUI側の対応をする時間がないので) - this.hasCombined = false; tabLayout.setVisibility(View.GONE); - viewerViewPagerAdapter.setFragmentTargetIdList(new ArrayList(){{add(documentId);}}); // TODO-rca: 読みにくいので直接追加できるようにする viewerViewPagerAdapter.setFragmentTitleList(new ArrayList(){{add(documentName);}}); // TODO-rca: 読みにくいので直接追加できるようにする viewerViewPagerAdapter.setFragmentRevisionList(new ArrayList(){{add(revId);}}); // TODO-rca: 読みにくいので直接追加できるようにする viewerViewPagerAdapter.notifyItemRangeChanged(0, pageList.size()); + toolbar.setSubtitle("リビジョン: " + revId); return null; }); return null; @@ -165,6 +165,8 @@ public class ViewerContainerFragment extends Fragment { // Get document page if (this.hasCombined) { // 結合親の場合 + // バージョンを遡る操作を非表示 + toolbar.getMenu().findItem(R.id.action_open_vcs_rev_list).setVisible(false); logger.debug("ViewerContainerFragment", "hasCombined: " + hasCombined); lacertaLibrary.getCombinedDocumentToxiList(documentId).thenAccept(combinedDocumentToxiList -> { logger.debug("ViewerContainerFragment", "combinedDocumentToxiList: " + combinedDocumentToxiList.size()); @@ -175,6 +177,7 @@ public class ViewerContainerFragment extends Fragment { combinedDocumentToxiList.stream().map(ToxiDocumentModel::getTitleCache).collect(Collectors.toCollection(ArrayList::new))); viewerViewPagerAdapter.notifyItemRangeChanged(0, combinedDocumentToxiList.size()); + toolbar.setSubtitle("結合ドキュメント"); }); } else { // それ以外の場合 logger.debug("ViewerContainerFragment", "hasCombined: " + hasCombined); @@ -184,6 +187,12 @@ public class ViewerContainerFragment extends Fragment { viewerViewPagerAdapter.notifyItemRangeChanged(0, 1); } + // サブタイトルとしてパスを表示(暫定) + lacertaLibrary.getPublicPath(documentId, ListItemType.ITEM_TYPE_DOCUMENT).thenAccept(publicPath -> { + logger.debug("ViewerContainerFragment", "publicPath: " + publicPath); + toolbar.setSubtitle("/" + publicPath.parent().getStringPath()); + }); + // Attach tab layout to view pager new TabLayoutMediator(tabLayout, viewPager, (tab, position) -> { View customView = LayoutInflater.from(getContext()).inflate(R.layout.viewer_custom_tab, null); From 6d17811ada4a7dba85f403c3344417dc8b991e24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 11:30:40 +0900 Subject: [PATCH 47/67] =?UTF-8?q?=E5=85=B1=E6=9C=89=E3=83=93=E3=83=A5?= =?UTF-8?q?=E3=83=BC=E3=83=A2=E3=83=87=E3=83=AB=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/viewer/SharedViewModel.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 component/viewer/src/main/java/one/nem/lacerta/component/viewer/SharedViewModel.java diff --git a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/SharedViewModel.java b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/SharedViewModel.java new file mode 100644 index 00000000..c5364f63 --- /dev/null +++ b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/SharedViewModel.java @@ -0,0 +1,19 @@ +package one.nem.lacerta.component.viewer; + +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; + +public class SharedViewModel extends ViewModel { + + private final MutableLiveData currentFragmentPosition = new MutableLiveData<>(); + + public void setCurrentFragmentPosition(int position) { + currentFragmentPosition.setValue(position); + } + + public int getCurrentFragmentPosition() { + assert currentFragmentPosition.getValue() != null; + return currentFragmentPosition.getValue(); + } + +} From 0c27cf6b24d81e37931a10272a47f502ee7d2725 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 11:45:35 +0900 Subject: [PATCH 48/67] WIP --- .../component/viewer/ViewerBodyFragment.java | 44 ++++++++++++++++++- .../viewer/ViewerContainerFragment.java | 12 +++++ 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerBodyFragment.java b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerBodyFragment.java index f52576d4..334a7e97 100644 --- a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerBodyFragment.java +++ b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerBodyFragment.java @@ -4,8 +4,10 @@ import android.content.Intent; import android.os.Bundle; import androidx.fragment.app.Fragment; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import androidx.viewpager2.widget.ViewPager2; import android.view.LayoutInflater; import android.view.View; @@ -49,6 +51,12 @@ public class ViewerBodyFragment extends Fragment { private String documentName; private String revisionId; + private SharedViewModel sharedViewModel; + + private RecyclerView recyclerView; + + private int maxPage = 0; + public ViewerBodyFragment() { // Required empty public constructor } @@ -94,9 +102,33 @@ public class ViewerBodyFragment extends Fragment { super.onViewCreated(view, savedInstanceState); logger.debug("ViewerBodyFragment", "ViewerBodyFragment.onViewCreated"); - RecyclerView recyclerView = view.findViewById(R.id.recycler_view); + this.recyclerView = view.findViewById(R.id.recycler_view); recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); + sharedViewModel = new ViewModelProvider(requireActivity()).get(SharedViewModel.class); + + ViewPager2 viewPager2 = getActivity().findViewById(R.id.view_pager); + viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { + @Override + public void onPageSelected(int position) { + super.onPageSelected(position); + sharedViewModel.setCurrentFragmentPosition(position); + + if (maxPage > 0 && position >= maxPage) { + // out of range + } else { + try { + recyclerView.scrollToPosition(position); + } catch (Exception e) { + logger.error("ViewerBodyFragment", "recyclerView.scrollToPosition"); + logger.error("ViewerBodyFragment", e.getMessage()); + logger.e_code("8beec84b-1f7d-4e1e-9364-9fcf00f3509a"); + + } + } + } + }); + ViewerBodyAdapter viewerBodyAdapter = new ViewerBodyAdapter(new ItemClickListener() { @Override public void onItemClick(String fileName) { @@ -129,9 +161,19 @@ public class ViewerBodyFragment extends Fragment { loadDocument(viewerBodyAdapter, documentId, revisionId); } + @Override + public void onResume() { + super.onResume(); + logger.debug("ViewerBodyFragment", "ViewerBodyFragment.onResume"); + + this.sharedViewModel = new ViewModelProvider(requireActivity()).get(SharedViewModel.class); + this.recyclerView.scrollToPosition(sharedViewModel.getCurrentFragmentPosition()); + } + private void loadDocument(ViewerBodyAdapter adapter, String documentId, String revisionId) { if (revisionId == null) { // load latest revision document.getDocument(documentId).thenAccept(document -> { + this.maxPage = document.getPages().size(); getActivity().runOnUiThread(() -> { adapter.setPages(document.getPages()); adapter.notifyDataSetChanged(); diff --git a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java index f5fd50b0..3bfe11ab 100644 --- a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java +++ b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java @@ -224,6 +224,18 @@ public class ViewerContainerFragment extends Fragment { tab.setCustomView(customView); }).attach(); + + // Sync position between pages + viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { + @Override + public void onPageSelected(int position) { + logger.debug("ViewerContainerFragment", "onPageSelected: " + position); + super.onPageSelected(position); + if (hasCombined) { + toolbar.setTitle(viewerViewPagerAdapter.getFragmentTitle(position)); + } + } + }); } private void renameCombinedDocument(String parentId, String childId, String current, int position) { // TODO-rca: 無理やりpositionを渡してるのでなんとかする From c3e1825542dbb3fe01748839e300a64433d44a90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 11:45:41 +0900 Subject: [PATCH 49/67] Revert "WIP" This reverts commit 0c27cf6b24d81e37931a10272a47f502ee7d2725. --- .../component/viewer/ViewerBodyFragment.java | 44 +------------------ .../viewer/ViewerContainerFragment.java | 12 ----- 2 files changed, 1 insertion(+), 55 deletions(-) diff --git a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerBodyFragment.java b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerBodyFragment.java index 334a7e97..f52576d4 100644 --- a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerBodyFragment.java +++ b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerBodyFragment.java @@ -4,10 +4,8 @@ import android.content.Intent; import android.os.Bundle; import androidx.fragment.app.Fragment; -import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; -import androidx.viewpager2.widget.ViewPager2; import android.view.LayoutInflater; import android.view.View; @@ -51,12 +49,6 @@ public class ViewerBodyFragment extends Fragment { private String documentName; private String revisionId; - private SharedViewModel sharedViewModel; - - private RecyclerView recyclerView; - - private int maxPage = 0; - public ViewerBodyFragment() { // Required empty public constructor } @@ -102,33 +94,9 @@ public class ViewerBodyFragment extends Fragment { super.onViewCreated(view, savedInstanceState); logger.debug("ViewerBodyFragment", "ViewerBodyFragment.onViewCreated"); - this.recyclerView = view.findViewById(R.id.recycler_view); + RecyclerView recyclerView = view.findViewById(R.id.recycler_view); recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); - sharedViewModel = new ViewModelProvider(requireActivity()).get(SharedViewModel.class); - - ViewPager2 viewPager2 = getActivity().findViewById(R.id.view_pager); - viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { - @Override - public void onPageSelected(int position) { - super.onPageSelected(position); - sharedViewModel.setCurrentFragmentPosition(position); - - if (maxPage > 0 && position >= maxPage) { - // out of range - } else { - try { - recyclerView.scrollToPosition(position); - } catch (Exception e) { - logger.error("ViewerBodyFragment", "recyclerView.scrollToPosition"); - logger.error("ViewerBodyFragment", e.getMessage()); - logger.e_code("8beec84b-1f7d-4e1e-9364-9fcf00f3509a"); - - } - } - } - }); - ViewerBodyAdapter viewerBodyAdapter = new ViewerBodyAdapter(new ItemClickListener() { @Override public void onItemClick(String fileName) { @@ -161,19 +129,9 @@ public class ViewerBodyFragment extends Fragment { loadDocument(viewerBodyAdapter, documentId, revisionId); } - @Override - public void onResume() { - super.onResume(); - logger.debug("ViewerBodyFragment", "ViewerBodyFragment.onResume"); - - this.sharedViewModel = new ViewModelProvider(requireActivity()).get(SharedViewModel.class); - this.recyclerView.scrollToPosition(sharedViewModel.getCurrentFragmentPosition()); - } - private void loadDocument(ViewerBodyAdapter adapter, String documentId, String revisionId) { if (revisionId == null) { // load latest revision document.getDocument(documentId).thenAccept(document -> { - this.maxPage = document.getPages().size(); getActivity().runOnUiThread(() -> { adapter.setPages(document.getPages()); adapter.notifyDataSetChanged(); diff --git a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java index 3bfe11ab..f5fd50b0 100644 --- a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java +++ b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java @@ -224,18 +224,6 @@ public class ViewerContainerFragment extends Fragment { tab.setCustomView(customView); }).attach(); - - // Sync position between pages - viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { - @Override - public void onPageSelected(int position) { - logger.debug("ViewerContainerFragment", "onPageSelected: " + position); - super.onPageSelected(position); - if (hasCombined) { - toolbar.setTitle(viewerViewPagerAdapter.getFragmentTitle(position)); - } - } - }); } private void renameCombinedDocument(String parentId, String childId, String current, int position) { // TODO-rca: 無理やりpositionを渡してるのでなんとかする From f7a71c70ed0ce6033a27c2fd10410578dfc592f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 11:45:42 +0900 Subject: [PATCH 50/67] =?UTF-8?q?Revert=20"=E5=85=B1=E6=9C=89=E3=83=93?= =?UTF-8?q?=E3=83=A5=E3=83=BC=E3=83=A2=E3=83=87=E3=83=AB=E5=AE=9F=E8=A3=85?= =?UTF-8?q?"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 6d17811ada4a7dba85f403c3344417dc8b991e24. --- .../component/viewer/SharedViewModel.java | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100644 component/viewer/src/main/java/one/nem/lacerta/component/viewer/SharedViewModel.java diff --git a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/SharedViewModel.java b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/SharedViewModel.java deleted file mode 100644 index c5364f63..00000000 --- a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/SharedViewModel.java +++ /dev/null @@ -1,19 +0,0 @@ -package one.nem.lacerta.component.viewer; - -import androidx.lifecycle.MutableLiveData; -import androidx.lifecycle.ViewModel; - -public class SharedViewModel extends ViewModel { - - private final MutableLiveData currentFragmentPosition = new MutableLiveData<>(); - - public void setCurrentFragmentPosition(int position) { - currentFragmentPosition.setValue(position); - } - - public int getCurrentFragmentPosition() { - assert currentFragmentPosition.getValue() != null; - return currentFragmentPosition.getValue(); - } - -} From b7232d2723652befc623e29a6f5b1853c1ac544d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 11:51:22 +0900 Subject: [PATCH 51/67] =?UTF-8?q?=E3=82=BF=E3=83=96=E3=81=8B=E3=82=89?= =?UTF-8?q?=E3=82=82=E9=81=B8=E6=8A=9E=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F(=E3=81=AF=E3=81=9A?= =?UTF-8?q?=E3=81=A0=E3=81=91=E3=81=A9=E5=8B=95=E3=81=8B=E3=81=AA=E3=81=84?= =?UTF-8?q?=E3=81=AE=E3=81=A7=E3=81=A8=E3=82=8A=E3=81=82=E3=81=88=E3=81=9A?= =?UTF-8?q?=E8=A6=8B=E3=81=AA=E3=81=8B=E3=81=A3=E3=81=9F=E3=81=93=E3=81=A8?= =?UTF-8?q?=E3=81=AB=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/viewer/ViewerContainerFragment.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java index f5fd50b0..1e6b6ff7 100644 --- a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java +++ b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java @@ -205,7 +205,10 @@ public class ViewerContainerFragment extends Fragment { PopupMenu popupMenu = new PopupMenu(getContext(), v); popupMenu.inflate(R.menu.viewer_tab_menu); popupMenu.setOnMenuItemClickListener(item -> { - if (item.getItemId() == R.id.action_rename) { + if (item.getItemId() == R.id.action_open_vcs_rev_list) { + showRevList(viewerViewPagerAdapter.getFragmentTargetId(position), viewerViewPagerAdapter.getFragmentTitle(position)); + return true; + } else if (item.getItemId() == R.id.action_rename) { renameCombinedDocument( documentId, viewerViewPagerAdapter.getFragmentTargetIdList().get(position), @@ -289,7 +292,7 @@ public class ViewerContainerFragment extends Fragment { toolbar.inflateMenu(R.menu.viewer_menu); toolbar.setOnMenuItemClickListener(item -> { if (item.getItemId() == R.id.action_open_vcs_rev_list) { - showRevList(); + showRevList(this.documentId, this.documentName); return true; } else if (item.getItemId() == R.id.action_rename) { renameDocument(); @@ -313,15 +316,15 @@ public class ViewerContainerFragment extends Fragment { }); } - private void showRevList() { + private void showRevList(String targetId, String targetName) { LacertaSelectRevDialog lacertaSelectRevDialog = new LacertaSelectRevDialog(); - lacertaSelectRevDialog.setDocumentId(this.documentId).setTitle("リビジョンの選択").setMessage("リビジョンを選択してください。").setNegativeButtonText("キャンセル"); + lacertaSelectRevDialog.setDocumentId(targetId).setTitle("リビジョンの選択").setMessage("リビジョンを選択してください。").setNegativeButtonText("キャンセル"); lacertaSelectRevDialog.setListener(new LacertaSelectRevDialogListener() { @Override public void onItemSelected(String revId) { logger.debug("ViewerContainerFragment", "Dialog Result: revId: " + revId); getParentFragmentManager().beginTransaction() - .replace(R.id.nav_host_fragment, ViewerContainerFragment.newInstance(documentId, documentName, revId)) + .replace(R.id.nav_host_fragment, ViewerContainerFragment.newInstance(targetId, targetName, revId)) .commit(); } From 71e573af294f25540ec8249f0fcd1a60ab72fd5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 11:53:37 +0900 Subject: [PATCH 52/67] =?UTF-8?q?=E3=82=A2=E3=82=A4=E3=82=B3=E3=83=B3?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- shared/ui/src/main/res/drawable/add_24px.xml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 shared/ui/src/main/res/drawable/add_24px.xml diff --git a/shared/ui/src/main/res/drawable/add_24px.xml b/shared/ui/src/main/res/drawable/add_24px.xml new file mode 100644 index 00000000..3a1cb6d0 --- /dev/null +++ b/shared/ui/src/main/res/drawable/add_24px.xml @@ -0,0 +1,10 @@ + + + From 266920349e0c38bb0ece4a953a0ce807169a246f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 11:53:51 +0900 Subject: [PATCH 53/67] =?UTF-8?q?=E3=82=BF=E3=82=B0=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=E3=83=9C=E3=82=BF=E3=83=B3=E3=81=AE=E3=82=A2=E3=82=A4=E3=82=B3?= =?UTF-8?q?=E3=83=B3=E3=82=92=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- feature/setting/src/main/res/menu/setting_tag_manage_menu.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature/setting/src/main/res/menu/setting_tag_manage_menu.xml b/feature/setting/src/main/res/menu/setting_tag_manage_menu.xml index f012a68b..9cbabb03 100644 --- a/feature/setting/src/main/res/menu/setting_tag_manage_menu.xml +++ b/feature/setting/src/main/res/menu/setting_tag_manage_menu.xml @@ -4,7 +4,7 @@ \ No newline at end of file From 0100541fc23cf8c25b9d651571ef4ccb3aaf33cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 11:54:00 +0900 Subject: [PATCH 54/67] =?UTF-8?q?Body=E3=81=AB=E3=83=9E=E3=83=BC=E3=82=B8?= =?UTF-8?q?=E3=83=B3=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- component/viewer/src/main/res/layout/fragment_viewer_body.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/component/viewer/src/main/res/layout/fragment_viewer_body.xml b/component/viewer/src/main/res/layout/fragment_viewer_body.xml index 0309ef0a..db2ae9e5 100644 --- a/component/viewer/src/main/res/layout/fragment_viewer_body.xml +++ b/component/viewer/src/main/res/layout/fragment_viewer_body.xml @@ -10,6 +10,7 @@ android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" + android:layout_margin="8dp" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> \ No newline at end of file From 67a2a303cf88ff3f0424fd08c16bbfd823b7ca0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 11:57:59 +0900 Subject: [PATCH 55/67] =?UTF-8?q?=E3=83=AA=E3=82=BD=E3=83=BC=E3=82=B9?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- shared/ui/src/main/res/drawable/delete_24px.xml | 10 ++++++++++ shared/ui/src/main/res/drawable/merge_type_24px.xml | 11 +++++++++++ 2 files changed, 21 insertions(+) create mode 100644 shared/ui/src/main/res/drawable/delete_24px.xml create mode 100644 shared/ui/src/main/res/drawable/merge_type_24px.xml diff --git a/shared/ui/src/main/res/drawable/delete_24px.xml b/shared/ui/src/main/res/drawable/delete_24px.xml new file mode 100644 index 00000000..eff2267b --- /dev/null +++ b/shared/ui/src/main/res/drawable/delete_24px.xml @@ -0,0 +1,10 @@ + + + diff --git a/shared/ui/src/main/res/drawable/merge_type_24px.xml b/shared/ui/src/main/res/drawable/merge_type_24px.xml new file mode 100644 index 00000000..403fd5c3 --- /dev/null +++ b/shared/ui/src/main/res/drawable/merge_type_24px.xml @@ -0,0 +1,11 @@ + + + From 356397b71fd234246fa10d299f4145fac2a54d09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 11:58:24 +0900 Subject: [PATCH 56/67] =?UTF-8?q?=E8=89=B2=E8=AA=BF=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- shared/ui/src/main/res/drawable/delete_24px.xml | 2 +- shared/ui/src/main/res/drawable/merge_type_24px.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/shared/ui/src/main/res/drawable/delete_24px.xml b/shared/ui/src/main/res/drawable/delete_24px.xml index eff2267b..43b217b7 100644 --- a/shared/ui/src/main/res/drawable/delete_24px.xml +++ b/shared/ui/src/main/res/drawable/delete_24px.xml @@ -5,6 +5,6 @@ android:viewportHeight="960" android:tint="?attr/colorControlNormal"> diff --git a/shared/ui/src/main/res/drawable/merge_type_24px.xml b/shared/ui/src/main/res/drawable/merge_type_24px.xml index 403fd5c3..25a3cd79 100644 --- a/shared/ui/src/main/res/drawable/merge_type_24px.xml +++ b/shared/ui/src/main/res/drawable/merge_type_24px.xml @@ -6,6 +6,6 @@ android:tint="?attr/colorControlNormal" android:autoMirrored="true"> From 06e965d4aef8165d67919c6bc9cf0c339726bbd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 12:00:38 +0900 Subject: [PATCH 57/67] =?UTF-8?q?Delete,=20Merge=E3=81=AB=E3=82=A2?= =?UTF-8?q?=E3=82=A4=E3=82=B3=E3=83=B3=E3=82=92=E8=A8=AD=E5=AE=9A=E3=81=97?= =?UTF-8?q?=E3=81=A6ifRoom=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- component/viewer/src/main/res/menu/viewer_menu.xml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/component/viewer/src/main/res/menu/viewer_menu.xml b/component/viewer/src/main/res/menu/viewer_menu.xml index 2d30f827..ce7c27be 100644 --- a/component/viewer/src/main/res/menu/viewer_menu.xml +++ b/component/viewer/src/main/res/menu/viewer_menu.xml @@ -1,5 +1,6 @@ - + @@ -10,7 +11,9 @@ + android:icon="@drawable/delete_24px" + android:title="削除" + app:showAsAction="ifRoom"/> + android:icon="@drawable/merge_type_24px" + android:title="結合" + app:showAsAction="ifRoom"/> Date: Mon, 29 Jan 2024 12:01:07 +0900 Subject: [PATCH 58/67] =?UTF-8?q?=E8=AC=8E=E3=81=AE=E3=83=86=E3=82=AD?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nem/lacerta/component/viewer/ViewerContainerFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java index 1e6b6ff7..c6647cb4 100644 --- a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java +++ b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java @@ -377,7 +377,7 @@ public class ViewerContainerFragment extends Fragment { LacertaApplyTagDialog lacertaApplyTagDialog = new LacertaApplyTagDialog(); lacertaApplyTagDialog .setTitle("タグの適用") - .setMessage("タグを適用するファイルを選択してください") + .setMessage("適用するタグを選択してください") .setNegativeButtonText("キャンセル") .setDocumentId(documentId) .setListener(new LacertaApplyTagDialog.LacertaApplyTagDialogListener() { From abdab63bb8ffec6c131ff395bef52bd98264b6cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 12:03:03 +0900 Subject: [PATCH 59/67] =?UTF-8?q?=E3=82=A2=E3=83=8B=E3=83=A1=E3=83=BC?= =?UTF-8?q?=E3=82=B7=E3=83=A7=E3=83=B3=E3=82=92=E8=AA=BF=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../navigation/feature_setting_navigation.xml | 38 ++++++++++--------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/feature/setting/src/main/res/navigation/feature_setting_navigation.xml b/feature/setting/src/main/res/navigation/feature_setting_navigation.xml index 4d382d4d..781b43fc 100644 --- a/feature/setting/src/main/res/navigation/feature_setting_navigation.xml +++ b/feature/setting/src/main/res/navigation/feature_setting_navigation.xml @@ -12,34 +12,38 @@ + app:enterAnim="@anim/nav_twitter_enter_anim" + app:exitAnim="@anim/nav_twitter_exit_anim" + app:popEnterAnim="@anim/nav_twitter_pop_enter_anim" + app:popExitAnim="@anim/nav_twitter_pop_exit_anim" /> + app:enterAnim="@anim/nav_twitter_enter_anim" + app:exitAnim="@anim/nav_twitter_exit_anim" + app:popEnterAnim="@anim/nav_twitter_pop_enter_anim" + app:popExitAnim="@anim/nav_twitter_pop_exit_anim" /> + app:enterAnim="@anim/nav_twitter_enter_anim" + app:exitAnim="@anim/nav_twitter_exit_anim" + app:popEnterAnim="@anim/nav_twitter_pop_enter_anim" + app:popExitAnim="@anim/nav_twitter_pop_exit_anim" /> + app:enterAnim="@anim/nav_twitter_enter_anim" + app:exitAnim="@anim/nav_twitter_exit_anim" + app:popEnterAnim="@anim/nav_twitter_pop_enter_anim" + app:popExitAnim="@anim/nav_twitter_pop_exit_anim"/> + app:destination="@id/settingTagManageFragment" + app:enterAnim="@anim/nav_twitter_enter_anim" + app:exitAnim="@anim/nav_twitter_exit_anim" + app:popEnterAnim="@anim/nav_twitter_pop_enter_anim" + app:popExitAnim="@anim/nav_twitter_pop_exit_anim" /> Date: Mon, 29 Jan 2024 12:07:29 +0900 Subject: [PATCH 60/67] =?UTF-8?q?=E3=82=A2=E3=82=A4=E3=82=B3=E3=83=B3?= =?UTF-8?q?=E3=83=AA=E3=82=BD=E3=83=BC=E3=82=B9=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/ic_launcher_final-playstore.png | Bin 0 -> 6002 bytes .../drawable/ic_launcher_final_foreground.xml | 15 +++++++++++++++ .../res/mipmap-anydpi-v26/ic_launcher_final.xml | 5 +++++ .../ic_launcher_final_round.xml | 5 +++++ .../main/res/mipmap-hdpi/ic_launcher_final.webp | Bin 0 -> 888 bytes .../res/mipmap-hdpi/ic_launcher_final_round.webp | Bin 0 -> 2374 bytes .../main/res/mipmap-mdpi/ic_launcher_final.webp | Bin 0 -> 728 bytes .../res/mipmap-mdpi/ic_launcher_final_round.webp | Bin 0 -> 1510 bytes .../main/res/mipmap-xhdpi/ic_launcher_final.webp | Bin 0 -> 1038 bytes .../mipmap-xhdpi/ic_launcher_final_round.webp | Bin 0 -> 3094 bytes .../res/mipmap-xxhdpi/ic_launcher_final.webp | Bin 0 -> 1520 bytes .../mipmap-xxhdpi/ic_launcher_final_round.webp | Bin 0 -> 4986 bytes .../res/mipmap-xxxhdpi/ic_launcher_final.webp | Bin 0 -> 1838 bytes .../mipmap-xxxhdpi/ic_launcher_final_round.webp | Bin 0 -> 6822 bytes .../res/values/ic_launcher_final_background.xml | 4 ++++ 15 files changed, 29 insertions(+) create mode 100644 app/src/main/ic_launcher_final-playstore.png create mode 100644 app/src/main/res/drawable/ic_launcher_final_foreground.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher_final.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher_final_round.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_final.webp create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_final_round.webp create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_final.webp create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_final_round.webp create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_final.webp create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_final_round.webp create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_final.webp create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_final_round.webp create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_final.webp create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_final_round.webp create mode 100644 app/src/main/res/values/ic_launcher_final_background.xml diff --git a/app/src/main/ic_launcher_final-playstore.png b/app/src/main/ic_launcher_final-playstore.png new file mode 100644 index 0000000000000000000000000000000000000000..5156b4c2065ac0c9a9583ca12f5e09423352956f GIT binary patch literal 6002 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 + + + + diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_final.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_final.xml new file mode 100644 index 00000000..714984ea --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_final.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_final_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_final_round.xml new file mode 100644 index 00000000..714984ea --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_final_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_final.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_final.webp new file mode 100644 index 0000000000000000000000000000000000000000..9892389a8b00323415f651739c3c84a9be47773f GIT binary patch literal 888 zcmV-;1Bd)lNk&F+0{{S5MM6+kP&iCu0{{RoN5ByfC*?SjZB?1M_v5-E0E%FVkPzIK z&bw*2jcr?1_P*b-R8tRWmKGfv_;O)KlH^#)I`tx+4QMbJ>u^GTKK&L_ZEMSxeZSvj z`lt8{2#|sR%n3jSi$VoP?v}${KM4Q?1Ox<(K@S831QcKZx*(ukIqo)xk4YADJ)Z5$ zEauNi&MVo>RXuiR@8Oisbk29YWOaM_=#>kNMt}$iL_jqCa@7?xBx9yz%mibi5h5m% zh-e}v5=EjJHXBIBM2MJR1dT*vMAD7-^~Gwx+%LB-idjP_q^8BP+NZUwEQj+9YkI}P zbPE$4jg01>BVDo8QI7Z4JE)>v&3CvefZ^e>`}-gM+H|+xKhS72LYr&l5O|cwr$&1bIiuL zZD-Zk{H0Z~B67uReyhBpi2gHj8%dF~cw_oP+{C-w-y|s?{(~svV>|Hm^OujGq-GG) z;=$n8hmi5)XWoAo47tF&&;Uv1Ndgp)#kbIaM^gC575wIk|4C)I=W;w>!eft!9=v4u zk{(hC1}`KDJfd@6#GI;Bip8#kybVGHLZzmiyOpnP z?*?G{TIm+nDSs`Z@w!3KGcwobPZc!x28H7lE#1qfZrQ;tFiW&oew^UC?OHJFML)Oa zbLVt=N|Bgduej-XwEDZ56utc`nD)}!v509Ky{1~GMtUu8nPT)dPi0y^a*Ujn5#S9| zGrgUQnYPp0w~T2IJ+w0+YJ@!>M$Yq!;`zC3>egM{wwk5dD-TGX=X0kDnsbxv{ZiW? zC{R>@fNIwMiV@%ocoeCB0`m0r)Q zQ$_e2$FC$k=ikAjhmJ)$>>S`6I2+)1V{pVCR5|ITaRTvWshL^X(z7~cii#6fSdgD5 OJsS()D@70{Pyql;<*_aR literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_final_round.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_final_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..260cfa75845b5a36115d56a339ce1f8c0f196e8d GIT binary patch literal 2374 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_final.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_final.webp new file mode 100644 index 0000000000000000000000000000000000000000..e138033673e2f3e74ca573105303d47ff55dbcc1 GIT binary patch literal 728 zcmV;}0w?`aNk&G{0ssJ4MM6+kP&iD)0ssInFTe{BXXG}LWLKHl_diw85CRcU-yiov5`XLE)D{1?>n%4O_0EaI>7*x6MUCT*NPqw- zR3HIDG>lS95P=YrQ8O8LKmtU{+#yf5%LPg$_)jaDJ-#&%{(s;9dbR#RK1~+$bxQ!X zC`l@T0)!BN6e2`R;`{FPeo_DZLC3B3qx|*xd#$?jUDrt;$B{}QN`gu?8FxSmkU|v& z3Oq^$Ret*a3#z3}hN?iN;9rke-$`qr1W^b9NPs8+MFZtt_^DP>t>2CtL-IBdBapBt z1*~_*Z=sF?&NhCwojMqe{ubH59f39csgPOwA;3gEjQb? zZQHK*&2P4Qk@;lf>0fudW1O45?i0~}2W}%NlCzA*_XqJ?dV3}Jre;ED$b{-42;AS@ z61!soQ!zd~Utf{qrw3tv^=Mq^=*3O;hLgjK)AKW8d}^%sh&KRu#lX?U*#)^XW361g z%K8p8DN)chDf^e~M1>cB;_IHj9FVt3tNP#x6!%n&g^CE~d!#bEXGl;}YdK z+PakEpdMnsY)l=WkmIzv3%iEX>N75|v&)PNWYhwBY!zh#1sfXK+pB<9yGGcv0}h=l zt0}=i@{0b+58k|4n8}>Kp>t)|!MqDS_R*MTo0PMq*In#W?dQ!{W8#zK5+W_jc}@-A zi{Zuwxkh|`FUYDphAzIw9W`_jVVtFq#T;S(PkzU~?{~ge*Q8YThKgfD$N$vLe6A># z{|7zZT{p%JG2_P3>1hg?yI(DqnbDBwp$vTH&dz&xybBe7B+>>yk+up@$8vg{`y6GjTq1}_iNB{M(;5Bol$g& z$Xw4UJ-!*3CnSff&^4GQoyvS7MkUrM3Ji$oQqjf8m0%grKs*%whckKV6AOx({9jKZ z(@#UUr=5sOCjT4kVpO1djS3_o*3(s;>9S4=QFrEj3Imcd2#FHPBBBx>5|M>%&#z~l zB1x<2DG|1P0BXYIB5KNlZ=Q?|>lIZwOI_&lM5qTl{dzOoN=8uBDCM*VBf<05x(Z`d zAVoG+enJX6)uJ%RucR@j6q0R2Ds!C!P{&;Qn8vNquMg5lI^2I882`HBd7n&oM6`LH zci(X!p^$!@&Lm~GY{Mw6jv0N8krDU2laht^iM!7uZ!b?yudE9ZJ*Q9KdmdPL9Z5*I z=g%nRiu}`tajJ^2I&9^&HSv5j-62aqoBrUT&iq!V79(^K$DY!T z)afnpM=&Ur&i9{N4=_JnEOTo8fJC<3a~^nac|ZcM-+dm5JCH~wrTn^BEtpeS$!&#L zr)W*W;jrmRYm`pe=4=8`tIb{2@|grD-=FV1^uNdSo#nwvYiN&s2|yF^i;Q7RQAlv@ z+u@hj))%HD;=sM< zk@x2ZA53>v*M*2n*RS7y91z8U?XeUCcU;o~O$0#qr`-B9N)s1n?mG{R{kh?JAJ2D0 z9Q8c!-t#~@ffG~sq|V_x5n`$WV7D{2%gn^Fb*WziaKvT5XdohD1VHD>@64)V{xXV2 z1-m4rpbjd3?;lov_8XwZ$6)}bU*$F#S8&eS>767+@ayyDEsH7C^EWP-9?k51;+e_kkDht5lm)!Sb5`z-z zRFb1TRMnCnb3X*&nSB{(qS)(M0InakFf$WP

MD zPV;%o>UIOr17HKdXUzIYeXF*?U&=UK+qcv0u@rkAA);0DOD> z?w5hOy+0QKS^$iD0k{J28vufbo%i_RCkb9bod)3Ad%iu&p-tWE%YgQ&b{~KN0HapN MZ$A|STGy=)f^r)GD*ylh literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_final.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_final.webp new file mode 100644 index 0000000000000000000000000000000000000000..eff542cfe2361d6b37ed8710e0223464a8667e99 GIT binary patch literal 1038 zcmV+p1o8V)Nk&En1ONb6MM6+kP&iEa0{{RoU%(d-j|DlhZB^CU`x?%OY)FIj8N2J3 zd$A-SN0OvSip+*(W*Jt0b@si-%-3CzBS}&uMRYYRgHo%(s()`(V5tgjZQH7qb>+Le zf81$+Ht2y82+1gbVj!ddGK(~PWbQnB?ZG7d~e|T>JQcM)8aSirdeF)|1Kd3K9V^1*J|Tv84Hx&)UWaddj`vFt*vh=LM4B zh9tHKiMi9Gc2FF}94ckT&3RH=>ZfyA$|RQ#h$S%vgefNx+16hJ{W znsS+zNhIpE`d8EYCAHngMy=Gg-KMtP9&23f#`zcTxqW8t*_SI=$cYJ=#gK3{zO`SFvd z&(KybI!vBuRy_RjQ6%JpKtFu1bdd4G1AXht4FFtEzgs3)rB9K2K_3W?|NK^kx`>1lgAIjJy4qe_h?25Z|Zua8=(5}GK6&XxdeI#`yth^Mm7g@E)g5dw}d}jhX zt}xc%kBdNz>q?9gWJu%Er7Gi6LLZpog5Sb)bm%*P`!k^dwkx`RU z^I`4Osxq;8>7SMVby>Vbtr;w@4+Hx^)9Y&YDQ}ePaQC`M~9Tx&O!*^{* zSG)^rhGb5VmoPkg+=gSm2mqnu>&9jeOAvC&19Aq>UAt}PE@LatY+pNP5cf|O3Q=l) zPWQee$BeewD5syt`L4=7Vq#jK9=UnlY)9JhOd_gDNJ%f~-K(d~$P_Rp2xXL%oMJnN IN&HfR08=UUy8r+H literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_final_round.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_final_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..a326e6f71a578d330077d5515bb4cf2e926ec53a GIT binary patch literal 3094 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_final.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_final.webp new file mode 100644 index 0000000000000000000000000000000000000000..355b7e54200dca4549617a3dd3b2e599aa2d7358 GIT binary patch literal 1520 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 Uv@EEW2r?0+!eqiktjEYT4s;bw-v9sr literal 0 HcmV?d00001 diff --git a/app/src/main/res/values/ic_launcher_final_background.xml b/app/src/main/res/values/ic_launcher_final_background.xml new file mode 100644 index 00000000..579d66a9 --- /dev/null +++ b/app/src/main/res/values/ic_launcher_final_background.xml @@ -0,0 +1,4 @@ + + + #B8D3C3 + \ No newline at end of file From bfce8039aeff64000e86ed8df6f5da77cf05a605 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 12:07:51 +0900 Subject: [PATCH 61/67] =?UTF-8?q?=E3=82=A2=E3=82=A4=E3=82=B3=E3=83=B3?= =?UTF-8?q?=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1680ef09..8c8b218f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -17,10 +17,10 @@ android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" - android:icon="@mipmap/ic_launcher_temp_round" + android:icon="@mipmap/ic_launcher_final" android:name=".LacertaApplication" android:label="@string/app_name" - android:roundIcon="@mipmap/ic_launcher_round" + android:roundIcon="@mipmap/ic_launcher_final_round" android:supportsRtl="true" android:theme="@style/Theme.Lacerta" tools:targetApi="31"> From f77b7c7089ec32efbac1c6b52b106a61114b01c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 12:30:21 +0900 Subject: [PATCH 62/67] =?UTF-8?q?FolderDao=E3=81=AB=E5=89=8A=E9=99=A4?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/one/nem/lacerta/source/database/dao/FolderDao.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/src/main/java/one/nem/lacerta/source/database/dao/FolderDao.java b/source/src/main/java/one/nem/lacerta/source/database/dao/FolderDao.java index 404b53f8..d5084849 100644 --- a/source/src/main/java/one/nem/lacerta/source/database/dao/FolderDao.java +++ b/source/src/main/java/one/nem/lacerta/source/database/dao/FolderDao.java @@ -26,4 +26,7 @@ public interface FolderDao { @Insert void insertAll(FolderEntity... folderEntities); + + @Query("DELETE FROM Folder WHERE id = :id") + void deleteById(String id); } From 8f7594c628c9a7f71d3f41f246e23f321f368548 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 12:31:08 +0900 Subject: [PATCH 63/67] =?UTF-8?q?=E5=89=8A=E9=99=A4=E3=83=A1=E3=82=BD?= =?UTF-8?q?=E3=83=83=E3=83=89=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/one/nem/lacerta/data/LacertaLibrary.java | 3 +++ .../one/nem/lacerta/data/impl/LacertaLibraryImpl.java | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/data/src/main/java/one/nem/lacerta/data/LacertaLibrary.java b/data/src/main/java/one/nem/lacerta/data/LacertaLibrary.java index e1ce346e..46728e2d 100644 --- a/data/src/main/java/one/nem/lacerta/data/LacertaLibrary.java +++ b/data/src/main/java/one/nem/lacerta/data/LacertaLibrary.java @@ -28,6 +28,9 @@ public interface LacertaLibrary { // Create Folder CompletableFuture createFolder(String parentId, String name); + // delete Folder + CompletableFuture deleteFolder(String folderId); + // Get Public Path CompletableFuture getPublicPath(String itemId, ListItemType itemType); diff --git a/data/src/main/java/one/nem/lacerta/data/impl/LacertaLibraryImpl.java b/data/src/main/java/one/nem/lacerta/data/impl/LacertaLibraryImpl.java index 0df061f9..94ff9a1a 100644 --- a/data/src/main/java/one/nem/lacerta/data/impl/LacertaLibraryImpl.java +++ b/data/src/main/java/one/nem/lacerta/data/impl/LacertaLibraryImpl.java @@ -207,6 +207,14 @@ public class LacertaLibraryImpl implements LacertaLibrary { }); } + @Override + public CompletableFuture deleteFolder(String folderId) { + return CompletableFuture.supplyAsync(() -> { + database.folderDao().deleteById(folderId); + return null; + }); + } + @Override public CompletableFuture getPublicPath(String itemId, ListItemType itemType) { return CompletableFuture.supplyAsync(() -> { From 841258d82a00433551d248cdce048f30d5b0f20f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 12:31:18 +0900 Subject: [PATCH 64/67] =?UTF-8?q?=E3=83=95=E3=82=A9=E3=83=AB=E3=83=80?= =?UTF-8?q?=E5=89=8A=E9=99=A4=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../feature/library/LibraryPageFragment.java | 20 +++++++++++++++++++ .../library/src/main/res/menu/dir_menu.xml | 7 ++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/feature/library/src/main/java/one/nem/lacerta/feature/library/LibraryPageFragment.java b/feature/library/src/main/java/one/nem/lacerta/feature/library/LibraryPageFragment.java index 117f3ce6..1ae7481d 100644 --- a/feature/library/src/main/java/one/nem/lacerta/feature/library/LibraryPageFragment.java +++ b/feature/library/src/main/java/one/nem/lacerta/feature/library/LibraryPageFragment.java @@ -329,6 +329,20 @@ public class LibraryPageFragment extends Fragment { } else if (item.getItemId() == R.id.menu_item_add_by_media) { createDocByMediaPicker(); return true; + } else if (item.getItemId() == R.id.menu_item_delete_folder) { + MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(requireContext()); + builder.setTitle("フォルダの削除"); + builder.setMessage("フォルダを削除しますか?"); + + builder.setPositiveButton("削除", (dialog, which) -> { + deleteMe(); + }); + builder.setNegativeButton("キャンセル", (dialog, which) -> { + dialog.cancel(); + }); + + builder.show(); + return true; } else { return false; } @@ -336,6 +350,12 @@ public class LibraryPageFragment extends Fragment { }); } + private void deleteMe() { + lacertaLibrary.deleteFolder(this.folderId).thenAccept(aVoid -> { + Navigation.findNavController(requireView()).popBackStack(); + }); + } + /** * メディアピッカーを使用してドキュメントを作成する(呼び出し部分) */ diff --git a/feature/library/src/main/res/menu/dir_menu.xml b/feature/library/src/main/res/menu/dir_menu.xml index 387474a1..872e777b 100644 --- a/feature/library/src/main/res/menu/dir_menu.xml +++ b/feature/library/src/main/res/menu/dir_menu.xml @@ -8,10 +8,15 @@ android:title="@string/create_new_folder" app:showAsAction="never"/> + +

\ No newline at end of file From 9288360eb466a212da9d92df5f546b8717e6b22c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 12:32:31 +0900 Subject: [PATCH 65/67] =?UTF-8?q?root=E3=81=A7=E3=81=AF=E5=89=8A=E9=99=A4?= =?UTF-8?q?=E3=82=92=E5=91=BC=E3=81=B9=E3=81=AA=E3=81=84=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../one/nem/lacerta/feature/library/LibraryPageFragment.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/feature/library/src/main/java/one/nem/lacerta/feature/library/LibraryPageFragment.java b/feature/library/src/main/java/one/nem/lacerta/feature/library/LibraryPageFragment.java index 1ae7481d..2a00bdb0 100644 --- a/feature/library/src/main/java/one/nem/lacerta/feature/library/LibraryPageFragment.java +++ b/feature/library/src/main/java/one/nem/lacerta/feature/library/LibraryPageFragment.java @@ -319,6 +319,8 @@ public class LibraryPageFragment extends Fragment { } else { toolbar.setNavigationIcon(null); } + + if (this.folderId == null) toolbar.getMenu().findItem(R.id.menu_item_delete_folder).setVisible(false); // ルートフォルダの場合は削除ボタンを非表示にする toolbar.setTitle(title); toolbar.getMenu().clear(); toolbar.inflateMenu(R.menu.dir_menu); From 2fcab4e9315a9cdcc3f378572929bd178411ea85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 12:59:56 +0900 Subject: [PATCH 66/67] =?UTF-8?q?=E5=89=8A=E9=99=A4=E3=81=97=E3=81=9F?= =?UTF-8?q?=E5=BE=8C=E3=83=95=E3=83=AA=E3=83=BC=E3=82=BA=E3=81=97=E3=81=AA?= =?UTF-8?q?=E3=81=84=E3=82=88=E3=81=86=E3=81=AB(Workaround)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../feature/library/LibraryPageFragment.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/feature/library/src/main/java/one/nem/lacerta/feature/library/LibraryPageFragment.java b/feature/library/src/main/java/one/nem/lacerta/feature/library/LibraryPageFragment.java index 2a00bdb0..3ba134c0 100644 --- a/feature/library/src/main/java/one/nem/lacerta/feature/library/LibraryPageFragment.java +++ b/feature/library/src/main/java/one/nem/lacerta/feature/library/LibraryPageFragment.java @@ -320,7 +320,6 @@ public class LibraryPageFragment extends Fragment { toolbar.setNavigationIcon(null); } - if (this.folderId == null) toolbar.getMenu().findItem(R.id.menu_item_delete_folder).setVisible(false); // ルートフォルダの場合は削除ボタンを非表示にする toolbar.setTitle(title); toolbar.getMenu().clear(); toolbar.inflateMenu(R.menu.dir_menu); @@ -349,12 +348,23 @@ public class LibraryPageFragment extends Fragment { return false; } }); + + if (this.folderId == null) toolbar.getMenu().findItem(R.id.menu_item_delete_folder).setVisible(false); // ルートフォルダの場合は削除ボタンを非表示にする }); } private void deleteMe() { lacertaLibrary.deleteFolder(this.folderId).thenAccept(aVoid -> { - Navigation.findNavController(requireView()).popBackStack(); + // Move to root + getActivity().runOnUiThread(() -> { + Navigation.findNavController(requireView()).popBackStack(R.id.feature_library_top_fragment, false); + + // Refresh + updateItem(this.folderId); + + // Update toolbar + toolbarSetup(this.toolbar, false, "ライブラリ"); + }); }); } From 0fe0f5dd001c37505c2710b806ca576cde42feb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Mon, 29 Jan 2024 13:20:44 +0900 Subject: [PATCH 67/67] =?UTF-8?q?=E3=83=90=E3=83=BC=E3=82=B8=E3=83=A7?= =?UTF-8?q?=E3=83=B3=E3=82=92=E9=81=A1=E3=82=8C=E3=81=AA=E3=81=84=E4=B8=8D?= =?UTF-8?q?=E5=85=B7=E5=90=88=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/viewer/ViewerBodyFragment.java | 23 +++++- .../viewer/ViewerContainerFragment.java | 80 ++++++++----------- 2 files changed, 55 insertions(+), 48 deletions(-) diff --git a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerBodyFragment.java b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerBodyFragment.java index f52576d4..db302a17 100644 --- a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerBodyFragment.java +++ b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerBodyFragment.java @@ -14,6 +14,8 @@ import android.widget.Toast; import com.google.android.material.dialog.MaterialAlertDialogBuilder; +import java.util.ArrayList; + import javax.inject.Inject; import dagger.hilt.android.AndroidEntryPoint; @@ -124,26 +126,41 @@ public class ViewerBodyFragment extends Fragment { builder.show(); } }); - recyclerView.setAdapter(viewerBodyAdapter); + + getActivity().runOnUiThread(() -> { + recyclerView.setAdapter(viewerBodyAdapter); + viewerBodyAdapter.notifyDataSetChanged(); + }); loadDocument(viewerBodyAdapter, documentId, revisionId); } private void loadDocument(ViewerBodyAdapter adapter, String documentId, String revisionId) { if (revisionId == null) { // load latest revision - document.getDocument(documentId).thenAccept(document -> { + document.getDocument(documentId).thenApply(document -> { getActivity().runOnUiThread(() -> { adapter.setPages(document.getPages()); adapter.notifyDataSetChanged(); }); + return null; }); } else { // load specified revision LacertaVcs vcs = lacertaVcsFactory.create(documentId); - document.getDocumentPageListByFileNameList(documentId, vcs.getDocumentPagePathListRev(revisionId).join()).thenAccept(documentPageList -> { +// document.getDocumentPageListByFileNameList(documentId, vcs.getDocumentPagePathListRev(revisionId).join()).thenApply(documentPageList -> { +// getActivity().runOnUiThread(() -> { +// adapter.setPages(documentPageList); +// adapter.notifyDataSetChanged(); +// }); +// return null; +// }); + + ArrayList fileNameList = vcs.getDocumentPagePathListRev(revisionId).join(); + document.getDocumentPageListByFileNameList(documentId, fileNameList).thenApply(documentPageList -> { getActivity().runOnUiThread(() -> { adapter.setPages(documentPageList); adapter.notifyDataSetChanged(); }); + return null; }); } } diff --git a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java index c6647cb4..5e16662b 100644 --- a/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java +++ b/component/viewer/src/main/java/one/nem/lacerta/component/viewer/ViewerContainerFragment.java @@ -145,54 +145,44 @@ public class ViewerContainerFragment extends Fragment { if (this.revId != null) { // Revが指定されている場合 LacertaVcs lacertaVcs = lacertaVcsFactory.create(documentId); - lacertaVcs.getDocumentPagePathListRev(this.revId).thenApply(pagePathList -> { - logger.debug("ViewerContainerFragment", "pagePathList: " + pagePathList.size()); - document.getDocumentPageListByFileNameList(this.documentId, pagePathList).thenApply(pageList -> { - logger.debug("ViewerContainerFragment", "pageList: " + pageList.size()); - // 暫定: 履歴を遡って表示している場合は結合を無視する(処理自体は単純だけどUI側の対応をする時間がないので) - tabLayout.setVisibility(View.GONE); - viewerViewPagerAdapter.setFragmentTargetIdList(new ArrayList(){{add(documentId);}}); // TODO-rca: 読みにくいので直接追加できるようにする - viewerViewPagerAdapter.setFragmentTitleList(new ArrayList(){{add(documentName);}}); // TODO-rca: 読みにくいので直接追加できるようにする - - viewerViewPagerAdapter.setFragmentRevisionList(new ArrayList(){{add(revId);}}); // TODO-rca: 読みにくいので直接追加できるようにする - viewerViewPagerAdapter.notifyItemRangeChanged(0, pageList.size()); - toolbar.setSubtitle("リビジョン: " + revId); - return null; - }); - return null; - }); - } - - // Get document page - if (this.hasCombined) { // 結合親の場合 - // バージョンを遡る操作を非表示 - toolbar.getMenu().findItem(R.id.action_open_vcs_rev_list).setVisible(false); - logger.debug("ViewerContainerFragment", "hasCombined: " + hasCombined); - lacertaLibrary.getCombinedDocumentToxiList(documentId).thenAccept(combinedDocumentToxiList -> { - logger.debug("ViewerContainerFragment", "combinedDocumentToxiList: " + combinedDocumentToxiList.size()); - - viewerViewPagerAdapter.setFragmentTargetIdList( - combinedDocumentToxiList.stream().map(ToxiDocumentModel::getChildDocumentId).collect(Collectors.toCollection(ArrayList::new))); - viewerViewPagerAdapter.setFragmentTitleList( - combinedDocumentToxiList.stream().map(ToxiDocumentModel::getTitleCache).collect(Collectors.toCollection(ArrayList::new))); - - viewerViewPagerAdapter.notifyItemRangeChanged(0, combinedDocumentToxiList.size()); - toolbar.setSubtitle("結合ドキュメント"); - }); - } else { // それ以外の場合 - logger.debug("ViewerContainerFragment", "hasCombined: " + hasCombined); - tabLayout.setVisibility(View.GONE); viewerViewPagerAdapter.setFragmentTargetIdList(new ArrayList(){{add(documentId);}}); // TODO-rca: 読みにくいので直接追加できるようにする - viewerViewPagerAdapter.setFragmentTitleList(new ArrayList(){{add(documentName);}}); + viewerViewPagerAdapter.setFragmentTitleList(new ArrayList(){{add(documentName);}}); // TODO-rca: 読みにくいので直接追加できるようにする + viewerViewPagerAdapter.setFragmentRevisionList(new ArrayList(){{add(revId);}}); // TODO-rca: 読みにくいので直接追加できるようにする viewerViewPagerAdapter.notifyItemRangeChanged(0, 1); + tabLayout.setVisibility(View.GONE); + toolbar.setSubtitle("リビジョン: " + revId); + } else { + // Get document page + if (this.hasCombined) { // 結合親の場合 + // バージョンを遡る操作を非表示 + toolbar.getMenu().findItem(R.id.action_open_vcs_rev_list).setVisible(false); + logger.debug("ViewerContainerFragment", "hasCombined: " + hasCombined); + lacertaLibrary.getCombinedDocumentToxiList(documentId).thenAccept(combinedDocumentToxiList -> { + logger.debug("ViewerContainerFragment", "combinedDocumentToxiList: " + combinedDocumentToxiList.size()); + + viewerViewPagerAdapter.setFragmentTargetIdList( + combinedDocumentToxiList.stream().map(ToxiDocumentModel::getChildDocumentId).collect(Collectors.toCollection(ArrayList::new))); + viewerViewPagerAdapter.setFragmentTitleList( + combinedDocumentToxiList.stream().map(ToxiDocumentModel::getTitleCache).collect(Collectors.toCollection(ArrayList::new))); + + viewerViewPagerAdapter.notifyItemRangeChanged(0, combinedDocumentToxiList.size()); + toolbar.setSubtitle("結合ドキュメント"); + }); + } else { // それ以外の場合 + logger.debug("ViewerContainerFragment", "hasCombined: " + hasCombined); + tabLayout.setVisibility(View.GONE); + viewerViewPagerAdapter.setFragmentTargetIdList(new ArrayList(){{add(documentId);}}); // TODO-rca: 読みにくいので直接追加できるようにする + viewerViewPagerAdapter.setFragmentTitleList(new ArrayList(){{add(documentName);}}); + viewerViewPagerAdapter.notifyItemRangeChanged(0, 1); + } + + // サブタイトルとしてパスを表示(暫定) + lacertaLibrary.getPublicPath(documentId, ListItemType.ITEM_TYPE_DOCUMENT).thenAccept(publicPath -> { + logger.debug("ViewerContainerFragment", "publicPath: " + publicPath); + toolbar.setSubtitle("/" + publicPath.parent().getStringPath()); + }); + } - - // サブタイトルとしてパスを表示(暫定) - lacertaLibrary.getPublicPath(documentId, ListItemType.ITEM_TYPE_DOCUMENT).thenAccept(publicPath -> { - logger.debug("ViewerContainerFragment", "publicPath: " + publicPath); - toolbar.setSubtitle("/" + publicPath.parent().getStringPath()); - }); - // Attach tab layout to view pager new TabLayoutMediator(tabLayout, viewPager, (tab, position) -> { View customView = LayoutInflater.from(getContext()).inflate(R.layout.viewer_custom_tab, null);