diff --git a/.idea/misc.xml b/.idea/misc.xml index 6199cc2..35ebcc0 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -6,4 +6,11 @@ + + + \ No newline at end of file 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 3c78739..08f02fd 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/Acanthus.java +++ b/app/src/main/java/org/ntlab/acanthus_client/Acanthus.java @@ -123,6 +123,7 @@ SharedPreferences preferences = getSharedPreferences("prefData", MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); editor.putInt("aid", aid); + this.aid = aid; editor.commit(); } 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 0b9211a..41d2e3f 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 @@ -57,4 +57,7 @@ @DELETE("gallery/{aid}/pageMap/0/layers/0/strokes/{strokeNo}/positions") Call deleteStrokeNo(@Path("aid") Integer aid, @Path("strokeNo") Integer strokeNo); //----------------------------------------------------------------- + // + @GET("gallery/{aid}/pageMap/{pid}/image") + Call getLayers(@Path("aid") Integer aid, @Path("pid")Integer pid); } \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/MainActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/MainActivity.java index da35e65..cde184d 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/MainActivity.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/MainActivity.java @@ -23,6 +23,7 @@ super.onCreate(savedInstanceState); binding = ActivityMainBinding.inflate(getLayoutInflater()); + setTheme(R.style.Theme_Acanthus); setContentView(binding.getRoot()); BottomNavigationView navView = findViewById(R.id.nav_view); 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 39a6088..237a6e2 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 @@ -59,7 +59,7 @@ } }); - //5秒スキップ + //2秒スキップ buttonSkip = findViewById(R.id.button_skip); buttonSkip.setOnClickListener(new View.OnClickListener(){ public void onClick(View v) { @@ -67,7 +67,7 @@ } }); - //5秒巻き戻し + //2秒巻き戻し buttonBack = findViewById(R.id.button_back); buttonBack.setOnClickListener(new View.OnClickListener(){ public void onClick(View v) { 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 d3ba066..cd6e9bf 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 @@ -1,15 +1,26 @@ package org.ntlab.acanthus_client.views.animation; +import android.app.Activity; import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; +import android.graphics.Point; import android.os.Handler; import android.os.Looper; import android.util.AttributeSet; +import android.view.Display; import android.view.View; +import android.view.WindowManager; +import android.widget.ImageView; +import android.widget.LinearLayout; import org.ntlab.acanthus_client.Acanthus; +import org.ntlab.acanthus_client.R; +import java.sql.Array; +import java.util.ArrayList; import java.util.Timer; import java.util.TimerTask; @@ -22,24 +33,49 @@ private Timer timer; private CountUpTimerTask timerTask; private Handler handler = new Handler(Looper.getMainLooper()); - private int msec = 100; + private int msec = 1000; //ページ指定用の変数 private int pageNo = 0; + private ArrayList bmp = new ArrayList<>(); + private ArrayList tmp = new ArrayList<>(); + + private ImageView imageView; public AnimationCanvas(Context context, AttributeSet attrs) { super(context, attrs); + + //画像を読み込む + tmp.add(BitmapFactory.decodeResource(getResources(), R.drawable.sample1)); + tmp.add(BitmapFactory.decodeResource(getResources(), R.drawable.sample2)); + tmp.add(BitmapFactory.decodeResource(getResources(), R.drawable.sample3)); + tmp.add(BitmapFactory.decodeResource(getResources(), R.drawable.sample4)); + tmp.add(BitmapFactory.decodeResource(getResources(), R.drawable.sample5)); + + //画像サイズを画面サイズにセット + WindowManager wm =(WindowManager)context.getSystemService(Context.WINDOW_SERVICE) ; + Display display = wm.getDefaultDisplay(); + Point size = new Point(); + display.getSize(size); + setSize(size.x, size.y); + + } + + //画像サイズの変更 + private void setSize(int width, int height){ + for(int i = 0; i < tmp.size(); i++) { + bmp.add(Bitmap.createScaledBitmap(tmp.get(i), width, height, false)); + } } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); - //ダミーです。 - //100msごとに1pxずつ2つ目の四角が下に降りる - canvas.drawRect(100, 100, 200, 300, paint); - canvas.drawRect(500, 100 + this.pageNo, 600, 300 + this.pageNo, paint); + //画面遷移 + canvas.drawBitmap(bmp.get(pageNo),0,0, paint); + } @@ -68,7 +104,14 @@ public void run(){ handler.post(new Runnable(){ public void run(){ - pageNo++; + //ループする + pageNo = (pageNo + 1) % bmp.size(); + + //ループさせない + /* + if(timer != null) onClickPlayback(); + this.pageNo = bmp.size() - 1; + */ postInvalidate(); } }); @@ -87,10 +130,15 @@ this.msec *= speed; } - //5秒スキップ + //2秒スキップ public void setAnimationSkip(int x){ - this.pageNo += x * 5000 / this.msec; + this.pageNo += x * 2000 / this.msec; if(this.pageNo < 0) this.pageNo = 0; + else if(this.pageNo >= bmp.size()) this.pageNo = bmp.size() - 1; + /*else if(this.pageNo >= bmp.size()) { + if(timer != null) onClickPlayback(); + this.pageNo = bmp.size() - 1; + }*/ postInvalidate(); } diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/create/CreateFragment.java b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/create/CreateFragment.java new file mode 100644 index 0000000..25e565d --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/create/CreateFragment.java @@ -0,0 +1,66 @@ +package org.ntlab.acanthus_client.views.main_menu_ui.create; + +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 androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.lifecycle.ViewModelProvider; + +import org.ntlab.acanthus_client.Acanthus; +import org.ntlab.acanthus_client.R; +import org.ntlab.acanthus_client.databinding.FragmentCreateBinding; +import org.ntlab.acanthus_client.databinding.FragmentEditBinding; +import org.ntlab.acanthus_client.views.main_menu_ui.edit.EditViewModel; +import org.ntlab.acanthus_client.views.paint.PaintActivity; + +public class CreateFragment extends Fragment { + private CreateViewModel createViewModel; + private FragmentCreateBinding binding; + + public View onCreateView(@NonNull LayoutInflater inflater, + ViewGroup container, Bundle savedInstanceState) { + createViewModel = + new ViewModelProvider(this).get(CreateViewModel.class); + + binding = FragmentCreateBinding.inflate(inflater, container, false); + View root = binding.getRoot(); + + return root; + } + + @Override + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + Button appButton = view.findViewById(R.id.Paint_button_create); + + //ダミーユーザー + Integer uid = 1; + String token = "abc0"; + + appButton.setOnClickListener(v -> { + Acanthus acanthus = (Acanthus) getActivity().getApplication(); + //Integer uid = acanthus.getPreferenceUid(); + String name = ((EditText)view.findViewById(R.id.AnimationNameCreate)).getText().toString(); + //String token = acanthus.getPreferenceToken(); + createViewModel.startWorkCreate(uid, name, token); + //Integer aid = createViewModel.startWorkCreate(uid, name, token); + //acanthus.setAid(aid); + transitionPaintActivity(); + }); + } + + //----------------------------------------------------------------- + // 画面遷移 + private void transitionPaintActivity() { + Acanthus acanthus = (Acanthus) getActivity().getApplication(); + Intent intent = new Intent(acanthus, PaintActivity.class); + startActivity(intent); + } +} diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/create/CreateViewModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/create/CreateViewModel.java new file mode 100644 index 0000000..82f7f18 --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/create/CreateViewModel.java @@ -0,0 +1,59 @@ +package org.ntlab.acanthus_client.views.main_menu_ui.create; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; + +import org.ntlab.acanthus_client.entities.AidJson; +import org.ntlab.acanthus_client.resources.accounts.WorkRest; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.jackson.JacksonConverterFactory; + +public class CreateViewModel extends ViewModel { + + private MutableLiveData aidJsonMutableLiveData; + + public CreateViewModel() { + this.aidJsonMutableLiveData = new MutableLiveData<>(); + } + + public LiveData getAidJson() { + return this.aidJsonMutableLiveData; + } + + //新規作品作成APIの呼び出し + public Integer startWorkCreate(Integer uid, String animationName, String token) { + Retrofit retrofit = new Retrofit.Builder() + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/acanthus/") + .addConverterFactory(JacksonConverterFactory.create()) + .build(); + final WorkRest workRest = retrofit.create(WorkRest.class); + + final Integer[] aid = new Integer[1]; + + //作品の新規作成 + Call call = workRest.createWork(uid, animationName, token); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + if (response.body() != null) { + //aid[0] = response.body().getAid(); + aidJsonMutableLiveData.setValue(response.body()); + } + } + } + + @Override + public void onFailure(Call call, Throwable t) { + + } + }); + + return aid[0]; + } +} 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 0cfd53c..f17960f 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 @@ -18,6 +18,7 @@ import org.ntlab.acanthus_client.Acanthus; import org.ntlab.acanthus_client.R; import org.ntlab.acanthus_client.databinding.FragmentEditBinding; +import org.ntlab.acanthus_client.entities.AidJson; import org.ntlab.acanthus_client.entities.Animation; import org.ntlab.acanthus_client.entities.AnimationJson; import org.ntlab.acanthus_client.entities.WorkJson; @@ -141,6 +142,16 @@ }); + + editViewModel.getAidJson().observe(getViewLifecycleOwner(), new Observer() { + //作品の新規作成時の処理 + @Override + public void onChanged(AidJson aidJson) { + acanthus.setAid(aidJson.getAid()); + transitionPaintActivity(); + } + }); + } //------------------------------------------------------------------------------------------------- @@ -149,13 +160,13 @@ super.onDestroyView(); binding = null; } + @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); Button appButton = view.findViewById(R.id.Paint_button); Integer uid = 1; String token = "abc0"; - editViewModel.getWorkList(uid, token); //編集ボタン Button editButton = view.findViewById(R.id.Edit_button); @@ -165,9 +176,8 @@ //Integer uid = acanthus.getPreferenceUid(); String name = ((EditText)view.findViewById(R.id.AnimationName)).getText().toString(); //String token = acanthus.getPreferenceToken(); - Integer aid = editViewModel.startWorkEdit(uid, name, token); - acanthus.setAid(aid); - transitionPaintActivity(); + //Integer aid = editViewModel.startWorkEdit(uid, name, token); + editViewModel.startWorkEdit(uid, name, token); }); editButton.setOnClickListener(v -> { @@ -188,10 +198,11 @@ startActivity(intent); } + //各作品毎の画面遷移 private void transitionPaintActivity(AnimationJson animationJson) { Acanthus acanthus = (Acanthus) getActivity().getApplication(); Intent intent = new Intent(acanthus, PaintActivity.class); - intent.putExtra("AnimationJsonData", animationJson); + acanthus.setAid(animationJson.getAid()); startActivity(intent); } diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/edit/EditViewModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/edit/EditViewModel.java index 16f757e..f46ae6b 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/edit/EditViewModel.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/edit/EditViewModel.java @@ -36,15 +36,13 @@ } //新規作品作成APIの呼び出し - public Integer startWorkEdit(Integer uid, String animationName, String token) { + public void startWorkEdit(Integer uid, String animationName, String token) { Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/acanthus/") .addConverterFactory(JacksonConverterFactory.create()) .build(); final WorkRest workRest = retrofit.create(WorkRest.class); - final Integer[] aid = new Integer[1]; - //作品の新規作成 Call call = workRest.createWork(uid, animationName, token); call.enqueue(new Callback() { @@ -52,7 +50,6 @@ public void onResponse(Call call, Response response) { if (response.isSuccessful()) { if (response.body() != null) { - aid[0] = response.body().getAid(); aidJsonMutableLiveData.setValue(response.body()); } } @@ -64,7 +61,6 @@ } }); - return aid[0]; } //ユーザーの作成した作品の表示APIの呼び出し 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 7e63410..4c17d1d 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 @@ -35,6 +35,16 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); init(); + initView(); + + } + + //----------------------------------------------------------------- + @Override + protected void onResume() { + super.onResume(); + + displayAid(); } //----------------------------------------------------------------- @@ -64,8 +74,6 @@ paintViewModel = new ViewModelProvider(this).get(PaintViewModel.class); paintViewModel.init(acanthus); - initView(); - startObserve(); } @@ -77,6 +85,8 @@ paintCanvas = (PaintCanvas) findViewById(R.id.myCanvas); paintCanvas.setPaintViewModel(paintViewModel); + + } //----------------------------------------------------------------- @@ -89,5 +99,14 @@ } }); } + + //------------------------------------------------------------------ + // デバッグ用の現在編集中のAid表示 + private void displayAid() { + Acanthus acanthus = (Acanthus) getApplication(); + TextView view = findViewById(R.id.textViewCurAid); + view.setText("aid:" + acanthus.getAid().toString()); + } + //------------------------------------------------------------------ } \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/AnimationOperatorModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/AnimationOperatorModel.java new file mode 100644 index 0000000..477b595 --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/AnimationOperatorModel.java @@ -0,0 +1,16 @@ +package org.ntlab.acanthus_client.views.paint.models; + +//----------------------------------------------------------------- +// ページ +public class AnimationOperatorModel { + + private Integer curPageNo; + + //----------------------------------------------------------------- + //----------------------------------------------------------------- + // + public void transitionPageNo(){ + + } + +} 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 80f2e93..5ae613e 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 @@ -61,4 +61,5 @@ } //----------------------------------------------------------------- + } 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 new file mode 100644 index 0000000..61d23a6 --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PageOperationModel.java @@ -0,0 +1,4 @@ +package org.ntlab.acanthus_client.views.paint.models; + +public class PageOperationModel { +} diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/title/TitleActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/title/TitleActivity.java index 02a8149..6a1dab4 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/title/TitleActivity.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/title/TitleActivity.java @@ -33,8 +33,7 @@ //ここに画像処理を記載する ImageView imageView = (ImageView) findViewById(R.id.gifImage); Glide.with(this).load(R.drawable.load).into(imageView); - TextView textView = (TextView)findViewById(R.id.textView3); - loadimg(imageView,textView); + loadimg(imageView); @@ -43,13 +42,12 @@ } //////////////////////////////////////////////////////////////////// - public void loadimg(ImageView imageView,TextView textView) { + public void loadimg(ImageView imageView) { Handler handler = new Handler(); Runnable runnable = new Runnable() { @Override public void run() { imageView.setVisibility(View.VISIBLE); - textView.setText("アカウント情報取得中"); } }; handler.postDelayed(runnable, 2000); diff --git a/app/src/main/res/layout/activity_animation.xml b/app/src/main/res/layout/activity_animation.xml index 94a2c0b..5706054 100644 --- a/app/src/main/res/layout/activity_animation.xml +++ b/app/src/main/res/layout/activity_animation.xml @@ -69,7 +69,7 @@ android:id="@+id/button_back" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="5s back" + android:text="2s back" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="@+id/animationMyCanvas" app:layout_constraintHorizontal_bias="0.136" @@ -81,7 +81,7 @@ android:id="@+id/button_skip" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="5s skip" + android:text="2s skip" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.853" diff --git a/app/src/main/res/layout/activity_paint.xml b/app/src/main/res/layout/activity_paint.xml index 7259018..abcf863 100644 --- a/app/src/main/res/layout/activity_paint.xml +++ b/app/src/main/res/layout/activity_paint.xml @@ -58,5 +58,17 @@ app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.112" /> + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_sign_up.xml b/app/src/main/res/layout/activity_sign_up.xml index f2ac124..a5666df 100644 --- a/app/src/main/res/layout/activity_sign_up.xml +++ b/app/src/main/res/layout/activity_sign_up.xml @@ -22,67 +22,68 @@ + app:layout_constraintVertical_bias="0.857" /> + app:layout_constraintVertical_bias="0.855" /> + app:layout_constraintVertical_bias="1.0" /> + app:layout_constraintVertical_bias="0.972" /> + app:layout_constraintVertical_bias="0.616" />