diff --git a/app/src/main/java/org/ntlab/acanthus_client/Acanthus.java b/app/src/main/java/org/ntlab/acanthus_client/Acanthus.java index 6fab8ba..a2bcb74 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/Acanthus.java +++ b/app/src/main/java/org/ntlab/acanthus_client/Acanthus.java @@ -141,7 +141,7 @@ } public void setEditingPageNo(Integer editingPageNo) { - this.editingPageNo = MathUtils.clamp(editingPageNo, 0, 999); + this.editingPageNo = MathUtils.clamp(editingPageNo, 1, 999); } public void setCurrentAnimation(Animation currentAnimation) { diff --git a/app/src/main/java/org/ntlab/acanthus_client/entities/Position.java b/app/src/main/java/org/ntlab/acanthus_client/entities/Position.java index 70e748d..c194913 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/entities/Position.java +++ b/app/src/main/java/org/ntlab/acanthus_client/entities/Position.java @@ -2,14 +2,17 @@ //----------------------------------------------------------------- // ペン座標 -public class Position { +public class Position implements Comparable { private int i; private Float x; private Float y; //----------------------------------------------------------------- // getter - public int getI(){return this.i;}; + public int getI() { + return this.i; + } + public Float getX() { return this.x; } @@ -25,4 +28,11 @@ this.x = x; this.y = y; } + + //----------------------------------------------------------------- + // + @Override + public int compareTo(Object o) { + return 0; + } } 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 0f67059..dfed82b 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 @@ -65,19 +65,13 @@ } //----------------------------------------------------------------- - // + // 招待する public void onClickInvite(View view) { Integer dummyId = 2; paintViewModel.inviteNewUserRequest(dummyId); } //----------------------------------------------------------------- - // - public void onClickAddPage(View view) { - paintViewModel.addPageRequest(); - } - - //----------------------------------------------------------------- //----------------------------------------------------------------- // init private void init() { @@ -121,5 +115,5 @@ } //------------------------------------------------------------------ - + } \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintCanvas.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintCanvas.java index 4abd53a..4e811a4 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintCanvas.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintCanvas.java @@ -103,7 +103,7 @@ case MotionEvent.ACTION_UP: Log.d("motion", "=====================================up======================================================"); - paintViewModel.addPositionRequestfirst(); + paintViewModel.addPositionRequestFirst(); break; } 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 67043b4..c67d605 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 @@ -22,25 +22,19 @@ //----------------------------------------------------------------- // 描画処理の仲介 public class PaintViewModel extends ViewModel implements Runnable { - private PaintModelContainer paintModelContainer; - private MutableLiveData mCurPageNo = new MutableLiveData<>(); - private MutableLiveData mCurPageId = new MutableLiveData<>(); - private MutableLiveData mPageSize = new MutableLiveData<>(); - private MutableLiveData StrokeNo = new MutableLiveData<>(); - private int mStrokeNo = 0; + private MutableLiveData mCurPageNo = new MutableLiveData<>(1); + private MutableLiveData mCurPageId = new MutableLiveData<>(0); + private MutableLiveData mPageSize = new MutableLiveData<>(0); + private MutableLiveData mStrokeNo = new MutableLiveData(0); private MutableLiveData> mStrokes = new MutableLiveData<>(); + private int strokeNo = 0; private ScheduledThreadPoolExecutor thread = new ScheduledThreadPoolExecutor(1); - private ArrayList positionLocalx = new ArrayList<>(); - private ArrayList positionLocaly = new ArrayList<>(); - private ArrayList localstrokeNo = new ArrayList<>(); private int cnt = 0; private float fsx = 0; private float fsy = 0; - private int ranStrokeNo=0; - private Acanthus acanthus; //----------------------------------------------------------------- // getter @@ -49,7 +43,7 @@ } public int getStrokeNo() { - return this.mStrokeNo; + return this.strokeNo; } public LiveData getPageNo() { @@ -67,7 +61,7 @@ paintModelContainer = new PaintModelContainer(acanthus); paintModelContainer.getPaintConnectionModel().init(acanthus); paintModelContainer.getInvitesConnectionModel().init(acanthus); - this.acanthus=acanthus; + mStrokes.setValue(new ArrayList<>()); mStrokes.getValue().add(new Stroke()); @@ -77,38 +71,37 @@ thread.scheduleWithFixedDelay(this, 1000L, 100L, TimeUnit.MILLISECONDS); } + //----------------------------------------------------------------- // strokeNoの発行 - public void setmStrokeNo(){ + public void setmStrokeNo() { Random random = new Random(); - mStrokeNo=random.nextInt(1000000000); - Log.d("TAG", "setmStrokeNo: "+mStrokeNo); + strokeNo = random.nextInt(1000000000); + Log.d("TAG", "setmStrokeNo: " + mStrokeNo); } //----------------------------------------------------------------- // 描画APIの通信リクエスト public void addLocalStrokeRequest(float x, float y) { - paintModelContainer.getPaintConnectionModel().addLocalStroke(mStrokeNo); + paintModelContainer.getPaintConnectionModel().addLocalStroke(strokeNo); fsx = x; fsy = y; cnt = 1; } + //----------------------------------------------------------------- + // public void addPositionRequest(float x, float y) { // Log.d("mStrokeNo", mStrokeNo.getValue().toString()); - paintModelContainer.getPaintConnectionModel().addPosition(cnt, x, y, mStrokeNo); - //positionLocalx.add((double)x); - //positionLocaly.add((double)y); + paintModelContainer.getPaintConnectionModel().addPosition(cnt, x, y, strokeNo); cnt++; } - public void addPositionRequestfirst() { - paintModelContainer.getPaintConnectionModel().addPosition(0, fsx, fsy, mStrokeNo); - paintModelContainer.getPaintConnectionModel().addPosition(cnt, -1, -1, mStrokeNo); - //Log.d("x", positionLocalx.toString()); - //Log.d("y", positionLocaly.toString()); - //positionLocalx.clear(); - //positionLocaly.clear(); + //----------------------------------------------------------------- + // + public void addPositionRequestFirst() { + paintModelContainer.getPaintConnectionModel().addPosition(0, fsx, fsy, strokeNo); + paintModelContainer.getPaintConnectionModel().addPosition(cnt, -1, -1, strokeNo); } //----------------------------------------------------------------- @@ -130,12 +123,33 @@ PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); pageOperationModel.changeEditPageNo(event, mCurPageNo, mPageSize.getValue()); - //ページを操作したので更新 + //ページを操作したのでIdとページ番号を更新 pageConnectionModel.getPage(mCurPageId); } //----------------------------------------------------------------- + // 次のページに進む + public void toAdvanceEditingPage() { + PageOperationModel pageOperationModel = paintModelContainer.getPageOperationModel(); + PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); + + pageOperationModel.incrementPageNo(mCurPageNo, mPageSize.getValue()); + pageConnectionModel.getPage(mCurPageId); + } + + //----------------------------------------------------------------- + // 前のページに戻る + public void toBackEditingPage() { + PageOperationModel pageOperationModel = paintModelContainer.getPageOperationModel(); + PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); + + pageOperationModel.decrementPageNo(mCurPageNo); + pageConnectionModel.getPage(mCurPageId); + } + + //----------------------------------------------------------------- + //----------------------------------------------------------------- // ページの追加通信リクエスト public void addPageRequest() { PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); @@ -146,31 +160,44 @@ } //----------------------------------------------------------------- - // + // ページ削除 public void deletePageRequest() { PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); + PageOperationModel pageOperationModel = paintModelContainer.getPageOperationModel(); pageConnectionModel.deletePage(); pageConnectionModel.getPageSize(mPageSize); + //ページ削除後同じページ番号のページを再取得する必要あり + if (mPageSize.getValue() < mCurPageNo.getValue()) + pageOperationModel.decrementPageNo(mCurPageNo); + Log.d("pageSize:", mPageSize.getValue().toString()); - //pageConnectionModel.getPage(mCurPageNo); } //----------------------------------------------------------------- + //----------------------------------------------------------------- // public void deleteStroke() { this.mStrokes.getValue().clear(); } //----------------------------------------------------------------- + // + public void getPageSizeRequest() { + paintModelContainer.getPageConnectionModel().getPageSize(mPageSize); + } + + //----------------------------------------------------------------- + //----------------------------------------------------------------- // 一定間隔でサーバー上の筆跡を取得する(GET) @Override public void run() { // Log.d("debug", "run: "); paintModelContainer.getPaintConnectionModel().getStrokes(mStrokes); - paintModelContainer.getPaintConnectionModel().getStrokeNo(StrokeNo); + paintModelContainer.getPaintConnectionModel().getStrokeNo(mStrokeNo); + paintModelContainer.getPageConnectionModel().getPageSize(mPageSize); } //----------------------------------------------------------------- diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PageConnectionModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PageConnectionModel.java index 114b080..fd4ddc6 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PageConnectionModel.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PageConnectionModel.java @@ -114,6 +114,8 @@ // ページ番号とページIDを取得する acanthus.setEditingPageNo(response.body().getPageNo()); acanthus.setEditingPageId(response.body().getPid()); + + Log.d("pid", acanthus.getEditingPageId().toString()); } } 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 1c299f1..2a0ac7c 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 @@ -36,13 +36,12 @@ mCurPageNo.setValue(acanthus.getEditingPageNo()); //ページの枚数以上現在のページ番号を更新しない - if (getVelocityDirection(event).equals(SwipeDirectionType.LEFT) && (mCurPageNo.getValue() < pageSize)) - incrementPageNo(mCurPageNo); + if (getVelocityDirection(event).equals(SwipeDirectionType.LEFT)) + incrementPageNo(mCurPageNo, pageSize); if (getVelocityDirection(event).equals(SwipeDirectionType.RIGHT)) decrementPageNo(mCurPageNo); - Log.d("pageNo", acanthus.getEditingPageNo().toString()); Log.d("pid", acanthus.getEditingPageId().toString()); } @@ -50,11 +49,15 @@ //----------------------------------------------------------------- //----------------------------------------------------------------- // ページを進める - public void incrementPageNo(MutableLiveData mPageNo) { + public void incrementPageNo(MutableLiveData mPageNo, Integer pageSize) { Integer editingNo = acanthus.getEditingPageNo(); - acanthus.setEditingPageNo(editingNo + 1); - mPageNo.setValue(acanthus.getEditingPageNo()); + if (editingNo < pageSize) { + acanthus.setEditingPageNo(editingNo + 1); + mPageNo.setValue(acanthus.getEditingPageNo()); + + Log.d("pageNo", acanthus.getEditingPageNo().toString()); + } } //-----------------------------------------------------------------s @@ -65,6 +68,8 @@ if (1 < editingNo) { acanthus.setEditingPageNo(acanthus.getEditingPageNo() - 1); mPageNo.setValue(acanthus.getEditingPageNo()); + + Log.d("pageNo", acanthus.getEditingPageNo().toString()); } } 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 index 83f2533..02e1c72 100644 --- 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 @@ -8,17 +8,24 @@ import android.view.MotionEvent; import android.view.View; +import com.fasterxml.jackson.databind.ser.VirtualBeanPropertyWriter; + 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; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + //----------------------------------------------------------------- // ページ編集画面 -public class PageActivity extends AppCompatActivity { +public class PageActivity extends AppCompatActivity implements Runnable { private Acanthus acanthus; private PaintViewModel paintViewModel; private ActivityPageBinding binding; + private ScheduledThreadPoolExecutor thread = new ScheduledThreadPoolExecutor(1); + //----------------------------------------------------------------- //----------------------------------------------------------------- @@ -31,20 +38,54 @@ initView(); } - //----------------------------------------------------------------- // + @Override + public void onDestroy() { + super.onDestroy(); + thread.shutdown(); + } + + //----------------------------------------------------------------- + //----------------------------------------------------------------- + // ページのサイズを取得し続ける + @Override + public void run() { + paintViewModel.getPageSizeRequest(); + } + + //----------------------------------------------------------------- + //----------------------------------------------------------------- + // ページを追加する public void onClickAddPage(View view) { paintViewModel.addPageRequest(); } //----------------------------------------------------------------- - // + // ページを削除する public void onClickDeletePage(View view) { paintViewModel.deletePageRequest(); } //----------------------------------------------------------------- + // ページを次に進める + public void onClickToAdvancePage(View view) { + paintViewModel.toAdvanceEditingPage(); + } + + //----------------------------------------------------------------- + // ページを前に戻す + public void onClickToBackPage(View view) { + paintViewModel.toBackEditingPage(); + } + + //----------------------------------------------------------------- + // ページをスライドして更新する + public void slidePage(MotionEvent event) { + paintViewModel.switchToEditPageRequest(event); + } + + //----------------------------------------------------------------- // @Override public boolean onTouchEvent(MotionEvent event) { @@ -64,18 +105,15 @@ //----------------------------------------------------------------- //----------------------------------------------------------------- + // private void init() { this.acanthus = (Acanthus) getApplication(); paintViewModel = new ViewModelProvider(this).get(PaintViewModel.class); paintViewModel.init(acanthus); startObserve(); - } - //----------------------------------------------------------------- - // - public void slidePage(MotionEvent event) { - paintViewModel.switchToEditPageRequest(event); + thread.scheduleWithFixedDelay(this, 1000L, 2000L, TimeUnit.MILLISECONDS); } //----------------------------------------------------------------- diff --git a/app/src/main/res/layout/activity_page.xml b/app/src/main/res/layout/activity_page.xml index 248d070..44cdea3 100644 --- a/app/src/main/res/layout/activity_page.xml +++ b/app/src/main/res/layout/activity_page.xml @@ -75,6 +75,7 @@ android:layout_marginTop="39dp" android:background="@android:drawable/ic_media_next" android:backgroundTint="#000000" + android:onClick="onClickToAdvancePage" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.674" @@ -91,6 +92,7 @@ android:layout_marginTop="39dp" android:background="@android:drawable/ic_media_previous" android:backgroundTint="#000000" + android:onClick="onClickToBackPage" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@+id/textPageNo" app:layout_constraintHorizontal_bias="0.173"