From 07616485ae213bff99e41b7a507fc32c2fdbc7b1 Mon Sep 17 00:00:00 2001 From: Priyank Shankar <75121767+shankarpriyank@users.noreply.github.com> Date: Mon, 3 Apr 2023 12:32:16 +0530 Subject: [PATCH] =?UTF-8?q?Enable=20support=20toolbar=20for=20ProfileActiv?= =?UTF-8?q?ity=20and=20added=20a=20couple=20of=20unit=E2=80=A6=20(#5188)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Enable support toolbar for ProfileActivity and added a couple of unit tests * Nit fixes * Nit Fixes * Minor styling changes in ContributionsFragment --- .../contributions/ContributionsFragment.java | 14 +++-- .../media/MediaDetailPagerFragment.java | 26 ++++----- .../nrw/commons/profile/ProfileActivity.java | 26 +++++---- app/src/main/res/layout/activity_profile.xml | 53 +++++++++++-------- .../res/layout/fragment_contributions.xml | 12 ++++- .../MediaDetailPagerFragmentUnitTests.kt | 2 +- .../commons/profile/ProfileActivityTest.kt | 14 +++++ 7 files changed, 97 insertions(+), 50 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsFragment.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsFragment.java index 44678537a..03e3e5611 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsFragment.java @@ -196,6 +196,10 @@ public class ContributionsFragment @Override public void onCreateOptionsMenu(@NonNull final Menu menu, @NonNull final MenuInflater inflater) { + + // Removing contributions menu items for ProfileActivity + if (getActivity() instanceof ProfileActivity) { return; } + inflater.inflate(R.menu.contribution_activity_notification_menu, menu); MenuItem notificationsMenuItem = menu.findItem(R.id.notifications); @@ -339,23 +343,23 @@ public class ContributionsFragment if (fragment.isAdded() && otherFragment != null) { transaction.hide(otherFragment); transaction.show(fragment); - transaction.addToBackStack(CONTRIBUTION_LIST_FRAGMENT_TAG); + transaction.addToBackStack(tag); transaction.commit(); getChildFragmentManager().executePendingTransactions(); } else if (fragment.isAdded() && otherFragment == null) { transaction.show(fragment); - transaction.addToBackStack(CONTRIBUTION_LIST_FRAGMENT_TAG); + transaction.addToBackStack(tag); transaction.commit(); getChildFragmentManager().executePendingTransactions(); }else if (!fragment.isAdded() && otherFragment != null ) { transaction.hide(otherFragment); transaction.add(R.id.root_frame, fragment, tag); - transaction.addToBackStack(CONTRIBUTION_LIST_FRAGMENT_TAG); + transaction.addToBackStack(tag); transaction.commit(); getChildFragmentManager().executePendingTransactions(); } else if (!fragment.isAdded()) { transaction.replace(R.id.root_frame, fragment, tag); - transaction.addToBackStack(CONTRIBUTION_LIST_FRAGMENT_TAG); + transaction.addToBackStack(tag); transaction.commit(); getChildFragmentManager().executePendingTransactions(); } @@ -641,7 +645,7 @@ public class ContributionsFragment @Override public void showDetail(int position, boolean isWikipediaButtonDisplayed) { if (mediaDetailPagerFragment == null || !mediaDetailPagerFragment.isVisible()) { - mediaDetailPagerFragment = new MediaDetailPagerFragment(); + mediaDetailPagerFragment = new MediaDetailPagerFragment(false, true); if(isUserProfile) { ((ProfileActivity)getActivity()).setScroll(false); } diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java index 782fb4aec..3195796c5 100644 --- a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java @@ -78,10 +78,7 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple return removedItems; } - public MediaDetailPagerFragment() { - this(false, false); - } - + private MediaDetailPagerFragment() {}; // Constructor calls made to be explicit @SuppressLint("ValidFragment") public MediaDetailPagerFragment(Boolean editable, boolean isFeaturedImage) { this.editable = editable; @@ -107,11 +104,13 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple adapter = new MediaDetailAdapter(getChildFragmentManager()); - if (getActivity() != null) { - final ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar(); - if (actionBar != null) { - actionBar.setDisplayHomeAsUpEnabled(true); - } + // ActionBar is now supported in both activities - if this crashes something is quite wrong + final ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar(); + if (actionBar != null) { + actionBar.setDisplayHomeAsUpEnabled(true); + } + else { + throw new AssertionError("Action bar should not be null!"); } // If fragment is associated with ProfileActivity, then hide the tabLayout @@ -119,6 +118,11 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple ((ProfileActivity)getActivity()).tabLayout.setVisibility(View.GONE); } + // Else if fragment is associated with MainActivity then hide that tab layout + else if (getActivity() instanceof MainActivity) { + ((MainActivity)getActivity()).hideTabs(); + } + pager.setAdapter(adapter); if (savedInstanceState != null) { @@ -127,9 +131,7 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple getActivity().invalidateOptionsMenu(); } adapter.notifyDataSetChanged(); - if (getActivity() instanceof MainActivity) { - ((MainActivity)getActivity()).hideTabs(); - } + return view; } diff --git a/app/src/main/java/fr/free/nrw/commons/profile/ProfileActivity.java b/app/src/main/java/fr/free/nrw/commons/profile/ProfileActivity.java index 1876e3dc4..1364d78ce 100644 --- a/app/src/main/java/fr/free/nrw/commons/profile/ProfileActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/profile/ProfileActivity.java @@ -13,6 +13,7 @@ import android.view.View; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.appcompat.widget.Toolbar; import androidx.core.content.FileProvider; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; @@ -50,6 +51,9 @@ public class ProfileActivity extends BaseActivity { @BindView(R.id.tab_layout) public TabLayout tabLayout; + @BindView(R.id.toolbar) + Toolbar toolbar; + @Inject SessionManager sessionManager; @@ -83,9 +87,14 @@ public class ProfileActivity extends BaseActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_profile); ButterKnife.bind(this); - setTitle(sessionManager.getUserName()); + + setSupportActionBar(toolbar); + toolbar.setNavigationOnClickListener(view -> { + onSupportNavigateUp(); + }); userName = getIntent().getStringExtra(KEY_USERNAME); + setTitle(userName); shouldShowContributions = getIntent().getBooleanExtra(KEY_SHOULD_SHOW_CONTRIBUTIONS, false); supportFragmentManager = getSupportFragmentManager(); @@ -140,14 +149,13 @@ public class ProfileActivity extends BaseActivity { fragmentList.add(leaderboardFragment); titleList.add(getResources().getString(R.string.leaderboard_tab_title).toUpperCase()); - if (shouldShowContributions) { - contributionsFragment = new ContributionsFragment(); - Bundle contributionsListBundle = new Bundle(); - contributionsListBundle.putString(KEY_USERNAME, userName); - contributionsFragment.setArguments(contributionsListBundle); - fragmentList.add(contributionsFragment); - titleList.add(getString(R.string.contributions_fragment).toUpperCase()); - } + contributionsFragment = new ContributionsFragment(); + Bundle contributionsListBundle = new Bundle(); + contributionsListBundle.putString(KEY_USERNAME, userName); + contributionsFragment.setArguments(contributionsListBundle); + fragmentList.add(contributionsFragment); + titleList.add(getString(R.string.contributions_fragment).toUpperCase()); + viewPagerAdapter.setTabData(fragmentList, titleList); viewPagerAdapter.notifyDataSetChanged(); diff --git a/app/src/main/res/layout/activity_profile.xml b/app/src/main/res/layout/activity_profile.xml index 114490f3f..b9366abaa 100644 --- a/app/src/main/res/layout/activity_profile.xml +++ b/app/src/main/res/layout/activity_profile.xml @@ -5,33 +5,44 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - + android:layout_height="match_parent" + android:orientation="vertical"> - + android:layout_height="wrap_content" /> - + + - + android:background="?attr/mainBackground"> - - + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_contributions.xml b/app/src/main/res/layout/fragment_contributions.xml index ba8d78de7..1390e8c28 100644 --- a/app/src/main/res/layout/fragment_contributions.xml +++ b/app/src/main/res/layout/fragment_contributions.xml @@ -48,13 +48,21 @@ android:text="@string/limited_connection_explanation"/> + + + android:background="#000"> + + \ No newline at end of file diff --git a/app/src/test/kotlin/fr/free/nrw/commons/media/MediaDetailPagerFragmentUnitTests.kt b/app/src/test/kotlin/fr/free/nrw/commons/media/MediaDetailPagerFragmentUnitTests.kt index 8e081a958..4782c49e5 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/media/MediaDetailPagerFragmentUnitTests.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/media/MediaDetailPagerFragmentUnitTests.kt @@ -67,7 +67,7 @@ class MediaDetailPagerFragmentUnitTests { val activity = Robolectric.buildActivity(SearchActivity::class.java).create().get() - fragment = MediaDetailPagerFragment() + fragment = MediaDetailPagerFragment(false, true) fragment = MediaDetailPagerFragment(false, false) fragment = MediaDetailPagerFragment(false, false, 0) fragmentManager = activity.supportFragmentManager diff --git a/app/src/test/kotlin/fr/free/nrw/commons/profile/ProfileActivityTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/profile/ProfileActivityTest.kt index 7aac45ae2..b1fb76516 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/profile/ProfileActivityTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/profile/ProfileActivityTest.kt @@ -5,6 +5,7 @@ import android.graphics.Bitmap import android.os.Looper import android.view.Menu import android.view.MenuItem +import androidx.appcompat.widget.Toolbar import androidx.test.core.app.ApplicationProvider import fr.free.nrw.commons.R import fr.free.nrw.commons.TestCommonsApplication @@ -106,4 +107,17 @@ class ProfileActivityTest { fun testOnSupportNavigateUp() { activity.onSupportNavigateUp() } + @Test + fun testToolbarNotNull() { + val toolbar = activity.findViewById(R.id.toolbar) + Assert.assertNotNull(toolbar) + } + + @Test + fun testOptionsMenu() { + val menu: Menu = RoboMenu(mockContext) + activity.onCreateOptionsMenu(menu) + Assert.assertEquals(1, menu.size()) + } + } \ No newline at end of file