diff --git a/.idea/misc.xml b/.idea/misc.xml index 10b388f..867daff 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -19,6 +19,7 @@ + @@ -32,8 +33,12 @@ + + + + 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 993f4ef..5bfc0fe 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -17,6 +17,9 @@ android:supportsRtl="true" android:theme="@style/Theme.Acanthus" android:usesCleartextTraffic="true"> + @@ -28,6 +31,7 @@ + @@ -36,15 +40,13 @@ - - - - + + + android:windowSoftInputMode="adjustPan" /> \ No newline at end of file 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..db03a5e 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 @@ -3,31 +3,20 @@ import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.os.Bundle; import android.view.View; -import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; -import android.widget.ImageView; -import android.widget.LinearLayout; import android.widget.TextView; import org.ntlab.acanthus_client.Acanthus; import org.ntlab.acanthus_client.R; import org.ntlab.acanthus_client.entities.Animation; 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.userpage.UserPageActivity; -import org.ntlab.acanthus_client.views.userpage.followerList.FollowerListActivity; -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; import java.util.ArrayList; -import java.util.Collection; public class AnimationDetailActivity extends AppCompatActivity { 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 27380e1..b9244e5 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 @@ -13,8 +13,6 @@ 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.FollowJson; -import org.ntlab.acanthus_client.entities.FollowerJson; import org.ntlab.acanthus_client.views.animation.AnimationActivity; import org.ntlab.acanthus_client.views.main_menu_ui.mypage.help.HowToUseActivity; import org.ntlab.acanthus_client.views.main_menu_ui.mypage.help.InquiryActivity; @@ -22,9 +20,7 @@ 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.UserPageViewModel; -import org.ntlab.acanthus_client.views.userpage.followList.FollowListActivity; -import org.ntlab.acanthus_client.views.userpage.followerList.FollowerListActivity; +import org.ntlab.acanthus_client.views.userpage.followFollower.FollowFollowerActivity; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -183,8 +179,6 @@ mypageViewModel = new ViewModelProvider(this).get(MyPageViewModel.class); mypageViewModel.init(acanthus); startObserve(); - observeFollowsSize(acanthus.getPreferenceUid()); - observeFollowersSize(acanthus.getPreferenceUid()); mypageViewModel.checkInvitedRequest(); mypageViewModel.getAccountInfoRequest(); @@ -225,39 +219,9 @@ //----------------------------------------------------------------- // - 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, FollowListActivity.class); + Intent intent = new Intent(acanthus, FollowFollowerActivity.class); intent.putExtra("UID", acanthus.getPreferenceUid()); startActivity(intent); } @@ -266,7 +230,7 @@ // public void transitionFollowerListActivity() { Acanthus acanthus = (Acanthus) getActivity().getApplication(); - Intent intent = new Intent(acanthus, FollowerListActivity.class); + Intent intent = new Intent(acanthus, FollowFollowerActivity.class); intent.putExtra("UID", acanthus.getPreferenceUid()); startActivity(intent); } diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintActivity.java index c14a52c..05da37c 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintActivity.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintActivity.java @@ -26,7 +26,7 @@ private PaintToolBar paintToolBar; - // private PaintScreenShot paintScreenShot; + private ActivityPaintBinding binding; private PaintViewModel paintViewModel; @@ -37,8 +37,6 @@ @Override public void onDestroy() { super.onDestroy(); - paintViewModel.stop(); - // paintScreenShot.onDestroy(); } //----------------------------------------------------------------- @@ -48,50 +46,21 @@ setTheme(R.style.AppTheme_NoTitleBar);//タイトルバーを消す init(); initView(); - - //paintScreenShot.onCreate(); - -// Button button = findViewById(R.id.button_keep); -// button.setOnClickListener(new View.OnClickListener() { -// @Override -// public void onClick(View v) { -// //bottonタップで表示されてたら非表示にする。 -// if (buttonView) { -// findViewById(R.id.capture).setVisibility(View.INVISIBLE); -// findViewById(R.id.image).setVisibility(View.INVISIBLE); -// findViewById(R.id.textView3).setVisibility(View.INVISIBLE); -// -// buttonView = false; -// } else { -// findViewById(R.id.capture).setVisibility(View.VISIBLE); -// findViewById(R.id.image).setVisibility(View.VISIBLE); -// findViewById(R.id.textView3).setVisibility(View.VISIBLE); -// -// buttonView = true; -// } -// } -// }); } //----------------------------------------------------------------- @Override protected void onResume() { super.onResume(); - - displayAid(); + paintViewModel.start(); + paintCanvas.clearCanvas(); } //----------------------------------------------------------------- - // 描画全体のクリア - public void onClickClear(View view) { - paintCanvas.deleteStroke(); - } - - //----------------------------------------------------------------- - // 招待する - public void onClickInvite(View view) { - Integer dummyId = 2; - paintViewModel.inviteNewUserRequest(dummyId); + @Override + protected void onPause() { + super.onPause(); +// paintViewModel.stop(); } //----------------------------------------------------------------- @@ -117,12 +86,7 @@ paintOnionCanvas = findViewById(R.id.paintOnionCanvas); paintOnionCanvas.init(paintViewModel); - // paintScreenShot = new PaintScreenShot(this); - paintToolBar = new PaintToolBar(this, paintCanvas); - -// findViewById(R.id.capture).setVisibility(View.INVISIBLE); -// findViewById(R.id.image).setVisibility(View.INVISIBLE); -// findViewById(R.id.textView3).setVisibility(View.INVISIBLE); + paintToolBar = new PaintToolBar(this, paintCanvas, paintOnionCanvas); } //----------------------------------------------------------------- @@ -145,37 +109,13 @@ } }); -//1時的コメントアウトここから - // paintViewModel.getmStrokeNo().observe(this, new Observer() { -// @Override -// public void onChanged(Integer integer) { -// paintViewModel.getPosition(integer); -// } -// }); -// paintViewModel.getMlatestPosition().observe(this, new Observer>() { -// @Override -// public void onChanged(Collection positions) { -// if(positions.size()!=1){ -// //paintCanvas.latestPositionWrite(positions); -// } -// } -// }); -//ここまで - } - - //------------------------------------------------------------------ - // デバッグ用の現在編集中のAid表示 - private void displayAid() { - Acanthus acanthus = (Acanthus) getApplication(); - TextView view = findViewById(R.id.textViewCurAid); - view.setText("aid:" + acanthus.getAid().toString()); } //------------------------------------------------------------------ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); - // paintScreenShot.onActivityResult(requestCode, resultCode, data); } + //------------------------------------------------------------------ } \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintCanvas.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintCanvas.java index bfd5295..81ae629 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintCanvas.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintCanvas.java @@ -95,13 +95,12 @@ // @Override protected void onDraw(Canvas canvas) { - super.onDraw(curCanvas); + super.onDraw(canvas); canvas.drawColor(0xFFFFFFFF); for (int i = 0; i < paths.size(); i++) { try { canvas.drawPath(paths.get(i), paints.get(i)); - curCanvas.drawPath(paths.get(i), paints.get(i)); } catch (IndexOutOfBoundsException ex) { } } @@ -109,7 +108,6 @@ for (int i = 0; i < clonePaths.size(); i++) { try { canvas.drawPath(clonePaths.get(i), clonePaints.get(i)); - curCanvas.drawPath(clonePaths.get(i), clonePaints.get(i)); } catch (IndexOutOfBoundsException ex) { } } @@ -216,6 +214,14 @@ //----------------------------------------------------------------- @RequiresApi(api = Build.VERSION_CODES.O) public void canvassc() { + + for (int i = 0; i < clonePaths.size(); i++) { + try { + curCanvas.drawPath(clonePaths.get(i), clonePaints.get(i)); + } catch (IndexOutOfBoundsException ex) { + } + } + ByteArrayOutputStream stream = new ByteArrayOutputStream(); image.compress(Bitmap.CompressFormat.PNG, 100, stream); byte[] byteArray = stream.toByteArray(); diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintOnionCanvas.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintOnionCanvas.java index f9002e7..e5fd319 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintOnionCanvas.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintOnionCanvas.java @@ -10,9 +10,11 @@ import android.view.View; import androidx.annotation.Nullable; +import androidx.lifecycle.ViewModelProvider; import org.ntlab.acanthus_client.entities.Position; import org.ntlab.acanthus_client.entities.Stroke; +import org.ntlab.acanthus_client.views.paint.page.PageViewModel; import java.lang.reflect.Array; import java.util.ArrayList; @@ -26,8 +28,6 @@ private Paint paint = new Paint(); private PaintViewModel paintViewModel; - private Canvas canvas; - //----------------------------------------------------------------- //----------------------------------------------------------------- public PaintOnionCanvas(Context context, @Nullable AttributeSet attrs) { @@ -50,7 +50,6 @@ @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); - canvas.drawPath(path, paint); } @@ -74,16 +73,20 @@ } cnt = 0; } - paintViewModel.deletePreStroke(); } - //----------------------------------------------------------------- // public void clearCanvas() { path.reset(); invalidate(); } + + //----------------------------------------------------------------- + // + public void stopUpdate(){ + paintViewModel.stop(); + } //----------------------------------------------------------------- } diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintToolBar.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintToolBar.java index e9a30b5..083b05b 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintToolBar.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintToolBar.java @@ -25,15 +25,16 @@ //----------------------------------------------------------------- //----------------------------------------------------------------- - public PaintToolBar(PaintActivity paintActivity, PaintCanvas paintCanvas) { + public PaintToolBar(PaintActivity paintActivity, PaintCanvas paintCanvas, PaintOnionCanvas paintOnionCanvas) { this.bottomNavigationView = (BottomNavigationView) paintActivity.findViewById(R.id.navPaint); - setNavigationListener(paintActivity, paintCanvas); + setNavigationListener(paintActivity, paintCanvas, paintOnionCanvas); + } //----------------------------------------------------------------- //----------------------------------------------------------------- // ナビゲーションバーのタッチ監視 - private void setNavigationListener(AppCompatActivity appCompatActivity, PaintCanvas paintCanvas) { + private void setNavigationListener(AppCompatActivity appCompatActivity, PaintCanvas paintCanvas, PaintOnionCanvas paintOnionCanvas) { this.onNavigationItemSelectedListener = new BottomNavigationView.OnNavigationItemSelectedListener() { @RequiresApi(api = Build.VERSION_CODES.O) @Override @@ -57,6 +58,10 @@ //----------------------------------------------------------------- case R.id.navigation_page: + + paintOnionCanvas.stopUpdate(); + paintOnionCanvas.clearCanvas(); + paintCanvas.canvassc(); paintCanvas.clearCanvas(); transitionPageActivity(appCompatActivity); diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintViewModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintViewModel.java index 12687bf..e179383 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintViewModel.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintViewModel.java @@ -26,20 +26,14 @@ public class PaintViewModel extends ViewModel implements Runnable { private PaintModelContainer paintModelContainer; - private MutableLiveData mCurPageNo = new MutableLiveData<>(1); - private MutableLiveData mCurPageId = new MutableLiveData<>(0); - - private MutableLiveData mPageSize = new MutableLiveData<>(0); private MutableLiveData mStrokeNo = new MutableLiveData(0); - private MutableLiveData> mlatestPosition = new MutableLiveData<>(); private MutableLiveData> mStrokes = new MutableLiveData<>(); private MutableLiveData> mPreStroke = new MutableLiveData<>(); - private MutableLiveData> mPages = new MutableLiveData<>(new HashMap<>()); private int strokeNo = 0; - private ScheduledThreadPoolExecutor thread = new ScheduledThreadPoolExecutor(1); + private ScheduledThreadPoolExecutor thread = null; private int cnt = 0; private float fsx = 0; private float fsy = 0; @@ -55,17 +49,6 @@ return this.mStrokes; } - public LiveData getPageNo() { - return this.mCurPageNo; - } - - public LiveData> getPages() { - return this.mPages; - } - - public PaintModelContainer getPaintModelContainer() { - return paintModelContainer; - } //----------------------------------------------------------------- //----------------------------------------------------------------- @@ -75,14 +58,8 @@ paintModelContainer.getPaintConnectionModel().init(acanthus); paintModelContainer.getInvitesConnectionModel().init(acanthus); - mlatestPosition.setValue(new ArrayList<>()); - mlatestPosition.getValue().add(new Position()); - // ページの情報初期化 - paintModelContainer.getPageOperationModel().initEditingPageNo(mCurPageNo); - paintModelContainer.getPageConnectionModel().getPage(mCurPageId); - paintModelContainer.getPageConnectionModel().getPageSize(mPageSize); + start(); - thread.scheduleWithFixedDelay(this, 50L, 1000L, TimeUnit.MILLISECONDS); } //----------------------------------------------------------------- @@ -95,8 +72,8 @@ //----------------------------------------------------------------- // 描画APIの通信リクエスト - public void addLocalStrokeRequest(float x, float y , int color,int shick) { - paintModelContainer.getPaintConnectionModel().addLocalStroke(strokeNo,color,shick); + public void addLocalStrokeRequest(float x, float y, int color, int shick) { + paintModelContainer.getPaintConnectionModel().addLocalStroke(strokeNo, color, shick); fsx = x; fsy = y; cnt = 1; @@ -118,111 +95,18 @@ } //----------------------------------------------------------------- - // 招待APIの通信リクエスト - public void inviteNewUserRequest(Integer invitedUid) { - paintModelContainer.getInvitesConnectionModel().inviteNewEditor(invitedUid); - } - - //----------------------------------------------------------------- // 描画情報の全クリア通信リクエスト public void deleteStrokesRequest() { paintModelContainer.getPaintConnectionModel().deleteStrokes(); } //----------------------------------------------------------------- - // 操作するページを切り替える - public void switchToEditPageRequest(MotionEvent event) { - PageOperationModel pageOperationModel = paintModelContainer.getPageOperationModel(); - PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); - - pageOperationModel.changeEditPageNo(event, mCurPageNo, mPageSize.getValue()); - //ページを操作したのでIdとページ番号を更新 - pageConnectionModel.getPage(mCurPageId); - - } - - //----------------------------------------------------------------- - // 次のページに進む - public void toAdvanceEditingPage() { - PageOperationModel pageOperationModel = paintModelContainer.getPageOperationModel(); - PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); - - pageOperationModel.incrementPageNo(mCurPageNo, mPageSize.getValue()); - pageConnectionModel.getPage(mCurPageId); - updatePrePageId(); - } - - //----------------------------------------------------------------- - // 前のページに戻る - public void toBackEditingPage() { - PageOperationModel pageOperationModel = paintModelContainer.getPageOperationModel(); - PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); - - pageOperationModel.decrementPageNo(mCurPageNo); - pageConnectionModel.getPage(mCurPageId); - updatePrePageId(); - } - - //----------------------------------------------------------------- - // ひとつ前のページを記憶する - private void updatePrePageId(){ - PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); - pageConnectionModel.getPrePageId(); - } - - //----------------------------------------------------------------- - //----------------------------------------------------------------- - // ページの追加通信リクエスト - public void addPageRequest() { - PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); - - pageConnectionModel.addPage(); - pageConnectionModel.getPageSize(mPageSize); - Log.d("pageSize:", mPageSize.getValue().toString()); - } - - //----------------------------------------------------------------- - // ページ削除 - public void deletePageRequest() { - PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); - PageOperationModel pageOperationModel = paintModelContainer.getPageOperationModel(); - - pageConnectionModel.deletePage(); - pageConnectionModel.getPageSize(mPageSize); - - //ページ削除後同じページ番号のページを再取得する必要あり - if (mPageSize.getValue() < mCurPageNo.getValue()) - pageOperationModel.decrementPageNo(mCurPageNo); - - Log.d("pageSize:", mPageSize.getValue().toString()); - - } - - //----------------------------------------------------------------- - // ページのサムネイル取得 - public void getPageThumbnailRequest() { - PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); - - pageConnectionModel.getPageThumb(mPages); - } - - //----------------------------------------------------------------- //----------------------------------------------------------------- // 筆跡の削除 public void deleteStroke() { this.mStrokes.getValue().clear(); } - public void deletePreStroke(){ - mPreStroke.getValue().clear(); - } - - //----------------------------------------------------------------- - // - public void getPageSizeRequest() { - paintModelContainer.getPageConnectionModel().getPageSize(mPageSize); - } - //----------------------------------------------------------------- //----------------------------------------------------------------- // 一定間隔でサーバー上の筆跡を取得する(GET) @@ -234,17 +118,19 @@ paintModelContainer.getPaintConnectionModel().getPreStrokes(mPreStroke); - paintModelContainer.getPageConnectionModel().getPageSize(mPageSize); + Log.d("PaintViewModel", "run"); } - //一定間隔でserver上のStrokeNoSizeを返す - public void latestStrokeNo() { - paintModelContainer.getPaintConnectionModel().getStrokeNo(mStrokeNo); + //----------------------------------------------------------------- + // + public void start() { + thread = new ScheduledThreadPoolExecutor(1); + thread.scheduleWithFixedDelay(this, 50L, 1000L, TimeUnit.MILLISECONDS); } //----------------------------------------------------------------- //サーバーに画像データ(BASE64)を送る - public void setImage(String image){ + public void setImage(String image) { paintModelContainer.getPaintConnectionModel().setImage(image); } diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PageConnectionModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PageConnectionModel.java index 066f625..5a71ede 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PageConnectionModel.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PageConnectionModel.java @@ -72,7 +72,6 @@ call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { -// if(response.isSuccessful()) } @Override @@ -91,8 +90,7 @@ call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { - if (response.isSuccessful()) - pageSize.setValue(response.body()); + if (response.isSuccessful()) pageSize.setValue(response.body()); } @Override @@ -107,18 +105,46 @@ public void getPage(MutableLiveData mPageId) { final PagesRest pagesRest = retrofit.create(PagesRest.class); + Call call = pagesRest.getPage(acanthus.getAid(), acanthus.getEditingPageNo()); + + call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { if (response.isSuccessful()) { + //----------------------------------------------------------------- // ページ番号とページIDを取得する - acanthus.setEditingPageNo(response.body().getPageNo()); acanthus.setEditingPageId(response.body().getPid()); mPageId.setValue(response.body().getPid()); - Log.d("pid", acanthus.getEditingPageId().toString()); + Log.d("curPageNo", acanthus.getEditingPageNo().toString()); + Log.d("curPageID", acanthus.getEditingPageId().toString()); + + //----------------------------------------------------------------- + // ページが後ろにあれば取得 + if (1 < acanthus.getEditingPageNo()) { + final PagesRest pagesRest = retrofit.create(PagesRest.class); + + Call call2 = pagesRest.getPage(acanthus.getAid(), acanthus.getEditingPageNo() - 1); + + call2.enqueue(new Callback() { + @Override + public void onResponse(Call call2, Response response) { + + if (response.isSuccessful()) { + acanthus.setPrePageId(response.body().getPid()); + Log.d("prePageID", acanthus.getPrePageId().toString()); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + } + }); + //----------------------------------------------------------------- + } } } @@ -131,54 +157,50 @@ //----------------------------------------------------------------- // ページのサムネイルを取得する - public void getPageThumb(MutableLiveData> mPages){ + public void getPageThumb(MutableLiveData> mPages) { final StrokesRest strokesRest = retrofit.create(StrokesRest.class); Call> call = strokesRest.getPageUrls(acanthus.getAid()); call.enqueue(new Callback>() { @Override public void onResponse(Call> call, Response> response) { - if(response.isSuccessful()){ - mPages.setValue(response.body()); - } + if (response.isSuccessful()) mPages.setValue(response.body()); } @Override public void onFailure(Call> call, Throwable t) { - } }); } //----------------------------------------------------------------- - // 前のページのIDを取得する - public void getPrePageId() { - - // ページが後ろにあれば取得 - if (1 < acanthus.getEditingPageNo()) { - final PagesRest pagesRest = retrofit.create(PagesRest.class); - - Call call = pagesRest.getPage(acanthus.getAid(), acanthus.getEditingPageNo() - 1); - call.enqueue(new Callback() { - @Override - public void onResponse(Call call, Response response) { - - if (response.isSuccessful()) { - acanthus.setPrePageId(response.body().getPid()); - Log.d("prePid", acanthus.getPrePageId().toString()); - } - } - - @Override - public void onFailure(Call call, Throwable t) { - - } - }); - - } - } +// public void getPrePageId() { +// +// // ページが後ろにあれば取得 +// if (1 < acanthus.getEditingPageNo()) { +// final PagesRest pagesRest = retrofit.create(PagesRest.class); +// +// Call call = pagesRest.getPage(acanthus.getAid(), acanthus.getEditingPageNo() - 1); +// +// call.enqueue(new Callback() { +// @Override +// public void onResponse(Call call, Response response) { +// +// if (response.isSuccessful()) { +// acanthus.setPrePageId(response.body().getPid()); +// Log.d("prePageID", acanthus.getPrePageId().toString()); +// } +// } +// +// @Override +// public void onFailure(Call call, Throwable t) { +// } +// }); +// +// } +// } //----------------------------------------------------------------- } diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PageOperationModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PageOperationModel.java index 5d6aad6..ed09b9c 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PageOperationModel.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PageOperationModel.java @@ -61,21 +61,17 @@ if (editingNo < pageSize) { acanthus.setEditingPageNo(editingNo + 1); mPageNo.setValue(acanthus.getEditingPageNo()); - - Log.d("pageNo", acanthus.getEditingPageNo().toString()); } } - //-----------------------------------------------------------------s + //----------------------------------------------------------------- // ページ番号を前に戻す public void decrementPageNo(MutableLiveData mPageNo) { Integer editingNo = acanthus.getEditingPageNo(); if (1 < editingNo) { - acanthus.setEditingPageNo(acanthus.getEditingPageNo() - 1); + acanthus.setEditingPageNo(editingNo - 1); mPageNo.setValue(acanthus.getEditingPageNo()); - - Log.d("pageNo", acanthus.getEditingPageNo().toString()); } } diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PaintConnectionModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PaintConnectionModel.java index e23c35a..378db8c 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PaintConnectionModel.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PaintConnectionModel.java @@ -61,14 +61,14 @@ //----------------------------------------------------------------- // ローカルでのストロークの追加(POST) - public void addLocalStroke(int mStrokeNo,int color,int shick) { + public void addLocalStroke(int mStrokeNo, int color, int shick) { final StrokesRest strokesRest = retrofit.create(StrokesRest.class); Log.d("strokeNo:", "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^add----------------------"); //----------------------------------------------------------------- // ストローク追加API Call call = strokesRest.addStroke( - acanthus.getAid(), acanthus.getEditingPageId(), 0, acanthus.getPreferenceUid(),mStrokeNo, acanthus.getPreferenceToken(), + acanthus.getAid(), acanthus.getEditingPageId(), 0, acanthus.getPreferenceUid(), mStrokeNo, acanthus.getPreferenceToken(), 0, color, shick); // strokeNoを更新 @@ -135,8 +135,8 @@ // 前のページの全strokeを取得する public void getPreStrokes(MutableLiveData> preStrokes) { - // 前のページが存在するときのみ if (1 < acanthus.getEditingPageNo()) { + // 前のページが存在するときのみ final StrokesRest strokesRest = retrofit.create(StrokesRest.class); @@ -147,6 +147,7 @@ @Override public void onResponse(Call> call, Response> response) { if (response.isSuccessful()) preStrokes.setValue(response.body()); + Log.d("run:", "preDraw"); } @Override @@ -199,7 +200,7 @@ //----------------------------------------------------------------- // "screenssc()"が実行されたとき、エンコードした文字列(BASE64)をサーバに送る - public void setImage(String image){ + public void setImage(String image) { final StrokesRest strokesRest = retrofit.create(StrokesRest.class); //----------------------------------------------------------------- diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/page/PageActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/page/PageActivity.java index 8b7dc37..52f50d2 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/page/PageActivity.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/page/PageActivity.java @@ -8,9 +8,9 @@ import android.util.Log; import android.view.MotionEvent; import android.view.View; +import android.webkit.WebSettings; import android.webkit.WebView; - -import com.fasterxml.jackson.databind.ser.VirtualBeanPropertyWriter; +import android.webkit.WebViewClient; import org.ntlab.acanthus_client.Acanthus; import org.ntlab.acanthus_client.R; @@ -25,7 +25,7 @@ // ページ編集画面 public class PageActivity extends AppCompatActivity implements Runnable { private Acanthus acanthus; - private PaintViewModel paintViewModel; + private PageViewModel pageViewModel; private ActivityPageBinding binding; private ScheduledThreadPoolExecutor thread = new ScheduledThreadPoolExecutor(1); @@ -54,38 +54,38 @@ // ページのサイズを取得し続ける @Override public void run() { - paintViewModel.getPageSizeRequest(); + pageViewModel.getPageSizeRequest(); } //----------------------------------------------------------------- //----------------------------------------------------------------- // ページを追加する public void onClickAddPage(View view) { - paintViewModel.addPageRequest(); + pageViewModel.addPageRequest(); } //----------------------------------------------------------------- // ページを削除する public void onClickDeletePage(View view) { - paintViewModel.deletePageRequest(); + pageViewModel.deletePageRequest(); } //----------------------------------------------------------------- // ページを次に進める public void onClickToAdvancePage(View view) { - paintViewModel.toAdvanceEditingPage(); + pageViewModel.toAdvanceEditingPage(); } //----------------------------------------------------------------- // ページを前に戻す public void onClickToBackPage(View view) { - paintViewModel.toBackEditingPage(); + pageViewModel.toBackEditingPage(); } //----------------------------------------------------------------- // ページをスライドして更新する public void slidePage(MotionEvent event) { - paintViewModel.switchToEditPageRequest(event); + pageViewModel.switchToEditPageRequest(event); } //----------------------------------------------------------------- @@ -111,8 +111,8 @@ // private void init() { this.acanthus = (Acanthus) getApplication(); - paintViewModel = new ViewModelProvider(this).get(PaintViewModel.class); - paintViewModel.init(acanthus); + pageViewModel = new ViewModelProvider(this).get(PageViewModel.class); + pageViewModel.init(acanthus); startObserve(); @@ -126,27 +126,31 @@ setContentView(binding.getRoot()); WebView webView = binding.pageWebview; + webView.setWebViewClient(new WebViewClient()); webView.setInitialScale(1); webView.getSettings().setLoadWithOverviewMode(true); webView.getSettings().setUseWideViewPort(true); + webView.getSettings().setSupportZoom(false); } //----------------------------------------------------------------- // private void startObserve() { - paintViewModel.getPageNo().observe(this, new Observer() { + pageViewModel.getCurPageNo().observe(this, new Observer() { @Override public void onChanged(Integer pageNo) { binding.textPageNo.setText(String.valueOf(pageNo)); - paintViewModel.getPageThumbnailRequest(); + pageViewModel.getPageThumbnailRequest(); } }); - paintViewModel.getPages().observe(this, new Observer>() { + pageViewModel.getPages().observe(this, new Observer>() { @Override public void onChanged(HashMap s) { - binding.pageWebview.loadUrl(s.get(paintViewModel.getPageNo().getValue())); + binding.pageWebview.clearCache(true); + binding.pageWebview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); + binding.pageWebview.loadUrl(s.get(pageViewModel.getCurPageNo().getValue())); Log.d("a", "onFailure: -----------------------OK:Obs"); } }); diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/page/PageViewModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/page/PageViewModel.java new file mode 100644 index 0000000..75d4ae7 --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/page/PageViewModel.java @@ -0,0 +1,151 @@ +package org.ntlab.acanthus_client.views.paint.page; + +import android.util.Log; +import android.view.MotionEvent; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; + +import org.ntlab.acanthus_client.Acanthus; +import org.ntlab.acanthus_client.views.paint.PaintModelContainer; +import org.ntlab.acanthus_client.views.paint.models.PageConnectionModel; +import org.ntlab.acanthus_client.views.paint.models.PageOperationModel; + +import java.util.HashMap; +import java.util.concurrent.ScheduledThreadPoolExecutor; + +public class PageViewModel extends ViewModel implements Runnable { + + private PaintModelContainer paintModelContainer; + + private MutableLiveData mCurPageNo = new MutableLiveData<>(1); + private MutableLiveData mCurPageId = new MutableLiveData<>(0); + + private MutableLiveData mPageSize = new MutableLiveData<>(0); + private MutableLiveData> mPages = new MutableLiveData<>(new HashMap<>()); + + + private ScheduledThreadPoolExecutor thread = new ScheduledThreadPoolExecutor(1); + + //----------------------------------------------------------------- + // getter + public LiveData getCurPageNo() { + return this.mCurPageNo; + } + + public LiveData> getPages() { + return this.mPages; + } + + public PaintModelContainer getPaintModelContainer() { + return paintModelContainer; + } + + //----------------------------------------------------------------- + //----------------------------------------------------------------- + // init + public void init(Acanthus acanthus) { + paintModelContainer = new PaintModelContainer(acanthus); + + // ページの情報初期化 + paintModelContainer.getPageOperationModel().initEditingPageNo(mCurPageNo); + paintModelContainer.getPageConnectionModel().getPage(mCurPageId); + paintModelContainer.getPageConnectionModel().getPageSize(mPageSize); + } + + //----------------------------------------------------------------- + // 操作するページを切り替える + public void switchToEditPageRequest(MotionEvent event) { + PageOperationModel pageOperationModel = paintModelContainer.getPageOperationModel(); + PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); + + pageOperationModel.changeEditPageNo(event, mCurPageNo, mPageSize.getValue()); + //ページを操作したのでIdとページ番号を更新 + pageConnectionModel.getPage(mCurPageId); + + } + + //----------------------------------------------------------------- + // 次のページに進む + public void toAdvanceEditingPage() { + PageOperationModel pageOperationModel = paintModelContainer.getPageOperationModel(); + PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); + + pageOperationModel.incrementPageNo(mCurPageNo, mPageSize.getValue()); + pageConnectionModel.getPage(mCurPageId); + updatePrePageId(); + } + + //----------------------------------------------------------------- + // 前のページに戻る + public void toBackEditingPage() { + PageOperationModel pageOperationModel = paintModelContainer.getPageOperationModel(); + PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); + + pageOperationModel.decrementPageNo(mCurPageNo); + pageConnectionModel.getPage(mCurPageId); + updatePrePageId(); + } + //----------------------------------------------------------------- + // ひとつ前のページを記憶する + private void updatePrePageId(){ + PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); +// pageConnectionModel.getPrePageId(); + } + + //----------------------------------------------------------------- + //----------------------------------------------------------------- + // ページの追加通信リクエスト + public void addPageRequest() { + PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); + + pageConnectionModel.addPage(); + pageConnectionModel.getPageSize(mPageSize); + Log.d("pageSize:", mPageSize.getValue().toString()); + } + + //----------------------------------------------------------------- + // ページ削除 + public void deletePageRequest() { + PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); + PageOperationModel pageOperationModel = paintModelContainer.getPageOperationModel(); + + pageConnectionModel.deletePage(); + pageConnectionModel.getPageSize(mPageSize); + + //ページ削除後同じページ番号のページを再取得する必要あり + if (mPageSize.getValue() < mCurPageNo.getValue()) + pageOperationModel.decrementPageNo(mCurPageNo); + + Log.d("pageSize:", mPageSize.getValue().toString()); + + } + + //----------------------------------------------------------------- + // ページのサムネイル取得 + public void getPageThumbnailRequest() { + PageConnectionModel pageConnectionModel = paintModelContainer.getPageConnectionModel(); + + pageConnectionModel.getPageThumb(mPages); + } + //----------------------------------------------------------------- + // + public void getPageSizeRequest() { + paintModelContainer.getPageConnectionModel().getPageSize(mPageSize); + } + + //----------------------------------------------------------------- + //----------------------------------------------------------------- + // 一定間隔でサーバー上の筆跡を取得する(GET) + @Override + public void run() { + paintModelContainer.getPageConnectionModel().getPageSize(mPageSize); + } + + //----------------------------------------------------------------- + // + public void stop() { + thread.shutdown(); + } +} diff --git a/app/src/main/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 c936254..38bec0f 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,9 +10,8 @@ import org.ntlab.acanthus_client.Acanthus; import org.ntlab.acanthus_client.R; import org.ntlab.acanthus_client.entities.FollowJson; -import org.ntlab.acanthus_client.entities.FollowerJson; -import org.ntlab.acanthus_client.views.userpage.followList.FollowListActivity; -import org.ntlab.acanthus_client.views.userpage.followerList.FollowerListActivity; +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; @@ -33,7 +32,6 @@ protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_userpage); - setTitle("ユーザーページ"); userPageViewModel = new ViewModelProvider(this).get(UserPageViewModel.class); acanthus = (Acanthus) getApplication(); @@ -50,18 +48,6 @@ userNameText.setText(uname); TextView profileText = findViewById(R.id.profileText); - TextView followsSize = findViewById(R.id.followsSizeText); - TextView followersSize = findViewById(R.id.followersSizeText); - -// Button returnButton = findViewById(R.id.returnButton); - - //前の画面に戻る処理 -// returnButton.setOnClickListener(new View.OnClickListener() { -// @Override -// public void onClick(View v) { -// finish(); -// } -// }); Button followUserButton = findViewById(R.id.followUserButton); @@ -102,31 +88,12 @@ } }); - //ユーザーのフォロー及びフォロワーの数を表示 - userPageViewModel.getUserFollows(uid); - userPageViewModel.getUserFollowJson().observe(this, new Observer() { - @Override - public void onChanged(FollowJson followJson) { - Integer size = followJson.getFollowUids().size(); - followsSize.setText(size.toString()); - } - }); - - userPageViewModel.getFollowers(uid); - userPageViewModel.getFollowerJson().observe(this, new Observer() { - @Override - public void onChanged(FollowerJson followerJson) { - Integer size = followerJson.getFollowerUids().size(); - followersSize.setText(size.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); startActivity(intent); } @@ -137,7 +104,7 @@ 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); 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 a065b74..0000000 --- a/app/src/main/java/org/ntlab/acanthus_client/views/userpage/UserPageViewModel.java +++ /dev/null @@ -1,216 +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 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/FollowFollowerActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/userpage/followFollower/FollowFollowerActivity.java new file mode 100644 index 0000000..ec6e8ef --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/userpage/followFollower/FollowFollowerActivity.java @@ -0,0 +1,48 @@ +package org.ntlab.acanthus_client.views.userpage.followFollower; + +import androidx.fragment.app.FragmentActivity; +import androidx.viewpager2.adapter.FragmentStateAdapter; +import androidx.viewpager2.widget.ViewPager2; + +import android.os.Bundle; +import android.view.View; + +import com.google.android.material.tabs.TabLayout; +import com.google.android.material.tabs.TabLayoutMediator; + +import org.ntlab.acanthus_client.R; + +public class FollowFollowerActivity extends FragmentActivity { + + private ViewPager2 pager; + private FragmentStateAdapter adapter; + private String[] tabText = {"フォロー", "フォロワー"}; + + private int currentPage; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_follow_follower); + + 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 6c13b23..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.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); - setTitle("フォロー中"); - - 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.getMyFollows(uid); - userPageViewModel.getMyFollowJson().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 b906211..0000000 --- a/app/src/main/java/org/ntlab/acanthus_client/views/userpage/followerList/FollowerListActivity.java +++ /dev/null @@ -1,75 +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); - setTitle("フォロワー"); - - 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 16a5997..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 @@ -13,7 +13,7 @@ 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; diff --git a/app/src/main/res/layout/activity_follow_follower.xml b/app/src/main/res/layout/activity_follow_follower.xml new file mode 100644 index 0000000..05da267 --- /dev/null +++ b/app/src/main/res/layout/activity_follow_follower.xml @@ -0,0 +1,19 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_follow_list.xml b/app/src/main/res/layout/activity_follow_list.xml deleted file mode 100644 index b123b37..0000000 --- a/app/src/main/res/layout/activity_follow_list.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_follower_list.xml b/app/src/main/res/layout/activity_follower_list.xml deleted file mode 100644 index 6bf1526..0000000 --- a/app/src/main/res/layout/activity_follower_list.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_page.xml b/app/src/main/res/layout/activity_page.xml index 3f334eb..1c75869 100644 --- a/app/src/main/res/layout/activity_page.xml +++ b/app/src/main/res/layout/activity_page.xml @@ -8,25 +8,83 @@ + app:layout_constraintTop_toTopOf="parent">