diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml deleted file mode 100644 index 797acea..0000000 --- a/.idea/runConfigurations.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 78c8159..160c466 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -32,6 +32,7 @@ + animationJsonList = new ArrayList<>(); @@ -76,10 +79,14 @@ } public Integer getEditingPageNo() { - if (editingPageNo == null) editingPageNo = 0; + if (editingPageNo == null) editingPageNo = 1; return editingPageNo; } + public Integer getEditingPageId() { + return this.editingPageId; + } + public Animation getCurrentAnimation() { return currentAnimation; } @@ -134,13 +141,17 @@ } public void setEditingPageNo(Integer editingPageNo) { - this.editingPageNo = editingPageNo; + this.editingPageNo = MathUtils.clamp(editingPageNo, 0, 999); } public void setCurrentAnimation(Animation currentAnimation) { this.currentAnimation = currentAnimation; } + public void setEditingPageId(Integer editingPageId) { + this.editingPageId = editingPageId; + } + //HomeViewModelでしようするためのsetter public void setAnimationJsonList(Collection sentAnimationJsonList) { this.animationJsonList.clear(); diff --git a/app/src/main/java/org/ntlab/acanthus_client/entities/Page.java b/app/src/main/java/org/ntlab/acanthus_client/entities/Page.java index 10340b0..cc25367 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/entities/Page.java +++ b/app/src/main/java/org/ntlab/acanthus_client/entities/Page.java @@ -5,14 +5,29 @@ //----------------------------------------------------------------- // ページ情報 public class Page { + private Integer pid; + private Integer pageNo; private ArrayList layers = new ArrayList<>(); + //----------------------------------------------------------------- + // getter + public Integer getPid() { + return pid; + } + + public Integer getPageNo() { + return pageNo; + } + public ArrayList getLayers() { return this.layers; } + //----------------------------------------------------------------- + // setter public void setLayers(ArrayList layers) { this.layers = layers; } + } diff --git a/app/src/main/java/org/ntlab/acanthus_client/resources/gallery/PagesRest.java b/app/src/main/java/org/ntlab/acanthus_client/resources/gallery/PagesRest.java index d0e530c..7c577d5 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/resources/gallery/PagesRest.java +++ b/app/src/main/java/org/ntlab/acanthus_client/resources/gallery/PagesRest.java @@ -5,6 +5,7 @@ import java.util.ArrayList; import retrofit2.Call; +import retrofit2.http.DELETE; import retrofit2.http.FormUrlEncoded; import retrofit2.http.GET; import retrofit2.http.POST; @@ -23,7 +24,23 @@ //----------------------------------------------------------------- // @POST("gallery/{aid}/pageMap") - Call addPage(@Path("aid")Integer aid); + Call addPage(@Path("aid") Integer aid); //----------------------------------------------------------------- + // + @DELETE("gallery/{aid}/pageMap/{pageNo}") + Call deletePage(@Path("aid") Integer aid, @Path("pageNo") Integer pageNo); + + //----------------------------------------------------------------- + // + @GET("gallery/{aid}/pageMap/{pageNo}") + Call getPage(@Path("aid") Integer aid, @Path("pageNo") Integer pageNo); + + //----------------------------------------------------------------- + // + @GET("gallery/{aid}/pageMap/size") + Call getPageSize(@Path("aid") Integer aid); + + //----------------------------------------------------------------- + } diff --git a/app/src/main/java/org/ntlab/acanthus_client/resources/gallery/StrokesRest.java b/app/src/main/java/org/ntlab/acanthus_client/resources/gallery/StrokesRest.java index 11f7b1a..0f7a43f 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/resources/gallery/StrokesRest.java +++ b/app/src/main/java/org/ntlab/acanthus_client/resources/gallery/StrokesRest.java @@ -43,21 +43,23 @@ //----------------------------------------------------------------- // @FormUrlEncoded - @POST("gallery/{aid}/pageMap/0/layers/0/strokes/{strokeNo}/positions") - Call addPositions(@Field("positionNo") int i,@Path("aid") Integer aid, @Path("strokeNo") Integer strokeNo, + @POST("gallery/{aid}/pageMap/{pid}/layers/0/strokes/{strokeNo}/positions") + Call addPositions(@Field("positionNo") int i, @Path("aid") Integer aid, + @Path("pid") int pid, @Path("strokeNo") Integer strokeNo, @Field("x") double x, @Field("y") double y); //----------------------------------------------------------------- // - @DELETE("gallery/{aid}/pageMap/0/layers/0/strokes") - Call deleteStrokes(@Path("aid") Integer aid, @Query("uid") Integer uid); + @DELETE("gallery/{aid}/pageMap/{pid}/layers/0/strokes") + Call deleteStrokes(@Path("aid") Integer aid, @Path("pid") Integer pid, @Query("uid") Integer uid); //----------------------------------------------------------------- // @DELETE("gallery/{aid}/pageMap/0/layers/0/strokes/{strokeNo}/positions") Call deleteStrokeNo(@Path("aid") Integer aid, @Path("strokeNo") Integer strokeNo); + //----------------------------------------------------------------- // @GET("gallery/{aid}/pageMap/{pid}/image") - Call getLayers(@Path("aid") Integer aid, @Path("pid")Integer pid); + Call getLayers(@Path("aid") Integer aid, @Path("pid") Integer pid); } \ No newline at end of file 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 ad688c6..2f174ce 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 @@ -9,6 +9,8 @@ import org.ntlab.acanthus_client.Acanthus; import org.ntlab.acanthus_client.entities.Stroke; +import org.ntlab.acanthus_client.views.paint.models.PageConnectionModel; +import org.ntlab.acanthus_client.views.paint.models.PageOperationModel; import java.util.ArrayList; import java.util.Collection; @@ -22,37 +24,33 @@ private PaintModelContainer paintModelContainer; - private MutableLiveData mPageLength = new MutableLiveData<>(); - private MutableLiveData mPageNo = new MutableLiveData<>(); + private MutableLiveData mCurPageNo = new MutableLiveData<>(); + private MutableLiveData mCurPageId = new MutableLiveData<>(); + private MutableLiveData mPageSize = new MutableLiveData<>(); private MutableLiveData mStrokeNo = new MutableLiveData<>(); + private MutableLiveData> mStrokes = new MutableLiveData<>(); private ScheduledThreadPoolExecutor thread = new ScheduledThreadPoolExecutor(1); - private ArrayListpositionLocalx = new ArrayList<>(); - private ArrayListpositionLocaly = new ArrayList<>(); - private ArrayListlocalstrokeNo = new ArrayList<>(); - private int cnt=0; - private float fsx=0; - private float fsy=0; + 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; + //----------------------------------------------------------------- // getter public MutableLiveData> getStroke() { return this.mStrokes; } - public void deleteStroke() { - this.mStrokes.getValue().clear(); - } public LiveData getStrokeNo() { return this.mStrokeNo; } - public LiveData getPageLength() { - return this.mPageLength; - } - public LiveData getPageNo() { - return this.mPageNo; + return this.mCurPageNo; } public PaintModelContainer getPaintModelContainer() { @@ -70,27 +68,33 @@ mStrokes.setValue(new ArrayList<>()); mStrokes.getValue().add(new Stroke()); + // ページの情報初期化 + paintModelContainer.getPageConnectionModel().getPage(mCurPageId); + paintModelContainer.getPageConnectionModel().getPageSize(mPageSize); + thread.scheduleWithFixedDelay(this, 1000L, 100L, TimeUnit.MILLISECONDS); } //----------------------------------------------------------------- // 描画APIの通信リクエスト - public void addLocalStrokeRequest(float x,float y) { + public void addLocalStrokeRequest(float x, float y) { paintModelContainer.getPaintConnectionModel().addLocalStroke(mStrokeNo); - fsx=x; - fsy=y; - cnt=1; + 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.getValue()); - //positionLocalx.add((double)x); - //positionLocaly.add((double)y); + paintModelContainer.getPaintConnectionModel().addPosition(cnt, x, y, mStrokeNo.getValue()); + //positionLocalx.add((double)x); + //positionLocaly.add((double)y); cnt++; } + public void addPositionRequestfirst() { - paintModelContainer.getPaintConnectionModel().addPosition(0,fsx,fsy,mStrokeNo.getValue()); - paintModelContainer.getPaintConnectionModel().addPosition(cnt,-1,-1,mStrokeNo.getValue()); + paintModelContainer.getPaintConnectionModel().addPosition(0, fsx, fsy, mStrokeNo.getValue()); + paintModelContainer.getPaintConnectionModel().addPosition(cnt, -1, -1, mStrokeNo.getValue()); //Log.d("x", positionLocalx.toString()); //Log.d("y", positionLocaly.toString()); //positionLocalx.clear(); @@ -110,15 +114,44 @@ } //----------------------------------------------------------------- - // - public void updatePageNo(MotionEvent event) { - paintModelContainer.getPageOperationModel().updatePageNo(event, mPageNo); + // 操作するページを切り替える + public void switchToEditPageRequest(MotionEvent event) { + PageOperationModel pageOperationModel = paintModelContainer.getPageOperationModel(); + PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); + + pageOperationModel.changeEditPageNo(event, mCurPageNo, mPageSize.getValue()); + //ページを操作したので更新 + pageConnectionModel.getPage(mCurPageId); + } //----------------------------------------------------------------- // ページの追加通信リクエスト public void addPageRequest() { - paintModelContainer.getPageConnectionModel().addPage(mPageLength); + PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); + + pageConnectionModel.addPage(); + pageConnectionModel.getPageSize(mPageSize); + Log.d("pageSize:", mPageSize.getValue().toString()); + } + + //----------------------------------------------------------------- + // + public void deletePageRequest() { + PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); + + pageConnectionModel.deletePage(); + pageConnectionModel.getPageSize(mPageSize); + //ページ削除後同じページ番号のページを再取得する必要あり + Log.d("pageSize:", mPageSize.getValue().toString()); + + //pageConnectionModel.getPage(mCurPageNo); + } + + //----------------------------------------------------------------- + // + public void deleteStroke() { + this.mStrokes.getValue().clear(); } //----------------------------------------------------------------- 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 5ae613e..114b080 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 @@ -1,5 +1,7 @@ package org.ntlab.acanthus_client.views.paint.models; +import android.util.Log; + import androidx.lifecycle.MutableLiveData; import org.ntlab.acanthus_client.Acanthus; @@ -42,14 +44,13 @@ //----------------------------------------------------------------- //----------------------------------------------------------------- // ページ追加API - public void addPage(MutableLiveData mPageNo) { + public void addPage() { final PagesRest pagesRest = retrofit.create(PagesRest.class); Call call = pagesRest.addPage(acanthus.getAid()); call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { - if (response.isSuccessful()) mPageNo.setValue(response.body()); } @Override @@ -59,7 +60,69 @@ }); } + //----------------------------------------------------------------- + // ページ削除 + public void deletePage() { + final PagesRest pagesRest = retrofit.create(PagesRest.class); + Call call = pagesRest.deletePage(acanthus.getAid(), acanthus.getEditingPageNo()); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { +// if(response.isSuccessful()) + } + @Override + public void onFailure(Call call, Throwable t) { + + } + }); + } + + //----------------------------------------------------------------- + // ページサイズ取得 + public void getPageSize(MutableLiveData pageSize) { + final PagesRest pagesRest = retrofit.create(PagesRest.class); + + Call call = pagesRest.getPageSize(acanthus.getAid()); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) + pageSize.setValue(response.body()); + } + + @Override + public void onFailure(Call call, Throwable t) { + + } + }); + } + + //----------------------------------------------------------------- + // ページ情報を取得するリクエスト + public void getPage(MutableLiveData pageId) { + final PagesRest pagesRest = retrofit.create(PagesRest.class); + + Call call = pagesRest.getPage(acanthus.getAid(), acanthus.getEditingPageNo()); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + //acanthus.setEditingPageId(response.body()); + // ページ番号とページIDを取得する + acanthus.setEditingPageNo(response.body().getPageNo()); + acanthus.setEditingPageId(response.body().getPid()); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + Log.d("failure", "omg"); + } + }); + } + + //----------------------------------------------------------------- } 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 7f2940d..1c299f1 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,6 +1,7 @@ package org.ntlab.acanthus_client.views.paint.models; import android.preference.SwitchPreference; +import android.util.Log; import android.view.MotionEvent; import android.view.VelocityTracker; @@ -9,8 +10,7 @@ import org.ntlab.acanthus_client.Acanthus; //----------------------------------------------------------------- -// - +// ページの操作 public class PageOperationModel { //----------------------------------------------------------------- // スワイプの向き @@ -31,16 +31,26 @@ //----------------------------------------------------------------- //----------------------------------------------------------------- - 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 changeEditPageNo(MotionEvent event, MutableLiveData mCurPageNo, Integer pageSize) { + mCurPageNo.setValue(acanthus.getEditingPageNo()); + + //ページの枚数以上現在のページ番号を更新しない + if (getVelocityDirection(event).equals(SwipeDirectionType.LEFT) && (mCurPageNo.getValue() < pageSize)) + incrementPageNo(mCurPageNo); + if (getVelocityDirection(event).equals(SwipeDirectionType.RIGHT)) + decrementPageNo(mCurPageNo); + + + + Log.d("pageNo", acanthus.getEditingPageNo().toString()); + Log.d("pid", acanthus.getEditingPageId().toString()); } //----------------------------------------------------------------- //----------------------------------------------------------------- - // + // ページを進める public void incrementPageNo(MutableLiveData mPageNo) { -// if(acanthus.getEditingPageNo()) Integer editingNo = acanthus.getEditingPageNo(); acanthus.setEditingPageNo(editingNo + 1); @@ -48,16 +58,16 @@ } //-----------------------------------------------------------------s - // - private void decrementPageNo(MutableLiveData mPageNo) { + // ページ番号を前に戻す + public void decrementPageNo(MutableLiveData mPageNo) { Integer editingNo = acanthus.getEditingPageNo(); - if (0 < editingNo ) { + + if (1 < editingNo) { acanthus.setEditingPageNo(acanthus.getEditingPageNo() - 1); mPageNo.setValue(acanthus.getEditingPageNo()); } } - //----------------------------------------------------------------- // 操作からスワイプの向きを取得する private SwipeDirectionType getVelocityDirection(MotionEvent event) { diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PaintConnectionModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PaintConnectionModel.java index f2d866d..960c354 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PaintConnectionModel.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PaintConnectionModel.java @@ -58,9 +58,7 @@ .addConverterFactory(JacksonConverterFactory.create()) .build(); } -//----------------------------------------------------------------- -//----------▽▽POST▽▽---------- - //----------------------------------------------------------------- + //----------------------------------------------------------------- // ローカルでのストロークの追加(POST) public void addLocalStroke(MutableLiveData mStrokeNo) { @@ -70,7 +68,7 @@ //----------------------------------------------------------------- // ストローク追加API Call call = strokesRest.addStroke( - acanthus.getAid(), acanthus.getEditingPageNo(), 0, acanthus.getPreferenceUid(), acanthus.getPreferenceToken(), + acanthus.getAid(), acanthus.getEditingPageId(), 0, acanthus.getPreferenceUid(), acanthus.getPreferenceToken(), 0, 0, 10); // strokeNoを更新 @@ -82,21 +80,23 @@ @Override public void onFailure(Call call, Throwable t) { - Log.d("POSTonFailure: ","strokeNo"); + Log.d("POSTonFailure: ", "strokeNo"); } }); } //----------------------------------------------------------------- // ローカルでの筆跡追加(POST) - public void addPosition(int i ,double x, double y, int currentStrokeNo) { + public void addPosition(int i, double x, double y, int currentStrokeNo) { final StrokesRest strokesRest = retrofit.create(StrokesRest.class); //Log.d("strokeNo:", currentStrokeNo); + Log.d("curPageId:", acanthus.getEditingPageId().toString()); + Log.d("curPageNo:", acanthus.getEditingPageNo().toString()); //----------------------------------------------------------------- // 座標追加 - Call call = strokesRest.addPositions(i,acanthus.getAid(), currentStrokeNo, x, y); + Call call = strokesRest.addPositions(i, acanthus.getAid(), acanthus.getEditingPageId(), currentStrokeNo, x, y); call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { @@ -105,15 +105,11 @@ @Override public void onFailure(Call call, Throwable t) { - Log.d("POSTonFailure: ","i:"+i+",x:"+x+",y:"+y ); + Log.d("POSTonFailure: ", "i:" + i + ",x:" + x + ",y:" + y); } }); } -//----------△△POST△△---------- -//----------------------------------------------------------------- -/////////////////////////////////////////////////////////////////////////////////////////////////////////// -//----------------------------------------------------------------- -//----------▽▽GET▽▽---------- + //----------------------------------------------------------------- // 全strokeを取得する public void getStrokes(MutableLiveData> strokes) { @@ -121,7 +117,7 @@ //----------------------------------------------------------------- // 筆跡追加API - Call> call = strokesRest.getStrokes(acanthus.getAid(), 0, 0); + Call> call = strokesRest.getStrokes(acanthus.getAid(), acanthus.getEditingPageId(), 0); call.enqueue(new Callback>() { @Override public void onResponse(Call> call, Response> response) { @@ -143,7 +139,7 @@ //----------------------------------------------------------------- // 現在の筆跡番号の取得 - Call call = layersRest.getStrokeSize(acanthus.getAid(), 0, 0); + Call call = layersRest.getStrokeSize(acanthus.getAid(), acanthus.getEditingPageId(), 0); call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { @@ -156,11 +152,7 @@ } }); } -//----------△△GET△△---------- -//----------------------------------------------------------------- -/////////////////////////////////////////////////////////////////////////////////////////////////////////// -//----------------------------------------------------------------- -//----------▽▽delete▽▽---------- + //----------------------------------------------------------------- // "Clear"ボタンによる描画の全消去 / サーバー側の筆跡全削除 public void deleteStrokes() { @@ -168,7 +160,7 @@ //----------------------------------------------------------------- // 筆跡をすべて削除する - Call call = strokesRest.deleteStrokes(acanthus.getAid(), acanthus.getPreferenceUid()); + Call call = strokesRest.deleteStrokes(acanthus.getAid(), acanthus.getEditingPageId(), acanthus.getPreferenceUid()); call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { @@ -179,7 +171,7 @@ } }); } -//----------△△delete△△---------- -//----------------------------------------------------------------- + + //----------------------------------------------------------------- } \ No newline at end of file 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 2d6856f..83f2533 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 @@ -40,6 +40,12 @@ //----------------------------------------------------------------- // + public void onClickDeletePage(View view) { + paintViewModel.deletePageRequest(); + } + + //----------------------------------------------------------------- + // @Override public boolean onTouchEvent(MotionEvent event) { int action = event.getActionMasked(); @@ -69,7 +75,7 @@ //----------------------------------------------------------------- // public void slidePage(MotionEvent event) { - paintViewModel.updatePageNo(event); + paintViewModel.switchToEditPageRequest(event); } //----------------------------------------------------------------- @@ -83,13 +89,6 @@ //----------------------------------------------------------------- // 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) { diff --git a/app/src/main/res/layout/activity_page.xml b/app/src/main/res/layout/activity_page.xml index ea819b4..248d070 100644 --- a/app/src/main/res/layout/activity_page.xml +++ b/app/src/main/res/layout/activity_page.xml @@ -13,15 +13,32 @@ android:background="@android:drawable/presence_online" android:backgroundTint="#FF4545" android:onClick="onClickAddPage" - android:text="pageNo" + android:text="+" android:textColor="#FFFFFF" app:iconTint="#C32828" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintHorizontal_bias="0.498" + app:layout_constraintHorizontal_bias="0.896" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" - app:layout_constraintVertical_bias="0.802" /> + app:layout_constraintVertical_bias="0.84" /> + +