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 a2bcb74..261e17e 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/Acanthus.java +++ b/app/src/main/java/org/ntlab/acanthus_client/Acanthus.java @@ -25,6 +25,7 @@ private Integer aid; private Integer editingPageNo = 1; private Integer editingPageId = 0; + private Integer prePageId = 0; private Animation currentAnimation; private Collection animationJsonList = new ArrayList<>(); @@ -87,6 +88,10 @@ return this.editingPageId; } + public Integer getPrePageId() { + return this.prePageId; + } + public Animation getCurrentAnimation() { return currentAnimation; } @@ -152,6 +157,10 @@ this.editingPageId = editingPageId; } + public void setPrePageId(Integer prePageId) { + this.prePageId = prePageId; + } + //HomeViewModelでしようするためのsetter public void setAnimationJsonList(Collection sentAnimationJsonList) { this.animationJsonList.clear(); 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 57741c6..7c680f8 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 @@ -6,17 +6,13 @@ import android.content.Intent; import android.os.Bundle; -import android.util.Log; -import android.view.MotionEvent; import android.view.View; import android.widget.Button; import android.widget.TextView; -import android.widget.Toast; import org.ntlab.acanthus_client.Acanthus; import org.ntlab.acanthus_client.R; import org.ntlab.acanthus_client.databinding.ActivityPaintBinding; -import org.ntlab.acanthus_client.entities.Position; import org.ntlab.acanthus_client.entities.Stroke; import java.util.Collection; @@ -26,7 +22,10 @@ public class PaintActivity extends AppCompatActivity { private PaintCanvas paintCanvas; + private PaintOnionCanvas paintOnionCanvas; + private PaintToolBar paintToolBar; + private PaintScreenShot paintScreenShot; private ActivityPaintBinding binding; private PaintViewModel paintViewModel; @@ -56,14 +55,13 @@ @Override public void onClick(View v) { //bottonタップで表示されてたら非表示にする。 - if(buttonView) { + 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 { + } else { findViewById(R.id.capture).setVisibility(View.VISIBLE); findViewById(R.id.image).setVisibility(View.VISIBLE); findViewById(R.id.textView3).setVisibility(View.VISIBLE); @@ -85,7 +83,7 @@ //----------------------------------------------------------------- // 描画全体のクリア public void onClickClear(View view) { - paintCanvas.clearCanvas(); + paintCanvas.deleteStroke(); } //----------------------------------------------------------------- @@ -113,7 +111,10 @@ setContentView(binding.getRoot()); paintCanvas = (PaintCanvas) findViewById(R.id.myCanvas); - paintCanvas.setPaintViewModel(paintViewModel); + paintCanvas.init(paintViewModel); + + paintOnionCanvas = findViewById(R.id.paintOnionCanvas); + paintOnionCanvas.init(paintViewModel); paintScreenShot = new PaintScreenShot(this); paintToolBar = new PaintToolBar(this, paintCanvas); @@ -126,18 +127,23 @@ //----------------------------------------------------------------- // private void startObserve() { - paintViewModel.getPageNo().observe(this, new Observer() { - @Override - public void onChanged(Integer i) { - binding.buttonAddPage.setText(String.valueOf(i)); - } - }); + + // 現在のStrokeに変更がある度に取得 paintViewModel.getStroke().observe(this, new Observer>() { @Override public void onChanged(Collection strokes) { - paintCanvas.getCanvas(); + paintCanvas.updateCanvas(); } }); + + // 前のStrokeに変更がある度に取得 + paintViewModel.getPreStrokes().observe(this, new Observer>() { + @Override + public void onChanged(Collection strokes) { + paintOnionCanvas.updateCanvas(); + } + }); + //1時的コメントアウトここから // paintViewModel.getmStrokeNo().observe(this, new Observer() { // @Override 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 bfd61a5..bfd5295 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 @@ -19,9 +19,6 @@ import java.io.ByteArrayOutputStream; import java.util.ArrayList; import java.util.Base64; -import java.util.Collection; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; @@ -30,20 +27,29 @@ // 描画キャンバスの本体 public class PaintCanvas extends View { - private Path path; - private Path clonepath; - private Path latestpath; - private Paint paint; - private Paint clonepaint; - private Paint latestpaint; + private PaintViewModel paintViewModel; + + //----------------------------------------------------------------- + private Path path = new Path(); + private Paint paint = new Paint(); + + //----------------------------------------------------------------- + // ローカル private ArrayList paints = new ArrayList<>(); private ArrayList paths = new ArrayList<>(); - private ArrayList clonepaints = new ArrayList<>(); - private ArrayList clonepaths = new ArrayList<>(); - private PaintViewModel paintViewModel; - private ScheduledThreadPoolExecutor thread = new ScheduledThreadPoolExecutor(1); + + //----------------------------------------------------------------- + // サーバー + private ArrayList clonePaints = new ArrayList<>(); + private ArrayList clonePaths = new ArrayList<>(); + + //----------------------------------------------------------------- + private PaintOnionCanvas paintOnionCanvas; + private Canvas curCanvas; private Bitmap image; + + //----------------------------------------------------------------- private int curw; private int curh; private int curoldw; @@ -56,47 +62,31 @@ public PaintCanvas(Context context, @Nullable AttributeSet attrs) { super(context, attrs); + //----------------------------------------------------------------- pen = new Pen(255, 0, 0, 0, 20); - //pen =new Pen(Color.BLACK,20);//新しくPenクラスを作り色と幅の値を設定 - path = new Path(); // 図形描画 - paths.add(path); - /// - clonepath = new Path(); // 図形描画 - latestpath = new Path(); // 図形描画 - paint = new Paint();//筆の種類 - paints.add(paint); - /// - clonepaint = new Paint();//筆の種類 - latestpaint = new Paint();//筆の種類 + paint = new Paint(); + paint.setColor(Color.argb(pen.getAlpha(), pen.getRed(), pen.getGreen(), pen.getBlue()));//色の指定 paint.setColor(Color.argb(pen.getAlpha(), pen.getRed(), pen.getGreen(), pen.getBlue()));//色の指定 paint.setStyle(Paint.Style.STROKE);//線をひく paint.setStrokeWidth(pen.getThickness());//幅 - clonepaint.setColor(Color.RED);//色の指定 - clonepaint.setStyle(Paint.Style.STROKE);//線をひく - clonepaint.setStrokeWidth(20);//幅 - latestpaint.setColor(Color.GREEN);//色の指定 - latestpaint.setStyle(Paint.Style.STROKE);//線をひく - latestpaint.setStrokeWidth(20);//幅 - //image = Bitmap.createBitmap(640, 480, Bitmap.Config.ARGB_8888); - //curCanvas = new Canvas(image); + //----------------------------------------------------------------- + paths.add(new Path()); + paints.add(paint); invalidate(); } //----------------------------------------------------------------- // getter - public Canvas getCurCanvas() { - return curCanvas; - } - public Pen getPen() { return pen; } //----------------------------------------------------------------- - // setter - public void setPaintViewModel(PaintViewModel paintViewModel) { + //----------------------------------------------------------------- + // init + public void init(PaintViewModel paintViewModel) { this.paintViewModel = paintViewModel; } @@ -107,25 +97,23 @@ protected void onDraw(Canvas canvas) { super.onDraw(curCanvas); canvas.drawColor(0xFFFFFFFF); - paint.setColor(Color.argb(pen.getAlpha(), pen.getRed(), pen.getGreen(), pen.getBlue())); - paint.setStrokeWidth(pen.getThickness()); - for (int i = 0; i < clonepaths.toArray().length; i++) { + + 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) { - } - try { - canvas.drawPath(clonepaths.get(i), clonepaints.get(i)); - curCanvas.drawPath(clonepaths.get(i), clonepaints.get(i)); - } catch (IndexOutOfBoundsException ex) { + } + 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) { } } } - //canvas.drawPath(clonepath, clonepaint); - //curCanvas.drawPath(clonepath, clonepaint); //----------------------------------------------------------------- // 描画操作 (条件分岐:押したとき、動かしたとき、放した時) @@ -139,27 +127,38 @@ switch (event.getAction()) { case MotionEvent.ACTION_DOWN: Log.d("motion", "+++++++++++++++++++++++++++++++++++++++down======================================================"); - onTouched(x, y); + + paths.add(new Path()); + + paint = new Paint(); + paint.setColor(Color.argb(pen.getAlpha(), pen.getRed(), pen.getGreen(), pen.getBlue()));//色の指定 + paint.setStyle(Paint.Style.STROKE);//線をひく + paint.setStrokeWidth(pen.getThickness()); + + paints.add(paint); + + + if (0 < paths.size()) + onTouched(paths.get(paths.size() - 1), x, y); + paintViewModel.setmStrokeNo(); paintViewModel.addLocalStrokeRequest(x, y, Color.argb(pen.getAlpha(), pen.getRed(), pen.getGreen(), pen.getBlue()), pen.getThickness()); - //paintViewModel.addPositionLocal(x, y); + break; case MotionEvent.ACTION_MOVE: Log.d("motion", "move"); - onTouchedMove(x, y); + if (0 < paths.size()) + onTouchedMove(paths.get(paths.size() - 1), x, y); + paintViewModel.addPositionRequest(x, y); break; case MotionEvent.ACTION_UP: Log.d("motion", "=====================================up======================================================"); paintViewModel.addPositionRequestFirst(); - path = new Path(); - paint = new Paint(); - paint.setColor(Color.argb(pen.getAlpha(), pen.getRed(), pen.getGreen(), pen.getBlue()));//色の指定 - paint.setStyle(Paint.Style.STROKE);//線をひく - paths.add(path); - paints.add(paint); + + break; } @@ -169,67 +168,52 @@ //----------------------------------------------------------------- // 描画クリア - public void clearCanvas() { + public void deleteStroke() { paintViewModel.deleteStrokesRequest(); - paths.clear(); - path.reset(); - paints.clear(); - clonepaths.clear(); - clonepaints.clear(); - clonepath.reset(); + + clearCanvas(); + invalidate(); - //clonepath.reset(); - //latestpath.reset(); - //invalidate(); + } + + //----------------------------------------------------------------- + // ページ切り替え時に描画をリセット + public void clearCanvas() { + for (Path p : paths) { + p.reset(); + invalidate(); + } + paths.clear(); + paints.clear(); + + for (Path p : clonePaths) { + p.reset(); + invalidate(); + } + clonePaths.clear(); + clonePaints.clear(); + + path.reset(); + + invalidate(); } //----------------------------------------------------------------- // 押した瞬間の処理 - private void onTouched(float x, float y) { + private void onTouched(Path path, float x, float y) { path.moveTo(x, y); invalidate(); } //----------------------------------------------------------------- // 押した後動かした時の処理 - private void onTouchedMove(float x, float y) { + private void onTouchedMove(Path path, float x, float y) { path.lineTo(x, y); invalidate(); } //----------------------------------------------------------------- //----------------------------------------------------------------- - // 押した瞬間の処理 - private void onTouched2(float x, float y) { - //path2 = new Path(); - clonepath.moveTo(x, y); - invalidate(); - } - - //----------------------------------------------------------------- - // 押した後動かした時の処理 - private void onTouchedMove2(float x, float y) { - clonepath.lineTo(x, y); - invalidate(); - } - - //----------------------------------------------------------------- - //----------------------------------------------------------------- - // 押した瞬間の処理 - private void latestOnTouched(float x, float y) { - //path2 = new Path(); - latestpath.moveTo(x, y); - invalidate(); - } - - //----------------------------------------------------------------- - // 押した後動かした時の処理 - private void latestOnTouchedMove(float x, float y) { - latestpath.lineTo(x, y); - invalidate(); - } - - @RequiresApi(api = Build.VERSION_CODES.O) public void canvassc() { ByteArrayOutputStream stream = new ByteArrayOutputStream(); @@ -248,80 +232,69 @@ } Log.d("encode:", encode.substring(4000 * stringcnt, encode.length())); image.recycle(); - ResetImage(); + resetImage(); } + //----------------------------------------------------------------- //imageの変数をリセット - protected void ResetImage() { + protected void resetImage() { super.onSizeChanged(curw, curh, curoldw, curoldh); image = Bitmap.createBitmap(curw, curh, Bitmap.Config.ARGB_8888); curCanvas = new Canvas(image); curCanvas.drawColor(0xFFFFFFFF); } - //imageの変数を初期化 - //SSする度に実行 + //----------------------------------------------------------------- + // imageの変数を初期化 + // SSする度に実行 @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + curw = w; curh = h; curoldw = oldw; curoldh = oldh; - super.onSizeChanged(w, h, oldw, oldh); + image = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); curCanvas = new Canvas(image); curCanvas.drawColor(0xFFFFFFFF); } - + //----------------------------------------------------------------- //描写するための取得 - public void getCanvas() { + public void updateCanvas() { int cnt = 0; - clonepath.reset(); + + for (Path p : clonePaths) p.reset(); + invalidate(); + for (Stroke s : paintViewModel.getStroke().getValue()) { - clonepaint = new Paint(); - clonepath = new Path(); - clonepaint.setColor(Color.argb(Color.alpha(s.getColor()), Color.red(s.getColor()), Color.green(s.getColor()), Color.blue(s.getColor())));//色の指定 - clonepaint.setStrokeWidth(s.getThickness()); - clonepaint.setStyle(Paint.Style.STROKE);//線をひく - clonepaints.add(clonepaint); - clonepaths.add(clonepath); + + Paint paint = new Paint(); + paint.setColor(Color.argb(Color.alpha(s.getColor()), Color.red(s.getColor()), Color.green(s.getColor()), Color.blue(s.getColor())));//色の指定 + paint.setStrokeWidth(s.getThickness()); + paint.setStyle(Paint.Style.STROKE);//線をひく + + clonePaints.add(paint); + clonePaths.add(new Path()); + for (Position p : s.getPositions()) { if (cnt == 0) { - onTouched2(p.getX(), p.getY()); + onTouched(clonePaths.get(clonePaths.size() - 1), p.getX(), p.getY()); } else { if (p.getX() == -1) { } else { - onTouchedMove2(p.getX(), p.getY()); + onTouchedMove(clonePaths.get(clonePaths.size() - 1), p.getX(), p.getY()); } } cnt++; } cnt = 0; } - //paintViewModel.deleteStroke(); + paintViewModel.deleteStroke(); } - //最新の筆跡を取得して描画 -// public void latestPositionWrite(Collection positions){ -// int cnt = 0; -// latestpath.reset(); -// invalidate(); -// for(Position p: positions){ -// Log.d("", "latestPositionWrite: "+positions.size()); -// Log.d("", "latestPositionWrite: cnt"+cnt); -// if (cnt == 0) { -// //latestOnTouched(p.getX(), p.getY()); -// Log.d("", "latestPositionWrite: "+p.getX()+","+ p.getY()); -// } else { -// if (p.getX() == -1) { -// } else { -// //latestOnTouchedMove(p.getX(), p.getY()); -// } -// } -// cnt++; -// } -// paintViewModel.deletePosition(); -// } + //----------------------------------------------------------------- } \ No newline at end of file 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 new file mode 100644 index 0000000..f9002e7 --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintOnionCanvas.java @@ -0,0 +1,89 @@ +package org.ntlab.acanthus_client.views.paint; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Path; +import android.os.health.PackageHealthStats; +import android.util.AttributeSet; +import android.view.View; + +import androidx.annotation.Nullable; + +import org.ntlab.acanthus_client.entities.Position; +import org.ntlab.acanthus_client.entities.Stroke; + +import java.lang.reflect.Array; +import java.util.ArrayList; +import java.util.ConcurrentModificationException; +import java.util.List; + +public class PaintOnionCanvas extends View { + + //----------------------------------------------------------------- + private Path path = new Path(); + private Paint paint = new Paint(); + private PaintViewModel paintViewModel; + + private Canvas canvas; + + //----------------------------------------------------------------- + //----------------------------------------------------------------- + public PaintOnionCanvas(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + } + + //----------------------------------------------------------------- + // + public void init(PaintViewModel paintViewModel) { + this.paintViewModel = paintViewModel; + + paint.setColor(Color.argb(40, 255, 0, 0)); + paint.setStyle(Paint.Style.STROKE); + paint.setStrokeWidth(20); + + invalidate(); + } + + //----------------------------------------------------------------- + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + + canvas.drawPath(path, paint); + } + + //----------------------------------------------------------------- + // + public void updateCanvas() { + int cnt = 0; + + clearCanvas(); + + for (Stroke s : paintViewModel.getPreStrokes().getValue()) { + for (Position p : s.getPositions()) { + if (cnt == 0) { + path.moveTo(p.getX(), p.getY()); + } else { + if (p.getX() != -1) + path.lineTo(p.getX(), p.getY()); + } + invalidate(); + cnt++; + } + cnt = 0; + } + paintViewModel.deletePreStroke(); + } + + + //----------------------------------------------------------------- + // + public void clearCanvas() { + path.reset(); + invalidate(); + } + //----------------------------------------------------------------- + +} 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 70dc7f4..e9a30b5 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 @@ -8,14 +8,11 @@ import androidx.annotation.RequiresApi; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentTransaction; import com.google.android.material.bottomnavigation.BottomNavigationView; import org.ntlab.acanthus_client.Acanthus; import org.ntlab.acanthus_client.R; -import org.ntlab.acanthus_client.entities.Pen; -import org.ntlab.acanthus_client.views.MainActivity; import org.ntlab.acanthus_client.views.paint.page.PageActivity; //----------------------------------------------------------------- @@ -50,7 +47,7 @@ //----------------------------------------------------------------- // case R.id.navigation_clear: - paintCanvas.clearCanvas(); + paintCanvas.deleteStroke(); return true; //----------------------------------------------------------------- // @@ -61,6 +58,7 @@ //----------------------------------------------------------------- case R.id.navigation_page: paintCanvas.canvassc(); + paintCanvas.clearCanvas(); transitionPageActivity(appCompatActivity); return true; 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 f696c87..12687bf 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 @@ -28,10 +28,13 @@ 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; @@ -43,6 +46,11 @@ //----------------------------------------------------------------- // getter + + public LiveData> getPreStrokes() { + return this.mPreStroke; + } + public MutableLiveData> getStroke() { return this.mStrokes; } @@ -59,11 +67,6 @@ return paintModelContainer; } - public MutableLiveData> getMlatestPosition() { - return this.mlatestPosition; - } - - //----------------------------------------------------------------- //----------------------------------------------------------------- // init @@ -75,11 +78,11 @@ mlatestPosition.setValue(new ArrayList<>()); mlatestPosition.getValue().add(new Position()); // ページの情報初期化 + paintModelContainer.getPageOperationModel().initEditingPageNo(mCurPageNo); paintModelContainer.getPageConnectionModel().getPage(mCurPageId); paintModelContainer.getPageConnectionModel().getPageSize(mPageSize); - thread.scheduleWithFixedDelay(this, 50L, 100L, TimeUnit.MILLISECONDS); - //thread.scheduleWithFixedDelay(this::latestStrokeNo, 50L, 50L, TimeUnit.MILLISECONDS); + thread.scheduleWithFixedDelay(this, 50L, 1000L, TimeUnit.MILLISECONDS); } //----------------------------------------------------------------- @@ -146,6 +149,7 @@ pageOperationModel.incrementPageNo(mCurPageNo, mPageSize.getValue()); pageConnectionModel.getPage(mCurPageId); + updatePrePageId(); } //----------------------------------------------------------------- @@ -156,6 +160,14 @@ pageOperationModel.decrementPageNo(mCurPageNo); pageConnectionModel.getPage(mCurPageId); + updatePrePageId(); + } + + //----------------------------------------------------------------- + // ひとつ前のページを記憶する + private void updatePrePageId(){ + PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); + pageConnectionModel.getPrePageId(); } //----------------------------------------------------------------- @@ -196,13 +208,13 @@ //----------------------------------------------------------------- //----------------------------------------------------------------- - // + // 筆跡の削除 public void deleteStroke() { this.mStrokes.getValue().clear(); } - public void deletePosition() { - this.mlatestPosition.getValue().clear(); + public void deletePreStroke(){ + mPreStroke.getValue().clear(); } //----------------------------------------------------------------- @@ -212,18 +224,16 @@ } //----------------------------------------------------------------- - //最新のStrokePositionを取得 - public void getPosition(Integer latestStrokeNo) { - paintModelContainer.getPaintConnectionModel().getLatestStrokePosition(latestStrokeNo, mlatestPosition); - //Log.d("debug", "run: "+mlatestPosition.getValue()); - } - - //----------------------------------------------------------------- //----------------------------------------------------------------- // 一定間隔でサーバー上の筆跡を取得する(GET) @Override public void run() { + + // 現在のStrokeと1ページ前のStrokeを取得 paintModelContainer.getPaintConnectionModel().getStrokes(mStrokes); + + paintModelContainer.getPaintConnectionModel().getPreStrokes(mPreStroke); + 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 7acd54f..066f625 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 @@ -104,7 +104,7 @@ //----------------------------------------------------------------- // ページ情報を取得するリクエスト - public void getPage(MutableLiveData pageId) { + public void getPage(MutableLiveData mPageId) { final PagesRest pagesRest = retrofit.create(PagesRest.class); Call call = pagesRest.getPage(acanthus.getAid(), acanthus.getEditingPageNo()); @@ -112,10 +112,11 @@ @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()); + mPageId.setValue(response.body().getPid()); Log.d("pid", acanthus.getEditingPageId().toString()); } @@ -152,4 +153,32 @@ //----------------------------------------------------------------- + // 前のページの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) { + + } + }); + + } + } + +//----------------------------------------------------------------- } 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 2a0ac7c..5d6aad6 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 @@ -47,6 +47,12 @@ } //----------------------------------------------------------------- + // 編集中のページ番号を初期化する + public void initEditingPageNo(MutableLiveData mCurPageNo) { + mCurPageNo.setValue(acanthus.getEditingPageNo()); + } + + //----------------------------------------------------------------- //----------------------------------------------------------------- // ページを進める public void incrementPageNo(MutableLiveData mPageNo, Integer pageSize) { 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 922918e..e23c35a 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 @@ -1,6 +1,5 @@ package org.ntlab.acanthus_client.views.paint.models; -import android.graphics.Color; import android.util.Log; import android.view.VelocityTracker; @@ -76,7 +75,6 @@ call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { - if (response.isSuccessful()); } @Override @@ -134,6 +132,32 @@ } //----------------------------------------------------------------- + // 前のページの全strokeを取得する + public void getPreStrokes(MutableLiveData> preStrokes) { + + // 前のページが存在するときのみ + if (1 < acanthus.getEditingPageNo()) { + + final StrokesRest strokesRest = retrofit.create(StrokesRest.class); + + //----------------------------------------------------------------- + // 筆跡追加API + Call> call = strokesRest.getStrokes(acanthus.getAid(), acanthus.getPrePageId(), 0); + call.enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + if (response.isSuccessful()) preStrokes.setValue(response.body()); + } + + @Override + public void onFailure(Call> call, Throwable t) { + Log.d("a", "onFailure: "); + } + }); + } + } + + //----------------------------------------------------------------- // 現在のstrokeNoを取得する public void getStrokeNo(MutableLiveData mStrokeNo) { final LayersRest layersRest = retrofit.create(LayersRest.class); @@ -153,25 +177,6 @@ } }); } - //最新のStrokePositionを取得する - public void getLatestStrokePosition(Integer latestStrokeNo,MutableLiveData> mlatestPosition ){ - final StrokesRest strokesRest = retrofit.create(StrokesRest.class); - - //----------------------------------------------------------------- - // 現在の筆跡番号の取得 - Call> call = strokesRest.getPositions(acanthus.getAid(), latestStrokeNo); - call.enqueue(new Callback>() { - @Override - public void onResponse(Call> call, Response> response) { - if (response.isSuccessful())mlatestPosition.setValue(response.body()); - } - - @Override - public void onFailure(Call> call, Throwable t) { - - } - }); - } //----------------------------------------------------------------- // "Clear"ボタンによる描画の全消去 / サーバー側の筆跡全削除 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 10686fa..8b7dc37 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 @@ -116,7 +116,6 @@ startObserve(); - thread.scheduleWithFixedDelay(this, 1000L, 2000L, TimeUnit.MILLISECONDS); } diff --git a/app/src/main/res/layout/activity_paint.xml b/app/src/main/res/layout/activity_paint.xml index dd4c6ff..7d0ecc4 100644 --- a/app/src/main/res/layout/activity_paint.xml +++ b/app/src/main/res/layout/activity_paint.xml @@ -20,49 +20,14 @@ app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="1.0" /> -