diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 153311b..7f805bd 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -15,8 +15,11 @@ android:supportsRtl="true" android:theme="@style/Theme.Acanthus" android:usesCleartextTraffic="true"> - - + + + @@ -24,9 +27,9 @@ - - - + + + animationJsonList = new ArrayList<>(); @@ -74,6 +75,11 @@ return aid; } + public Integer getEditingPageNo() { + if (editingPageNo == null) editingPageNo = 0; + return editingPageNo; + } + public Animation getCurrentAnimation() { return currentAnimation; } @@ -127,6 +133,10 @@ editor.commit(); } + public void setEditingPageNo(Integer editingPageNo) { + this.editingPageNo = editingPageNo; + } + public void setCurrentAnimation(Animation currentAnimation) { this.currentAnimation = currentAnimation; } @@ -143,6 +153,7 @@ this.animationJsonList.add(animationJson); } //----------------------------------------------------------------- + //----------------------------------------------------------------- } diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintActivity.java index 16f5e75..dee87de 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintActivity.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintActivity.java @@ -38,7 +38,6 @@ super.onCreate(savedInstanceState); init(); initView(); - } //----------------------------------------------------------------- @@ -63,20 +62,12 @@ } //----------------------------------------------------------------- - // - public void onClickAddPage(View view) { - paintViewModel.addPageRequest(); - } - - //----------------------------------------------------------------- //----------------------------------------------------------------- // init private void init() { Acanthus acanthus = (Acanthus) getApplication(); paintViewModel = new ViewModelProvider(this).get(PaintViewModel.class); paintViewModel.init(acanthus); - - startObserve(); } //----------------------------------------------------------------- @@ -92,17 +83,6 @@ } - //----------------------------------------------------------------- - // - private void startObserve() { - paintViewModel.getPageNo().observe(this, new Observer() { - @Override - public void onChanged(Integer i) { - binding.buttonAddPage.setText(String.valueOf(i)); - } - }); - } - //------------------------------------------------------------------ // デバッグ用の現在編集中のAid表示 private void displayAid() { diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintModelContainer.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintModelContainer.java index c4d21e3..2ea0c4f 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintModelContainer.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintModelContainer.java @@ -1,9 +1,11 @@ package org.ntlab.acanthus_client.views.paint; import org.ntlab.acanthus_client.Acanthus; +import org.ntlab.acanthus_client.entities.Page; import org.ntlab.acanthus_client.resources.gallery.PagesRest; import org.ntlab.acanthus_client.views.paint.models.InvitesConnectionModel; import org.ntlab.acanthus_client.views.paint.models.PageConnectionModel; +import org.ntlab.acanthus_client.views.paint.models.PageOperationModel; import org.ntlab.acanthus_client.views.paint.models.PaintConnectionModel; //----------------------------------------------------------------- @@ -12,6 +14,7 @@ private PaintConnectionModel paintConnectionModel; private InvitesConnectionModel invitesConnectionModel; private PageConnectionModel pageConnectionModel; + private PageOperationModel pageOperationModel; //----------------------------------------------------------------- //----------------------------------------------------------------- @@ -20,6 +23,7 @@ this.paintConnectionModel = new PaintConnectionModel(acanthus); this.invitesConnectionModel = new InvitesConnectionModel(acanthus); this.pageConnectionModel = new PageConnectionModel(acanthus); + this.pageOperationModel = new PageOperationModel(acanthus); } //----------------------------------------------------------------- @@ -36,5 +40,8 @@ return pageConnectionModel; } + public PageOperationModel getPageOperationModel() { + return pageOperationModel; + } //----------------------------------------------------------------- } diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintToolBar.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintToolBar.java index 6ea82bf..31a5821 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintToolBar.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintToolBar.java @@ -1,7 +1,6 @@ package org.ntlab.acanthus_client.views.paint; import android.content.Intent; -import android.graphics.Paint; import android.view.MenuItem; import androidx.annotation.NonNull; @@ -12,6 +11,7 @@ import org.ntlab.acanthus_client.Acanthus; import org.ntlab.acanthus_client.R; import org.ntlab.acanthus_client.views.MainActivity; +import org.ntlab.acanthus_client.views.paint.page.PageActivity; //----------------------------------------------------------------- // 描画シーンの下部のツールバー @@ -45,6 +45,12 @@ case R.id.navigation_invite: transitionInviteActivity(appCompatActivity); return true; + + //----------------------------------------------------------------- + case R.id.navigation_page: + transitionPageActivity(appCompatActivity); + return true; + } return true; @@ -61,6 +67,15 @@ Intent intent = new Intent(acanthus, MainActivity.class); appCompatActivity.startActivity(intent); } + + //----------------------------------------------------------------- + // 編集へ移動 + private void transitionPageActivity(AppCompatActivity appCompatActivity) { + Acanthus acanthus = (Acanthus) appCompatActivity.getApplication(); + Intent intent = new Intent(acanthus, PageActivity.class); + appCompatActivity.startActivity(intent); + } + //----------------------------------------------------------------- } diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintViewModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintViewModel.java index 0670a5a..a279ac3 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintViewModel.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintViewModel.java @@ -1,16 +1,12 @@ package org.ntlab.acanthus_client.views.paint; -import android.util.Log; import android.view.MotionEvent; -import android.view.VelocityTracker; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; -import org.jetbrains.annotations.NotNull; import org.ntlab.acanthus_client.Acanthus; -import org.ntlab.acanthus_client.entities.Position; import org.ntlab.acanthus_client.entities.Stroke; import java.util.ArrayList; @@ -25,9 +21,11 @@ private PaintModelContainer paintModelContainer; + private MutableLiveData mPageLength = new MutableLiveData<>(); private MutableLiveData mPageNo = new MutableLiveData<>(); private MutableLiveData mStrokeNo = new MutableLiveData<>(); private MutableLiveData> mStrokes = new MutableLiveData<>(); + private ScheduledThreadPoolExecutor thread = new ScheduledThreadPoolExecutor(1); //----------------------------------------------------------------- @@ -40,10 +38,18 @@ return this.mStrokeNo; } + public LiveData getPageLength() { + return this.mPageLength; + } + public LiveData getPageNo() { return this.mPageNo; } + public PaintModelContainer getPaintModelContainer() { + return paintModelContainer; + } + //----------------------------------------------------------------- //----------------------------------------------------------------- // init @@ -81,9 +87,15 @@ } //----------------------------------------------------------------- + // + public void updatePageNo(MotionEvent event) { + paintModelContainer.getPageOperationModel().updatePageNo(event, mPageNo); + } + + //----------------------------------------------------------------- // ページの追加通信リクエスト public void addPageRequest() { - paintModelContainer.getPageConnectionModel().addPage(mPageNo); + paintModelContainer.getPageConnectionModel().addPage(mPageLength); } //----------------------------------------------------------------- diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PageOperationModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PageOperationModel.java index 61d23a6..7f2940d 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PageOperationModel.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PageOperationModel.java @@ -1,4 +1,77 @@ package org.ntlab.acanthus_client.views.paint.models; +import android.preference.SwitchPreference; +import android.view.MotionEvent; +import android.view.VelocityTracker; + +import androidx.lifecycle.MutableLiveData; + +import org.ntlab.acanthus_client.Acanthus; + +//----------------------------------------------------------------- +// + public class PageOperationModel { + //----------------------------------------------------------------- + // スワイプの向き + public enum SwipeDirectionType { + LEFT, RIGHT + } + + //----------------------------------------------------------------- + //----------------------------------------------------------------- + private Acanthus acanthus; + private VelocityTracker velocityTracker; + + //----------------------------------------------------------------- + //----------------------------------------------------------------- + public PageOperationModel(Acanthus acanthus) { + this.acanthus = acanthus; + } + + //----------------------------------------------------------------- + //----------------------------------------------------------------- + public void updatePageNo(MotionEvent event, MutableLiveData mPageNo) { + if (getVelocityDirection(event).equals(SwipeDirectionType.RIGHT)) incrementPageNo(mPageNo); + if (getVelocityDirection(event).equals(SwipeDirectionType.LEFT)) decrementPageNo(mPageNo); + } + + //----------------------------------------------------------------- + //----------------------------------------------------------------- + // + public void incrementPageNo(MutableLiveData mPageNo) { +// if(acanthus.getEditingPageNo()) + Integer editingNo = acanthus.getEditingPageNo(); + + acanthus.setEditingPageNo(editingNo + 1); + mPageNo.setValue(acanthus.getEditingPageNo()); + } + + //-----------------------------------------------------------------s + // + private void decrementPageNo(MutableLiveData mPageNo) { + Integer editingNo = acanthus.getEditingPageNo(); + if (0 < editingNo ) { + acanthus.setEditingPageNo(acanthus.getEditingPageNo() - 1); + mPageNo.setValue(acanthus.getEditingPageNo()); + } + } + + + //----------------------------------------------------------------- + // 操作からスワイプの向きを取得する + private SwipeDirectionType getVelocityDirection(MotionEvent event) { + if (velocityTracker == null) velocityTracker = VelocityTracker.obtain(); + else velocityTracker.clear(); + + velocityTracker.addMovement(event); + velocityTracker.computeCurrentVelocity(1000); + + if (velocityTracker.getXVelocity() < 0) return SwipeDirectionType.LEFT; + else return SwipeDirectionType.RIGHT; + } + + //----------------------------------------------------------------- + //----------------------------------------------------------------- + } diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/page/PageActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/page/PageActivity.java new file mode 100644 index 0000000..2d6856f --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/page/PageActivity.java @@ -0,0 +1,101 @@ +package org.ntlab.acanthus_client.views.paint.page; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import android.os.Bundle; +import android.view.MotionEvent; +import android.view.View; + +import org.ntlab.acanthus_client.Acanthus; +import org.ntlab.acanthus_client.R; +import org.ntlab.acanthus_client.databinding.ActivityPageBinding; +import org.ntlab.acanthus_client.views.paint.PaintViewModel; + +//----------------------------------------------------------------- +// ページ編集画面 +public class PageActivity extends AppCompatActivity { + private Acanthus acanthus; + private PaintViewModel paintViewModel; + private ActivityPageBinding binding; + + //----------------------------------------------------------------- + //----------------------------------------------------------------- + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_page); + + init(); + initView(); + } + + + //----------------------------------------------------------------- + // + public void onClickAddPage(View view) { + paintViewModel.addPageRequest(); + } + + //----------------------------------------------------------------- + // + @Override + public boolean onTouchEvent(MotionEvent event) { + int action = event.getActionMasked(); + + //----------------------------------------------------------------- + switch (action) { + + case MotionEvent.ACTION_MOVE: + slidePage(event); + + break; + } + + return true; + } + + //----------------------------------------------------------------- + //----------------------------------------------------------------- + private void init() { + this.acanthus = (Acanthus) getApplication(); + paintViewModel = new ViewModelProvider(this).get(PaintViewModel.class); + paintViewModel.init(acanthus); + + startObserve(); + } + + //----------------------------------------------------------------- + // + public void slidePage(MotionEvent event) { + paintViewModel.updatePageNo(event); + } + + //----------------------------------------------------------------- + // + private void initView() { + binding = ActivityPageBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + + } + + //----------------------------------------------------------------- + // + private void startObserve() { + paintViewModel.getPageLength().observe(this, new Observer() { + @Override + public void onChanged(Integer i) { + binding.buttonAddPage.setText(String.valueOf(i)); + } + }); + + paintViewModel.getPageNo().observe(this, new Observer() { + @Override + public void onChanged(Integer pageNo) { + binding.textPageNo.setText(String.valueOf(pageNo)); + } + }); + } + //----------------------------------------------------------------- +} \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/page/SwipeDirectionType.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/page/SwipeDirectionType.java new file mode 100644 index 0000000..0a105de --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/page/SwipeDirectionType.java @@ -0,0 +1,6 @@ +package org.ntlab.acanthus_client.views.paint.page; + +//----------------------------------------------------------------- +// +public enum SwipeDirectionType { +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_page.xml b/app/src/main/res/layout/activity_page.xml new file mode 100644 index 0000000..ea819b4 --- /dev/null +++ b/app/src/main/res/layout/activity_page.xml @@ -0,0 +1,85 @@ + + + +