diff --git a/.idea/misc.xml b/.idea/misc.xml index 8c97a73..347f0bf 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -4,33 +4,23 @@ diff --git a/app/build.gradle b/app/build.gradle index dd92557..df4b76a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -43,6 +43,7 @@ implementation 'androidx.annotation:annotation:1.2.0' implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' + implementation 'androidx.legacy:legacy-support-v4:1.0.0' testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' @@ -51,4 +52,7 @@ implementation 'com.squareup.retrofit2:converter-scalars:2.1.0' implementation 'com.github.bumptech.glide:glide:4.10.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.10.0' + implementation 'com.google.android.material:material:1.1.0-alpha08' + implementation 'androidx.viewpager2:viewpager2:1.0.0-beta02' + } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 75b22a4..fae7bc6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -4,7 +4,7 @@ - + - - + + + + + + + + + @@ -26,14 +35,19 @@ - - - - + + + + + + + + android:label="@string/title_activity_main" + android:screenOrientation="portrait" + android:windowSoftInputMode="adjustPan" /> \ 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 261e17e..5c84a49 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/Acanthus.java +++ b/app/src/main/java/org/ntlab/acanthus_client/Acanthus.java @@ -106,6 +106,7 @@ SharedPreferences preferences = getSharedPreferences("prefData", MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); editor.putInt("uid", preferenceUid); + this.preferenceUid = preferenceUid; editor.commit(); } @@ -113,6 +114,7 @@ SharedPreferences preferences = getSharedPreferences("prefData", MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); editor.putString("name", preferenceName); + this.preferenceName = preferenceName; editor.commit(); } @@ -120,6 +122,7 @@ SharedPreferences preferences = getSharedPreferences("prefData", MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); editor.putString("email", preferenceEmail); + this.preferenceEmail = preferenceEmail; editor.commit(); } @@ -127,6 +130,7 @@ SharedPreferences preferences = getSharedPreferences("prefData", MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); editor.putString("password", preferencePassword); + this.preferencePassword = preferencePassword; editor.commit(); } @@ -134,6 +138,7 @@ SharedPreferences preferences = getSharedPreferences("prefData", MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); editor.putString("token", preferenceToken); + this.preferenceToken = preferenceToken; editor.commit(); } diff --git a/app/src/main/java/org/ntlab/acanthus_client/entities/EditorJson.java b/app/src/main/java/org/ntlab/acanthus_client/entities/EditorJson.java index dd5cb03..220bc75 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/entities/EditorJson.java +++ b/app/src/main/java/org/ntlab/acanthus_client/entities/EditorJson.java @@ -1,11 +1,12 @@ package org.ntlab.acanthus_client.entities; import java.util.ArrayList; +import java.util.Collection; //----------------------------------------------------------------- // 作品編集者の一覧 public class EditorJson { - private ArrayList uidList = new ArrayList<>(); + private ArrayList uid = new ArrayList<>(); //----------------------------------------------------------------- public EditorJson() { @@ -13,13 +14,13 @@ //----------------------------------------------------------------- // getter - public ArrayList getUidList() { - return uidList; + public Collection getUid() { + return uid; } //----------------------------------------------------------------- // setter - public void addUid(Integer uid) { - this.uidList.add(uid); + public void setAid(ArrayList uid) { + this.uid = uid; } } diff --git a/app/src/main/java/org/ntlab/acanthus_client/entities/InvitesJson.java b/app/src/main/java/org/ntlab/acanthus_client/entities/InvitesJson.java new file mode 100644 index 0000000..7f15a92 --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/entities/InvitesJson.java @@ -0,0 +1,22 @@ +package org.ntlab.acanthus_client.entities; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.util.ArrayList; +import java.util.Collection; + +public class InvitesJson { + @JsonProperty("invites") + private ArrayList invites = new ArrayList<>(); + + public InvitesJson() { + } + + public ArrayList getInvites() { + return invites; + } + + public void setInvitesJson(Integer uid){ + this.invites.add(uid); + } +} diff --git a/app/src/main/java/org/ntlab/acanthus_client/entities/LoginResponseJson.java b/app/src/main/java/org/ntlab/acanthus_client/entities/LoginResponseJson.java index 2270d30..ca7e9f1 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/entities/LoginResponseJson.java +++ b/app/src/main/java/org/ntlab/acanthus_client/entities/LoginResponseJson.java @@ -5,6 +5,7 @@ public class LoginResponseJson { private Integer uid; private String token; + private String name; public LoginResponseJson() { } @@ -18,5 +19,10 @@ public String getToken() { return this.token; } + + public String getName() { + return this.name; + } + //----------------------------------------------------------------- } diff --git a/app/src/main/java/org/ntlab/acanthus_client/resources/accounts/InvitedRest.java b/app/src/main/java/org/ntlab/acanthus_client/resources/accounts/InvitedRest.java index 9ee5fa8..f2ae135 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/resources/accounts/InvitedRest.java +++ b/app/src/main/java/org/ntlab/acanthus_client/resources/accounts/InvitedRest.java @@ -22,10 +22,10 @@ //----------------------------------------------------------------- - @GET("accounts/{uid}/invited") + @GET("accounts/{uid}/invited/aidList") Call> getAccountInvited( - @Path("uid") Integer ownerUid, - @Query("token") Integer token + @Path("uid") Integer Uid, + @Query("token") String token ); //----------------------------------------------------------------- diff --git a/app/src/main/java/org/ntlab/acanthus_client/resources/accounts/WorkRest.java b/app/src/main/java/org/ntlab/acanthus_client/resources/accounts/WorkRest.java index 6924959..516bbbc 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/resources/accounts/WorkRest.java +++ b/app/src/main/java/org/ntlab/acanthus_client/resources/accounts/WorkRest.java @@ -36,7 +36,7 @@ // 作品への参加を許可する @FormUrlEncoded @PUT("accounts/{uid}/work") - Call updateWork( + Call updateWork( @Path("uid")Integer invitedUid, @Field("token") String invitedToken, @Field("aid") Integer aid diff --git a/app/src/main/java/org/ntlab/acanthus_client/resources/gallery/InvitesRest.java b/app/src/main/java/org/ntlab/acanthus_client/resources/gallery/InvitesRest.java index fc9ced3..ee28858 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/resources/gallery/InvitesRest.java +++ b/app/src/main/java/org/ntlab/acanthus_client/resources/gallery/InvitesRest.java @@ -1,6 +1,7 @@ package org.ntlab.acanthus_client.resources.gallery; import org.ntlab.acanthus_client.entities.Account; +import org.ntlab.acanthus_client.entities.InvitesJson; import java.util.Collection; @@ -18,7 +19,7 @@ //----------------------------------------------------------------- @GET("gallery/{aid}/invites") - Call> isGalleryInvites( + Call isGalleryInvites( @Path("aid") Integer aid, @Query("invited") String invitedUid, @Query("invitedUserToken") String invitedUserToken, @@ -29,7 +30,7 @@ @FormUrlEncoded @PUT("gallery/{aid}/invites") - Call addInvite( + Call addInvite( @Path("aid") Integer aid, @Field("ownerUid") String ownerUid, @Field("invitedUid") String invitedUid, 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 0697841..9bbd223 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 @@ -14,6 +14,7 @@ import org.ntlab.acanthus_client.databinding.ActivityMainBinding; import org.ntlab.acanthus_client.views.main_menu_ui.mypage.MyPageFragment; +import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ShareCompat; import androidx.fragment.app.FragmentManager; @@ -29,6 +30,7 @@ public class MainActivity extends AppCompatActivity { private ActivityMainBinding binding; + private NavController navController; Intent intent; @Override @@ -43,9 +45,9 @@ // Passing each menu ID as a set of Ids because each // menu should be considered as top level destinations. AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder( - R.id.navigation_home, R.id.navigation_search, R.id.navigation_make, R.id.navigation_mypage) + R.id.navigation_home, R.id.navigation_search, R.id.navigation_edit, R.id.navigation_mypage) .build(); - NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_activity_main); + navController = Navigation.findNavController(this, R.id.nav_host_fragment_activity_main); NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration); NavigationUI.setupWithNavController(binding.navView, navController); } @@ -53,7 +55,7 @@ // ツールバーにbotton_nav_topを表示 @Override public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.botton_nav_top, menu); + getMenuInflater().inflate(R.menu.top_nav_main, menu); return true; } @@ -76,15 +78,16 @@ return true; // Iconを押したときMyPageに遷移 - case R.id.icon: - String[] poptext = { "I LOVE JENKINS", "わけわからん", "そうだ、新田研に行こう。", "大吉", "中吉", "吉", "凶" }; - Random random = new Random(); - Toast myToast = Toast.makeText( - getApplicationContext(), - poptext[random.nextInt(7)], - Toast.LENGTH_SHORT - ); - myToast.show(); + case R.id.navigation_icon: + navController.navigate(R.id.navigation_mypage); +// String[] poptext = { "I LOVE JENKINS", "わけわからん", "そうだ、新田研に行こう。", "大吉", "中吉", "吉", "凶" }; +// Random random = new Random(); +// Toast myToast = Toast.makeText( +// getApplicationContext(), +// poptext[random.nextInt(7)], +// Toast.LENGTH_SHORT +// ); +// myToast.show(); return true; default: @@ -93,4 +96,12 @@ } } + // 戻るボタン「←」をアクションバー(上部バー)にセットするメソッドを定義 + public void setupBackButton(boolean enableBackButton) { + // アクションバーを取得 + ActionBar actionBar = getSupportActionBar(); + // アクションバーに戻るボタン「←」をセット(引数が true: 表示、false: 非表示) + actionBar.setDisplayHomeAsUpEnabled(enableBackButton); + } + } \ No newline at end of file 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 ab0ef4a..d77fbd0 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 @@ -5,6 +5,7 @@ import androidx.lifecycle.ViewModelProvider; import android.content.Intent; +import android.media.Image; import android.os.Bundle; import android.os.Handler; import android.os.Looper; @@ -39,13 +40,13 @@ private Timer timer; private CountUpTimerTask timerTask; private Handler handler = new Handler(Looper.getMainLooper()); - private int msec = 500; + private int msec = 100; //ボタン系 private boolean buttonView = true; + private boolean player = true; private Button buttonPlayback; private Button buttonReset; - private Button buttonClose; private Button buttonDetail; private Button buttonSkip; private Button buttonBack; @@ -56,6 +57,7 @@ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + setTheme(R.style.AppTheme_NoTitleBar);//タイトルバーを消す setContentView(R.layout.activity_animation); animationCanvas = this.findViewById(R.id.animationMyCanvas); init(); @@ -75,18 +77,14 @@ } }); + ////////////////////////////////////////////////////////////////////////// //以下アニメーションボタン関連 //アニメーションの再生停止 buttonPlayback = findViewById(R.id.button_playback); buttonPlayback.setOnClickListener(new View.OnClickListener(){ public void onClick(View v) { - if(onClickPlayback()){ - buttonPlayback.setBackgroundDrawable(getResources().getDrawable(R.drawable.ic_baseline_play_arrow)); - } - else { - buttonPlayback.setBackgroundDrawable(getResources().getDrawable(R.drawable.ic_baseline_pause)); - } + onClickPlayback(); } }); @@ -114,19 +112,11 @@ } }); - - //閉じる - buttonClose = findViewById(R.id.button_close); - buttonClose.setOnClickListener(new View.OnClickListener(){ - public void onClick(View v) { - finish(); - } - }); - //詳細画面へ移動 buttonDetail = findViewById(R.id.button_detail); buttonDetail.setOnClickListener(new View.OnClickListener(){ public void onClick(View v) { + if(player) onClickPlayback(); Intent intent = new Intent(AnimationActivity.this, AnimationDetailActivity.class); intent.putExtra("AnimationJsonData", animationJson); startActivity(intent); @@ -141,7 +131,6 @@ buttonReset.setVisibility(View.INVISIBLE); buttonPlayback.setVisibility(View.INVISIBLE); buttonDetail.setVisibility(View.INVISIBLE); - buttonClose.setVisibility(View.INVISIBLE); buttonSkip.setVisibility(View.INVISIBLE); buttonBack.setVisibility(View.INVISIBLE); @@ -151,7 +140,6 @@ buttonReset.setVisibility(View.VISIBLE); buttonPlayback.setVisibility(View.VISIBLE); buttonDetail.setVisibility(View.VISIBLE); - buttonClose.setVisibility(View.VISIBLE); buttonSkip.setVisibility(View.VISIBLE); buttonBack.setVisibility(View.VISIBLE); @@ -161,35 +149,7 @@ }); } - //Activity内のボタンの表示/非表示 -// @Override -// public boolean onTouchEvent(MotionEvent motionEvent) { -// switch (motionEvent.getAction()){ -// case MotionEvent.ACTION_DOWN: -// //画面タップで表示されてたら非表示にする。 -// if(buttonView) { -// buttonReset.setVisibility(View.INVISIBLE); -// buttonPlayback.setVisibility(View.INVISIBLE); -// buttonDetail.setVisibility(View.INVISIBLE); -// buttonClose.setVisibility(View.INVISIBLE); -// buttonSkip.setVisibility(View.INVISIBLE); -// buttonBack.setVisibility(View.INVISIBLE); -// -// buttonView = false; -// } -// else { -// buttonReset.setVisibility(View.VISIBLE); -// buttonPlayback.setVisibility(View.VISIBLE); -// buttonDetail.setVisibility(View.VISIBLE); -// buttonClose.setVisibility(View.VISIBLE); -// buttonSkip.setVisibility(View.VISIBLE); -// buttonBack.setVisibility(View.VISIBLE); -// -// buttonView = true; -// } -// } -// return false; -// } + //////////////////////////////////////////////////////////////////////////// @@ -219,19 +179,21 @@ } //アニメーションの再生停止 - public boolean onClickPlayback(){ + public void onClickPlayback(){ if(timer != null){ //timerの終了 timer.cancel(); timer = null; - return true; + buttonPlayback.setBackgroundDrawable(getResources().getDrawable(R.drawable.ic_baseline_play_arrow)); + player = false; } else{ //timerの生成 this.timer = new Timer(); this.timerTask = new CountUpTimerTask(); this.timer.schedule(timerTask,0, this.msec);//スケジュールを100ms毎に設定する。 - return false; + buttonPlayback.setBackgroundDrawable(getResources().getDrawable(R.drawable.ic_baseline_pause)); + player = true; } } diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/animation/AnimationConnectionModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/animation/AnimationConnectionModel.java index d5d059f..3d9c6b7 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/animation/AnimationConnectionModel.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/animation/AnimationConnectionModel.java @@ -39,7 +39,7 @@ final StrokesRest strokesRest = retrofit.create(StrokesRest.class); // 筆跡追加API - Call> call = strokesRest.getPageUrls(1111); + Call> call = strokesRest.getPageUrls(acanthus.getCurrentAnimation().getAid()); call.enqueue(new Callback>() { @Override public void onResponse(Call> call, Response> response) { 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 index 7ebf505..86c7f94 100644 --- 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 @@ -8,10 +8,13 @@ import android.os.Bundle; import android.view.View; import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.BaseAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; +import android.widget.ListView; import android.widget.TextView; import org.ntlab.acanthus_client.Acanthus; @@ -20,8 +23,8 @@ import org.ntlab.acanthus_client.entities.AnimationJson; 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.home.ListAnimationViewAdapter; import org.ntlab.acanthus_client.views.userpage.UserPageActivity; -import org.ntlab.acanthus_client.views.userpage.followerList.FollowerListActivity; import java.io.IOException; import java.io.InputStream; @@ -42,71 +45,77 @@ Intent intent = getIntent(); AnimationJson animationJson = (AnimationJson) intent.getSerializableExtra("AnimationJsonData"); +// View header = (View)getLayoutInflater().inflate(R.layout.animation_home_header,null); + + setContentView((R.layout.activity_animation_detail)); + ListView listView = findViewById(R.id.editorsView); +// listView.addHeaderView(header); + Animation currentAnimation = acanthus.getCurrentAnimation(); - setContentView(R.layout.activity_animation_detail); //作成者のuidとnameを保存 ArrayList editorsUid = (ArrayList) animationJson.getEditorIds(); ArrayList editorsNames = (ArrayList) animationJson.getEditorNames(); //文字入力テスト - EditText editText = findViewById(R.id.edit_text); - TextView wordText = findViewById(R.id.word_text); - TextView wordText2 = findViewById(R.id.word_text2); - Button wordButton = findViewById(R.id.word_button); TextView wordText15 = findViewById(R.id.textView15); wordText15.setText(currentAnimation.getName()); TextView wordText16 = findViewById(R.id.textView16); wordText16.setText(currentAnimation.getAid().toString()); TextView wordText17 = findViewById(R.id.textView17); wordText17.setText(currentAnimation.getCreatedDate().toString()); - TextView wordText18 = findViewById(R.id.textView18); - Button editor1Button = findViewById(R.id.button_editor1); - Button editor2Button = findViewById(R.id.button_editor2); - editor1Button.setOnClickListener(new View.OnClickListener(){ + BaseAdapter adapter = new ListEditorsViewAdapter(this, R.layout.animation_detail, animationJson); + listView.setAdapter(adapter); + + listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override - public void onClick(View v){ - + public void onItemClick(AdapterView adapterView, View view, int position, long id) { +// homeViewModel.setCurrentAnimation(animationJsonSortList.get(position).getAid(), acanthus); +// transitionAnimationActivity(animationJsonSortList.get(position)); + Intent intent = new Intent(getApplication(), UserPageActivity.class); + intent.putExtra("UID", editorsUid.get(position)); + intent.putExtra("NAME", editorsNames.get(position)); + startActivity(intent); } }); - wordButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - // エディットテキストのテキストを取得 - String text = editText.getText().toString(); - // 取得したテキストを TextView に張り付ける - wordText.setText(text); - wordText2.setText(text); - } - }); +// wordButton.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// // エディットテキストのテキストを取得 +// String text = editText.getText().toString(); +// // 取得したテキストを TextView に張り付ける +// wordText.setText(text); +// wordText2.setText(text); +// } +// }); //画面を閉じる Button returnButton = findViewById(R.id.return_button); returnButton.setOnClickListener(v -> finish()); - //作成者のページに移動 - editor1Button.setOnClickListener(new View.OnClickListener(){ - @Override - public void onClick(View v){ - Intent intent = new Intent(getApplication(), UserPageActivity.class); - intent.putExtra("UID", editorsUid.get(0)); - intent.putExtra("NAME", editorsNames.get(0)); - startActivity(intent); - - } - }); - editor2Button.setOnClickListener(new View.OnClickListener(){ - @Override - public void onClick(View v){ - Intent intent = new Intent(getApplication(), UserPageActivity.class); - intent.putExtra("UID", editorsUid.get(1)); - intent.putExtra("NAME", editorsNames.get(1)); - startActivity(intent); - - } - }); +// //作成者のページに移動 +// editor1Button.setOnClickListener(new View.OnClickListener(){ +// @Override +// public void onClick(View v){ +// Intent intent = new Intent(getApplication(), UserPageActivity.class); +// intent.putExtra("UID", editorsUid.get(0)); +// intent.putExtra("NAME", editorsNames.get(0)); +// startActivity(intent); +// +// } +// }); +// editor2Button.setOnClickListener(new View.OnClickListener(){ +// @Override +// public void onClick(View v){ +// Intent intent = new Intent(getApplication(), UserPageActivity.class); +// intent.putExtra("UID", editorsUid.get(1)); +// intent.putExtra("NAME", editorsNames.get(1)); +// startActivity(intent); +// +// } +// }); /* //作成者のページに移動(今は仮でアニメーション画面へ) Button buttonEditor2 = findViewById(R.id.button_editor2); diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/animation_detail/ListEditorsViewAdapter.java b/app/src/main/java/org/ntlab/acanthus_client/views/animation_detail/ListEditorsViewAdapter.java new file mode 100644 index 0000000..4cee20a --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/animation_detail/ListEditorsViewAdapter.java @@ -0,0 +1,87 @@ +package org.ntlab.acanthus_client.views.animation_detail; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; + +import org.ntlab.acanthus_client.R; +import org.ntlab.acanthus_client.entities.AnimationJson; + +import java.util.ArrayList; + +public class ListEditorsViewAdapter extends BaseAdapter { + + static class ViewHolder{ + TextView editorName; + } + + private LayoutInflater inflater; + private int itemLayoutId; + private ArrayList editorsName = new ArrayList<>(); + private ArrayList editorsUid = new ArrayList<>(); + + ListEditorsViewAdapter(Context context, int itemLayoutId, + AnimationJson animationJson) { + super(); + this.inflater = (LayoutInflater) + context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + this.itemLayoutId = itemLayoutId; + + this.editorsName = (ArrayList)animationJson.getEditorNames(); + this.editorsUid = (ArrayList) animationJson.getEditorIds(); + + } + + ListEditorsViewAdapter(Context context, int itemLayoutId){ + super(); + int i = 0; + this.inflater = (LayoutInflater) + context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + this.itemLayoutId = itemLayoutId; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ListEditorsViewAdapter.ViewHolder holder; + // 最初だけ View を inflate して、それを再利用する + if (convertView == null) { + // activity_main.xml に list.xml を inflate して convertView とする + convertView = inflater.inflate(itemLayoutId, parent, false); + // ViewHolder を生成 + holder = new ListEditorsViewAdapter.ViewHolder(); + holder.editorName = convertView.findViewById(R.id.editor_Name); + convertView.setTag(holder); + + holder.editorName.setText(this.editorsName.get(position)); + + } + // holder を使って再利用 + else { + holder = (ListEditorsViewAdapter.ViewHolder) convertView.getTag(); + } + + // holder の imageView にセット + holder.editorName.setText(editorsName.get(position)); + + return convertView; + } + + @Override + public int getCount() { + return editorsName.size(); + } + + @Override + public Object getItem(int i) { + return null; + } + + @Override + public long getItemId(int i) { + return 0; + } + +} diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/button/AlphaButton.java b/app/src/main/java/org/ntlab/acanthus_client/views/button/AlphaButton.java index 33c146b..427f859 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/button/AlphaButton.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/button/AlphaButton.java @@ -18,7 +18,7 @@ @Override public void setPressed(boolean pressed) { if(pressed){ - this.setAlpha(0.75f); + this.setAlpha(0.60f); }else{ this.setAlpha(1.0f); } diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/login/LoginScreenActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/login/LoginScreenActivity.java index f78cae3..3bad98b 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/login/LoginScreenActivity.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/login/LoginScreenActivity.java @@ -7,6 +7,7 @@ import android.content.Intent; import android.os.Bundle; import android.view.View; +import android.widget.TextView; import org.ntlab.acanthus_client.Acanthus; import org.ntlab.acanthus_client.R; @@ -41,8 +42,24 @@ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + setTheme(R.style.AppTheme_NoTitleBar);//タイトルバーを消す init(); } + //----------------------------------------------------------------- + @Override + protected void onResume() { + super.onResume(); + if (hasAccount()) { + Acanthus acanthus = (Acanthus) getApplication(); + TextView email = findViewById(R.id.editTextTextLoginEmail); + TextView password = findViewById(R.id.editTextTextLoginPassword); + + email.setText(acanthus.getPreferenceEmail()); + password.setText(acanthus.getPreferencePassword()); + } + // ダミー表示 + // else setDummyForm(); + } //----------------------------------------------------------------- //----------------------------------------------------------------- @@ -77,6 +94,24 @@ startActivity(intent); finish(); } - //----------------------------------------------------------------- + //----------------------------------------------------------------- + // 既にアカウントを持っている場合 + private boolean hasAccount() { + Acanthus acanthus = (Acanthus) getApplication(); + if (acanthus.getPreferenceEmail().equals("")) return false; + return !acanthus.getPreferencePassword().equals(""); + } + + //----------------------------------------------------------------- + // + private void setDummyForm(){ + Acanthus acanthus = (Acanthus) getApplication(); + TextView email = findViewById(R.id.editTextTextLoginEmail); + TextView password = findViewById(R.id.editTextTextLoginPassword); + + email.setText("d0@dummy.com"); + password.setText("nittalab"); + } + //----------------------------------------------------------------- } \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/login/LoginScreenViewModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/login/LoginScreenViewModel.java index 2af6024..61a6513 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/login/LoginScreenViewModel.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/login/LoginScreenViewModel.java @@ -74,6 +74,7 @@ // ログイン成功時に値の変更を行う private void setVariableFromResponse(Acanthus acanthus, LoginResponseJson loginResponse, String email, String password) { acanthus.setPreferenceUid(loginResponse.getUid()); + acanthus.setPreferenceName(loginResponse.getName()); acanthus.setPreferenceToken(loginResponse.getToken()); acanthus.setPreferenceEmail(email); acanthus.setPreferencePassword(password); 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 index a505b2e..fb406b1 100644 --- 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 @@ -1,12 +1,14 @@ package org.ntlab.acanthus_client.views.main_menu_ui.create; import android.content.Intent; +import android.net.Uri; 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.ImageButton; import android.widget.ImageView; import androidx.annotation.NonNull; @@ -20,21 +22,32 @@ 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.MainActivity; import org.ntlab.acanthus_client.views.main_menu_ui.edit.EditViewModel; +import org.ntlab.acanthus_client.views.main_menu_ui.home.HomeFragment; +import org.ntlab.acanthus_client.views.main_menu_ui.home.HomeViewModel; import org.ntlab.acanthus_client.views.paint.PaintActivity; public class CreateFragment extends Fragment { private CreateViewModel createViewModel; private FragmentCreateBinding binding; + private HomeViewModel homeViewModel; + private Acanthus acanthus; public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { createViewModel = new ViewModelProvider(this).get(CreateViewModel.class); + homeViewModel = + new ViewModelProvider(this).get(HomeViewModel.class); binding = FragmentCreateBinding.inflate(inflater, container, false); View root = binding.getRoot(); + // 戻るボタン + MainActivity activity = (MainActivity) getActivity(); + activity.setupBackButton(false); + return root; } @@ -42,18 +55,21 @@ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); Button appButton = view.findViewById(R.id.Paint_button_create); + ImageButton nittasiteButton = view.findViewById(R.id.nittalabimage); //ダミーユーザー - Integer uid = 1; - String token = "abc0"; - Acanthus acanthus = (Acanthus) getActivity().getApplication(); + + acanthus = (Acanthus) getActivity().getApplication(); + Integer uid = acanthus.getPreferenceUid(); + String token = acanthus.getPreferenceToken(); appButton.setOnClickListener(v -> { //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); + homeViewModel.updateGallery(acanthus); transitionPaintActivity(); }); @@ -61,6 +77,10 @@ acanthus.setAid(createViewModel.getAidJson().getValue().getAid()); }); + nittasiteButton.setOnClickListener(v -> { + Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://silverbullet.is.konan-u.ac.jp/")); + startActivity(intent); + }); } @@ -70,6 +90,7 @@ private void transitionPaintActivity() { Acanthus acanthus = (Acanthus) getActivity().getApplication(); Intent intent = new Intent(acanthus, PaintActivity.class); + homeViewModel.updateGallery(acanthus); // ギャラリーをアップデート startActivity(intent); } } 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 7bdc090..0bc2c0a 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 @@ -22,6 +22,8 @@ import org.ntlab.acanthus_client.entities.Animation; import org.ntlab.acanthus_client.entities.AnimationJson; import org.ntlab.acanthus_client.entities.WorkJson; +import org.ntlab.acanthus_client.views.main_menu_ui.home.HomeFragment; +import org.ntlab.acanthus_client.views.main_menu_ui.home.HomeViewModel; import org.ntlab.acanthus_client.views.paint.PaintActivity; import androidx.annotation.NonNull; @@ -45,7 +47,8 @@ private EditViewModel editViewModel; private FragmentEditBinding binding; - private ArrayList aidList; + private ArrayList userAidList; + private ArrayList aidList = new ArrayList<>(); private ArrayList AnimationJsonList; private ArrayList nameList; private ArrayList lastUpDateList; @@ -54,6 +57,8 @@ private Integer AnimationAid; private String AnimationName; private String AnimationLastUpDate; + private HomeViewModel homeViewModel; + private Acanthus acanthus; private SwipeRefreshLayout mSwipeRefreshLayout; @@ -61,6 +66,8 @@ ViewGroup container, Bundle savedInstanceState) { editViewModel = new ViewModelProvider(this).get(EditViewModel.class); + homeViewModel = + new ViewModelProvider(this).get(HomeViewModel.class); binding = FragmentEditBinding.inflate(inflater, container, false); View root = binding.getRoot(); @@ -76,18 +83,23 @@ editViewModel = new ViewModelProvider(this).get(EditViewModel.class); - Acanthus acanthus = (Acanthus) getActivity().getApplication(); - Integer uid = 1; - String token = "abc0"; + acanthus = (Acanthus) getActivity().getApplication(); + Integer uid = acanthus.getPreferenceUid(); + String token = acanthus.getPreferenceToken(); editViewModel.getWorkList(uid, token); - aidList = new ArrayList<>(); + userAidList = new ArrayList<>(); nameList = new ArrayList<>(); lastUpDateList = new ArrayList<>(); AnimationJsonList = new ArrayList<>(); Map nameHashMap = new HashMap(); Map lastUpDateHashMap = new HashMap(); + View header = (View)getLayoutInflater().inflate(R.layout.fragment_edit_header,null); + ListView listView = (ListView) getActivity().findViewById(R.id.list_view); + listView.addHeaderView(header); + + homeViewModel.updateGallery(acanthus); // ギャラリーをアップデート // SwipeRefreshLayoutを作成 createSwipeRefreshLayout(); @@ -97,23 +109,22 @@ //listViewの表示をしている @Override public void onChanged(@Nullable WorkJson workJson) { - aidList = (ArrayList) editViewModel.getWorkJson().getValue().getAid(); + userAidList = (ArrayList) editViewModel.getWorkJson().getValue().getAid(); AnimationJsonList = (ArrayList) acanthus.getAnimationJsonList(); - ArrayList workList = new ArrayList<>(); + HashMap workList = new HashMap<>(); if(AnimationJsonList != null){ - for(int i=0; i entry : list_entries) { lastUpDateList.add(entry.getValue()); nameList.add(nameHashMap.get(entry.getKey())); + aidList.add(entry.getKey()); } //-------------------------------------------------------------------------------------------------------------------- @@ -141,7 +153,7 @@ listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView adapterView, View view, int position, long id) { - transitionPaintActivity(workList.get(position)); + transitionPaintActivity(aidList.get(position-1)); } }); } @@ -182,10 +194,10 @@ } //各作品毎の画面遷移 - private void transitionPaintActivity(AnimationJson animationJson) { + private void transitionPaintActivity(Integer aid) { Acanthus acanthus = (Acanthus) getActivity().getApplication(); Intent intent = new Intent(acanthus, PaintActivity.class); - acanthus.setAid(animationJson.getAid()); + acanthus.setAid(aid); startActivity(intent); } @@ -200,7 +212,7 @@ // ひっぱり更新の処理 @Override public void onRefresh() { - + homeViewModel.updateGallery(acanthus); // ギャラリーをアップデート mSwipeRefreshLayout.setRefreshing(false); } } \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/home/HomeFragment.java b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/home/HomeFragment.java index 2f38308..18a2716 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/home/HomeFragment.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/home/HomeFragment.java @@ -17,12 +17,16 @@ import org.ntlab.acanthus_client.databinding.FragmentHomeBinding; import org.ntlab.acanthus_client.entities.Animation; import org.ntlab.acanthus_client.entities.AnimationJson; +import org.ntlab.acanthus_client.entities.Stroke; +import org.ntlab.acanthus_client.views.MainActivity; import org.ntlab.acanthus_client.views.animation.AnimationActivity; import org.ntlab.acanthus_client.views.paint.PaintActivity; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; +import androidx.lifecycle.LifecycleOwner; +import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; @@ -37,8 +41,13 @@ private HomeViewModel homeViewModel; private FragmentHomeBinding binding; - + private Acanthus acanthus; + private MutableLiveData mdacanthus = new MutableLiveData<>(); private SwipeRefreshLayout mSwipeRefreshLayout; + //ソート用宣言 + private ArrayList createDateList = new ArrayList<>(); + private ArrayList animationJsonSortList =new ArrayList<>(); + int mdposition=0; @Override public View onCreateView(@NonNull LayoutInflater inflater, @@ -50,8 +59,6 @@ View root = binding.getRoot(); ListView listView = binding.animationView; - -// homeViewModel.updateGallery(); // // final TextView textView = binding.textHome; // homeViewModel.getText().observe(getViewLifecycleOwner(), new Observer() { @@ -68,10 +75,11 @@ public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Log.d("CreatedActivity", "EditFragment"); - - Acanthus acanthus = (Acanthus) getActivity().getApplication(); + startObserve(); + acanthus = (Acanthus) getActivity().getApplication(); Integer uid = 1; String token = "abc0"; + //updateGallery(); View header = (View)getLayoutInflater().inflate(R.layout.animation_home_header,null); @@ -87,9 +95,9 @@ @Override public void onChanged(Collection animationJsons) { Collection animationJsonList = homeViewModel.getGallery(); - //ソート用宣言 - ArrayList createDateList = new ArrayList<>(); - ArrayList animationJsonSortList =new ArrayList<>(); +// //ソート用宣言 +// ArrayList createDateList = new ArrayList<>(); +// ArrayList animationJsonSortList =new ArrayList<>(); //ソート処理 for (AnimationJson animationJson : animationJsonList){ @@ -114,8 +122,9 @@ // transitionAnimationActivity(animationJsonSortList.get(position)); if (position != 0) { try { - homeViewModel.setCurrentAnimation(animationJsonSortList.get(position-1).getAid(), acanthus); - transitionAnimationActivity(animationJsonSortList.get(position-1)); + mdposition=position; + Log.d("", "onItemClick: "+ animationJsonSortList.get(position-1).getAid()); + homeViewModel.setCurrentAnimation(animationJsonSortList.get(position-1).getAid(), mdacanthus,acanthus); } catch (IOException e) { e.printStackTrace(); } @@ -127,6 +136,10 @@ } + public void updateGallery() { + homeViewModel.updateGallery(acanthus); + } + @Override public void onDestroyView() { super.onDestroyView(); @@ -134,7 +147,7 @@ } private void transitionAnimationActivity(AnimationJson animationJson) { - Acanthus acanthus = (Acanthus) getActivity().getApplication(); + //Acanthus acanthus = (Acanthus) getActivity().getApplication(); Intent intent = new Intent(acanthus, AnimationActivity.class); intent.putExtra("AnimationJsonData", animationJson); startActivity(intent); @@ -151,7 +164,24 @@ // ひっぱり更新の処理 @Override public void onRefresh() { - + homeViewModel.updateGallery(acanthus); mSwipeRefreshLayout.setRefreshing(false); } + + public MutableLiveData getMdacanthus(){ + return this.mdacanthus; + } + private void startObserve() { + getMdacanthus().observe(this.getViewLifecycleOwner(), new Observer() { + @Override + public void onChanged(Acanthus retroacanthus) { + try { + acanthus = retroacanthus; + transitionAnimationActivity(animationJsonSortList.get(mdposition-1)); + }catch (NullPointerException e){ + + } + } + }); + } } \ No newline at end of file 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 8cb2ea0..d4dec2c 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 @@ -48,7 +48,7 @@ - public void setCurrentAnimation(int aid, Acanthus acanthus) throws IOException { + public void setCurrentAnimation(int aid, MutableLiveData mdacanthus,Acanthus acanthus) throws IOException { Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/acanthus/") @@ -65,6 +65,7 @@ if(response.isSuccessful()){ animation = response.body(); acanthus.setCurrentAnimation(animation); + mdacanthus.setValue(acanthus); Log.d(acanthus.getCurrentAnimation().getName(), toString()); } } 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 7654c96..9902370 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 @@ -7,16 +7,22 @@ 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.entities.FollowJson; +import org.ntlab.acanthus_client.entities.FollowerJson; import org.ntlab.acanthus_client.views.animation.AnimationActivity; -import org.ntlab.acanthus_client.views.paint.PaintActivity; +import org.ntlab.acanthus_client.views.main_menu_ui.mypage.help.HowToUseActivity; +import org.ntlab.acanthus_client.views.main_menu_ui.mypage.help.InquiryActivity; +import org.ntlab.acanthus_client.views.main_menu_ui.mypage.others.AppInformationActivity; +import org.ntlab.acanthus_client.views.main_menu_ui.mypage.logout.LogoutActivity; +import org.ntlab.acanthus_client.views.main_menu_ui.mypage.others.PrivacyPolicyActivity; +import org.ntlab.acanthus_client.views.main_menu_ui.mypage.others.TermsOfServiceActivity; +import org.ntlab.acanthus_client.views.userpage.followFollower.FollowFollowerActivity; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -24,7 +30,8 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import static android.os.Build.VERSION_CODES.R; +import java.util.ArrayList; +import java.util.Collection; //----------------------------------------------------------------- // @@ -47,8 +54,16 @@ @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); + onClickFollow(view); + onClickFollower(view); onClickAccept(view); onClickAnimation(view); + onClickAppInformation(view); + onClickPrivacyPolicy(view); + onClickTermsOfService(view); + onClickLogout(view); + onClickHowToUse(view); + onClickInquiry(view); } //----------------------------------------------------------------- @@ -61,11 +76,45 @@ //----------------------------------------------------------------- // + public void onClickFollow(View view) { + Button button = view.findViewById(R.id.followListButton); + + button.setOnClickListener(v -> { + transitionFollowListActivity(); + }); + } + + //----------------------------------------------------------------- + // + public void onClickFollower(View view) { + Button button = view.findViewById(R.id.followerListButton); + + button.setOnClickListener(v -> { + transitionFollowerListActivity(); + }); + } + + //----------------------------------------------------------------- + // public void onClickAccept(View view) { Button buttonIsInvited = view.findViewById(org.ntlab.acanthus_client.R.id.buttonIsInvited); + TextView complete_text = view.findViewById(R.id.complete_text); buttonIsInvited.setOnClickListener(v -> { - mypageViewModel.acceptInviteRequest(); + mypageViewModel.startInvitedAid(); + mypageViewModel.getInvitedAid().observe(getViewLifecycleOwner(), new Observer>() { + @Override + public void onChanged(Collection aidList) { + ArrayList aidArrayList = new ArrayList<>(aidList); + mypageViewModel.acceptInviteRequest(aidArrayList.get(aidArrayList.size() - 1)); + } + }); + mypageViewModel.getAcceptInvited().observe(getViewLifecycleOwner(), new Observer() { + @Override + public void onChanged(Boolean acceptInvited) { + complete_text.setText("作品に参加しました"); + } + }); }); } @@ -80,13 +129,77 @@ } //----------------------------------------------------------------- + // + public void onClickAppInformation(View view) { + Button button = view.findViewById(org.ntlab.acanthus_client.R.id.app_information); + + button.setOnClickListener(v -> { + transitionAppInformationActivity(); + }); + } + + //----------------------------------------------------------------- + // + public void onClickPrivacyPolicy(View view) { + Button button = view.findViewById(org.ntlab.acanthus_client.R.id.privacy_policy); + + button.setOnClickListener(v -> { + transitionPrivacyPolicyActivity(); + }); + } + + //----------------------------------------------------------------- + // + public void onClickTermsOfService(View view) { + Button button = view.findViewById(org.ntlab.acanthus_client.R.id.terms_of_service); + + button.setOnClickListener(v -> { + transitionTermsOfServiceActivity(); + }); + } + + //----------------------------------------------------------------- + // + public void onClickLogout(View view) { + Button button = view.findViewById(org.ntlab.acanthus_client.R.id.logout); + + button.setOnClickListener(v -> { + transitionLogoutActivity(); + }); + } + + //----------------------------------------------------------------- + // + public void onClickHowToUse(View view) { + Button button = view.findViewById(R.id.How_to_use); + + button.setOnClickListener(v -> { + transitionHowToUseActivity(); + }); + } + + //----------------------------------------------------------------- + // + public void onClickInquiry(View view) { + Button button = view.findViewById(R.id.inquiry); + + button.setOnClickListener(v -> { + transitionInquiryActivity(); + }); + } + + //----------------------------------------------------------------- //----------------------------------------------------------------- // init private void init() { Acanthus acanthus = (Acanthus) getActivity().getApplication(); + TextView loginNameText = binding.textMyname; + loginNameText.setText(acanthus.getPreferenceName()); mypageViewModel = new ViewModelProvider(this).get(MyPageViewModel.class); mypageViewModel.init(acanthus); startObserve(); + observeFollowsSize(acanthus.getPreferenceUid()); + observeFollowersSize(acanthus.getPreferenceUid()); mypageViewModel.checkInvitedRequest(); mypageViewModel.getAccountInfoRequest(); @@ -127,11 +240,108 @@ //----------------------------------------------------------------- // + public void observeFollowsSize(Integer loginUid) { + TextView followsSize = binding.followsSizeText; + + mypageViewModel.getMyFollows(loginUid); + mypageViewModel.getMyFollowJson().observe(getViewLifecycleOwner(), new Observer() { + @Override + public void onChanged(FollowJson followJson) { + Integer size = followJson.getFollowUids().size(); + followsSize.setText(size.toString()); + } + }); + } + + //----------------------------------------------------------------- + // + public void observeFollowersSize(Integer loginUid) { + TextView followersSize = binding.followersSizeText; + + mypageViewModel.getMyFollowers(loginUid); + mypageViewModel.getMyFollowerJson().observe(getViewLifecycleOwner(), new Observer() { + @Override + public void onChanged(FollowerJson followerJson) { + Integer size = followerJson.getFollowerUids().size(); + followersSize.setText(size.toString()); + } + }); + } + + //----------------------------------------------------------------- + // + public void transitionFollowListActivity() { + Acanthus acanthus = (Acanthus) getActivity().getApplication(); + Intent intent = new Intent(acanthus, FollowFollowerActivity.class); + intent.putExtra("UID", acanthus.getPreferenceUid()); + intent.putExtra("NAME", acanthus.getPreferenceName()); + startActivity(intent); + } + + //----------------------------------------------------------------- + // + public void transitionFollowerListActivity() { + Acanthus acanthus = (Acanthus) getActivity().getApplication(); + Intent intent = new Intent(acanthus, FollowFollowerActivity.class); + intent.putExtra("UID", acanthus.getPreferenceUid()); + intent.putExtra("NAME", acanthus.getPreferenceName()); + startActivity(intent); + } + + //----------------------------------------------------------------- + // private void transitionAnimationActivity() { Acanthus acanthus = (Acanthus) getActivity().getApplication(); Intent intent = new Intent(acanthus, AnimationActivity.class); startActivity(intent); } + //----------------------------------------------------------------- + // + private void transitionAppInformationActivity() { + Acanthus acanthus = (Acanthus) getActivity().getApplication(); + Intent intent = new Intent(acanthus, AppInformationActivity.class); + startActivity(intent); + } + + //----------------------------------------------------------------- + // + private void transitionPrivacyPolicyActivity() { + Acanthus acanthus = (Acanthus) getActivity().getApplication(); + Intent intent = new Intent(acanthus, PrivacyPolicyActivity.class); + startActivity(intent); + } + + //----------------------------------------------------------------- + // + private void transitionTermsOfServiceActivity() { + Acanthus acanthus = (Acanthus) getActivity().getApplication(); + Intent intent = new Intent(acanthus, TermsOfServiceActivity.class); + startActivity(intent); + } + + //----------------------------------------------------------------- + // + private void transitionLogoutActivity() { + Acanthus acanthus = (Acanthus) getActivity().getApplication(); + Intent intent = new Intent(acanthus, LogoutActivity.class); + startActivity(intent); + } + + //----------------------------------------------------------------- + // + private void transitionHowToUseActivity() { + Acanthus acanthus = (Acanthus) getActivity().getApplication(); + Intent intent = new Intent(acanthus, HowToUseActivity.class); + startActivity(intent); + } + + //----------------------------------------------------------------- + // + private void transitionInquiryActivity() { + Acanthus acanthus = (Acanthus) getActivity().getApplication(); + Intent intent = new Intent(acanthus, InquiryActivity.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 ba633d4..f2170fb 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 @@ -3,8 +3,19 @@ import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.jackson.JacksonConverterFactory; import org.ntlab.acanthus_client.Acanthus; +import org.ntlab.acanthus_client.entities.FollowJson; +import org.ntlab.acanthus_client.entities.FollowerJson; +import org.ntlab.acanthus_client.resources.accounts.FollowersRest; +import org.ntlab.acanthus_client.resources.accounts.FollowsRest; + +import java.util.Collection; //----------------------------------------------------------------- @@ -13,6 +24,10 @@ private MyPageModelContainer myPageModelContainer; private MutableLiveData mIsInvited = new MutableLiveData<>(); private MutableLiveData mUidText = new MutableLiveData<>(); + private MutableLiveData myFollowJsonMutableLiveData; + private MutableLiveData myFollowerJsonMutableLiveData; + private MutableLiveData> invitedAid = new MutableLiveData<>(); + private MutableLiveData acceptInvited = new MutableLiveData<>(); //----------------------------------------------------------------- // getter @@ -24,11 +39,29 @@ return mUidText; } + public LiveData getMyFollowJson() { + return myFollowJsonMutableLiveData; + } + + public LiveData getMyFollowerJson() { + return myFollowerJsonMutableLiveData; + } + public LiveData> getInvitedAid() { + return invitedAid; + } + public LiveData getAcceptInvited() { + return acceptInvited; + } + + + //----------------------------------------------------------------- //----------------------------------------------------------------- // init public void init(Acanthus acanthus) { myPageModelContainer = new MyPageModelContainer(acanthus); + this.myFollowJsonMutableLiveData = new MutableLiveData<>(); + this.myFollowerJsonMutableLiveData = new MutableLiveData<>(); } //----------------------------------------------------------------- @@ -44,8 +77,72 @@ } //----------------------------------------------------------------- // 招待を承諾するリクエスト - public void acceptInviteRequest(){ - myPageModelContainer.getInvitedConnectionModel().acceptInvite(); + public void acceptInviteRequest(Integer aid){ + myPageModelContainer.getInvitedConnectionModel().acceptInvite(aid,acceptInvited); } //----------------------------------------------------------------- + public void startInvitedAid(){ + myPageModelContainer.getInvitedConnectionModel().getInvitedAid(invitedAid); + } + + + //----------------------------------------------------------------- + //ログイン中のユーザーのフォローリストを取得する + public void getMyFollows(Integer uid) { + Retrofit retrofit = new Retrofit.Builder() + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/acanthus/") + .addConverterFactory(JacksonConverterFactory.create()) + .build(); + final FollowsRest followsRest = retrofit.create(FollowsRest.class); + + //フォローリストの取得 + Call call = followsRest.getFollows(uid); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + if (response.body() != null) { + myFollowJsonMutableLiveData.setValue(response.body()); + } + } + } + + @Override + public void onFailure(Call call, Throwable t) { + + } + }); + } + + //----------------------------------------------------------------- + //ユーザーのフォロワーリストを取得する + public void getMyFollowers(Integer uid){ + Retrofit retrofit = new Retrofit.Builder() + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/acanthus/") + .addConverterFactory(JacksonConverterFactory.create()) + .build(); + final FollowersRest followersRest = retrofit.create(FollowersRest.class); + + //フォロワーリストの取得 + Call call = followersRest.getFollowers(uid); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + if (response.body() != null) { + myFollowerJsonMutableLiveData.setValue(response.body()); + } + } + } + + @Override + public void onFailure(Call call, Throwable t) { + + } + }); + + } + + + } \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/mypage/help/HowToUseActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/mypage/help/HowToUseActivity.java new file mode 100644 index 0000000..d761ab5 --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/mypage/help/HowToUseActivity.java @@ -0,0 +1,24 @@ +package org.ntlab.acanthus_client.views.main_menu_ui.mypage.help; + +import androidx.appcompat.app.AppCompatActivity; + +import android.os.Bundle; + +import org.ntlab.acanthus_client.R; + +public class HowToUseActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setTitle( "使い方" ); + init(); + } + + //----------------------------------------------------------------- + //----------------------------------------------------------------- + // 初期化 + private void init() { + setContentView(R.layout.activity_how_to_use); + } +} \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/mypage/help/InquiryActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/mypage/help/InquiryActivity.java new file mode 100644 index 0000000..20d04ca --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/mypage/help/InquiryActivity.java @@ -0,0 +1,25 @@ +package org.ntlab.acanthus_client.views.main_menu_ui.mypage.help; + +import androidx.appcompat.app.AppCompatActivity; + +import android.os.Bundle; + +import org.ntlab.acanthus_client.R; + +public class InquiryActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setTitle( "お問い合わせ" ); + init(); + } + + //----------------------------------------------------------------- + //----------------------------------------------------------------- + // 初期化 + private void init() { + setContentView(R.layout.activity_inquiry); + } + +} \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/mypage/logout/LogoutActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/mypage/logout/LogoutActivity.java new file mode 100644 index 0000000..5462e09 --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/mypage/logout/LogoutActivity.java @@ -0,0 +1,57 @@ +package org.ntlab.acanthus_client.views.main_menu_ui.mypage.logout; + +import androidx.appcompat.app.AppCompatActivity; + +import android.content.Intent; +import android.os.Bundle; +import android.widget.Button; + +import org.ntlab.acanthus_client.R; +import org.ntlab.acanthus_client.views.login.LoginScreenActivity; + +public class LogoutActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setTitle( "ログアウト" ); + init(); + onClickLogout(); + onClickCancelLogout(); + } + + //----------------------------------------------------------------- + //----------------------------------------------------------------- + // 初期化 + private void init() { + setContentView(R.layout.activity_logout); + } + + //----------------------------------------------------------------- + // + public void onClickLogout() { + Button button = findViewById(R.id.logout_yes); + + button.setOnClickListener(v -> { + transitionLoginScreenActivity(); + }); + } + + //----------------------------------------------------------------- + // + public void onClickCancelLogout() { + Button button = findViewById(R.id.logout_no); + + button.setOnClickListener(v -> { + finish(); + }); + } + + //----------------------------------------------------------------- + // + public void transitionLoginScreenActivity() { + Intent intent = new Intent(getApplication(), LoginScreenActivity.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/model/Invited/InvitedConnectionModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/mypage/model/Invited/InvitedConnectionModel.java index e8548a4..a8d645f 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/mypage/model/Invited/InvitedConnectionModel.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/mypage/model/Invited/InvitedConnectionModel.java @@ -7,6 +7,8 @@ import org.ntlab.acanthus_client.resources.accounts.InvitedRest; import org.ntlab.acanthus_client.resources.accounts.WorkRest; +import java.util.Collection; + import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -22,6 +24,7 @@ private Acanthus acanthus; //----------------------------------------------------------------- private Boolean isInvited; + private String token; //----------------------------------------------------------------- // setter @@ -40,9 +43,10 @@ // 招待確認 public void checkInvited(MutableLiveData mIsInvited) { final InvitedRest invitedRest = retrofit.create(InvitedRest.class); - int dummyId = 2; +// int dummyId = 2; + Integer uid = acanthus.getPreferenceUid(); - Call call = invitedRest.checkAccountInvited(dummyId, acanthus.getAid()); + Call call = invitedRest.checkAccountInvited(uid, acanthus.getAid()); call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { @@ -67,26 +71,27 @@ //----------------------------------------------------------------- // 招待承認 - public void acceptInvite() { + public void acceptInvite(Integer aid,MutableLiveData acceptInvited) { final WorkRest workRest = retrofit.create(WorkRest.class); - int dummy = 1111; - // 作品への参加 // 自身のID, token, 該当作品ID // ToDo: Aidを外部から取得する必要あり? -> AccountのInviteMapから任意の // ToDo: getAidを招待一覧画面で更新してから取得すれば変更しなくてよさそう +// Integer dummyUid = 2; +// String dummyToken = "abc1"; + String token = acanthus.getPreferenceToken(); + Integer uid = acanthus.getPreferenceUid(); - - - Call call = workRest.updateWork(acanthus.getPreferenceUid(), acanthus.getPreferenceToken(), dummy); - call.enqueue(new Callback() { + Call call = workRest.updateWork(uid, token, aid); + call.enqueue(new Callback() { @Override - public void onResponse(Call call, Response response) { + public void onResponse(Call call, Response response) { + acceptInvited.setValue(response.body()); } @Override - public void onFailure(Call call, Throwable t) { + public void onFailure(Call call, Throwable t) { } }); @@ -105,4 +110,25 @@ } //----------------------------------------------------------------- -} + public void getInvitedAid(MutableLiveData> invitedAid) { + final InvitedRest invitedRest = retrofit.create(InvitedRest.class); + //dummy + Integer uid = acanthus.getPreferenceUid(); + String token = acanthus.getPreferenceToken(); + + Call> call = invitedRest.getAccountInvited(uid, token); + call.enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + if (response.isSuccessful()) + invitedAid.setValue(response.body()); + } + + @Override + public void onFailure(Call> call, Throwable t) { + + } + }); + + } +} \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/mypage/others/AppInformationActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/mypage/others/AppInformationActivity.java new file mode 100644 index 0000000..6e7ef55 --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/mypage/others/AppInformationActivity.java @@ -0,0 +1,25 @@ +package org.ntlab.acanthus_client.views.main_menu_ui.mypage.others; + +import androidx.appcompat.app.AppCompatActivity; + +import android.os.Bundle; + +import org.ntlab.acanthus_client.R; + +public class AppInformationActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setTitle( "アプリ情報" ); + init(); + } + + //----------------------------------------------------------------- + //----------------------------------------------------------------- + // 初期化 + private void init() { + setContentView(R.layout.activity_app_information); + } + +} \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/mypage/others/PrivacyPolicyActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/mypage/others/PrivacyPolicyActivity.java new file mode 100644 index 0000000..9f3a45c --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/mypage/others/PrivacyPolicyActivity.java @@ -0,0 +1,25 @@ +package org.ntlab.acanthus_client.views.main_menu_ui.mypage.others; + +import androidx.appcompat.app.AppCompatActivity; + +import android.os.Bundle; + +import org.ntlab.acanthus_client.R; + +public class PrivacyPolicyActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setTitle( "プライバシーポリシー" ); + init(); + } + + //----------------------------------------------------------------- + //----------------------------------------------------------------- + // 初期化 + private void init() { + setContentView(R.layout.activity_privacy_policy); + } + +} \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/mypage/others/TermsOfServiceActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/mypage/others/TermsOfServiceActivity.java new file mode 100644 index 0000000..057a9dc --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/mypage/others/TermsOfServiceActivity.java @@ -0,0 +1,25 @@ +package org.ntlab.acanthus_client.views.main_menu_ui.mypage.others; + +import androidx.appcompat.app.AppCompatActivity; + +import android.os.Bundle; + +import org.ntlab.acanthus_client.R; + +public class TermsOfServiceActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setTitle( "利用規約" ); + init(); + } + + //----------------------------------------------------------------- + //----------------------------------------------------------------- + // 初期化 + private void init() { + setContentView(R.layout.activity_terms_of_service); + } + +} \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/search/SearchFragment.java b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/search/SearchFragment.java index 4d5365b..615bb64 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/search/SearchFragment.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/search/SearchFragment.java @@ -1,45 +1,76 @@ package org.ntlab.acanthus_client.views.main_menu_ui.search; +import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.SearchView; +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.FragmentSearchBinding; +import org.ntlab.acanthus_client.entities.AnimationJson; + +import java.util.ArrayList; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; -import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; public class SearchFragment extends Fragment { private SearchViewModel searchViewModel; private FragmentSearchBinding binding; - private SearchView searchView; - public View onCreateView(@NonNull LayoutInflater inflater, - ViewGroup container, Bundle savedInstanceState) { - searchViewModel = - new ViewModelProvider(this).get(SearchViewModel.class); + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + searchViewModel = new ViewModelProvider(this).get(SearchViewModel.class); binding = FragmentSearchBinding.inflate(inflater, container, false); View root = binding.getRoot(); -// final TextView textView = binding.textSearch; -// searchViewModel.getText().observe(getViewLifecycleOwner(), new Observer() { -// @Override -// public void onChanged(@Nullable String s) { -// textView.setText(s); -// } -// }); return root; + } - + + @Override + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + + Acanthus acanthus = (Acanthus) getActivity().getApplication(); + ArrayList animationList = (ArrayList) acanthus.getAnimationJsonList(); + ArrayList searchAnimationList = new ArrayList<>(); + + TextView warningText = view.findViewById(R.id.warningText); + warningText.setVisibility(view.INVISIBLE); + + Button searchButton = view.findViewById(R.id.searchButton); + + searchButton.setOnClickListener(v -> { + searchAnimationList.clear(); + String searchWord = ((EditText) view.findViewById(R.id.searchWord)).getText().toString(); + + if (searchWord.equals("") || searchWord.equals("キーワードを入力")) { + warningText.setVisibility(view.VISIBLE); + }else{ + warningText.setVisibility(view.INVISIBLE); + for (AnimationJson animationJson : animationList) { + if (animationJson.getAnimationName().indexOf(searchWord) != -1){ + searchAnimationList.add(animationJson); + } + } + + Intent intent = new Intent(acanthus, SearchResultActivity.class); + intent.putExtra("RESULT", searchAnimationList); + startActivity(intent); + } + + }); + + } @Override public void onDestroyView() { diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/search/SearchResultActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/search/SearchResultActivity.java new file mode 100644 index 0000000..104d0bc --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/search/SearchResultActivity.java @@ -0,0 +1,57 @@ +package org.ntlab.acanthus_client.views.main_menu_ui.search; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.ListView; +import android.widget.TextView; + +import org.ntlab.acanthus_client.R; +import org.ntlab.acanthus_client.entities.AnimationJson; +import org.ntlab.acanthus_client.views.animation.AnimationActivity; +import org.ntlab.acanthus_client.views.main_menu_ui.edit.WorkListViewAdapter; + +import java.util.ArrayList; + +import androidx.appcompat.app.AppCompatActivity; + + +public class SearchResultActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_search_result); + setTitle("検索結果"); + + Intent intent = getIntent(); + ArrayList animationsResult = (ArrayList) intent.getSerializableExtra("RESULT"); + ArrayList animationNameList = new ArrayList<>(); + ArrayList animationLastUpdateList = new ArrayList<>(); + TextView resultText = findViewById(R.id.resultText); + Integer listSize = animationsResult.size(); + resultText.setText("検索結果 " + listSize.toString() + " 件"); + ListView listView = findViewById(R.id.resultList); + + for (AnimationJson animationJson : animationsResult) { + animationNameList.add(animationJson.getAnimationName()); + animationLastUpdateList.add(animationJson.getLastUpdate()); + } + + BaseAdapter adapter = new WorkListViewAdapter(getApplication(), R.layout.work_list, animationNameList, animationLastUpdateList); + + listView.setAdapter(adapter); + listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + Intent intent = new Intent(getApplication(), AnimationActivity.class); + intent.putExtra("AnimationJsonData", animationsResult.get(position)); + startActivity(intent); + } + }); + + } + +} diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/search/SearchViewModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/search/SearchViewModel.java index 9afe3f4..bfb1a0c 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/search/SearchViewModel.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/main_menu_ui/search/SearchViewModel.java @@ -16,4 +16,5 @@ public LiveData getText() { return mText; } + } \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/InviteActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/InviteActivity.java index 2ad1829..b207c0f 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/InviteActivity.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/InviteActivity.java @@ -8,16 +8,35 @@ import android.widget.ListView; import androidx.appcompat.app.AppCompatActivity; +import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; import org.ntlab.acanthus_client.Acanthus; import org.ntlab.acanthus_client.R; +import org.ntlab.acanthus_client.entities.Account; +import org.ntlab.acanthus_client.entities.AccountJson; +import org.ntlab.acanthus_client.entities.EditorJson; +import org.ntlab.acanthus_client.entities.FollowerJson; +import org.ntlab.acanthus_client.entities.InvitesJson; +import org.ntlab.acanthus_client.entities.WorkJson; +import org.ntlab.acanthus_client.views.main_menu_ui.edit.EditViewModel; -public class InviteActivity extends AppCompatActivity implements AdapterView.OnItemClickListener { +import java.util.ArrayList; +import java.util.Collection; + +public class InviteActivity extends AppCompatActivity { private InviteViewModel inviteViewModel; - private static final String[] scenes = { - "UserName", - }; + private Integer aid; + private Integer uid; + private Integer invitedUid; + private String ownerToken; + private Acanthus acanthus; + private ArrayList followersUidList = new ArrayList<>(); + private ArrayList followersNameList = new ArrayList<>(); + private ArrayList collectionAccountUid = new ArrayList<>(); + private EditorJson editorJson; + private InvitesJson invitedUidList; + private Integer followersNameIndex; //----------------------------------------------------------------- @Override @@ -27,32 +46,80 @@ setContentView((R.layout.activity_invite)); // ListViewのインスタンスを生成 ListView listView = findViewById(R.id.list_view); + Acanthus acanthus = (Acanthus) getApplication(); + inviteViewModel = new ViewModelProvider(this).get(InviteViewModel.class); + aid = acanthus.getAid(); + uid = acanthus.getPreferenceUid(); + ownerToken = acanthus.getPreferenceToken(); - // BaseAdapter を継承したadapterのインスタンスを生成 - // レイアウトファイル list.xml を activity_main.xml に - // inflate するためにadapterに引数として渡す - BaseAdapter adapter = new ListViewAdapter(this.getApplicationContext(), R.layout.list, scenes); - // ListViewにadapterをセット - listView.setAdapter(adapter); + //フォロワー情報を取得する + inviteViewModel.startFollowersUidJson(uid, aid, ownerToken); + inviteViewModel.getFollowerUidJson().observe(this, new Observer() { + @Override + public void onChanged(FollowerJson followerUidJson) { + followersUidList = inviteViewModel.getFollowerUidJson().getValue().getFollowerUids(); + followersNameList = inviteViewModel.getFollowerUidJson().getValue().getFollowerNames(); + inviteViewModel.startGalleryInvites(aid, ownerToken); + } + }); - // クリックリスナーをセット - listView.setOnItemClickListener(this); + //すべての招待情報を取得する + inviteViewModel.getInvitesJson().observe(this, new Observer() { + @Override + public void onChanged(InvitesJson collectionAccount) { + invitedUidList = inviteViewModel.getInvitesJson().getValue(); + + inviteViewModel.startGalleryEditors(aid); + } + }); + + inviteViewModel.getEditorJson().observe(this, new Observer() { + @Override + public void onChanged(EditorJson collectionAccount) { + editorJson = inviteViewModel.getEditorJson().getValue(); + + if(editorJson != null){ + for(Integer editorUid : editorJson.getUid()){ + followersNameIndex = followersUidList.indexOf(editorUid); + followersUidList.remove(editorUid); + followersNameList.remove(followersNameIndex); + } + } + + if(invitedUidList != null){ + for(Integer invitedUid : invitedUidList.getInvites()){ + followersNameList.remove(followersUidList.indexOf(invitedUid)); + followersUidList.remove(invitedUid); + } + } + + // BaseAdapter を継承したadapterのインスタンスを生成 + // レイアウトファイル list.xml を activity_main.xml に + // inflate するためにadapterに引数として渡す + BaseAdapter adapter = new ListViewAdapter(getApplication(), R.layout.invites_list, followersNameList); + + // ListViewにadapterをセット + listView.setAdapter(adapter); + + listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView adapterView, View view, int position, long id) { + invitedUid = followersUidList.get(position); + inviteViewModel.addInvite(aid, uid.toString(), invitedUid.toString(), ownerToken); + } + }); + } + }); + + inviteViewModel.getMessage().observe(this, new Observer() { + @Override + public void onChanged(Boolean message) { + finish(); + } + }); } - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - Intent intent = new Intent( - this.getApplicationContext(), PaintActivity.class); - - // clickされたpositionのtextとphotoのID - String selectedText = scenes[position]; - // インテントにセット - intent.putExtra("Text", selectedText); - - // SubActivityへ遷移 - startActivity(intent); - } //----------------------------------------------------------------- // init @@ -60,4 +127,4 @@ Acanthus acanthus = (Acanthus) getApplication(); inviteViewModel = new ViewModelProvider(this).get(InviteViewModel.class); } -} +} \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/InviteViewModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/InviteViewModel.java index 7de98da..5fda98b 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/InviteViewModel.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/InviteViewModel.java @@ -1,8 +1,167 @@ package org.ntlab.acanthus_client.views.paint; +import android.util.Log; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; +import org.ntlab.acanthus_client.Acanthus; +import org.ntlab.acanthus_client.entities.Account; +import org.ntlab.acanthus_client.entities.AccountJson; +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.EditorJson; +import org.ntlab.acanthus_client.entities.FollowerJson; +import org.ntlab.acanthus_client.entities.InvitesJson; +import org.ntlab.acanthus_client.resources.accounts.AccountsRest; +import org.ntlab.acanthus_client.resources.accounts.FollowersRest; +import org.ntlab.acanthus_client.resources.gallery.EditorsRest; +import org.ntlab.acanthus_client.resources.gallery.GalleryRest; +import org.ntlab.acanthus_client.resources.gallery.InvitesRest; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.jackson.JacksonConverterFactory; + public class InviteViewModel extends ViewModel { + private MutableLiveData followersUidJsonMutableLiveData; + private MutableLiveData> collectionAccountJsonMutableLiveData; + private MutableLiveData collectionInvitesJsonMutableLiveData; + private MutableLiveData messageMutableLiveData; + private MutableLiveData editorJsonMutableLiveData; -} + + public InviteViewModel() { + this.followersUidJsonMutableLiveData = new MutableLiveData<>(); + this.collectionAccountJsonMutableLiveData = new MutableLiveData<>(); + this.collectionInvitesJsonMutableLiveData = new MutableLiveData<>(); + this.messageMutableLiveData = new MutableLiveData<>(); + this.editorJsonMutableLiveData = new MutableLiveData<>(); + } + + public LiveData getFollowerUidJson() { + return this.followersUidJsonMutableLiveData; + } + + public LiveData> getCollectionAccountJson() { + return this.collectionAccountJsonMutableLiveData; + } + + public LiveData getInvitesJson() { + return this.collectionInvitesJsonMutableLiveData; + } + + public LiveData getMessage() { + return this.messageMutableLiveData; + } + + public LiveData getEditorJson() { + return this.editorJsonMutableLiveData; + } + + public void startFollowersUidJson(Integer uid, Integer aid, String ownerToken){ + Retrofit retrofit = new Retrofit.Builder() + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/acanthus/") + .addConverterFactory(JacksonConverterFactory.create()) + .build(); + final FollowersRest followersRest = retrofit.create(FollowersRest.class); + Call call = followersRest.getFollowers(uid); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if(response.isSuccessful()){ + if (response.body() != null) { + followersUidJsonMutableLiveData.setValue(response.body()); + } + } + } + + @Override + public void onFailure(Call call, Throwable t) { + startGalleryInvites(aid, ownerToken); + } + }); + } + + public void startGalleryInvites(Integer aid, String ownerToken){ + Retrofit retrofit = new Retrofit.Builder() + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/acanthus/") + .addConverterFactory(JacksonConverterFactory.create()) + .build(); + final InvitesRest invitesRest = retrofit.create(InvitesRest.class); + Call call = invitesRest.isGalleryInvites(aid, null, null, ownerToken); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if(response.isSuccessful()){ + if (response.body() != null) { + collectionInvitesJsonMutableLiveData.setValue(response.body()); + } + } + } + + @Override + public void onFailure(Call call, Throwable t) { + startGalleryEditors(aid); + } + }); + } + + public void startGalleryEditors(Integer aid){ + Retrofit retrofit = new Retrofit.Builder() + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/acanthus/") + .addConverterFactory(JacksonConverterFactory.create()) + .build(); + final EditorsRest invitesRest = retrofit.create(EditorsRest.class); + Call call = invitesRest.getEditors(aid); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if(response.isSuccessful()){ + if (response.body() != null) { + editorJsonMutableLiveData.setValue(response.body()); + } + } + } + + @Override + public void onFailure(Call call, Throwable t) { + editorJsonMutableLiveData.setValue(null); + } + }); + } + + + public void addInvite(Integer aid, String ownerUid, String invitedUid, String ownerToken){ + Retrofit retrofit = new Retrofit.Builder() + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/acanthus/") + .addConverterFactory(JacksonConverterFactory.create()) + .build(); + final InvitesRest invitesRest = retrofit.create(InvitesRest.class); + Call call = invitesRest.addInvite(aid, ownerUid, invitedUid, ownerToken); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if(response.isSuccessful()){ + if (response.body() != null) { + messageMutableLiveData.setValue(response.body()); + } + } + } + + @Override + public void onFailure(Call call, Throwable t) { + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/ListViewAdapter.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/ListViewAdapter.java index c4c0adf..e3d1bf5 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/ListViewAdapter.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/ListViewAdapter.java @@ -9,6 +9,9 @@ import org.ntlab.acanthus_client.R; +import java.util.ArrayList; +import java.util.Collection; + public class ListViewAdapter extends BaseAdapter { static class ViewHolder { @@ -17,16 +20,16 @@ private LayoutInflater inflater; private int itemLayoutId; - private String[] titles; + private ArrayList titles = new ArrayList<>(); private int[] ids; ListViewAdapter(Context context, int itemLayoutId, - String[] scenes) { + ArrayList collectionAccountName) { super(); this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); this.itemLayoutId = itemLayoutId; - this.titles = scenes; + this.titles = collectionAccountName; } @Override @@ -38,7 +41,7 @@ convertView = inflater.inflate(itemLayoutId, parent, false); // ViewHolder を生成 holder = new ViewHolder(); - holder.textView = convertView.findViewById(R.id.textView); + holder.textView = convertView.findViewById(R.id.textViewInvitesName); convertView.setTag(holder); } // holder を使って再利用 @@ -47,7 +50,7 @@ } // 現在の position にあるファイル名リストを holder の textView にセット - holder.textView.setText(titles[position]); + holder.textView.setText(titles.get(position)); return convertView; } @@ -55,7 +58,7 @@ @Override public int getCount() { // texts 配列の要素数 - return titles.length; + return titles.size(); } @Override @@ -67,4 +70,4 @@ public long getItemId(int position) { return 0; } -} +} \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintActivity.java index 7c680f8..ef21a4c 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 @@ -14,6 +14,7 @@ import org.ntlab.acanthus_client.R; import org.ntlab.acanthus_client.databinding.ActivityPaintBinding; import org.ntlab.acanthus_client.entities.Stroke; +import org.ntlab.acanthus_client.views.paint.page.PageViewModel; import java.util.Collection; @@ -26,71 +27,34 @@ private PaintToolBar paintToolBar; - private PaintScreenShot paintScreenShot; + private ActivityPaintBinding binding; private PaintViewModel paintViewModel; - - private boolean buttonView = false; + private PageViewModel pageViewModel; //----------------------------------------------------------------- //----------------------------------------------------------------- @Override public void onDestroy() { super.onDestroy(); - paintViewModel.stop(); - paintScreenShot.onDestroy(); + pageViewModel.resetPageNo(); } //----------------------------------------------------------------- @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + setTheme(R.style.AppTheme_NoTitleBar);//タイトルバーを消す init(); initView(); - - //paintScreenShot.onCreate(); - - Button button = findViewById(R.id.button_keep); - button.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - //bottonタップで表示されてたら非表示にする。 - if (buttonView) { - findViewById(R.id.capture).setVisibility(View.INVISIBLE); - findViewById(R.id.image).setVisibility(View.INVISIBLE); - findViewById(R.id.textView3).setVisibility(View.INVISIBLE); - - buttonView = false; - } else { - findViewById(R.id.capture).setVisibility(View.VISIBLE); - findViewById(R.id.image).setVisibility(View.VISIBLE); - findViewById(R.id.textView3).setVisibility(View.VISIBLE); - - buttonView = true; - } - } - }); } //----------------------------------------------------------------- @Override protected void onResume() { super.onResume(); - - displayAid(); - } - - //----------------------------------------------------------------- - // 描画全体のクリア - public void onClickClear(View view) { - paintCanvas.deleteStroke(); - } - - //----------------------------------------------------------------- - // 招待する - public void onClickInvite(View view) { - Integer dummyId = 2; - paintViewModel.inviteNewUserRequest(dummyId); + paintViewModel.start(); + paintCanvas.clearCanvas(); } //----------------------------------------------------------------- @@ -99,7 +63,10 @@ private void init() { Acanthus acanthus = (Acanthus) getApplication(); paintViewModel = new ViewModelProvider(this).get(PaintViewModel.class); + pageViewModel = new ViewModelProvider(this).get(PageViewModel.class); + paintViewModel.init(acanthus); + pageViewModel.init(acanthus); startObserve(); } @@ -116,12 +83,7 @@ paintOnionCanvas = findViewById(R.id.paintOnionCanvas); paintOnionCanvas.init(paintViewModel); - paintScreenShot = new PaintScreenShot(this); - paintToolBar = new PaintToolBar(this, paintCanvas); - - findViewById(R.id.capture).setVisibility(View.INVISIBLE); - findViewById(R.id.image).setVisibility(View.INVISIBLE); - findViewById(R.id.textView3).setVisibility(View.INVISIBLE); + paintToolBar = new PaintToolBar(this, paintCanvas, paintOnionCanvas); } //----------------------------------------------------------------- @@ -144,37 +106,7 @@ } }); -//1時的コメントアウトここから - // paintViewModel.getmStrokeNo().observe(this, new Observer() { -// @Override -// public void onChanged(Integer integer) { -// paintViewModel.getPosition(integer); -// } -// }); -// paintViewModel.getMlatestPosition().observe(this, new Observer>() { -// @Override -// public void onChanged(Collection positions) { -// if(positions.size()!=1){ -// //paintCanvas.latestPositionWrite(positions); -// } -// } -// }); -//ここまで } - //------------------------------------------------------------------ - // デバッグ用の現在編集中のAid表示 - private void displayAid() { - Acanthus acanthus = (Acanthus) getApplication(); - TextView view = findViewById(R.id.textViewCurAid); - view.setText("aid:" + acanthus.getAid().toString()); - } - - //------------------------------------------------------------------ - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - paintScreenShot.onActivityResult(requestCode, resultCode, data); - } } \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintCanvas.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintCanvas.java index bfd5295..4664123 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintCanvas.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintCanvas.java @@ -95,13 +95,12 @@ // @Override protected void onDraw(Canvas canvas) { - super.onDraw(curCanvas); + super.onDraw(canvas); canvas.drawColor(0xFFFFFFFF); for (int i = 0; i < paths.size(); i++) { try { canvas.drawPath(paths.get(i), paints.get(i)); - curCanvas.drawPath(paths.get(i), paints.get(i)); } catch (IndexOutOfBoundsException ex) { } } @@ -109,7 +108,6 @@ for (int i = 0; i < clonePaths.size(); i++) { try { canvas.drawPath(clonePaths.get(i), clonePaints.get(i)); - curCanvas.drawPath(clonePaths.get(i), clonePaints.get(i)); } catch (IndexOutOfBoundsException ex) { } } @@ -141,7 +139,7 @@ if (0 < paths.size()) onTouched(paths.get(paths.size() - 1), x, y); - paintViewModel.setmStrokeNo(); + paintViewModel.setStrokeNo(); paintViewModel.addLocalStrokeRequest(x, y, Color.argb(pen.getAlpha(), pen.getRed(), pen.getGreen(), pen.getBlue()), pen.getThickness()); break; @@ -216,6 +214,14 @@ //----------------------------------------------------------------- @RequiresApi(api = Build.VERSION_CODES.O) public void canvassc() { + + for (int i = 0; i < clonePaths.size(); i++) { + try { + curCanvas.drawPath(clonePaths.get(i), clonePaints.get(i)); + } catch (IndexOutOfBoundsException ex) { + } + } + ByteArrayOutputStream stream = new ByteArrayOutputStream(); image.compress(Bitmap.CompressFormat.PNG, 100, stream); byte[] byteArray = stream.toByteArray(); diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintOnionCanvas.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintOnionCanvas.java index f9002e7..5bbffca 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintOnionCanvas.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintOnionCanvas.java @@ -10,23 +10,27 @@ import android.view.View; import androidx.annotation.Nullable; +import androidx.lifecycle.ViewModelProvider; +import org.ntlab.acanthus_client.entities.Pen; import org.ntlab.acanthus_client.entities.Position; import org.ntlab.acanthus_client.entities.Stroke; +import org.ntlab.acanthus_client.views.paint.page.PageViewModel; import java.lang.reflect.Array; import java.util.ArrayList; 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; + //----------------------------------------------------------------- + private ArrayList paths = new ArrayList<>(); + private ArrayList paints = new ArrayList<>(); //----------------------------------------------------------------- //----------------------------------------------------------------- @@ -38,11 +42,6 @@ // 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(); } @@ -50,39 +49,59 @@ @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); - - canvas.drawPath(path, paint); + for (int i = 0; i < paths.size(); i++) { + try { + canvas.drawPath(paths.get(i), paints.get(i)); + } catch (IndexOutOfBoundsException ex) { + } + } + //----------------------------------------------------------------- } //----------------------------------------------------------------- - // + // 描画 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()); + if (!paintViewModel.getPreStrokes().getValue().equals(null)) { + for (Stroke s : paintViewModel.getPreStrokes().getValue()) { + + Paint paint = new Paint(); + paint.setColor(Color.argb(Color.alpha(s.getColor()) / 4, Color.red(s.getColor()), Color.green(s.getColor()), Color.blue(s.getColor())));//色の指定 + paint.setStrokeWidth(s.getThickness()); + paint.setStyle(Paint.Style.STROKE); + + paints.add(paint); + paths.add(new Path()); + + for (Position p : s.getPositions()) { + if (cnt == 0) { + paths.get(paths.size() - 1).moveTo(p.getX(), p.getY()); + } else { + if (p.getX() != -1) + paths.get(paths.size() - 1).lineTo(p.getX(), p.getY()); + } + invalidate(); + cnt++; } - invalidate(); - cnt++; + cnt = 0; } - cnt = 0; } - paintViewModel.deletePreStroke(); } + //----------------------------------------------------------------- + // 全消去 + public void clearCanvas() { + for (Path p : paths) p.reset(); + invalidate(); + } //----------------------------------------------------------------- // - public void clearCanvas() { - path.reset(); - invalidate(); + public void stopUpdate() { + paintViewModel.stop(); } //----------------------------------------------------------------- diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintScreenShot.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintScreenShot.java index 67cd22d..6511199 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintScreenShot.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintScreenShot.java @@ -1,141 +1,141 @@ -package org.ntlab.acanthus_client.views.paint; - -import androidx.appcompat.app.AppCompatActivity; - -import android.app.Activity; -import android.graphics.ImageFormat; -import android.os.Bundle; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.PixelFormat; -import android.hardware.display.DisplayManager; -import android.hardware.display.VirtualDisplay; -import android.media.Image; -import android.media.ImageReader; -import android.media.projection.MediaProjection; -import android.media.projection.MediaProjectionManager; -import android.util.DisplayMetrics; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.ImageView; -import android.widget.Toast; - -import com.google.android.material.bottomnavigation.BottomNavigationView; - -import org.ntlab.acanthus_client.R; - -import java.nio.ByteBuffer; - -import static android.app.Activity.RESULT_OK; -import static android.content.Context.MEDIA_PROJECTION_SERVICE; -import static android.graphics.ImageFormat.JPEG; - - -public class PaintScreenShot { - - private AppCompatActivity appCompatActivity; - private MediaProjectionManager mpManager; - private MediaProjection mProjection; - private static final int REQUEST_MEDIA_PROJECTION = 1001; - - private int displayWidth, displayHeight; - private ImageReader imageReader; - private VirtualDisplay virtualDisplay; - private int screenDensity; - private ImageView imageView; - - public PaintScreenShot(AppCompatActivity appCompatActivity) { - this.appCompatActivity = appCompatActivity; - } - - public void onCreate() { - - Button button = appCompatActivity.findViewById(R.id.capture); - // ボタンタップでスクリーンショットを撮る - button.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - getScreenshot(); - } - }); - - // 撮影したスクリーンを表示するImageView - imageView = appCompatActivity.findViewById(R.id.image); - - // 画面の縦横サイズとdpを取得 - DisplayMetrics displayMetrics = new DisplayMetrics(); - appCompatActivity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); - screenDensity = displayMetrics.densityDpi; - displayWidth = displayMetrics.widthPixels; - displayHeight = displayMetrics.heightPixels; - - mpManager = (MediaProjectionManager) - appCompatActivity.getSystemService(MEDIA_PROJECTION_SERVICE); - - // permissionを確認するintentを投げ、ユーザーの許可・不許可を受け取る - if(mpManager != null){ - appCompatActivity.startActivityForResult(mpManager.createScreenCaptureIntent(), - REQUEST_MEDIA_PROJECTION); - } - } - - // ユーザーの許可を受け取る - public void onActivityResult(int requestCode, int resultCode, Intent data) { - - if (REQUEST_MEDIA_PROJECTION == requestCode) { - if (resultCode != RESULT_OK) { - // 拒否された - Toast.makeText(appCompatActivity, - "User cancelled", Toast.LENGTH_LONG).show(); - return; - } - // 許可された結果を受け取る - setUpMediaProjection(resultCode, data); - } - } - - private void setUpMediaProjection(int code, Intent intent) { - mProjection = mpManager.getMediaProjection(code, intent); - setUpVirtualDisplay(); - } - - private void setUpVirtualDisplay() { - imageReader = ImageReader.newInstance( - displayWidth, displayHeight, 0x1, 2); - - virtualDisplay = mProjection.createVirtualDisplay("ScreenCapture", - displayWidth, displayHeight, screenDensity, - DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR, - imageReader.getSurface(), null, null); - } - - private void getScreenshot() { - // ImageReaderから画面を取り出す - Log.d("debug", "getScreenshot"); - - Image image = imageReader.acquireLatestImage(); - Image.Plane[] planes = image.getPlanes(); - ByteBuffer buffer = planes[0].getBuffer(); - - int pixelStride = planes[0].getPixelStride(); - int rowStride = planes[0].getRowStride(); - int rowPadding = rowStride - pixelStride * displayWidth; - - // バッファからBitmapを生成 - Bitmap bitmap = Bitmap.createBitmap( - displayWidth + rowPadding / pixelStride, displayHeight, - Bitmap.Config.ARGB_8888); - bitmap.copyPixelsFromBuffer(buffer); - image.close(); - - imageView.setImageBitmap(bitmap); - } - - public void onDestroy() { - if (virtualDisplay != null) { - Log.d("debug","release VirtualDisplay"); - virtualDisplay.release(); - } - } -} \ No newline at end of file +//package org.ntlab.acanthus_client.views.paint; +// +//import androidx.appcompat.app.AppCompatActivity; +// +//import android.app.Activity; +//import android.graphics.ImageFormat; +//import android.os.Bundle; +//import android.content.Intent; +//import android.graphics.Bitmap; +//import android.graphics.PixelFormat; +//import android.hardware.display.DisplayManager; +//import android.hardware.display.VirtualDisplay; +//import android.media.Image; +//import android.media.ImageReader; +//import android.media.projection.MediaProjection; +//import android.media.projection.MediaProjectionManager; +//import android.util.DisplayMetrics; +//import android.util.Log; +//import android.view.View; +//import android.widget.Button; +//import android.widget.ImageView; +//import android.widget.Toast; +// +//import com.google.android.material.bottomnavigation.BottomNavigationView; +// +//import org.ntlab.acanthus_client.R; +// +//import java.nio.ByteBuffer; +// +//import static android.app.Activity.RESULT_OK; +//import static android.content.Context.MEDIA_PROJECTION_SERVICE; +//import static android.graphics.ImageFormat.JPEG; +// +// +//public class PaintScreenShot { +// +// private AppCompatActivity appCompatActivity; +// private MediaProjectionManager mpManager; +// private MediaProjection mProjection; +// private static final int REQUEST_MEDIA_PROJECTION = 1001; +// +// private int displayWidth, displayHeight; +// private ImageReader imageReader; +// private VirtualDisplay virtualDisplay; +// private int screenDensity; +// private ImageView imageView; +// +// public PaintScreenShot(AppCompatActivity appCompatActivity) { +// this.appCompatActivity = appCompatActivity; +// } +// +// public void onCreate() { +// +// Button button = appCompatActivity.findViewById(R.id.capture); +// // ボタンタップでスクリーンショットを撮る +// button.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View view) { +// getScreenshot(); +// } +// }); +// +// // 撮影したスクリーンを表示するImageView +// imageView = appCompatActivity.findViewById(R.id.image); +// +// // 画面の縦横サイズとdpを取得 +// DisplayMetrics displayMetrics = new DisplayMetrics(); +// appCompatActivity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); +// screenDensity = displayMetrics.densityDpi; +// displayWidth = displayMetrics.widthPixels; +// displayHeight = displayMetrics.heightPixels; +// +// mpManager = (MediaProjectionManager) +// appCompatActivity.getSystemService(MEDIA_PROJECTION_SERVICE); +// +// // permissionを確認するintentを投げ、ユーザーの許可・不許可を受け取る +// if(mpManager != null){ +// appCompatActivity.startActivityForResult(mpManager.createScreenCaptureIntent(), +// REQUEST_MEDIA_PROJECTION); +// } +// } +// +// // ユーザーの許可を受け取る +// public void onActivityResult(int requestCode, int resultCode, Intent data) { +// +// if (REQUEST_MEDIA_PROJECTION == requestCode) { +// if (resultCode != RESULT_OK) { +// // 拒否された +// Toast.makeText(appCompatActivity, +// "User cancelled", Toast.LENGTH_LONG).show(); +// return; +// } +// // 許可された結果を受け取る +// setUpMediaProjection(resultCode, data); +// } +// } +// +// private void setUpMediaProjection(int code, Intent intent) { +// mProjection = mpManager.getMediaProjection(code, intent); +// setUpVirtualDisplay(); +// } +// +// private void setUpVirtualDisplay() { +// imageReader = ImageReader.newInstance( +// displayWidth, displayHeight, 0x1, 2); +// +// virtualDisplay = mProjection.createVirtualDisplay("ScreenCapture", +// displayWidth, displayHeight, screenDensity, +// DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR, +// imageReader.getSurface(), null, null); +// } +// +// private void getScreenshot() { +// // ImageReaderから画面を取り出す +// Log.d("debug", "getScreenshot"); +// +// Image image = imageReader.acquireLatestImage(); +// Image.Plane[] planes = image.getPlanes(); +// ByteBuffer buffer = planes[0].getBuffer(); +// +// int pixelStride = planes[0].getPixelStride(); +// int rowStride = planes[0].getRowStride(); +// int rowPadding = rowStride - pixelStride * displayWidth; +// +// // バッファからBitmapを生成 +// Bitmap bitmap = Bitmap.createBitmap( +// displayWidth + rowPadding / pixelStride, displayHeight, +// Bitmap.Config.ARGB_8888); +// bitmap.copyPixelsFromBuffer(buffer); +// image.close(); +// +// imageView.setImageBitmap(bitmap); +// } +// +// public void onDestroy() { +// if (virtualDisplay != null) { +// Log.d("debug","release VirtualDisplay"); +// virtualDisplay.release(); +// } +// } +//} \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintToolBar.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintToolBar.java index e9a30b5..083b05b 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintToolBar.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintToolBar.java @@ -25,15 +25,16 @@ //----------------------------------------------------------------- //----------------------------------------------------------------- - public PaintToolBar(PaintActivity paintActivity, PaintCanvas paintCanvas) { + public PaintToolBar(PaintActivity paintActivity, PaintCanvas paintCanvas, PaintOnionCanvas paintOnionCanvas) { this.bottomNavigationView = (BottomNavigationView) paintActivity.findViewById(R.id.navPaint); - setNavigationListener(paintActivity, paintCanvas); + setNavigationListener(paintActivity, paintCanvas, paintOnionCanvas); + } //----------------------------------------------------------------- //----------------------------------------------------------------- // ナビゲーションバーのタッチ監視 - private void setNavigationListener(AppCompatActivity appCompatActivity, PaintCanvas paintCanvas) { + private void setNavigationListener(AppCompatActivity appCompatActivity, PaintCanvas paintCanvas, PaintOnionCanvas paintOnionCanvas) { this.onNavigationItemSelectedListener = new BottomNavigationView.OnNavigationItemSelectedListener() { @RequiresApi(api = Build.VERSION_CODES.O) @Override @@ -57,6 +58,10 @@ //----------------------------------------------------------------- case R.id.navigation_page: + + paintOnionCanvas.stopUpdate(); + paintOnionCanvas.clearCanvas(); + paintCanvas.canvassc(); paintCanvas.clearCanvas(); transitionPageActivity(appCompatActivity); diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintViewModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintViewModel.java index 12687bf..17abf24 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintViewModel.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintViewModel.java @@ -26,20 +26,14 @@ public class PaintViewModel extends ViewModel implements Runnable { private PaintModelContainer paintModelContainer; - private MutableLiveData mCurPageNo = new MutableLiveData<>(1); - private MutableLiveData mCurPageId = new MutableLiveData<>(0); - - private MutableLiveData mPageSize = new MutableLiveData<>(0); private MutableLiveData mStrokeNo = new MutableLiveData(0); - private MutableLiveData> mlatestPosition = new MutableLiveData<>(); private MutableLiveData> mStrokes = new MutableLiveData<>(); private MutableLiveData> mPreStroke = new MutableLiveData<>(); - private MutableLiveData> mPages = new MutableLiveData<>(new HashMap<>()); private int strokeNo = 0; - private ScheduledThreadPoolExecutor thread = new ScheduledThreadPoolExecutor(1); + private ScheduledThreadPoolExecutor thread = null; private int cnt = 0; private float fsx = 0; private float fsy = 0; @@ -55,17 +49,6 @@ return this.mStrokes; } - public LiveData getPageNo() { - return this.mCurPageNo; - } - - public LiveData> getPages() { - return this.mPages; - } - - public PaintModelContainer getPaintModelContainer() { - return paintModelContainer; - } //----------------------------------------------------------------- //----------------------------------------------------------------- @@ -75,19 +58,13 @@ paintModelContainer.getPaintConnectionModel().init(acanthus); paintModelContainer.getInvitesConnectionModel().init(acanthus); - mlatestPosition.setValue(new ArrayList<>()); - mlatestPosition.getValue().add(new Position()); - // ページの情報初期化 - paintModelContainer.getPageOperationModel().initEditingPageNo(mCurPageNo); - paintModelContainer.getPageConnectionModel().getPage(mCurPageId); - paintModelContainer.getPageConnectionModel().getPageSize(mPageSize); + start(); - thread.scheduleWithFixedDelay(this, 50L, 1000L, TimeUnit.MILLISECONDS); } //----------------------------------------------------------------- // strokeNoの発行 - public void setmStrokeNo() { + public void setStrokeNo() { Random random = new Random(); strokeNo = random.nextInt(1000000000); Log.d("TAG", "setmStrokeNo: " + mStrokeNo); @@ -95,8 +72,8 @@ //----------------------------------------------------------------- // 描画APIの通信リクエスト - public void addLocalStrokeRequest(float x, float y , int color,int shick) { - paintModelContainer.getPaintConnectionModel().addLocalStroke(strokeNo,color,shick); + public void addLocalStrokeRequest(float x, float y, int color, int shick) { + paintModelContainer.getPaintConnectionModel().addLocalStroke(strokeNo, color, shick); fsx = x; fsy = y; cnt = 1; @@ -118,111 +95,18 @@ } //----------------------------------------------------------------- - // 招待APIの通信リクエスト - public void inviteNewUserRequest(Integer invitedUid) { - paintModelContainer.getInvitesConnectionModel().inviteNewEditor(invitedUid); - } - - //----------------------------------------------------------------- // 描画情報の全クリア通信リクエスト public void deleteStrokesRequest() { paintModelContainer.getPaintConnectionModel().deleteStrokes(); } //----------------------------------------------------------------- - // 操作するページを切り替える - public void switchToEditPageRequest(MotionEvent event) { - PageOperationModel pageOperationModel = paintModelContainer.getPageOperationModel(); - PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); - - pageOperationModel.changeEditPageNo(event, mCurPageNo, mPageSize.getValue()); - //ページを操作したのでIdとページ番号を更新 - pageConnectionModel.getPage(mCurPageId); - - } - - //----------------------------------------------------------------- - // 次のページに進む - public void toAdvanceEditingPage() { - PageOperationModel pageOperationModel = paintModelContainer.getPageOperationModel(); - PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); - - pageOperationModel.incrementPageNo(mCurPageNo, mPageSize.getValue()); - pageConnectionModel.getPage(mCurPageId); - updatePrePageId(); - } - - //----------------------------------------------------------------- - // 前のページに戻る - public void toBackEditingPage() { - PageOperationModel pageOperationModel = paintModelContainer.getPageOperationModel(); - PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); - - pageOperationModel.decrementPageNo(mCurPageNo); - pageConnectionModel.getPage(mCurPageId); - updatePrePageId(); - } - - //----------------------------------------------------------------- - // ひとつ前のページを記憶する - private void updatePrePageId(){ - PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); - pageConnectionModel.getPrePageId(); - } - - //----------------------------------------------------------------- - //----------------------------------------------------------------- - // ページの追加通信リクエスト - public void addPageRequest() { - PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); - - pageConnectionModel.addPage(); - pageConnectionModel.getPageSize(mPageSize); - Log.d("pageSize:", mPageSize.getValue().toString()); - } - - //----------------------------------------------------------------- - // ページ削除 - public void deletePageRequest() { - PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); - PageOperationModel pageOperationModel = paintModelContainer.getPageOperationModel(); - - pageConnectionModel.deletePage(); - pageConnectionModel.getPageSize(mPageSize); - - //ページ削除後同じページ番号のページを再取得する必要あり - if (mPageSize.getValue() < mCurPageNo.getValue()) - pageOperationModel.decrementPageNo(mCurPageNo); - - Log.d("pageSize:", mPageSize.getValue().toString()); - - } - - //----------------------------------------------------------------- - // ページのサムネイル取得 - public void getPageThumbnailRequest() { - PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); - - pageConnectionModel.getPageThumb(mPages); - } - - //----------------------------------------------------------------- //----------------------------------------------------------------- // 筆跡の削除 public void deleteStroke() { this.mStrokes.getValue().clear(); } - public void deletePreStroke(){ - mPreStroke.getValue().clear(); - } - - //----------------------------------------------------------------- - // - public void getPageSizeRequest() { - paintModelContainer.getPageConnectionModel().getPageSize(mPageSize); - } - //----------------------------------------------------------------- //----------------------------------------------------------------- // 一定間隔でサーバー上の筆跡を取得する(GET) @@ -234,17 +118,19 @@ paintModelContainer.getPaintConnectionModel().getPreStrokes(mPreStroke); - paintModelContainer.getPageConnectionModel().getPageSize(mPageSize); + Log.d("PaintViewModel", "run"); } - //一定間隔でserver上のStrokeNoSizeを返す - public void latestStrokeNo() { - paintModelContainer.getPaintConnectionModel().getStrokeNo(mStrokeNo); + //----------------------------------------------------------------- + // + public void start() { + thread = new ScheduledThreadPoolExecutor(1); + thread.scheduleWithFixedDelay(this, 50L, 1000L, TimeUnit.MILLISECONDS); } //----------------------------------------------------------------- //サーバーに画像データ(BASE64)を送る - public void setImage(String image){ + public void setImage(String image) { paintModelContainer.getPaintConnectionModel().setImage(image); } diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/InvitesConnectionModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/InvitesConnectionModel.java index a014d0c..0fa352e 100644 --- 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 @@ -50,15 +50,15 @@ String token = "abc0"; int dummyAid = 1111; - Call call = invitesRest.addInvite(dummyAid, owner.toString(), invitedUid.toString(), token); - call.enqueue(new Callback() { + Call call = invitesRest.addInvite(dummyAid, owner.toString(), invitedUid.toString(), token); + call.enqueue(new Callback() { @Override - public void onResponse(Call call, Response response) { + public void onResponse(Call call, Response response) { if (response.isSuccessful()) ; } @Override - public void onFailure(Call call, Throwable t) { + public void onFailure(Call call, Throwable t) { } }); diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PageConnectionModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PageConnectionModel.java index 066f625..5a71ede 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PageConnectionModel.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PageConnectionModel.java @@ -72,7 +72,6 @@ call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { -// if(response.isSuccessful()) } @Override @@ -91,8 +90,7 @@ call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { - if (response.isSuccessful()) - pageSize.setValue(response.body()); + if (response.isSuccessful()) pageSize.setValue(response.body()); } @Override @@ -107,18 +105,46 @@ public void getPage(MutableLiveData mPageId) { final PagesRest pagesRest = retrofit.create(PagesRest.class); + Call call = pagesRest.getPage(acanthus.getAid(), acanthus.getEditingPageNo()); + + call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { if (response.isSuccessful()) { + //----------------------------------------------------------------- // ページ番号とページIDを取得する - acanthus.setEditingPageNo(response.body().getPageNo()); acanthus.setEditingPageId(response.body().getPid()); mPageId.setValue(response.body().getPid()); - Log.d("pid", acanthus.getEditingPageId().toString()); + Log.d("curPageNo", acanthus.getEditingPageNo().toString()); + Log.d("curPageID", acanthus.getEditingPageId().toString()); + + //----------------------------------------------------------------- + // ページが後ろにあれば取得 + if (1 < acanthus.getEditingPageNo()) { + final PagesRest pagesRest = retrofit.create(PagesRest.class); + + Call call2 = pagesRest.getPage(acanthus.getAid(), acanthus.getEditingPageNo() - 1); + + call2.enqueue(new Callback() { + @Override + public void onResponse(Call call2, Response response) { + + if (response.isSuccessful()) { + acanthus.setPrePageId(response.body().getPid()); + Log.d("prePageID", acanthus.getPrePageId().toString()); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + } + }); + //----------------------------------------------------------------- + } } } @@ -131,54 +157,50 @@ //----------------------------------------------------------------- // ページのサムネイルを取得する - public void getPageThumb(MutableLiveData> mPages){ + public void getPageThumb(MutableLiveData> mPages) { final StrokesRest strokesRest = retrofit.create(StrokesRest.class); Call> call = strokesRest.getPageUrls(acanthus.getAid()); call.enqueue(new Callback>() { @Override public void onResponse(Call> call, Response> response) { - if(response.isSuccessful()){ - mPages.setValue(response.body()); - } + if (response.isSuccessful()) mPages.setValue(response.body()); } @Override public void onFailure(Call> call, Throwable t) { - } }); } //----------------------------------------------------------------- - // 前のページのIDを取得する - public void getPrePageId() { - - // ページが後ろにあれば取得 - if (1 < acanthus.getEditingPageNo()) { - final PagesRest pagesRest = retrofit.create(PagesRest.class); - - Call call = pagesRest.getPage(acanthus.getAid(), acanthus.getEditingPageNo() - 1); - call.enqueue(new Callback() { - @Override - public void onResponse(Call call, Response response) { - - if (response.isSuccessful()) { - acanthus.setPrePageId(response.body().getPid()); - Log.d("prePid", acanthus.getPrePageId().toString()); - } - } - - @Override - public void onFailure(Call call, Throwable t) { - - } - }); - - } - } +// public void getPrePageId() { +// +// // ページが後ろにあれば取得 +// if (1 < acanthus.getEditingPageNo()) { +// final PagesRest pagesRest = retrofit.create(PagesRest.class); +// +// Call call = pagesRest.getPage(acanthus.getAid(), acanthus.getEditingPageNo() - 1); +// +// call.enqueue(new Callback() { +// @Override +// public void onResponse(Call call, Response response) { +// +// if (response.isSuccessful()) { +// acanthus.setPrePageId(response.body().getPid()); +// Log.d("prePageID", acanthus.getPrePageId().toString()); +// } +// } +// +// @Override +// public void onFailure(Call call, Throwable t) { +// } +// }); +// +// } +// } //----------------------------------------------------------------- } diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PageOperationModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PageOperationModel.java index 5d6aad6..f47118a 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 @@ -53,29 +53,33 @@ } //----------------------------------------------------------------- + // 編集中のページ番号を1に戻す + public void resetEditingPageNo(MutableLiveData mCurPageNo) { + acanthus.setEditingPageNo(1); + mCurPageNo.setValue(1); + } + + //----------------------------------------------------------------- //----------------------------------------------------------------- // ページを進める public void incrementPageNo(MutableLiveData mPageNo, Integer pageSize) { Integer editingNo = acanthus.getEditingPageNo(); - if (editingNo < pageSize) { + if (editingNo <= pageSize) { + if(999 < pageSize) return; acanthus.setEditingPageNo(editingNo + 1); mPageNo.setValue(acanthus.getEditingPageNo()); - - Log.d("pageNo", acanthus.getEditingPageNo().toString()); } } - //-----------------------------------------------------------------s + //----------------------------------------------------------------- // ページ番号を前に戻す public void decrementPageNo(MutableLiveData mPageNo) { Integer editingNo = acanthus.getEditingPageNo(); if (1 < editingNo) { - acanthus.setEditingPageNo(acanthus.getEditingPageNo() - 1); + acanthus.setEditingPageNo(editingNo - 1); mPageNo.setValue(acanthus.getEditingPageNo()); - - Log.d("pageNo", acanthus.getEditingPageNo().toString()); } } diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PaintConnectionModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PaintConnectionModel.java index e23c35a..7f1a54a 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PaintConnectionModel.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PaintConnectionModel.java @@ -61,14 +61,14 @@ //----------------------------------------------------------------- // ローカルでのストロークの追加(POST) - public void addLocalStroke(int mStrokeNo,int color,int shick) { + public void addLocalStroke(int mStrokeNo, int color, int shick) { final StrokesRest strokesRest = retrofit.create(StrokesRest.class); Log.d("strokeNo:", "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^add----------------------"); //----------------------------------------------------------------- // ストローク追加API Call call = strokesRest.addStroke( - acanthus.getAid(), acanthus.getEditingPageId(), 0, acanthus.getPreferenceUid(),mStrokeNo, acanthus.getPreferenceToken(), + acanthus.getAid(), acanthus.getEditingPageId(), 0, acanthus.getPreferenceUid(), mStrokeNo, acanthus.getPreferenceToken(), 0, color, shick); // strokeNoを更新 @@ -135,9 +135,8 @@ // 前のページの全strokeを取得する public void getPreStrokes(MutableLiveData> preStrokes) { - // 前のページが存在するときのみ if (1 < acanthus.getEditingPageNo()) { - + // 前のページが存在するときのみ final StrokesRest strokesRest = retrofit.create(StrokesRest.class); //----------------------------------------------------------------- @@ -147,6 +146,7 @@ @Override public void onResponse(Call> call, Response> response) { if (response.isSuccessful()) preStrokes.setValue(response.body()); + Log.d("run:", "preDraw"); } @Override @@ -154,7 +154,7 @@ Log.d("a", "onFailure: "); } }); - } + } else preStrokes.setValue(null); } //----------------------------------------------------------------- @@ -199,7 +199,7 @@ //----------------------------------------------------------------- // "screenssc()"が実行されたとき、エンコードした文字列(BASE64)をサーバに送る - public void setImage(String image){ + public void setImage(String image) { final StrokesRest strokesRest = retrofit.create(StrokesRest.class); //----------------------------------------------------------------- diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/page/PageActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/page/PageActivity.java index 8b7dc37..f3cab2c 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/page/PageActivity.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/page/PageActivity.java @@ -8,9 +8,9 @@ import android.util.Log; import android.view.MotionEvent; import android.view.View; +import android.webkit.WebSettings; import android.webkit.WebView; - -import com.fasterxml.jackson.databind.ser.VirtualBeanPropertyWriter; +import android.webkit.WebViewClient; import org.ntlab.acanthus_client.Acanthus; import org.ntlab.acanthus_client.R; @@ -25,7 +25,7 @@ // ページ編集画面 public class PageActivity extends AppCompatActivity implements Runnable { private Acanthus acanthus; - private PaintViewModel paintViewModel; + private PageViewModel pageViewModel; private ActivityPageBinding binding; private ScheduledThreadPoolExecutor thread = new ScheduledThreadPoolExecutor(1); @@ -51,41 +51,47 @@ //----------------------------------------------------------------- //----------------------------------------------------------------- - // ページのサイズを取得し続ける + // ページのサイズとサムネを取得し続ける @Override public void run() { - paintViewModel.getPageSizeRequest(); + pageViewModel.getPageSizeRequest(); + pageViewModel.getPageThumbnailRequest(); } //----------------------------------------------------------------- //----------------------------------------------------------------- // ページを追加する public void onClickAddPage(View view) { - paintViewModel.addPageRequest(); + pageViewModel.addPageRequest(); } //----------------------------------------------------------------- // ページを削除する public void onClickDeletePage(View view) { - paintViewModel.deletePageRequest(); + pageViewModel.deletePageRequest(); } //----------------------------------------------------------------- // ページを次に進める public void onClickToAdvancePage(View view) { - paintViewModel.toAdvanceEditingPage(); + // ページサイズと同じ状況なら新しくページを追加する + if(pageViewModel.getPageSize().getValue() == pageViewModel.getCurPageNo().getValue()) + pageViewModel.addPageRequest(); + + pageViewModel.toAdvanceEditingPage(); + } //----------------------------------------------------------------- // ページを前に戻す public void onClickToBackPage(View view) { - paintViewModel.toBackEditingPage(); + pageViewModel.toBackEditingPage(); } //----------------------------------------------------------------- // ページをスライドして更新する public void slidePage(MotionEvent event) { - paintViewModel.switchToEditPageRequest(event); + pageViewModel.switchToEditPageRequest(event); } //----------------------------------------------------------------- @@ -111,8 +117,8 @@ // private void init() { this.acanthus = (Acanthus) getApplication(); - paintViewModel = new ViewModelProvider(this).get(PaintViewModel.class); - paintViewModel.init(acanthus); + pageViewModel = new ViewModelProvider(this).get(PageViewModel.class); + pageViewModel.init(acanthus); startObserve(); @@ -126,28 +132,39 @@ setContentView(binding.getRoot()); WebView webView = binding.pageWebview; + webView.setWebViewClient(new WebViewClient()); webView.setInitialScale(1); webView.getSettings().setLoadWithOverviewMode(true); webView.getSettings().setUseWideViewPort(true); + webView.getSettings().setSupportZoom(false); + webView.clearCache(true); + webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); } //----------------------------------------------------------------- // private void startObserve() { - paintViewModel.getPageNo().observe(this, new Observer() { + // ページの現在の番号 + pageViewModel.getCurPageNo().observe(this, new Observer() { @Override public void onChanged(Integer pageNo) { binding.textPageNo.setText(String.valueOf(pageNo)); - - paintViewModel.getPageThumbnailRequest(); } }); - paintViewModel.getPages().observe(this, new Observer>() { + // ページのサムネ更新 + pageViewModel.getPages().observe(this, new Observer>() { @Override public void onChanged(HashMap s) { - binding.pageWebview.loadUrl(s.get(paintViewModel.getPageNo().getValue())); - Log.d("a", "onFailure: -----------------------OK:Obs"); + binding.pageWebview.loadUrl(s.get(pageViewModel.getCurPageNo().getValue())); + } + }); + + // ページのサイズ更新 + pageViewModel.getPageSize().observe(this, new Observer() { + @Override + public void onChanged(Integer pageSize) { + binding.textPageSize.setText("/" + pageSize.toString()); } }); } diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/page/PageViewModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/page/PageViewModel.java new file mode 100644 index 0000000..d7cd5d5 --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/page/PageViewModel.java @@ -0,0 +1,147 @@ +package org.ntlab.acanthus_client.views.paint.page; + +import android.util.Log; +import android.view.MotionEvent; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; + +import org.ntlab.acanthus_client.Acanthus; +import org.ntlab.acanthus_client.views.paint.PaintModelContainer; +import org.ntlab.acanthus_client.views.paint.models.PageConnectionModel; +import org.ntlab.acanthus_client.views.paint.models.PageOperationModel; + +import java.util.HashMap; +import java.util.concurrent.ScheduledThreadPoolExecutor; + +public class PageViewModel extends ViewModel { + + private PaintModelContainer paintModelContainer; + + private MutableLiveData mCurPageNo = new MutableLiveData<>(1); + private MutableLiveData mCurPageId = new MutableLiveData<>(0); + + private MutableLiveData mPageSize = new MutableLiveData<>(0); + private MutableLiveData> mPages = new MutableLiveData<>(new HashMap<>()); + + //----------------------------------------------------------------- + // getter + public LiveData getCurPageNo() { + return this.mCurPageNo; + } + + public LiveData> getPages() { + return this.mPages; + } + + public LiveData getPageSize() { + return this.mPageSize; + } + + public PaintModelContainer getPaintModelContainer() { + return paintModelContainer; + } + + //----------------------------------------------------------------- + //----------------------------------------------------------------- + // init + public void init(Acanthus acanthus) { + paintModelContainer = new PaintModelContainer(acanthus); + + // ページの情報初期化 + paintModelContainer.getPageOperationModel().initEditingPageNo(mCurPageNo); + paintModelContainer.getPageConnectionModel().getPage(mCurPageId); + paintModelContainer.getPageConnectionModel().getPageSize(mPageSize); + } + + //----------------------------------------------------------------- + // 操作するページを切り替える + public void switchToEditPageRequest(MotionEvent event) { + PageOperationModel pageOperationModel = paintModelContainer.getPageOperationModel(); + PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); + + pageOperationModel.changeEditPageNo(event, mCurPageNo, mPageSize.getValue()); + //ページを操作したのでIdとページ番号を更新 + pageConnectionModel.getPage(mCurPageId); + + } + + //----------------------------------------------------------------- + // 次のページに進む + public void toAdvanceEditingPage() { + PageOperationModel pageOperationModel = paintModelContainer.getPageOperationModel(); + PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); + + pageOperationModel.incrementPageNo(mCurPageNo, mPageSize.getValue()); + pageConnectionModel.getPage(mCurPageId); + updatePrePageId(); + } + + //----------------------------------------------------------------- + // 前のページに戻る + public void toBackEditingPage() { + PageOperationModel pageOperationModel = paintModelContainer.getPageOperationModel(); + PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); + + pageOperationModel.decrementPageNo(mCurPageNo); + pageConnectionModel.getPage(mCurPageId); + updatePrePageId(); + } + + //----------------------------------------------------------------- + // ひとつ前のページを記憶する + private void updatePrePageId() { + PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); + } + + //----------------------------------------------------------------- + //----------------------------------------------------------------- + // ページの追加通信リクエスト + public void addPageRequest() { + PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); + + pageConnectionModel.addPage(); + pageConnectionModel.getPageSize(mPageSize); + Log.d("pageSize:", mPageSize.getValue().toString()); + } + + //----------------------------------------------------------------- + // ページ削除 + public void deletePageRequest() { + PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); + PageOperationModel pageOperationModel = paintModelContainer.getPageOperationModel(); + + pageConnectionModel.deletePage(); + pageConnectionModel.getPageSize(mPageSize); + + //ページ削除後同じページ番号のページを再取得する必要あり + if (mPageSize.getValue() < mCurPageNo.getValue()) + pageOperationModel.decrementPageNo(mCurPageNo); + + Log.d("pageSize:", mPageSize.getValue().toString()); + + } + + //----------------------------------------------------------------- + // ページのサムネイル取得 + public void getPageThumbnailRequest() { + PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); + pageConnectionModel.getPageThumb(mPages); + } + + //----------------------------------------------------------------- + // ページの枚数を取得する + public void getPageSizeRequest() { + paintModelContainer.getPageConnectionModel().getPageSize(mPageSize); + } + + //----------------------------------------------------------------- + // + public void resetPageNo() { + PageOperationModel pageOperationModel = paintModelContainer.getPageOperationModel(); + pageOperationModel.resetEditingPageNo(mCurPageNo); + } + + //----------------------------------------------------------------- +} diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/sign_up/SignUpActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/sign_up/SignUpActivity.java index 8d4d1fa..586cce8 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/sign_up/SignUpActivity.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/sign_up/SignUpActivity.java @@ -8,6 +8,7 @@ import android.widget.Button; import android.widget.TextView; +import org.ntlab.acanthus_client.Acanthus; import org.ntlab.acanthus_client.R; import org.ntlab.acanthus_client.databinding.ActivitySignUpBinding; import org.ntlab.acanthus_client.entities.AccountUidJson; @@ -32,6 +33,7 @@ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + setTheme(R.style.AppTheme_NoTitleBar);//タイトルバーを消す init(); } @@ -45,17 +47,28 @@ .build(); final AccountsRest accountsRest = retrofit.create(AccountsRest.class); - // 各フォーム取得 - String name = binding.editTextTextSignUpPersonName.getText().toString(); - String emailAddress = binding.editTextTextSignUpEmailAddress.getText().toString(); - String password = binding.editTextTextSignUpPassword.getText().toString(); + Acanthus acanthus = (Acanthus) getApplication(); - Call call = accountsRest.createAccount(name, emailAddress, password); + // 各フォーム取得 + TextView nameForm = findViewById(R.id.editTextTextSignUpPersonName); + TextView emailForm = findViewById(R.id.editTextTextSignUpEmailAddress); + TextView passwordForm = findViewById(R.id.editTextTextSignUpPassword); + + String name = nameForm.getText().toString(); + String email = emailForm.getText().toString(); + String password = passwordForm.getText().toString(); + + Call call = accountsRest.createAccount(name, email, password); call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { - if (response.isSuccessful()) transitionLoginActivity(); - else clearForm(); + if (response.isSuccessful()) { + acanthus.setPreferenceUid(response.body().getUid()); + acanthus.setPreferenceName(name); + acanthus.setPreferenceEmail(email); + acanthus.setPreferencePassword(password); + transitionLoginActivity(); + } else clearForm(); } @Override @@ -88,11 +101,22 @@ } //----------------------------------------------------------------- + // ダミーフォーム + private void dummyFormSetup(){ + binding.editTextTextSignUpPersonName.setText("name"); + binding.editTextTextSignUpEmailAddress.setText("dn@dummy.com"); + binding.editTextTextSignUpPassword.setText("nittalab"); + } + + + //----------------------------------------------------------------- //----------------------------------------------------------------- // 初期化 private void init() { setContentView(R.layout.activity_sign_up); binding = ActivitySignUpBinding.inflate(getLayoutInflater()); + + clearForm(); } //----------------------------------------------------------------- } \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/userpage/UserListViewAdapter.java b/app/src/main/java/org/ntlab/acanthus_client/views/userpage/UserListViewAdapter.java deleted file mode 100644 index 6f8ce34..0000000 --- a/app/src/main/java/org/ntlab/acanthus_client/views/userpage/UserListViewAdapter.java +++ /dev/null @@ -1,73 +0,0 @@ -package org.ntlab.acanthus_client.views.userpage; - -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.BaseAdapter; -import android.widget.TextView; - -import org.ntlab.acanthus_client.R; - -import java.util.ArrayList; - -public class UserListViewAdapter extends BaseAdapter { - - private final LayoutInflater inflater; - private int layoutId; - private ArrayList nameList = new ArrayList<>(); - - //参照保存データ - static class ViewHolder { - TextView textViewName; - } - - public UserListViewAdapter(Context context, int layoutId, ArrayList names) { - super(); - this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - this.layoutId = layoutId; - this.nameList = names; - } - - @Override - public View getView(int position, View convertView, ViewGroup parent) { - ViewHolder viewHolder; - //Viewのinflate(拡張) - if (convertView == null) { - //fragment_edit.xmlにlistView用のレイアウトを入れ込む - convertView = inflater.inflate(layoutId, parent, false); - //ViewHolderの生成とレイアウト内テキストのセット - viewHolder = new UserListViewAdapter.ViewHolder(); - viewHolder.textViewName = convertView.findViewById(R.id.followOrFollowerName); - convertView.setTag(viewHolder); - } else { - //既に初期セットの処理がされている場合、再利用する - viewHolder = (UserListViewAdapter.ViewHolder) convertView.getTag(); - } - - //ViewHolder内のtextViewNameに各ポジションのデータをセット - if (nameList != null) viewHolder.textViewName.setText(nameList.get(position)); - - return convertView; - } - - public void setNameList(ArrayList nameList) { - this.nameList = nameList; - } - - @Override - public int getCount() { - return nameList.size(); - } - - @Override - public Object getItem(int position) { - return null; - } - - @Override - public long getItemId(int position) { - return 0; - } - -} diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/userpage/UserPageActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/userpage/UserPageActivity.java index 8bc5636..c4528cc 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/userpage/UserPageActivity.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/userpage/UserPageActivity.java @@ -10,8 +10,9 @@ import org.ntlab.acanthus_client.Acanthus; import org.ntlab.acanthus_client.R; import org.ntlab.acanthus_client.entities.FollowJson; -import org.ntlab.acanthus_client.views.userpage.followList.FollowListActivity; -import org.ntlab.acanthus_client.views.userpage.followerList.FollowerListActivity; +import org.ntlab.acanthus_client.entities.FollowerJson; +import org.ntlab.acanthus_client.views.userpage.followFollower.FollowFollowerActivity; +import org.ntlab.acanthus_client.views.userpage.followFollower.UserPageViewModel; import org.ntlab.acanthus_client.views.userpage.workList.WorkListActivity; @@ -32,6 +33,7 @@ protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_userpage); + setTitle("ユーザーページ"); userPageViewModel = new ViewModelProvider(this).get(UserPageViewModel.class); acanthus = (Acanthus) getApplication(); @@ -49,15 +51,9 @@ TextView profileText = findViewById(R.id.profileText); - Button returnButton = findViewById(R.id.returnButton); - - //前の画面に戻る処理 - returnButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); + TextView followsSize = findViewById(R.id.followsSizeText); + TextView followersSize = findViewById(R.id.followersSizeText); + Integer[] followersSizeInt = {0}; Button followUserButton = findViewById(R.id.followUserButton); @@ -67,8 +63,8 @@ } //ログインしているユーザーがフォローしているかの有無で画面表示時のボタンの文字を変更する - userPageViewModel.getFollows(loginUid); - userPageViewModel.getFollowJson().observe(this, new Observer() { + userPageViewModel.getMyFollows(loginUid); + userPageViewModel.getMyFollowJson().observe(this, new Observer() { @Override public void onChanged(@Nullable FollowJson followJson) { followsUidList = followJson.getFollowUids(); @@ -90,21 +86,45 @@ userPageViewModel.addFollow(loginUid, loginToken, uid); followsUidList.add(uid); followUserButton.setText("フォロー解除"); + followersSizeInt[0]++; + followersSize.setText(followersSizeInt[0].toString()); }else{ userPageViewModel.releaseFollow(loginUid, loginToken, uid); followsUidList.remove(uid); followUserButton.setText("フォローする"); + followersSizeInt[0]--; + followersSize.setText(followersSizeInt[0].toString()); } } }); + //ユーザーのフォロー及びフォロワーの数を表示 + userPageViewModel.getUserFollows(uid); + userPageViewModel.getUserFollowJson().observe(this, new Observer() { + @Override + public void onChanged(FollowJson followJson) { + Integer followsSizeInt = followJson.getFollowUids().size(); + followsSize.setText(followsSizeInt.toString()); + } + }); + + userPageViewModel.getFollowers(uid); + userPageViewModel.getFollowerJson().observe(this, new Observer() { + @Override + public void onChanged(FollowerJson followerJson) { + followersSizeInt[0] = followerJson.getFollowerUids().size(); + followersSize.setText(followersSizeInt[0].toString()); + } + }); + //ユーザーのフォロー一覧への画面遷移の処理 Button followListButton = findViewById(R.id.followListButton); followListButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - Intent intent = new Intent(getApplication(), FollowListActivity.class); + Intent intent = new Intent(getApplication(), FollowFollowerActivity.class); intent.putExtra("UID", uid); + intent.putExtra("NAME", uname); startActivity(intent); } }); @@ -114,8 +134,9 @@ followerListButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - Intent intent = new Intent(getApplication(), FollowerListActivity.class); + Intent intent = new Intent(getApplication(), FollowFollowerActivity.class); intent.putExtra("UID", uid); + intent.putExtra("NAME", uname); startActivity(intent); } }); diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/userpage/UserPageViewModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/userpage/UserPageViewModel.java deleted file mode 100644 index 6f787a6..0000000 --- a/app/src/main/java/org/ntlab/acanthus_client/views/userpage/UserPageViewModel.java +++ /dev/null @@ -1,182 +0,0 @@ -package org.ntlab.acanthus_client.views.userpage; - -import org.ntlab.acanthus_client.entities.AnimationJson; -import org.ntlab.acanthus_client.entities.FollowAddJson; -import org.ntlab.acanthus_client.entities.FollowJson; -import org.ntlab.acanthus_client.entities.FollowerJson; -import org.ntlab.acanthus_client.resources.accounts.FollowersRest; -import org.ntlab.acanthus_client.resources.accounts.FollowsRest; -import org.ntlab.acanthus_client.resources.gallery.GalleryRest; - -import java.util.Collection; - -import androidx.lifecycle.LiveData; -import androidx.lifecycle.MutableLiveData; -import androidx.lifecycle.ViewModel; -import retrofit2.Call; -import retrofit2.Callback; -import retrofit2.Response; -import retrofit2.Retrofit; -import retrofit2.converter.jackson.JacksonConverterFactory; - -public class UserPageViewModel extends ViewModel { - - private MutableLiveData followJsonMutableLiveData; - private MutableLiveData followerJsonMutableLiveData; - private MutableLiveData> animationJsonMutableLiveData; - - public UserPageViewModel(){ - this.followJsonMutableLiveData = new MutableLiveData<>(); - this.followerJsonMutableLiveData = new MutableLiveData<>(); - this.animationJsonMutableLiveData = new MutableLiveData<>(); - } - - public LiveData getFollowJson(){ - return this.followJsonMutableLiveData; - } - - public LiveData getFollowerJson() { - return this.followerJsonMutableLiveData; - } - - public LiveData> getAnimationJson() { - return animationJsonMutableLiveData; - } - - //ユーザーのフォローリストを取得する - public void getFollows(Integer uid){ - Retrofit retrofit = new Retrofit.Builder() - .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/acanthus/") - .addConverterFactory(JacksonConverterFactory.create()) - .build(); - final FollowsRest followsRest = retrofit.create(FollowsRest.class); - - //フォローリストの取得 - Call call = followsRest.getFollows(uid); - call.enqueue(new Callback() { - @Override - public void onResponse(Call call, Response response) { - if (response.isSuccessful()) { - if (response.body() != null) { - followJsonMutableLiveData.setValue(response.body()); - } - } - } - - @Override - public void onFailure(Call call, Throwable t) { - - } - }); - - } - - //ユーザーをフォローする - public void addFollow(Integer uid, String token, Integer followUid){ - Retrofit retrofit = new Retrofit.Builder() - .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/acanthus/") - .addConverterFactory(JacksonConverterFactory.create()) - .build(); - final FollowsRest followsRest = retrofit.create(FollowsRest.class); - - //フォローの追加 - Call call = followsRest.addFollows(uid, token, followUid); - call.enqueue(new Callback() { - @Override - public void onResponse(Call call, Response response) { - if (response.isSuccessful()) { - if (response.body() != null) { - - } - } - } - - @Override - public void onFailure(Call call, Throwable t) { - - } - }); - - } - - //ユーザーのフォローを解除 - public void releaseFollow(Integer uid, String token, Integer followUid){ - Retrofit retrofit = new Retrofit.Builder() - .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/acanthus/") - .addConverterFactory(JacksonConverterFactory.create()) - .build(); - final FollowsRest followsRest = retrofit.create(FollowsRest.class); - - //フォローの解除 - Call call = followsRest.releaseFollows(uid, token, followUid); - call.enqueue(new Callback() { - @Override - public void onResponse(Call call, Response response) { - - } - - @Override - public void onFailure(Call call, Throwable t) { - - } - }); - - } - - //ユーザーのフォロワーリストを取得する - public void getFollowers(Integer uid){ - Retrofit retrofit = new Retrofit.Builder() - .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/acanthus/") - .addConverterFactory(JacksonConverterFactory.create()) - .build(); - final FollowersRest followersRest = retrofit.create(FollowersRest.class); - - //フォロワーリストの取得 - Call call = followersRest.getFollowers(uid); - call.enqueue(new Callback() { - @Override - public void onResponse(Call call, Response response) { - if (response.isSuccessful()) { - if (response.body() != null) { - followerJsonMutableLiveData.setValue(response.body()); - } - } - } - - @Override - public void onFailure(Call call, Throwable t) { - - } - }); - - } - - //全ユーザーの作品一覧の取得 - public void getGallery(){ - Retrofit retrofit = new Retrofit.Builder() - .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/acanthus/") - .addConverterFactory(JacksonConverterFactory.create()) - .build(); - final GalleryRest galleryRest = retrofit.create(GalleryRest.class); - - //全ユーザーの作品の取得 - Call> call = galleryRest.getGallery(null); - call.enqueue(new Callback>() { - @Override - public void onResponse(Call> call, Response> response) { - if (response.isSuccessful()){ - if (response.body() != null){ - animationJsonMutableLiveData.setValue(response.body()); - } - } - } - - @Override - public void onFailure(Call> call, Throwable t) { - - } - }); - - } - -} diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/userpage/followFollower/FollowFollowerActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/userpage/followFollower/FollowFollowerActivity.java new file mode 100644 index 0000000..5dd7218 --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/userpage/followFollower/FollowFollowerActivity.java @@ -0,0 +1,69 @@ +package org.ntlab.acanthus_client.views.userpage.followFollower; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.fragment.app.FragmentActivity; +import androidx.lifecycle.ViewModelProvider; +import androidx.navigation.NavController; +import androidx.navigation.Navigation; +import androidx.navigation.ui.AppBarConfiguration; +import androidx.navigation.ui.NavigationUI; +import androidx.viewpager2.adapter.FragmentStateAdapter; +import androidx.viewpager2.widget.ViewPager2; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.TextView; + +import com.google.android.material.bottomnavigation.BottomNavigationView; +import com.google.android.material.tabs.TabLayout; +import com.google.android.material.tabs.TabLayoutMediator; + +import org.ntlab.acanthus_client.Acanthus; +import org.ntlab.acanthus_client.R; +import org.ntlab.acanthus_client.databinding.ActivityFollowFollowerBinding; +import org.ntlab.acanthus_client.databinding.ActivityMainBinding; +import org.ntlab.acanthus_client.databinding.FragmentFollowerListBinding; +import org.ntlab.acanthus_client.databinding.FragmentMypageBinding; + +public class FollowFollowerActivity extends AppCompatActivity { + + private ViewPager2 pager; + private FragmentStateAdapter adapter; + private String uname = "a"; + private String[] tabText = {"フォロー", "フォロワー"}; + + private int currentPage; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_follow_follower); + + // ユーザーネームを取得 + Intent intent = getIntent(); + uname = intent.getStringExtra("NAME"); + + setTitle(uname); + + pager = findViewById(R.id.pager); + + adapter = new FollowFollowerAdapter(this); + pager.setAdapter(adapter); + currentPage = 0; + + TabLayout tabLayout = findViewById(R.id.tab_layout); + new TabLayoutMediator(tabLayout, pager, + (tab, position) -> tab.setText(tabText[position]) + ).attach(); + } + + public void onClickNext(View view) { + currentPage ++; + pager.setCurrentItem(currentPage); + } + + public void onClickGoToTop(View view) { + currentPage = 0; + pager.setCurrentItem(currentPage); + } +} \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/userpage/followFollower/FollowFollowerAdapter.java b/app/src/main/java/org/ntlab/acanthus_client/views/userpage/followFollower/FollowFollowerAdapter.java new file mode 100644 index 0000000..4b75a14 --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/userpage/followFollower/FollowFollowerAdapter.java @@ -0,0 +1,34 @@ +package org.ntlab.acanthus_client.views.userpage.followFollower; + +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; +import androidx.viewpager2.adapter.FragmentStateAdapter; + +import org.ntlab.acanthus_client.views.userpage.followFollower.followList.FollowListFragment; +import org.ntlab.acanthus_client.views.userpage.followFollower.followerList.FollowerListFragment; + +public class FollowFollowerAdapter extends FragmentStateAdapter { + private static final int PAGE_NUM = 2; + + public FollowFollowerAdapter(FragmentActivity fm) { + super(fm); + } + + @Override + public Fragment createFragment(int position) { + Fragment fragment = null; + switch (position){ + case 0: + fragment = new FollowListFragment(); + break; + default: + fragment = new FollowerListFragment(); + } + return fragment; + } + + @Override + public int getItemCount() { + return PAGE_NUM; + } +} \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/userpage/followFollower/UserListViewAdapter.java b/app/src/main/java/org/ntlab/acanthus_client/views/userpage/followFollower/UserListViewAdapter.java new file mode 100644 index 0000000..1e5b2ed --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/userpage/followFollower/UserListViewAdapter.java @@ -0,0 +1,73 @@ +package org.ntlab.acanthus_client.views.userpage.followFollower; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; + +import org.ntlab.acanthus_client.R; + +import java.util.ArrayList; + +public class UserListViewAdapter extends BaseAdapter { + + private final LayoutInflater inflater; + private int layoutId; + private ArrayList nameList = new ArrayList<>(); + + //参照保存データ + static class ViewHolder { + TextView textViewName; + } + + public UserListViewAdapter(Context context, int layoutId, ArrayList names) { + super(); + this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + this.layoutId = layoutId; + this.nameList = names; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder viewHolder; + //Viewのinflate(拡張) + if (convertView == null) { + //fragment_edit.xmlにlistView用のレイアウトを入れ込む + convertView = inflater.inflate(layoutId, parent, false); + //ViewHolderの生成とレイアウト内テキストのセット + viewHolder = new UserListViewAdapter.ViewHolder(); + viewHolder.textViewName = convertView.findViewById(R.id.followOrFollowerName); + convertView.setTag(viewHolder); + } else { + //既に初期セットの処理がされている場合、再利用する + viewHolder = (UserListViewAdapter.ViewHolder) convertView.getTag(); + } + + //ViewHolder内のtextViewNameに各ポジションのデータをセット + if (nameList != null) viewHolder.textViewName.setText(nameList.get(position)); + + return convertView; + } + + public void setNameList(ArrayList nameList) { + this.nameList = nameList; + } + + @Override + public int getCount() { + return nameList.size(); + } + + @Override + public Object getItem(int position) { + return null; + } + + @Override + public long getItemId(int position) { + return 0; + } + +} diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/userpage/followFollower/UserPageViewModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/userpage/followFollower/UserPageViewModel.java new file mode 100644 index 0000000..c128e73 --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/userpage/followFollower/UserPageViewModel.java @@ -0,0 +1,216 @@ +package org.ntlab.acanthus_client.views.userpage.followFollower; + +import org.ntlab.acanthus_client.entities.AnimationJson; +import org.ntlab.acanthus_client.entities.FollowAddJson; +import org.ntlab.acanthus_client.entities.FollowJson; +import org.ntlab.acanthus_client.entities.FollowerJson; +import org.ntlab.acanthus_client.resources.accounts.FollowersRest; +import org.ntlab.acanthus_client.resources.accounts.FollowsRest; +import org.ntlab.acanthus_client.resources.gallery.GalleryRest; + +import java.util.Collection; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.jackson.JacksonConverterFactory; + +public class UserPageViewModel extends ViewModel { + + private MutableLiveData myFollowJsonMutableLiveData; + private MutableLiveData userFollowJsonMutableLiveData; + private MutableLiveData followerJsonMutableLiveData; + private MutableLiveData> animationJsonMutableLiveData; + + public UserPageViewModel(){ + this.myFollowJsonMutableLiveData = new MutableLiveData<>(); + this.userFollowJsonMutableLiveData = new MutableLiveData<>(); + this.followerJsonMutableLiveData = new MutableLiveData<>(); + this.animationJsonMutableLiveData = new MutableLiveData<>(); + } + + public LiveData getMyFollowJson(){ + return this.myFollowJsonMutableLiveData; + } + + public LiveData getUserFollowJson() { + return this.userFollowJsonMutableLiveData; + } + + public LiveData getFollowerJson() { + return this.followerJsonMutableLiveData; + } + + public LiveData> getAnimationJson() { + return animationJsonMutableLiveData; + } + + //ログイン中のユーザーのフォローリストを取得する + public void getMyFollows(Integer uid){ + Retrofit retrofit = new Retrofit.Builder() + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/acanthus/") + .addConverterFactory(JacksonConverterFactory.create()) + .build(); + final FollowsRest followsRest = retrofit.create(FollowsRest.class); + + //フォローリストの取得 + Call call = followsRest.getFollows(uid); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + if (response.body() != null) { + myFollowJsonMutableLiveData.setValue(response.body()); + } + } + } + + @Override + public void onFailure(Call call, Throwable t) { + + } + }); + + } + + //ユーザーのフォローリストを取得する(衝突回避用) + public void getUserFollows(Integer uid){ + Retrofit retrofit = new Retrofit.Builder() + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/acanthus/") + .addConverterFactory(JacksonConverterFactory.create()) + .build(); + final FollowsRest followsRest = retrofit.create(FollowsRest.class); + + //フォローリストの取得 + Call call = followsRest.getFollows(uid); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + if (response.body() != null) { + userFollowJsonMutableLiveData.setValue(response.body()); + } + } + } + + @Override + public void onFailure(Call call, Throwable t) { + + } + }); + + } + + //ユーザーをフォローする + public void addFollow(Integer uid, String token, Integer followUid){ + Retrofit retrofit = new Retrofit.Builder() + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/acanthus/") + .addConverterFactory(JacksonConverterFactory.create()) + .build(); + final FollowsRest followsRest = retrofit.create(FollowsRest.class); + + //フォローの追加 + Call call = followsRest.addFollows(uid, token, followUid); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + if (response.body() != null) { + + } + } + } + + @Override + public void onFailure(Call call, Throwable t) { + + } + }); + + } + + //ユーザーのフォローを解除 + public void releaseFollow(Integer uid, String token, Integer followUid){ + Retrofit retrofit = new Retrofit.Builder() + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/acanthus/") + .addConverterFactory(JacksonConverterFactory.create()) + .build(); + final FollowsRest followsRest = retrofit.create(FollowsRest.class); + + //フォローの解除 + Call call = followsRest.releaseFollows(uid, token, followUid); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + + } + + @Override + public void onFailure(Call call, Throwable t) { + + } + }); + + } + + //ユーザーのフォロワーリストを取得する + public void getFollowers(Integer uid){ + Retrofit retrofit = new Retrofit.Builder() + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/acanthus/") + .addConverterFactory(JacksonConverterFactory.create()) + .build(); + final FollowersRest followersRest = retrofit.create(FollowersRest.class); + + //フォロワーリストの取得 + Call call = followersRest.getFollowers(uid); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + if (response.body() != null) { + followerJsonMutableLiveData.setValue(response.body()); + } + } + } + + @Override + public void onFailure(Call call, Throwable t) { + + } + }); + + } + + //全ユーザーの作品一覧の取得 + public void getGallery(){ + Retrofit retrofit = new Retrofit.Builder() + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/acanthus/") + .addConverterFactory(JacksonConverterFactory.create()) + .build(); + final GalleryRest galleryRest = retrofit.create(GalleryRest.class); + + //全ユーザーの作品の取得 + Call> call = galleryRest.getGallery(null); + call.enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + if (response.isSuccessful()){ + if (response.body() != null){ + animationJsonMutableLiveData.setValue(response.body()); + } + } + } + + @Override + public void onFailure(Call> call, Throwable t) { + + } + }); + + } + +} diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/userpage/followFollower/followList/FollowListFragment.java b/app/src/main/java/org/ntlab/acanthus_client/views/userpage/followFollower/followList/FollowListFragment.java new file mode 100644 index 0000000..3a3fbcd --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/userpage/followFollower/followList/FollowListFragment.java @@ -0,0 +1,79 @@ +package org.ntlab.acanthus_client.views.userpage.followFollower.followList; + +import android.content.Intent; +import android.os.Bundle; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; +import androidx.viewpager2.widget.ViewPager2; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.ListView; + +import com.google.android.material.tabs.TabLayout; +import com.google.android.material.tabs.TabLayoutMediator; + +import org.ntlab.acanthus_client.Acanthus; +import org.ntlab.acanthus_client.R; +import org.ntlab.acanthus_client.databinding.FragmentEditBinding; +import org.ntlab.acanthus_client.databinding.FragmentFollowListBinding; +import org.ntlab.acanthus_client.entities.FollowJson; +import org.ntlab.acanthus_client.views.userpage.followFollower.FollowFollowerAdapter; +import org.ntlab.acanthus_client.views.userpage.followFollower.UserListViewAdapter; +import org.ntlab.acanthus_client.views.userpage.UserPageActivity; +import org.ntlab.acanthus_client.views.userpage.followFollower.UserPageViewModel; + +import java.util.ArrayList; + +public class FollowListFragment extends Fragment { + + private UserPageViewModel userPageViewModel; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + return inflater.inflate(R.layout.fragment_follow_list, container, false); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + userPageViewModel = new ViewModelProvider(this).get(UserPageViewModel.class); + Intent intent = getActivity().getIntent(); //UserPageActivityからuidをもらう + Integer uid = intent.getIntExtra("UID", 0); + ListView listView = getActivity().findViewById(R.id.followListView); + + //フォロー一覧の取得と表示 + userPageViewModel.getMyFollows(uid); + userPageViewModel.getMyFollowJson().observe(getViewLifecycleOwner(), new Observer() { + @Override + public void onChanged(FollowJson followJson) { + ArrayList followUidList = followJson.getFollowUids(); + ArrayList followNameList = followJson.getFollowNames(); + BaseAdapter adapter = new UserListViewAdapter(getActivity().getApplication(), R.layout.follow_or_follower_list, followNameList); + + listView.setAdapter(adapter); + listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + //フォローのユーザーページへの遷移 + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + Intent intent = new Intent(getActivity().getApplication(), UserPageActivity.class); + intent.putExtra("UID", followUidList.get(position)); + intent.putExtra("NAME", followNameList.get(position)); + startActivity(intent); + } + }); + } + }); + + } + +} diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/userpage/followFollower/followerList/FollowerListFragment.java b/app/src/main/java/org/ntlab/acanthus_client/views/userpage/followFollower/followerList/FollowerListFragment.java new file mode 100644 index 0000000..3219cf9 --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/userpage/followFollower/followerList/FollowerListFragment.java @@ -0,0 +1,73 @@ +package org.ntlab.acanthus_client.views.userpage.followFollower.followerList; + +import android.content.Intent; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.ListView; + +import androidx.fragment.app.Fragment; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import org.jetbrains.annotations.Nullable; +import org.ntlab.acanthus_client.Acanthus; +import org.ntlab.acanthus_client.R; +import org.ntlab.acanthus_client.entities.FollowerJson; +import org.ntlab.acanthus_client.views.userpage.followFollower.UserListViewAdapter; +import org.ntlab.acanthus_client.views.userpage.UserPageActivity; +import org.ntlab.acanthus_client.views.userpage.followFollower.UserPageViewModel; + +import java.util.ArrayList; + +public class FollowerListFragment extends Fragment { + + private UserPageViewModel userPageViewModel; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + userPageViewModel = new ViewModelProvider(this).get(UserPageViewModel.class); + + return inflater.inflate(R.layout.fragment_follower_list, container, false); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + Acanthus acanthus = (Acanthus) getActivity().getApplication(); + + Intent intent = getActivity().getIntent(); //UserPageActivityからuidをもらう + Integer uid = intent.getIntExtra("UID", 0); + ListView listView = (ListView) getActivity().findViewById(R.id.followerListView); + + //フォロワー一覧の取得と表示 + userPageViewModel.getFollowers(uid); + userPageViewModel.getFollowerJson().observe(getViewLifecycleOwner(), new Observer() { + @Override + public void onChanged(@Nullable FollowerJson followerJson) { + ArrayList followerUidList = followerJson.getFollowerUids(); + ArrayList followerNameList = followerJson.getFollowerNames(); + BaseAdapter adapter = new UserListViewAdapter(getActivity(), R.layout.follow_or_follower_list, followerNameList); + + listView.setAdapter(adapter); + listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + //フォロワーのユーザーページへの遷移 + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + Intent intent = new Intent(getActivity(), UserPageActivity.class); + intent.putExtra("UID", followerUidList.get(position)); + intent.putExtra("NAME", followerNameList.get(position)); + startActivity(intent); + } + }); + } + }); + + } + +} diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/userpage/followList/FollowListActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/userpage/followList/FollowListActivity.java deleted file mode 100644 index 9d86815..0000000 --- a/app/src/main/java/org/ntlab/acanthus_client/views/userpage/followList/FollowListActivity.java +++ /dev/null @@ -1,72 +0,0 @@ -package org.ntlab.acanthus_client.views.userpage.followList; - -import android.content.Intent; -import android.os.Bundle; -import android.view.View; -import android.widget.AdapterView; -import android.widget.BaseAdapter; -import android.widget.Button; -import android.widget.ListView; - -import org.ntlab.acanthus_client.R; -import org.ntlab.acanthus_client.entities.FollowJson; -import org.ntlab.acanthus_client.views.userpage.UserListViewAdapter; -import org.ntlab.acanthus_client.views.userpage.UserPageActivity; -import org.ntlab.acanthus_client.views.userpage.UserPageViewModel; - -import java.util.ArrayList; - -import androidx.appcompat.app.AppCompatActivity; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -public class FollowListActivity extends AppCompatActivity { - - private UserPageViewModel userPageViewModel; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_follow_list); - - userPageViewModel = new ViewModelProvider(this).get(UserPageViewModel.class); - Intent intent = getIntent(); //UserPageActivityからuidをもらう - Integer uid = intent.getIntExtra("UID", 0); - ListView listView = findViewById(R.id.followListView); - - Button returnButton = findViewById(R.id.returnFollowButton); - - //前の画面に戻る処理 - returnButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); - - //フォロー一覧の取得と表示 - userPageViewModel.getFollows(uid); - userPageViewModel.getFollowJson().observe(this, new Observer() { - @Override - public void onChanged(FollowJson followJson) { - ArrayList followUidList = followJson.getFollowUids(); - ArrayList followNameList = followJson.getFollowNames(); - BaseAdapter adapter = new UserListViewAdapter(getApplication(), R.layout.follow_or_follower_list, followNameList); - - listView.setAdapter(adapter); - listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - //フォローのユーザーページへの遷移 - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - Intent intent = new Intent(getApplication(), UserPageActivity.class); - intent.putExtra("UID", followUidList.get(position)); - intent.putExtra("NAME", followNameList.get(position)); - startActivity(intent); - } - }); - } - }); - - } - -} diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/userpage/followerList/FollowerListActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/userpage/followerList/FollowerListActivity.java deleted file mode 100644 index 22aad87..0000000 --- a/app/src/main/java/org/ntlab/acanthus_client/views/userpage/followerList/FollowerListActivity.java +++ /dev/null @@ -1,74 +0,0 @@ -package org.ntlab.acanthus_client.views.userpage.followerList; - -import android.content.Intent; -import android.os.Bundle; -import android.view.View; -import android.widget.AdapterView; -import android.widget.BaseAdapter; -import android.widget.Button; -import android.widget.ListView; - -import org.jetbrains.annotations.Nullable; -import org.ntlab.acanthus_client.R; -import org.ntlab.acanthus_client.entities.FollowerJson; -import org.ntlab.acanthus_client.views.userpage.UserListViewAdapter; -import org.ntlab.acanthus_client.views.userpage.UserPageActivity; -import org.ntlab.acanthus_client.views.userpage.UserPageViewModel; - -import java.util.ArrayList; - -import androidx.appcompat.app.AppCompatActivity; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - - -public class FollowerListActivity extends AppCompatActivity { - - private UserPageViewModel userPageViewModel; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_follower_list); - - userPageViewModel = new ViewModelProvider(this).get(UserPageViewModel.class); - Intent intent = getIntent(); //UserPageActivityからuidをもらう - Integer uid = intent.getIntExtra("UID", 0); - ListView listView = findViewById(R.id.followerListView); - - Button returnButton = findViewById(R.id.returnFollowerButton); - - //前の画面に戻る処理 - returnButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); - - //フォロワー一覧の取得と表示 - userPageViewModel.getFollowers(uid); - userPageViewModel.getFollowerJson().observe(this, new Observer() { - @Override - public void onChanged(@Nullable FollowerJson followerJson) { - ArrayList followerUidList = followerJson.getFollowerUids(); - ArrayList followerNameList = followerJson.getFollowerNames(); - BaseAdapter adapter = new UserListViewAdapter(getApplication(), R.layout.follow_or_follower_list, followerNameList); - - listView.setAdapter(adapter); - listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - //フォロワーのユーザーページへの遷移 - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - Intent intent = new Intent(getApplication(), UserPageActivity.class); - intent.putExtra("UID", followerUidList.get(position)); - intent.putExtra("NAME", followerNameList.get(position)); - startActivity(intent); - } - }); - } - }); - - } - -} diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/userpage/workList/WorkListActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/userpage/workList/WorkListActivity.java index 26ed5ca..56d70a0 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/userpage/workList/WorkListActivity.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/userpage/workList/WorkListActivity.java @@ -7,12 +7,13 @@ import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ListView; +import android.widget.TextView; import org.ntlab.acanthus_client.R; import org.ntlab.acanthus_client.entities.AnimationJson; import org.ntlab.acanthus_client.views.animation.AnimationActivity; import org.ntlab.acanthus_client.views.main_menu_ui.edit.WorkListViewAdapter; -import org.ntlab.acanthus_client.views.userpage.UserPageViewModel; +import org.ntlab.acanthus_client.views.userpage.followFollower.UserPageViewModel; import java.util.ArrayList; import java.util.Collection; @@ -34,21 +35,24 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_work_list); + setTitle("作品一覧"); userPageViewModel = new ViewModelProvider(this).get(UserPageViewModel.class); Intent intent = getIntent(); //UserPageActivityからuidをもらう Integer uid = intent.getIntExtra("UID", 0); ListView listView = findViewById(R.id.workListView); - Button returnButton = findViewById(R.id.returnWorkButton); + TextView workSize = findViewById(R.id.workSizeText); + +// Button returnButton = findViewById(R.id.returnWorkButton); //前の画面に戻る処理 - returnButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); +// returnButton.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// finish(); +// } +// }); //全ユーザーの作品から特定のユーザーの作品を抽出し、一覧として表示する userPageViewModel.getGallery(); @@ -66,6 +70,10 @@ } } + //作品の数を表示 + Integer size = animationJsonHashMap.size(); + workSize.setText("作品 " + size.toString()); + //ユーザー作品の昇順(作品を新しい順に並び変える) List> listEntries = new ArrayList<>(animationJsonHashMap.entrySet()); Collections.sort(listEntries, new Comparator>() { diff --git a/app/src/main/res/drawable/flame_underline.xml b/app/src/main/res/drawable/flame_underline.xml new file mode 100644 index 0000000..37b58b1 --- /dev/null +++ b/app/src/main/res/drawable/flame_underline.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_baseline_add.xml b/app/src/main/res/drawable/ic_baseline_add.xml new file mode 100644 index 0000000..dcbf71a --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_add.xml @@ -0,0 +1,15 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_baseline_cancel_24.xml b/app/src/main/res/drawable/ic_baseline_cancel_24.xml index 1062dda..0d13f4d 100644 --- a/app/src/main/res/drawable/ic_baseline_cancel_24.xml +++ b/app/src/main/res/drawable/ic_baseline_cancel_24.xml @@ -1,5 +1,11 @@ - - + + diff --git a/app/src/main/res/drawable/ic_baseline_group_add.xml b/app/src/main/res/drawable/ic_baseline_group_add.xml new file mode 100644 index 0000000..d5363ae --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_group_add.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/ic_baseline_horizontal_rule.xml b/app/src/main/res/drawable/ic_baseline_horizontal_rule.xml new file mode 100644 index 0000000..3dcc8fb --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_horizontal_rule.xml @@ -0,0 +1,16 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_baseline_keyboard_arrow_left.xml b/app/src/main/res/drawable/ic_baseline_keyboard_arrow_left.xml new file mode 100644 index 0000000..770a7db --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_keyboard_arrow_left.xml @@ -0,0 +1,16 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_baseline_keyboard_arrow_right.xml b/app/src/main/res/drawable/ic_baseline_keyboard_arrow_right.xml new file mode 100644 index 0000000..ba50375 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_keyboard_arrow_right.xml @@ -0,0 +1,16 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher.png b/app/src/main/res/drawable/ic_launcher.png new file mode 100644 index 0000000..67ade20 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher.png Binary files differ diff --git a/app/src/main/res/drawable/shape_style.xml b/app/src/main/res/drawable/shape_style.xml index 902cb50..32e0d22 100644 --- a/app/src/main/res/drawable/shape_style.xml +++ b/app/src/main/res/drawable/shape_style.xml @@ -1,8 +1,10 @@ - - - - + + + + + + \ 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 bc38433..10e712b 100644 --- a/app/src/main/res/layout/activity_animation.xml +++ b/app/src/main/res/layout/activity_animation.xml @@ -6,14 +6,24 @@ android:layout_height="match_parent" tools:context=".views.animation.AnimationActivity"> +