diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/edit/EditFragment.java b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/edit/EditFragment.java index 9d473e0..ad02038 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/edit/EditFragment.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/edit/EditFragment.java @@ -72,8 +72,6 @@ binding = FragmentEditBinding.inflate(inflater, container, false); View root = binding.getRoot(); - homeViewModel.updateGallery(acanthus); // ギャラリーをアップデート - return root; } @@ -85,7 +83,7 @@ editViewModel = new ViewModelProvider(this).get(EditViewModel.class); - Acanthus acanthus = (Acanthus) getActivity().getApplication(); + acanthus = (Acanthus) getActivity().getApplication(); Integer uid = 1; String token = "abc0"; editViewModel.getWorkList(uid, token); @@ -214,7 +212,7 @@ // ひっぱり更新の処理 @Override public void onRefresh() { - + homeViewModel.updateGallery(acanthus); // ギャラリーをアップデート mSwipeRefreshLayout.setRefreshing(false); } } \ No newline at end of file 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 c14a52c..05da37c 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 @@ -26,7 +26,7 @@ private PaintToolBar paintToolBar; - // private PaintScreenShot paintScreenShot; + private ActivityPaintBinding binding; private PaintViewModel paintViewModel; @@ -37,8 +37,6 @@ @Override public void onDestroy() { super.onDestroy(); - paintViewModel.stop(); - // paintScreenShot.onDestroy(); } //----------------------------------------------------------------- @@ -48,50 +46,21 @@ setTheme(R.style.AppTheme_NoTitleBar);//タイトルバーを消す init(); initView(); - - //paintScreenShot.onCreate(); - -// Button button = findViewById(R.id.button_keep); -// button.setOnClickListener(new View.OnClickListener() { -// @Override -// public void onClick(View v) { -// //bottonタップで表示されてたら非表示にする。 -// if (buttonView) { -// findViewById(R.id.capture).setVisibility(View.INVISIBLE); -// findViewById(R.id.image).setVisibility(View.INVISIBLE); -// findViewById(R.id.textView3).setVisibility(View.INVISIBLE); -// -// buttonView = false; -// } else { -// findViewById(R.id.capture).setVisibility(View.VISIBLE); -// findViewById(R.id.image).setVisibility(View.VISIBLE); -// findViewById(R.id.textView3).setVisibility(View.VISIBLE); -// -// buttonView = true; -// } -// } -// }); } //----------------------------------------------------------------- @Override protected void onResume() { super.onResume(); - - displayAid(); + paintViewModel.start(); + paintCanvas.clearCanvas(); } //----------------------------------------------------------------- - // 描画全体のクリア - public void onClickClear(View view) { - paintCanvas.deleteStroke(); - } - - //----------------------------------------------------------------- - // 招待する - public void onClickInvite(View view) { - Integer dummyId = 2; - paintViewModel.inviteNewUserRequest(dummyId); + @Override + protected void onPause() { + super.onPause(); +// paintViewModel.stop(); } //----------------------------------------------------------------- @@ -117,12 +86,7 @@ paintOnionCanvas = findViewById(R.id.paintOnionCanvas); paintOnionCanvas.init(paintViewModel); - // paintScreenShot = new PaintScreenShot(this); - paintToolBar = new PaintToolBar(this, paintCanvas); - -// findViewById(R.id.capture).setVisibility(View.INVISIBLE); -// findViewById(R.id.image).setVisibility(View.INVISIBLE); -// findViewById(R.id.textView3).setVisibility(View.INVISIBLE); + paintToolBar = new PaintToolBar(this, paintCanvas, paintOnionCanvas); } //----------------------------------------------------------------- @@ -145,37 +109,13 @@ } }); -//1時的コメントアウトここから - // paintViewModel.getmStrokeNo().observe(this, new Observer() { -// @Override -// public void onChanged(Integer integer) { -// paintViewModel.getPosition(integer); -// } -// }); -// paintViewModel.getMlatestPosition().observe(this, new Observer>() { -// @Override -// public void onChanged(Collection positions) { -// if(positions.size()!=1){ -// //paintCanvas.latestPositionWrite(positions); -// } -// } -// }); -//ここまで - } - - //------------------------------------------------------------------ - // デバッグ用の現在編集中のAid表示 - private void displayAid() { - Acanthus acanthus = (Acanthus) getApplication(); - TextView view = findViewById(R.id.textViewCurAid); - view.setText("aid:" + acanthus.getAid().toString()); } //------------------------------------------------------------------ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); - // paintScreenShot.onActivityResult(requestCode, resultCode, data); } + //------------------------------------------------------------------ } \ 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 bfd5295..81ae629 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 @@ -95,13 +95,12 @@ // @Override protected void onDraw(Canvas canvas) { - super.onDraw(curCanvas); + super.onDraw(canvas); canvas.drawColor(0xFFFFFFFF); for (int i = 0; i < paths.size(); i++) { try { canvas.drawPath(paths.get(i), paints.get(i)); - curCanvas.drawPath(paths.get(i), paints.get(i)); } catch (IndexOutOfBoundsException ex) { } } @@ -109,7 +108,6 @@ for (int i = 0; i < clonePaths.size(); i++) { try { canvas.drawPath(clonePaths.get(i), clonePaints.get(i)); - curCanvas.drawPath(clonePaths.get(i), clonePaints.get(i)); } catch (IndexOutOfBoundsException ex) { } } @@ -216,6 +214,14 @@ //----------------------------------------------------------------- @RequiresApi(api = Build.VERSION_CODES.O) public void canvassc() { + + for (int i = 0; i < clonePaths.size(); i++) { + try { + curCanvas.drawPath(clonePaths.get(i), clonePaints.get(i)); + } catch (IndexOutOfBoundsException ex) { + } + } + ByteArrayOutputStream stream = new ByteArrayOutputStream(); image.compress(Bitmap.CompressFormat.PNG, 100, stream); byte[] byteArray = stream.toByteArray(); diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintOnionCanvas.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintOnionCanvas.java index f9002e7..e5fd319 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintOnionCanvas.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintOnionCanvas.java @@ -10,9 +10,11 @@ import android.view.View; import androidx.annotation.Nullable; +import androidx.lifecycle.ViewModelProvider; import org.ntlab.acanthus_client.entities.Position; import org.ntlab.acanthus_client.entities.Stroke; +import org.ntlab.acanthus_client.views.paint.page.PageViewModel; import java.lang.reflect.Array; import java.util.ArrayList; @@ -26,8 +28,6 @@ private Paint paint = new Paint(); private PaintViewModel paintViewModel; - private Canvas canvas; - //----------------------------------------------------------------- //----------------------------------------------------------------- public PaintOnionCanvas(Context context, @Nullable AttributeSet attrs) { @@ -50,7 +50,6 @@ @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); - canvas.drawPath(path, paint); } @@ -74,16 +73,20 @@ } cnt = 0; } - paintViewModel.deletePreStroke(); } - //----------------------------------------------------------------- // public void clearCanvas() { path.reset(); invalidate(); } + + //----------------------------------------------------------------- + // + public void stopUpdate(){ + paintViewModel.stop(); + } //----------------------------------------------------------------- } 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 e9a30b5..083b05b 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 @@ -25,15 +25,16 @@ //----------------------------------------------------------------- //----------------------------------------------------------------- - public PaintToolBar(PaintActivity paintActivity, PaintCanvas paintCanvas) { + public PaintToolBar(PaintActivity paintActivity, PaintCanvas paintCanvas, PaintOnionCanvas paintOnionCanvas) { this.bottomNavigationView = (BottomNavigationView) paintActivity.findViewById(R.id.navPaint); - setNavigationListener(paintActivity, paintCanvas); + setNavigationListener(paintActivity, paintCanvas, paintOnionCanvas); + } //----------------------------------------------------------------- //----------------------------------------------------------------- // ナビゲーションバーのタッチ監視 - private void setNavigationListener(AppCompatActivity appCompatActivity, PaintCanvas paintCanvas) { + private void setNavigationListener(AppCompatActivity appCompatActivity, PaintCanvas paintCanvas, PaintOnionCanvas paintOnionCanvas) { this.onNavigationItemSelectedListener = new BottomNavigationView.OnNavigationItemSelectedListener() { @RequiresApi(api = Build.VERSION_CODES.O) @Override @@ -57,6 +58,10 @@ //----------------------------------------------------------------- case R.id.navigation_page: + + paintOnionCanvas.stopUpdate(); + paintOnionCanvas.clearCanvas(); + paintCanvas.canvassc(); paintCanvas.clearCanvas(); transitionPageActivity(appCompatActivity); 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 12687bf..e179383 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 @@ -26,20 +26,14 @@ public class PaintViewModel extends ViewModel implements Runnable { private PaintModelContainer paintModelContainer; - 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> mlatestPosition = new MutableLiveData<>(); private MutableLiveData> mStrokes = new MutableLiveData<>(); private MutableLiveData> mPreStroke = new MutableLiveData<>(); - private MutableLiveData> mPages = new MutableLiveData<>(new HashMap<>()); private int strokeNo = 0; - private ScheduledThreadPoolExecutor thread = new ScheduledThreadPoolExecutor(1); + private ScheduledThreadPoolExecutor thread = null; private int cnt = 0; private float fsx = 0; private float fsy = 0; @@ -55,17 +49,6 @@ return this.mStrokes; } - public LiveData getPageNo() { - return this.mCurPageNo; - } - - public LiveData> getPages() { - return this.mPages; - } - - public PaintModelContainer getPaintModelContainer() { - return paintModelContainer; - } //----------------------------------------------------------------- //----------------------------------------------------------------- @@ -75,14 +58,8 @@ paintModelContainer.getPaintConnectionModel().init(acanthus); paintModelContainer.getInvitesConnectionModel().init(acanthus); - mlatestPosition.setValue(new ArrayList<>()); - mlatestPosition.getValue().add(new Position()); - // ページの情報初期化 - paintModelContainer.getPageOperationModel().initEditingPageNo(mCurPageNo); - paintModelContainer.getPageConnectionModel().getPage(mCurPageId); - paintModelContainer.getPageConnectionModel().getPageSize(mPageSize); + start(); - thread.scheduleWithFixedDelay(this, 50L, 1000L, TimeUnit.MILLISECONDS); } //----------------------------------------------------------------- @@ -95,8 +72,8 @@ //----------------------------------------------------------------- // 描画APIの通信リクエスト - public void addLocalStrokeRequest(float x, float y , int color,int shick) { - paintModelContainer.getPaintConnectionModel().addLocalStroke(strokeNo,color,shick); + public void addLocalStrokeRequest(float x, float y, int color, int shick) { + paintModelContainer.getPaintConnectionModel().addLocalStroke(strokeNo, color, shick); fsx = x; fsy = y; cnt = 1; @@ -118,111 +95,18 @@ } //----------------------------------------------------------------- - // 招待APIの通信リクエスト - public void inviteNewUserRequest(Integer invitedUid) { - paintModelContainer.getInvitesConnectionModel().inviteNewEditor(invitedUid); - } - - //----------------------------------------------------------------- // 描画情報の全クリア通信リクエスト public void deleteStrokesRequest() { paintModelContainer.getPaintConnectionModel().deleteStrokes(); } //----------------------------------------------------------------- - // 操作するページを切り替える - public void switchToEditPageRequest(MotionEvent event) { - PageOperationModel pageOperationModel = paintModelContainer.getPageOperationModel(); - 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); - updatePrePageId(); - } - - //----------------------------------------------------------------- - // 前のページに戻る - public void toBackEditingPage() { - PageOperationModel pageOperationModel = paintModelContainer.getPageOperationModel(); - PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); - - pageOperationModel.decrementPageNo(mCurPageNo); - pageConnectionModel.getPage(mCurPageId); - updatePrePageId(); - } - - //----------------------------------------------------------------- - // ひとつ前のページを記憶する - private void updatePrePageId(){ - PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); - pageConnectionModel.getPrePageId(); - } - - //----------------------------------------------------------------- - //----------------------------------------------------------------- - // ページの追加通信リクエスト - public void addPageRequest() { - PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); - - pageConnectionModel.addPage(); - pageConnectionModel.getPageSize(mPageSize); - Log.d("pageSize:", mPageSize.getValue().toString()); - } - - //----------------------------------------------------------------- - // ページ削除 - 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()); - - } - - //----------------------------------------------------------------- - // ページのサムネイル取得 - public void getPageThumbnailRequest() { - PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); - - pageConnectionModel.getPageThumb(mPages); - } - - //----------------------------------------------------------------- //----------------------------------------------------------------- // 筆跡の削除 public void deleteStroke() { this.mStrokes.getValue().clear(); } - public void deletePreStroke(){ - mPreStroke.getValue().clear(); - } - - //----------------------------------------------------------------- - // - public void getPageSizeRequest() { - paintModelContainer.getPageConnectionModel().getPageSize(mPageSize); - } - //----------------------------------------------------------------- //----------------------------------------------------------------- // 一定間隔でサーバー上の筆跡を取得する(GET) @@ -234,17 +118,19 @@ paintModelContainer.getPaintConnectionModel().getPreStrokes(mPreStroke); - paintModelContainer.getPageConnectionModel().getPageSize(mPageSize); + Log.d("PaintViewModel", "run"); } - //一定間隔でserver上のStrokeNoSizeを返す - public void latestStrokeNo() { - paintModelContainer.getPaintConnectionModel().getStrokeNo(mStrokeNo); + //----------------------------------------------------------------- + // + public void start() { + thread = new ScheduledThreadPoolExecutor(1); + thread.scheduleWithFixedDelay(this, 50L, 1000L, TimeUnit.MILLISECONDS); } //----------------------------------------------------------------- //サーバーに画像データ(BASE64)を送る - public void setImage(String image){ + public void setImage(String image) { paintModelContainer.getPaintConnectionModel().setImage(image); } 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 066f625..5a71ede 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 @@ -72,7 +72,6 @@ call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { -// if(response.isSuccessful()) } @Override @@ -91,8 +90,7 @@ call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { - if (response.isSuccessful()) - pageSize.setValue(response.body()); + if (response.isSuccessful()) pageSize.setValue(response.body()); } @Override @@ -107,18 +105,46 @@ public void getPage(MutableLiveData mPageId) { 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()) { + //----------------------------------------------------------------- // ページ番号とページIDを取得する - acanthus.setEditingPageNo(response.body().getPageNo()); acanthus.setEditingPageId(response.body().getPid()); mPageId.setValue(response.body().getPid()); - Log.d("pid", acanthus.getEditingPageId().toString()); + Log.d("curPageNo", acanthus.getEditingPageNo().toString()); + Log.d("curPageID", acanthus.getEditingPageId().toString()); + + //----------------------------------------------------------------- + // ページが後ろにあれば取得 + if (1 < acanthus.getEditingPageNo()) { + final PagesRest pagesRest = retrofit.create(PagesRest.class); + + Call call2 = pagesRest.getPage(acanthus.getAid(), acanthus.getEditingPageNo() - 1); + + call2.enqueue(new Callback() { + @Override + public void onResponse(Call call2, Response response) { + + if (response.isSuccessful()) { + acanthus.setPrePageId(response.body().getPid()); + Log.d("prePageID", acanthus.getPrePageId().toString()); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + } + }); + //----------------------------------------------------------------- + } } } @@ -131,54 +157,50 @@ //----------------------------------------------------------------- // ページのサムネイルを取得する - public void getPageThumb(MutableLiveData> mPages){ + public void getPageThumb(MutableLiveData> mPages) { final StrokesRest strokesRest = retrofit.create(StrokesRest.class); Call> call = strokesRest.getPageUrls(acanthus.getAid()); call.enqueue(new Callback>() { @Override public void onResponse(Call> call, Response> response) { - if(response.isSuccessful()){ - mPages.setValue(response.body()); - } + if (response.isSuccessful()) mPages.setValue(response.body()); } @Override public void onFailure(Call> call, Throwable t) { - } }); } //----------------------------------------------------------------- - // 前のページのIDを取得する - public void getPrePageId() { - - // ページが後ろにあれば取得 - if (1 < acanthus.getEditingPageNo()) { - final PagesRest pagesRest = retrofit.create(PagesRest.class); - - Call call = pagesRest.getPage(acanthus.getAid(), acanthus.getEditingPageNo() - 1); - call.enqueue(new Callback() { - @Override - public void onResponse(Call call, Response response) { - - if (response.isSuccessful()) { - acanthus.setPrePageId(response.body().getPid()); - Log.d("prePid", acanthus.getPrePageId().toString()); - } - } - - @Override - public void onFailure(Call call, Throwable t) { - - } - }); - - } - } +// public void getPrePageId() { +// +// // ページが後ろにあれば取得 +// if (1 < acanthus.getEditingPageNo()) { +// final PagesRest pagesRest = retrofit.create(PagesRest.class); +// +// Call call = pagesRest.getPage(acanthus.getAid(), acanthus.getEditingPageNo() - 1); +// +// call.enqueue(new Callback() { +// @Override +// public void onResponse(Call call, Response response) { +// +// if (response.isSuccessful()) { +// acanthus.setPrePageId(response.body().getPid()); +// Log.d("prePageID", acanthus.getPrePageId().toString()); +// } +// } +// +// @Override +// public void onFailure(Call call, Throwable t) { +// } +// }); +// +// } +// } //----------------------------------------------------------------- } 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 5d6aad6..ed09b9c 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 @@ -61,21 +61,17 @@ if (editingNo < pageSize) { acanthus.setEditingPageNo(editingNo + 1); mPageNo.setValue(acanthus.getEditingPageNo()); - - Log.d("pageNo", acanthus.getEditingPageNo().toString()); } } - //-----------------------------------------------------------------s + //----------------------------------------------------------------- // ページ番号を前に戻す public void decrementPageNo(MutableLiveData mPageNo) { Integer editingNo = acanthus.getEditingPageNo(); if (1 < editingNo) { - acanthus.setEditingPageNo(acanthus.getEditingPageNo() - 1); + acanthus.setEditingPageNo(editingNo - 1); mPageNo.setValue(acanthus.getEditingPageNo()); - - Log.d("pageNo", acanthus.getEditingPageNo().toString()); } } 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 e23c35a..378db8c 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 @@ -61,14 +61,14 @@ //----------------------------------------------------------------- // ローカルでのストロークの追加(POST) - public void addLocalStroke(int mStrokeNo,int color,int shick) { + public void addLocalStroke(int mStrokeNo, int color, int shick) { final StrokesRest strokesRest = retrofit.create(StrokesRest.class); Log.d("strokeNo:", "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^add----------------------"); //----------------------------------------------------------------- // ストローク追加API Call call = strokesRest.addStroke( - acanthus.getAid(), acanthus.getEditingPageId(), 0, acanthus.getPreferenceUid(),mStrokeNo, acanthus.getPreferenceToken(), + acanthus.getAid(), acanthus.getEditingPageId(), 0, acanthus.getPreferenceUid(), mStrokeNo, acanthus.getPreferenceToken(), 0, color, shick); // strokeNoを更新 @@ -135,8 +135,8 @@ // 前のページの全strokeを取得する public void getPreStrokes(MutableLiveData> preStrokes) { - // 前のページが存在するときのみ if (1 < acanthus.getEditingPageNo()) { + // 前のページが存在するときのみ final StrokesRest strokesRest = retrofit.create(StrokesRest.class); @@ -147,6 +147,7 @@ @Override public void onResponse(Call> call, Response> response) { if (response.isSuccessful()) preStrokes.setValue(response.body()); + Log.d("run:", "preDraw"); } @Override @@ -199,7 +200,7 @@ //----------------------------------------------------------------- // "screenssc()"が実行されたとき、エンコードした文字列(BASE64)をサーバに送る - public void setImage(String image){ + public void setImage(String image) { final StrokesRest strokesRest = retrofit.create(StrokesRest.class); //----------------------------------------------------------------- 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 8b7dc37..52f50d2 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,9 +8,9 @@ import android.util.Log; import android.view.MotionEvent; import android.view.View; +import android.webkit.WebSettings; import android.webkit.WebView; - -import com.fasterxml.jackson.databind.ser.VirtualBeanPropertyWriter; +import android.webkit.WebViewClient; import org.ntlab.acanthus_client.Acanthus; import org.ntlab.acanthus_client.R; @@ -25,7 +25,7 @@ // ページ編集画面 public class PageActivity extends AppCompatActivity implements Runnable { private Acanthus acanthus; - private PaintViewModel paintViewModel; + private PageViewModel pageViewModel; private ActivityPageBinding binding; private ScheduledThreadPoolExecutor thread = new ScheduledThreadPoolExecutor(1); @@ -54,38 +54,38 @@ // ページのサイズを取得し続ける @Override public void run() { - paintViewModel.getPageSizeRequest(); + pageViewModel.getPageSizeRequest(); } //----------------------------------------------------------------- //----------------------------------------------------------------- // ページを追加する public void onClickAddPage(View view) { - paintViewModel.addPageRequest(); + pageViewModel.addPageRequest(); } //----------------------------------------------------------------- // ページを削除する public void onClickDeletePage(View view) { - paintViewModel.deletePageRequest(); + pageViewModel.deletePageRequest(); } //----------------------------------------------------------------- // ページを次に進める public void onClickToAdvancePage(View view) { - paintViewModel.toAdvanceEditingPage(); + pageViewModel.toAdvanceEditingPage(); } //----------------------------------------------------------------- // ページを前に戻す public void onClickToBackPage(View view) { - paintViewModel.toBackEditingPage(); + pageViewModel.toBackEditingPage(); } //----------------------------------------------------------------- // ページをスライドして更新する public void slidePage(MotionEvent event) { - paintViewModel.switchToEditPageRequest(event); + pageViewModel.switchToEditPageRequest(event); } //----------------------------------------------------------------- @@ -111,8 +111,8 @@ // private void init() { this.acanthus = (Acanthus) getApplication(); - paintViewModel = new ViewModelProvider(this).get(PaintViewModel.class); - paintViewModel.init(acanthus); + pageViewModel = new ViewModelProvider(this).get(PageViewModel.class); + pageViewModel.init(acanthus); startObserve(); @@ -126,27 +126,31 @@ setContentView(binding.getRoot()); WebView webView = binding.pageWebview; + webView.setWebViewClient(new WebViewClient()); webView.setInitialScale(1); webView.getSettings().setLoadWithOverviewMode(true); webView.getSettings().setUseWideViewPort(true); + webView.getSettings().setSupportZoom(false); } //----------------------------------------------------------------- // private void startObserve() { - paintViewModel.getPageNo().observe(this, new Observer() { + pageViewModel.getCurPageNo().observe(this, new Observer() { @Override public void onChanged(Integer pageNo) { binding.textPageNo.setText(String.valueOf(pageNo)); - paintViewModel.getPageThumbnailRequest(); + pageViewModel.getPageThumbnailRequest(); } }); - paintViewModel.getPages().observe(this, new Observer>() { + pageViewModel.getPages().observe(this, new Observer>() { @Override public void onChanged(HashMap s) { - binding.pageWebview.loadUrl(s.get(paintViewModel.getPageNo().getValue())); + binding.pageWebview.clearCache(true); + binding.pageWebview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); + binding.pageWebview.loadUrl(s.get(pageViewModel.getCurPageNo().getValue())); Log.d("a", "onFailure: -----------------------OK:Obs"); } }); diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/page/PageViewModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/page/PageViewModel.java new file mode 100644 index 0000000..75d4ae7 --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/page/PageViewModel.java @@ -0,0 +1,151 @@ +package org.ntlab.acanthus_client.views.paint.page; + +import android.util.Log; +import android.view.MotionEvent; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; + +import org.ntlab.acanthus_client.Acanthus; +import org.ntlab.acanthus_client.views.paint.PaintModelContainer; +import org.ntlab.acanthus_client.views.paint.models.PageConnectionModel; +import org.ntlab.acanthus_client.views.paint.models.PageOperationModel; + +import java.util.HashMap; +import java.util.concurrent.ScheduledThreadPoolExecutor; + +public class PageViewModel extends ViewModel implements Runnable { + + private PaintModelContainer paintModelContainer; + + private MutableLiveData mCurPageNo = new MutableLiveData<>(1); + private MutableLiveData mCurPageId = new MutableLiveData<>(0); + + private MutableLiveData mPageSize = new MutableLiveData<>(0); + private MutableLiveData> mPages = new MutableLiveData<>(new HashMap<>()); + + + private ScheduledThreadPoolExecutor thread = new ScheduledThreadPoolExecutor(1); + + //----------------------------------------------------------------- + // getter + public LiveData getCurPageNo() { + return this.mCurPageNo; + } + + public LiveData> getPages() { + return this.mPages; + } + + public PaintModelContainer getPaintModelContainer() { + return paintModelContainer; + } + + //----------------------------------------------------------------- + //----------------------------------------------------------------- + // init + public void init(Acanthus acanthus) { + paintModelContainer = new PaintModelContainer(acanthus); + + // ページの情報初期化 + paintModelContainer.getPageOperationModel().initEditingPageNo(mCurPageNo); + paintModelContainer.getPageConnectionModel().getPage(mCurPageId); + paintModelContainer.getPageConnectionModel().getPageSize(mPageSize); + } + + //----------------------------------------------------------------- + // 操作するページを切り替える + public void switchToEditPageRequest(MotionEvent event) { + PageOperationModel pageOperationModel = paintModelContainer.getPageOperationModel(); + 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); + updatePrePageId(); + } + + //----------------------------------------------------------------- + // 前のページに戻る + public void toBackEditingPage() { + PageOperationModel pageOperationModel = paintModelContainer.getPageOperationModel(); + PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); + + pageOperationModel.decrementPageNo(mCurPageNo); + pageConnectionModel.getPage(mCurPageId); + updatePrePageId(); + } + //----------------------------------------------------------------- + // ひとつ前のページを記憶する + private void updatePrePageId(){ + PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); +// pageConnectionModel.getPrePageId(); + } + + //----------------------------------------------------------------- + //----------------------------------------------------------------- + // ページの追加通信リクエスト + public void addPageRequest() { + PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); + + pageConnectionModel.addPage(); + pageConnectionModel.getPageSize(mPageSize); + Log.d("pageSize:", mPageSize.getValue().toString()); + } + + //----------------------------------------------------------------- + // ページ削除 + 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()); + + } + + //----------------------------------------------------------------- + // ページのサムネイル取得 + public void getPageThumbnailRequest() { + PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); + + pageConnectionModel.getPageThumb(mPages); + } + //----------------------------------------------------------------- + // + public void getPageSizeRequest() { + paintModelContainer.getPageConnectionModel().getPageSize(mPageSize); + } + + //----------------------------------------------------------------- + //----------------------------------------------------------------- + // 一定間隔でサーバー上の筆跡を取得する(GET) + @Override + public void run() { + paintModelContainer.getPageConnectionModel().getPageSize(mPageSize); + } + + //----------------------------------------------------------------- + // + public void stop() { + thread.shutdown(); + } +} diff --git a/app/src/main/res/layout/activity_page.xml b/app/src/main/res/layout/activity_page.xml index 3f334eb..1c75869 100644 --- a/app/src/main/res/layout/activity_page.xml +++ b/app/src/main/res/layout/activity_page.xml @@ -8,25 +8,83 @@ + app:layout_constraintTop_toTopOf="parent">