diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a8a64b0..aaab359 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -16,6 +16,7 @@ android:theme="@style/Theme.Acanthus" android:usesCleartextTraffic="true"> + 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 b8f859b..8adedf9 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/Acanthus.java +++ b/app/src/main/java/org/ntlab/acanthus_client/Acanthus.java @@ -22,7 +22,7 @@ //----------------------------------------------------------------- private Integer aid; private Animation currentAnimation; - private Collection animationJsonList; + private Collection animationJsonList = new ArrayList<>(); //----------------------------------------------------------------- // getter diff --git a/app/src/main/java/org/ntlab/acanthus_client/entities/AnimationJson.java b/app/src/main/java/org/ntlab/acanthus_client/entities/AnimationJson.java index 1c9421e..ba82818 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/entities/AnimationJson.java +++ b/app/src/main/java/org/ntlab/acanthus_client/entities/AnimationJson.java @@ -7,10 +7,13 @@ // アニメーション public class AnimationJson { private Integer aid; - private Integer ownerUid; private String animationName; - private ArrayList editors; + private Integer owner; + //private ArrayList editors; + private Collection editorNames; + private Collection editorIds; private String createdDate; + private String lastUpdate; //----------------------------------------------------------------- public AnimationJson() { @@ -20,10 +23,23 @@ public Integer getAid() {return this.aid;} - public ArrayList getEditor(){return this.editors;} + //public ArrayList getEditor(){return this.editors;} + + + public Collection getEditorNames() { + return editorNames; + } + + public Collection getEditorIds() { + return editorIds; + } public String getCreatedDate(){return this.createdDate;} + public String getLastUpdate() { + return lastUpdate; + } + public void setAid(Integer aid) { this.aid = aid; } @@ -32,11 +48,15 @@ this.animationName = name; } - public void setOwnerUid(Integer uid) { - this.ownerUid = uid; + public void setOwner(Integer uid) { + this.owner = uid; } - public void addEditors(Editor editor) { - this.editors.add(editor); + public void setLastUpdate(String lastUpdate) { + this.lastUpdate = lastUpdate; } + + // public void addEditors(Editor editor) { +// this.editors.add(editor); +// } } 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 c33928a..cd1eaf2 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 @@ -12,8 +12,11 @@ import retrofit2.http.Field; import retrofit2.http.FormUrlEncoded; import retrofit2.http.GET; +import retrofit2.http.HTTP; +import retrofit2.http.Headers; import retrofit2.http.POST; import retrofit2.http.Path; +import retrofit2.http.Query; //----------------------------------------------------------------- // RestAPI: /gallery/{aid}/pageMap/{pid}/layers/{layerNo}/ @@ -46,7 +49,7 @@ //----------------------------------------------------------------- // @DELETE("gallery/{aid}/pageMap/0/layers/0/strokes") - Call deleteStrokes(@Path("aid") Integer aid, @Field("uid") Integer uid); + Call deleteStrokes(@Path("aid") Integer aid, @Query("uid") Integer uid); //----------------------------------------------------------------- // diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/animation/AnimationActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/animation/AnimationActivity.java index c5f65f5..bc85a71 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/animation/AnimationActivity.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/animation/AnimationActivity.java @@ -2,17 +2,66 @@ import androidx.appcompat.app.AppCompatActivity; +import android.app.Activity; +import android.content.Intent; import android.os.Bundle; -import org.ntlab.acanthus_client.R; +import android.view.View; +import android.widget.Button; +import org.ntlab.acanthus_client.Acanthus; +import org.ntlab.acanthus_client.R; +import org.ntlab.acanthus_client.databinding.ActivityPaintBinding; +import org.ntlab.acanthus_client.views.animation_detail.AnimationDetailActivity; + +// 表示ページ public class AnimationActivity extends AppCompatActivity { + private AnimationCanvas animationCanvas; + private ActivityPaintBinding binding; + private View view; + + //animationCanvasの表示 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_animation); - AnimationCanvas animation = new AnimationCanvas(this); - setContentView(animation); + animationCanvas = this.findViewById(R.id.animationMyCanvas); + //アニメーションの再生停止 + Button buttonPlayback = findViewById(R.id.button_playback); + buttonPlayback.setOnClickListener(new View.OnClickListener(){ + @Override + public void onClick(View v) { + animationCanvas.onClickPlayback(); + } + }); + + //最初に戻す + Button buttonReset = findViewById(R.id.button_reset); + buttonReset.setOnClickListener(new View.OnClickListener(){ + @Override + public void onClick(View v) { + animationCanvas.resetAnimationPage(); + } + }); + + //閉じる + Button buttonClose = findViewById(R.id.button_close); + buttonClose.setOnClickListener(new View.OnClickListener(){ + @Override + public void onClick(View v) { + finish(); + } + }); + + Button buttonDetail = findViewById(R.id.button_detail); + buttonDetail.setOnClickListener(new View.OnClickListener(){ + @Override + public void onClick(View v) { + Intent intent = new Intent(AnimationActivity.this, AnimationDetailActivity.class); + startActivity(intent); + } + }); + } } \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/animation/AnimationCanvas.java b/app/src/main/java/org/ntlab/acanthus_client/views/animation/AnimationCanvas.java index 9241984..73aa4c4 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/animation/AnimationCanvas.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/animation/AnimationCanvas.java @@ -2,53 +2,82 @@ import android.content.Context; import android.graphics.Canvas; -import android.graphics.Color; import android.graphics.Paint; +import android.os.Handler; +import android.os.Looper; +import android.util.AttributeSet; import android.view.View; import org.ntlab.acanthus_client.Acanthus; -import org.ntlab.acanthus_client.entities.Position; -import org.ntlab.acanthus_client.entities.Stroke; -import java.util.ArrayList; - -import retrofit2.Retrofit; +import java.util.Timer; +import java.util.TimerTask; public class AnimationCanvas extends View { - private Retrofit retrofit; private Acanthus acanthus; - private AnimationViewModel animation = new AnimationViewModel(); + private AnimationViewModel animationViewModel = new AnimationViewModel(); private Paint paint = new Paint(); - public AnimationCanvas(Context context) { - super(context); + //タイマー用の変数 + private Timer timer; + private CountUpTimerTask timerTask; + private Handler handler = new Handler(Looper.getMainLooper()); + private int msec = 100; + + //ページ指定用の変数 + private int pageNo = 0; + + + public AnimationCanvas(Context context, AttributeSet attrs) { + super(context, attrs); } -/* - @Override - protected void onDraw(Canvas canvas) { - super.onDraw(canvas); - Stroke stroke = retrofit.create(Stroke.class); - paint.setStrokeWidth(stroke.getThickness()); - paint.setColor(stroke.getColor()); - ArrayList pts = stroke.getPositions(); - //canvas.drawLines(pts, paint); - } -*/ - //ダミーです。 + @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); - //canvas.drawRect(100, 100, 200, 300, paint); - //canvas.drawRect(300, 200, 400, 400, paint); - //canvas.drawRect(500, 300, 600, 500, paint); - - //Stroke stroke = retrofit.create(Stroke.class); - paint.setStrokeWidth(20); - paint.setColor(Color.RED); - float pts[] = {100, 1000, 500, 100, 500, 100, 900, 1000, 900, 1000, 250, 450, 250, 450, 800, 450}; - canvas.drawLines(pts, paint); + //ダミーです。 + //100msごとに1pxずつ3つ目の四角が下に降りる + canvas.drawRect(100, 100, 200, 300, paint); + canvas.drawRect(300, 200, 400, 400, paint); + canvas.drawRect(500, 100 + pageNo, 600, 300 + pageNo, paint); } + //アニメーションの再生停止 + public void onClickPlayback(){ + if(timer != null){ + //timerの終了 + timer.cancel(); + timer = null; + } + else{ + //timerの生成 + this.timer = new Timer(); + this.timerTask = new CountUpTimerTask(); + this.timer.schedule(timerTask,0, msec);//スケジュールを100ms毎に設定する。 + } + } + + //ページを進める + class CountUpTimerTask extends TimerTask{ + @Override + public void run(){ + handler.post(new Runnable(){ + public void run(){ + pageNo++; + postInvalidate(); + } + }); + } + } + + //アニメーションを最初のページに戻す。 + public void resetAnimationPage(){ + pageNo = 0; + postInvalidate(); + } + + + } diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/animation/AnimationViewModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/animation/AnimationViewModel.java index 69a41a1..8b496c2 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/animation/AnimationViewModel.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/animation/AnimationViewModel.java @@ -38,10 +38,11 @@ public class AnimationViewModel extends ViewModel { private Retrofit retrofit; private Acanthus acanthus; - // getStrokes + + // StrokesRestをGETする。 public void getAnimationStrokes() { final StrokesRest strokesRest = retrofit.create(StrokesRest.class); - Call> call = strokesRest.getStrokes(acanthus.getAid()); - + Call> strokes = strokesRest.getStrokes(acanthus.getAid()); } + } diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/animation_detail/AnimationDetailActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/animation_detail/AnimationDetailActivity.java new file mode 100644 index 0000000..0c73651 --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/animation_detail/AnimationDetailActivity.java @@ -0,0 +1,47 @@ +package org.ntlab.acanthus_client.views.animation_detail; + +import androidx.appcompat.app.AppCompatActivity; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; + +import org.ntlab.acanthus_client.R; +import org.ntlab.acanthus_client.databinding.ActivityPaintBinding; +import org.ntlab.acanthus_client.views.animation.AnimationActivity; +import org.ntlab.acanthus_client.views.animation.AnimationCanvas; +import org.ntlab.acanthus_client.views.main_menu_ui.mypage.MyPageFragment; + +public class AnimationDetailActivity extends AppCompatActivity { + + private AnimationCanvas animationDetails; + private View view; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_animation_detail); + + //画面を閉じる + Button returnButton = findViewById(R.id.return_button); + returnButton.setOnClickListener(v -> finish()); + + //作成者のページに移動(今は仮でアニメーション画面へ) + Button buttonEditor1 = findViewById(R.id.button_editor1); + buttonEditor1.setOnClickListener((View v) -> { + Intent intent = new Intent(AnimationDetailActivity.this, AnimationActivity.class); + startActivity(intent); + } + ); + + //作成者のページに移動(今は仮でアニメーション画面へ) + Button buttonEditor2 = findViewById(R.id.button_editor2); + buttonEditor2.setOnClickListener((View v) -> { + Intent intent = new Intent(AnimationDetailActivity.this, AnimationActivity.class); + startActivity(intent); + } + ); + + } +} diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/animation_detail/AnimationDetailViewModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/animation_detail/AnimationDetailViewModel.java new file mode 100644 index 0000000..71bc703 --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/animation_detail/AnimationDetailViewModel.java @@ -0,0 +1,17 @@ +package org.ntlab.acanthus_client.views.animation_detail; + +import androidx.lifecycle.ViewModel; + +import org.ntlab.acanthus_client.Acanthus; +import org.ntlab.acanthus_client.entities.Stroke; +import org.ntlab.acanthus_client.resources.gallery.StrokesRest; + +import java.util.Collection; + +import retrofit2.Call; +import retrofit2.Retrofit; + +public class AnimationDetailViewModel { + private Retrofit retrofit; + private Acanthus acanthus; +} diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/home/HomeViewModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/home/HomeViewModel.java index bde7820..864d6e4 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/home/HomeViewModel.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/home/HomeViewModel.java @@ -54,9 +54,11 @@ call.enqueue(new Callback>() { @Override public void onResponse(Call> call, Response> response) { - Collection animList = response.body(); - animationMutableLiveData.setValue(animList); - acanthus.setAnimationJsonList(animList); + if (response.isSuccessful()){ + Collection animList = response.body(); + animationMutableLiveData.setValue(animList); + acanthus.setAnimationJsonList(animList); + } } @Override diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/home/ListAnimationViewAdapter.java b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/home/ListAnimationViewAdapter.java index 8394294..a0f6b23 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/home/ListAnimationViewAdapter.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/home/ListAnimationViewAdapter.java @@ -37,9 +37,9 @@ for(AnimationJson animationJson: animationJsons){ this.titles.add(animationJson.getAnimationName()); ArrayList editors = new ArrayList<>(); - for(Editor editor: animationJson.getEditor()){ - editors.add(editor.getEditorAccount().getName()); - } +// for(Editor editor: animationJson.getEditor()){ +// editors.add(editor.getEditorAccount().getName()); +// } animationEditors.add(editors); this.createdDates.add(animationJson.getCreatedDate()); } diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/mypage/InvitedConnectionModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/mypage/InvitedConnectionModel.java index 20d1ad8..3ceb9a0 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/mypage/InvitedConnectionModel.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/mypage/InvitedConnectionModel.java @@ -6,9 +6,11 @@ import org.ntlab.acanthus_client.Acanthus; import org.ntlab.acanthus_client.R; +import org.ntlab.acanthus_client.entities.Editor; import org.ntlab.acanthus_client.entities.Work; import org.ntlab.acanthus_client.resources.accounts.InvitedRest; import org.ntlab.acanthus_client.resources.accounts.WorkRest; +import org.ntlab.acanthus_client.resources.gallery.EditorsRest; import retrofit2.Call; import retrofit2.Callback; @@ -23,6 +25,14 @@ private Retrofit retrofit; private Acanthus acanthus; + //----------------------------------------------------------------- + private Boolean isInvited; + + //----------------------------------------------------------------- + // setter + private void setIsInvited(Boolean isInvited) { + this.isInvited = isInvited; + } //----------------------------------------------------------------- //----------------------------------------------------------------- @@ -33,15 +43,16 @@ //----------------------------------------------------------------- // 招待確認 - public void checkInvited(MutableLiveData mIsInvitedText) { + public void checkInvited(MutableLiveData mIsInvited) { final InvitedRest invitedRest = retrofit.create(InvitedRest.class); + int dummyId = 2; - Call call = invitedRest.checkAccountInvited(acanthus.getPreferenceUid(), acanthus.getAid()); + Call call = invitedRest.checkAccountInvited(dummyId, acanthus.getAid()); call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { if (response.isSuccessful()) - mIsInvitedText.setValue(response.body().toString()); + mIsInvited.setValue(response.body()); } @Override @@ -53,16 +64,30 @@ } //----------------------------------------------------------------- + // 招待されているリストの取得API + public void getAccountInvitedList(){ + + } + + + //----------------------------------------------------------------- // 招待承認 public void acceptInvite() { final WorkRest workRest = retrofit.create(WorkRest.class); + int dummy = 1111; + // 作品への参加 - Call call = workRest.updateWork(acanthus.getPreferenceUid(), acanthus.getPreferenceToken(), acanthus.getAid()); + // 自身のID, token, 該当作品ID + // ToDo: Aidを外部から取得する必要あり? -> AccountのInviteMapから任意の + // ToDo: getAidを招待一覧画面で更新してから取得すれば変更しなくてよさそう + + + + Call call = workRest.updateWork(acanthus.getPreferenceUid(), acanthus.getPreferenceToken(), dummy); call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { - if (response.isSuccessful()) ; } @Override @@ -83,6 +108,6 @@ .addConverterFactory(JacksonConverterFactory.create()) .build(); } - //----------------------------------------------------------------- + //----------------------------------------------------------------- } diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/mypage/MyPageFragment.java b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/mypage/MyPageFragment.java index 2ac5e16..7654c96 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/mypage/MyPageFragment.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/mypage/MyPageFragment.java @@ -1,14 +1,22 @@ package org.ntlab.acanthus_client.views.main_menu_ui.mypage; + +import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Button; +import android.widget.EditText; import android.widget.TextView; import org.ntlab.acanthus_client.Acanthus; +import org.ntlab.acanthus_client.R; import org.ntlab.acanthus_client.databinding.FragmentMypageBinding; +import org.ntlab.acanthus_client.entities.Animation; +import org.ntlab.acanthus_client.views.animation.AnimationActivity; +import org.ntlab.acanthus_client.views.paint.PaintActivity; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -16,6 +24,8 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; +import static android.os.Build.VERSION_CODES.R; + //----------------------------------------------------------------- // public class MyPageFragment extends Fragment { @@ -34,6 +44,13 @@ return root; } + @Override + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + onClickAccept(view); + onClickAnimation(view); + } + //----------------------------------------------------------------- // @Override @@ -43,6 +60,26 @@ } //----------------------------------------------------------------- + // + public void onClickAccept(View view) { + Button buttonIsInvited = view.findViewById(org.ntlab.acanthus_client.R.id.buttonIsInvited); + + buttonIsInvited.setOnClickListener(v -> { + mypageViewModel.acceptInviteRequest(); + }); + } + + //----------------------------------------------------------------- + // + public void onClickAnimation(View view) { + Button button = view.findViewById(org.ntlab.acanthus_client.R.id.buttonAnimation); + + button.setOnClickListener(v -> { + transitionAnimationActivity(); + }); + } + + //----------------------------------------------------------------- //----------------------------------------------------------------- // init private void init() { @@ -65,11 +102,12 @@ //----------------------------------------------------------------- // 招待されているテキストの変更監視 private void observeInvitedText() { - final TextView textIsInvited = binding.textIsInvited; - mypageViewModel.getImmutableIsInvitedText().observe(getViewLifecycleOwner(), new Observer() { + final Button buttonIsInvited = binding.buttonIsInvited; + mypageViewModel.getImmutableIsInvited().observe(getViewLifecycleOwner(), new Observer() { @Override - public void onChanged(@Nullable String s) { - textIsInvited.setText(s); + public void onChanged(Boolean aBoolean) { + buttonIsInvited.setText(aBoolean.toString()); + buttonIsInvited.setEnabled(aBoolean); } }); } @@ -86,5 +124,14 @@ } }); } + //----------------------------------------------------------------- + // + private void transitionAnimationActivity() { + Acanthus acanthus = (Acanthus) getActivity().getApplication(); + Intent intent = new Intent(acanthus, AnimationActivity.class); + startActivity(intent); + } + //----------------------------------------------------------------- + } \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/mypage/MyPageViewModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/mypage/MyPageViewModel.java index d71590b..ba633d4 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/mypage/MyPageViewModel.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/mypage/MyPageViewModel.java @@ -11,13 +11,13 @@ // マイページロジックの仲介者 public class MyPageViewModel extends ViewModel { private MyPageModelContainer myPageModelContainer; - private MutableLiveData mIsInvitedText = new MutableLiveData<>(); + private MutableLiveData mIsInvited = new MutableLiveData<>(); private MutableLiveData mUidText = new MutableLiveData<>(); //----------------------------------------------------------------- // getter - public LiveData getImmutableIsInvitedText() { - return mIsInvitedText; + public LiveData getImmutableIsInvited() { + return mIsInvited; } public LiveData getImmutableUidText() { @@ -34,7 +34,7 @@ //----------------------------------------------------------------- // 招待されているかを確認する通信リクエスト public void checkInvitedRequest() { - myPageModelContainer.getInvitedConnectionModel().checkInvited(mIsInvitedText); + myPageModelContainer.getInvitedConnectionModel().checkInvited(mIsInvited); } //----------------------------------------------------------------- @@ -43,4 +43,9 @@ myPageModelContainer.getMyPageInfoConnectionModel().getAccountByUid(mUidText); } //----------------------------------------------------------------- + // 招待を承諾するリクエスト + public void acceptInviteRequest(){ + myPageModelContainer.getInvitedConnectionModel().acceptInvite(); + } + //----------------------------------------------------------------- } \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/InvitesConnectionModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/InvitesConnectionModel.java deleted file mode 100644 index 588d2b5..0000000 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/InvitesConnectionModel.java +++ /dev/null @@ -1,61 +0,0 @@ -package org.ntlab.acanthus_client.views.paint; - -import org.ntlab.acanthus_client.Acanthus; -import org.ntlab.acanthus_client.resources.gallery.InvitesRest; -import org.ntlab.acanthus_client.resources.gallery.StrokesRest; - -import retrofit2.Call; -import retrofit2.Callback; -import retrofit2.Response; -import retrofit2.Retrofit; -import retrofit2.converter.jackson.JacksonConverterFactory; -import retrofit2.converter.scalars.ScalarsConverterFactory; - -//----------------------------------------------------------------- -// 招待関係通信 -public class InvitesConnectionModel { - private Retrofit retrofit; - private Acanthus acanthus; - - //----------------------------------------------------------------- - // - public InvitesConnectionModel(Acanthus acanthus) { - init(acanthus); - } - - //----------------------------------------------------------------- - //----------------------------------------------------------------- - // init - public void init(Acanthus acanthus) { - this.acanthus = acanthus; - this.retrofit = new Retrofit.Builder() - .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/acanthus/") - .addConverterFactory(ScalarsConverterFactory.create()) - .addConverterFactory(JacksonConverterFactory.create()) - .build(); - } - - //----------------------------------------------------------------- - // 新しい編集者の追加(POST) - public void inviteNewEditor(Integer invitedUid) { - final InvitesRest invitesRest = retrofit.create(InvitesRest.class); - - //----------------------------------------------------------------- - // 招待リクエストを送るAPI - Call call = invitesRest.addInvite( - acanthus.getAid(), acanthus.getPreferenceUid().toString(), invitedUid.toString(), acanthus.getPreferenceToken()); - call.enqueue(new Callback() { - @Override - public void onResponse(Call call, Response response) { - - } - - @Override - public void onFailure(Call call, Throwable t) { - - } - }); - } - //----------------------------------------------------------------- - -} 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 b54769a..af7d263 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 @@ -36,8 +36,8 @@ //----------------------------------------------------------------- // public void onClickInvite(View view) { - Integer dummy1Id = 1; - paintViewModel.inviteNewUserRequest(dummy1Id); + Integer dummyId = 2; + paintViewModel.inviteNewUserRequest(dummyId); } //----------------------------------------------------------------- @@ -60,4 +60,9 @@ paintCanvas.setPaintViewModel(paintViewModel); } //----------------------------------------------------------------- + @Override + public void onDestroy(){ + super.onDestroy(); + paintViewModel.stop(); + } } \ 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 54a3d4a..92802e8 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 @@ -10,6 +10,8 @@ import android.view.View; import org.ntlab.acanthus_client.Acanthus; +import org.ntlab.acanthus_client.entities.Position; +import org.ntlab.acanthus_client.entities.Stroke; import org.ntlab.acanthus_client.resources.HelloWorldRest; import org.ntlab.acanthus_client.resources.gallery.StrokesRest; @@ -32,7 +34,9 @@ public class PaintCanvas extends View { private Path path; + private Path path2; private Paint paint; + private Paint paint2; private PaintViewModel paintViewModel; //----------------------------------------------------------------- @@ -41,11 +45,15 @@ super(context, attrs); path = new Path(); // 図形描画 + path2 = new Path(); // 図形描画 paint = new Paint();//筆の種類 - - paint.setColor(Color.RED);//色の指定 + paint2 = new Paint();//筆の種類 + paint.setColor(Color.BLACK);//色の指定 paint.setStyle(Paint.Style.STROKE);//線をひく paint.setStrokeWidth(20);//幅 + paint2.setColor(Color.RED);//色の指定 + paint2.setStyle(Paint.Style.STROKE);//線をひく + paint2.setStrokeWidth(20);//幅 } //----------------------------------------------------------------- @@ -61,6 +69,8 @@ protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawPath(path, paint); + canvas.drawPath(path2, paint2); + getCanvas(); } //----------------------------------------------------------------- @@ -93,6 +103,7 @@ //----------------------------------------------------------------- // 描画クリア public void clearCanvas() { + paintViewModel.deleteStrokesRequest(); path.reset(); invalidate(); } @@ -112,6 +123,32 @@ } //----------------------------------------------------------------- + //----------------------------------------------------------------- + // 押した瞬間の処理 + private void onTouched2(float x, float y) { + path2.moveTo(x, y); + invalidate(); + } - + //----------------------------------------------------------------- + // 押した後動かした時の処理 + private void onTouchedMove2(float x, float y) { + path2.lineTo(x, y); + invalidate(); + } + //描写するための取得 + public void getCanvas(){ + int cnt=0; + for (Stroke s : paintViewModel.getStroke().getValue()) { + for (Position p : s.getPositions()) { + if (cnt == 0) { + onTouched2(p.getX(), p.getY()); + } else { + onTouchedMove2(p.getX(), p.getY()); + } + cnt++; + } + cnt = 0; + } + } } \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintConnectionModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintConnectionModel.java deleted file mode 100644 index 4575893..0000000 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintConnectionModel.java +++ /dev/null @@ -1,134 +0,0 @@ -package org.ntlab.acanthus_client.views.paint; - -import androidx.lifecycle.MutableLiveData; -import androidx.navigation.ActivityNavigator; - -import org.ntlab.acanthus_client.Acanthus; -import org.ntlab.acanthus_client.entities.Animation; -import org.ntlab.acanthus_client.entities.Position; -import org.ntlab.acanthus_client.resources.gallery.GalleryRest; -import org.ntlab.acanthus_client.resources.gallery.StrokesRest; - -import java.lang.reflect.Array; -import java.util.ArrayList; -import java.util.Collection; - -import retrofit2.Call; -import retrofit2.Callback; -import retrofit2.Response; -import retrofit2.Retrofit; -import retrofit2.converter.jackson.JacksonConverterFactory; -import retrofit2.converter.scalars.ScalarsConverterFactory; - -//----------------------------------------------------------------- -// 描画通信 -public class PaintConnectionModel { - private Animation editedAnimation; - private Integer currentStrokeNo; - private Retrofit retrofit; - private Acanthus acanthus; - private Collection getPaint; - - //----------------------------------------------------------------- - //----------------------------------------------------------------- - // - public PaintConnectionModel(Acanthus acanthus) { - init(acanthus); - } - - //----------------------------------------------------------------- - // setter - public void setEditedAnimation(Animation editedAnimation) { - this.editedAnimation = editedAnimation; - } - - private void setCurrentStrokeNo(int strokeNo) { - this.currentStrokeNo = strokeNo; - } - - //----------------------------------------------------------------- - //----------------------------------------------------------------- - // init - public void init(Acanthus acanthus) { - this.acanthus = acanthus; - this.getPaint = new ArrayList(); - this.retrofit = new Retrofit.Builder() - .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/acanthus/") - .addConverterFactory(ScalarsConverterFactory.create()) - .addConverterFactory(JacksonConverterFactory.create()) - .build(); - } - - //----------------------------------------------------------------- - //----------------------------------------------------------------- - // ローカルでのストロークの追加(POST) - public void addLocalStroke() { - final StrokesRest strokesRest = retrofit.create(StrokesRest.class); - - //----------------------------------------------------------------- - // ストローク追加API - Call call = strokesRest.addStroke( - acanthus.getAid(), acanthus.getPreferenceUid(), acanthus.getPreferenceToken(), - 0, 0, 10); - - // strokeNoを更新 - call.enqueue(new Callback() { - @Override - public void onResponse(Call call, Response response) { - if (response.isSuccessful()) setCurrentStrokeNo(response.body()); - } - - @Override - public void onFailure(Call call, Throwable t) { - - } - }); - } - - //----------------------------------------------------------------- - // ローカルでの筆跡追加(POST) - public void addPosition(float x, float y) { - final StrokesRest strokesRest = retrofit.create(StrokesRest.class); - - //----------------------------------------------------------------- - // 筆跡追加API - Call call = strokesRest.addPositions(acanthus.getAid(), this.currentStrokeNo, x, y); - call.enqueue(new Callback() { - @Override - public void onResponse(Call call, Response response) { - - } - - @Override - public void onFailure(Call call, Throwable t) { - - } - }); - } - //----------------------------------------------------------------- - //Getを追加 - public void apigetPosition(MutableLiveData> paintPosition){ - final StrokesRest strokesRest = retrofit.create(StrokesRest.class); - - //----------------------------------------------------------------- - // 筆跡追加API - Call> call = strokesRest.getPositions(acanthus.getAid(),0); - call.enqueue(new Callback>() { - @Override - public void onResponse(Call> call, Response> response) { - if (response.isSuccessful()) paintPosition.setValue(response.body()); - } - - @Override - public void onFailure(Call> call, Throwable t) { - - } - }); - - } - - public Collection getPosition(){ - return this.getPaint; - } - -} \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintModelContainer.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintModelContainer.java index a61430d..5ff4f92 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintModelContainer.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintModelContainer.java @@ -1,6 +1,8 @@ package org.ntlab.acanthus_client.views.paint; import org.ntlab.acanthus_client.Acanthus; +import org.ntlab.acanthus_client.views.paint.models.InvitesConnectionModel; +import org.ntlab.acanthus_client.views.paint.models.PaintConnectionModel; //----------------------------------------------------------------- // 各種モデルの保持者 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 93af18b..896ea6d 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,7 @@ import org.jetbrains.annotations.NotNull; import org.ntlab.acanthus_client.Acanthus; import org.ntlab.acanthus_client.entities.Position; +import org.ntlab.acanthus_client.entities.Stroke; import java.util.ArrayList; import java.util.Collection; @@ -22,6 +23,14 @@ private PaintModelContainer paintModelContainer; private MutableLiveData> paintPosition; + private MutableLiveData> mStrokes; + private ScheduledThreadPoolExecutor thread = new ScheduledThreadPoolExecutor(1); + + //----------------------------------------------------------------- + // getter + public MutableLiveData> getStroke(){ + return this.mStrokes; + } //----------------------------------------------------------------- //----------------------------------------------------------------- @@ -31,7 +40,9 @@ paintModelContainer.getPaintConnectionModel().init(acanthus); paintModelContainer.getInvitesConnectionModel().init(acanthus); paintPosition = new MutableLiveData<>(); - ScheduledThreadPoolExecutor thread = new ScheduledThreadPoolExecutor(1); + mStrokes = new MutableLiveData<>(); + mStrokes.setValue(new ArrayList<>()); + mStrokes.getValue().add(new Stroke()); thread.scheduleWithFixedDelay(this, 1000L, 100L, TimeUnit.MICROSECONDS); } @@ -59,12 +70,23 @@ } //----------------------------------------------------------------- + // 描画情報の全クリア + public void deleteStrokesRequest(){ + paintModelContainer.getPaintConnectionModel().deleteStrokes(); + } + + //----------------------------------------------------------------- // 一定間隔でサーバー上の筆跡を取得する(GET) @Override public void run() { Log.d("debug", "run: "); - paintModelContainer.getPaintConnectionModel().apigetPosition(paintPosition); + paintModelContainer.getPaintConnectionModel().getStrokeSize(mStrokes); + //paintModelContainer.getPaintConnectionModel().apiGetPosition(paintPosition,i); } //----------------------------------------------------------------- + // + public void stop(){ + thread.shutdown(); + } } \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/InvitesConnectionModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/InvitesConnectionModel.java new file mode 100644 index 0000000..09c4c66 --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/InvitesConnectionModel.java @@ -0,0 +1,63 @@ +package org.ntlab.acanthus_client.views.paint.models; + +import org.ntlab.acanthus_client.Acanthus; +import org.ntlab.acanthus_client.resources.gallery.InvitesRest; +import org.ntlab.acanthus_client.resources.gallery.StrokesRest; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.jackson.JacksonConverterFactory; +import retrofit2.converter.scalars.ScalarsConverterFactory; + +//----------------------------------------------------------------- +// 招待関係通信 +public class InvitesConnectionModel { + private Retrofit retrofit; + private Acanthus acanthus; + + //----------------------------------------------------------------- + // + public InvitesConnectionModel(Acanthus acanthus) { + init(acanthus); + } + + //----------------------------------------------------------------- + //----------------------------------------------------------------- + // init + public void init(Acanthus acanthus) { + this.acanthus = acanthus; + this.retrofit = new Retrofit.Builder() + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/acanthus/") + .addConverterFactory(ScalarsConverterFactory.create()) + .addConverterFactory(JacksonConverterFactory.create()) + .build(); + } + + //----------------------------------------------------------------- + // 新しい編集者の追加(POST) + public void inviteNewEditor(Integer invitedUid) { + final InvitesRest invitesRest = retrofit.create(InvitesRest.class); + Integer owner = 1; + String token = "abc0"; + int dummy = 1111; + + //----------------------------------------------------------------- + // 招待リクエストを送るAPI + Call call = invitesRest.addInvite(dummy, owner.toString(), invitedUid.toString(), token); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if(response.isSuccessful()); + } + + @Override + public void onFailure(Call call, Throwable t) { + + } + }); + } + //----------------------------------------------------------------- + +} 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 new file mode 100644 index 0000000..791fa24 --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PaintConnectionModel.java @@ -0,0 +1,177 @@ +package org.ntlab.acanthus_client.views.paint.models; + +import android.util.Log; + +import androidx.lifecycle.MutableLiveData; +import androidx.navigation.ActivityNavigator; + +import org.ntlab.acanthus_client.Acanthus; +import org.ntlab.acanthus_client.entities.Animation; +import org.ntlab.acanthus_client.entities.Position; +import org.ntlab.acanthus_client.entities.Stroke; +import org.ntlab.acanthus_client.resources.gallery.GalleryRest; +import org.ntlab.acanthus_client.resources.gallery.StrokesRest; + +import java.lang.reflect.Array; +import java.util.ArrayList; +import java.util.Collection; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.jackson.JacksonConverterFactory; +import retrofit2.converter.scalars.ScalarsConverterFactory; + +//----------------------------------------------------------------- +// 描画通信 +public class PaintConnectionModel { + private Animation editedAnimation; + private Integer currentStrokeNo; + private Retrofit retrofit; + private Acanthus acanthus; + private Collection getPaint; + + //----------------------------------------------------------------- + //----------------------------------------------------------------- + // + public PaintConnectionModel(Acanthus acanthus) { + init(acanthus); + } + + //----------------------------------------------------------------- + // setter + public void setEditedAnimation(Animation editedAnimation) { + this.editedAnimation = editedAnimation; + } + + private void setCurrentStrokeNo(int strokeNo) { + this.currentStrokeNo = strokeNo; + } + + //----------------------------------------------------------------- + //----------------------------------------------------------------- + // init + public void init(Acanthus acanthus) { + this.acanthus = acanthus; + this.getPaint = new ArrayList(); + this.retrofit = new Retrofit.Builder() + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/acanthus/") + .addConverterFactory(ScalarsConverterFactory.create()) + .addConverterFactory(JacksonConverterFactory.create()) + .build(); + } + + //----------------------------------------------------------------- + //----------------------------------------------------------------- + // ローカルでのストロークの追加(POST) + public void addLocalStroke() { + final StrokesRest strokesRest = retrofit.create(StrokesRest.class); + + //----------------------------------------------------------------- + // ストローク追加API + Call call = strokesRest.addStroke( + acanthus.getAid(), acanthus.getPreferenceUid(), acanthus.getPreferenceToken(), + 0, 0, 10); + + // strokeNoを更新 + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) setCurrentStrokeNo(response.body()); + } + + @Override + public void onFailure(Call call, Throwable t) { + + } + }); + } + + //----------------------------------------------------------------- + // ローカルでの筆跡追加(POST) + public void addPosition(float x, float y) { + final StrokesRest strokesRest = retrofit.create(StrokesRest.class); + + //----------------------------------------------------------------- + // 筆跡追加API + Call call = strokesRest.addPositions(acanthus.getAid(), this.currentStrokeNo, x, y); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + + } + + @Override + public void onFailure(Call call, Throwable t) { + + } + }); + } + + //----------------------------------------------------------------- + //Getを追加 + public void apiGetPosition(MutableLiveData> paintPosition, int num) { + final StrokesRest strokesRest = retrofit.create(StrokesRest.class); + + //----------------------------------------------------------------- + // 筆跡追加API + Call> call = strokesRest.getPositions(acanthus.getAid(), num); + call.enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + if (response.isSuccessful()) paintPosition.setValue(response.body()); + } + + @Override + public void onFailure(Call> call, Throwable t) { + + } + }); + + } + + //----------------------------------------------------------------- + //Getを追加 + public void getStrokeSize(MutableLiveData> strokes) { + final StrokesRest strokesRest = retrofit.create(StrokesRest.class); + + //----------------------------------------------------------------- + // 筆跡追加API + Call> call = strokesRest.getStrokes(acanthus.getAid()); + call.enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + if (response.isSuccessful()) strokes.setValue(response.body()); + } + + @Override + public void onFailure(Call> call, Throwable t) { + + } + }); + + } + + //----------------------------------------------------------------- + // "Clear"ボタンによる描画の全消去 / サーバー側の筆跡全削除 + public void deleteStrokes() { + final StrokesRest strokesRest = retrofit.create(StrokesRest.class); + + //----------------------------------------------------------------- + // 筆跡をすべて削除する + Call call = strokesRest.deleteStrokes(acanthus.getAid(), acanthus.getPreferenceUid()); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + } + + @Override + public void onFailure(Call call, Throwable t) { + } + }); + } + + //----------------------------------------------------------------- + +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_animation.xml b/app/src/main/res/layout/activity_animation.xml index 86095c2..69e0a2e 100644 --- a/app/src/main/res/layout/activity_animation.xml +++ b/app/src/main/res/layout/activity_animation.xml @@ -6,4 +6,60 @@ android:layout_height="match_parent" tools:context=".views.animation.AnimationActivity"> + + +