From 3395b4fa35385e910c062fe2039248e604f8c941 Mon Sep 17 00:00:00 2001 From: Josephine Lim Date: Wed, 6 Jan 2021 01:15:22 +1000 Subject: [PATCH 01/18] Versioning and changelog for v3.0.0 (#4152) * Versioning for v3.0.0 * Update changelog.md --- CHANGELOG.md | 8 ++++++++ app/build.gradle | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 383f725d6..61d11ecd8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Wikimedia Commons for Android +## v3.0.0 +- Added Structured Data to upload workflow, users can now add depicts +- Added Leaderboard in Achievements screen +- Added to-do system for images with no categories/descriptions or with associated Wikipedia articles that have no pictures +- Users can now modify and add categories to their uploads from the media details view +- New UI for main screen +- Limited connection mode added, users can now pause and resume uploads + ## v2.13.1 - Added OpenStreetMap attribution - Fixed various crashes diff --git a/app/build.gradle b/app/build.gradle index b6114ca51..355748b73 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -150,8 +150,8 @@ android { defaultConfig { //applicationId 'fr.free.nrw.commons' - versionCode 775 - versionName '2.13.1' + versionCode 876 + versionName '3.0.0' setProperty("archivesBaseName", "app-commons-v$versionName-" + getBranchName()) minSdkVersion 19 From 6282bfbf5642be5be4f4f3bf99f26804c7415eb7 Mon Sep 17 00:00:00 2001 From: Ashish Date: Wed, 6 Jan 2021 00:32:50 +0530 Subject: [PATCH 02/18] Handled migration 8-9-10 in BookmarksLocationDao (#4154) * #Fixes #4141 - Handled migrations for BookmarkLocationsDao from 8-9-10 * #Fixes #4141 - Handled migrations for BookmarkLocationsDao from 8-9-10 --- .../nrw/commons/bookmarks/locations/BookmarkLocationsDao.java | 2 +- app/src/main/java/fr/free/nrw/commons/data/DBOpenHelper.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/locations/BookmarkLocationsDao.java b/app/src/main/java/fr/free/nrw/commons/bookmarks/locations/BookmarkLocationsDao.java index c58482f76..ff97b5119 100644 --- a/app/src/main/java/fr/free/nrw/commons/bookmarks/locations/BookmarkLocationsDao.java +++ b/app/src/main/java/fr/free/nrw/commons/bookmarks/locations/BookmarkLocationsDao.java @@ -264,7 +264,7 @@ public class BookmarkLocationsDao { onUpdate(db, from, to); return; } - if (from == 8) { + if (from < 10) { from++; onUpdate(db, from, to); return; diff --git a/app/src/main/java/fr/free/nrw/commons/data/DBOpenHelper.java b/app/src/main/java/fr/free/nrw/commons/data/DBOpenHelper.java index 7921e930f..04e103cd0 100644 --- a/app/src/main/java/fr/free/nrw/commons/data/DBOpenHelper.java +++ b/app/src/main/java/fr/free/nrw/commons/data/DBOpenHelper.java @@ -13,7 +13,7 @@ import fr.free.nrw.commons.explore.recentsearches.RecentSearchesDao; public class DBOpenHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "commons.db"; - private static final int DATABASE_VERSION = 13; + private static final int DATABASE_VERSION = 14; public static final String CONTRIBUTIONS_TABLE = "contributions"; private final String DROP_TABLE_STATEMENT="DROP TABLE IF EXISTS %s"; From c2077dfa3914c49fecc3aa5e531659abde1e84e8 Mon Sep 17 00:00:00 2001 From: Ashish Date: Fri, 15 Jan 2021 21:56:53 +0530 Subject: [PATCH 03/18] Fixes #4179 (#4180) * Handled null pointer exception in MainActivity->ContributionsFragment#backButtonClicked() * Updated >ContributionsFragment#backButtonClicked() to handle back press properly --- .../commons/contributions/ContributionsFragment.java | 11 ++++------- .../free/nrw/commons/contributions/MainActivity.java | 11 ++++++++--- 2 files changed, 12 insertions(+), 10 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 ba809d80b..3e248e93c 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 @@ -6,7 +6,6 @@ import static fr.free.nrw.commons.utils.LengthUtils.formatDistanceBetween; import android.Manifest; import android.annotation.SuppressLint; -import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -19,7 +18,6 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.MenuItem.OnMenuItemClickListener; import android.view.View; -import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.LinearLayout; @@ -27,18 +25,15 @@ import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.appcompat.widget.SwitchCompat; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager.OnBackStackChangedListener; import androidx.fragment.app.FragmentTransaction; import fr.free.nrw.commons.CommonsApplication; -import fr.free.nrw.commons.MediaDataExtractor; import fr.free.nrw.commons.auth.SessionManager; import fr.free.nrw.commons.notification.Notification; import fr.free.nrw.commons.notification.NotificationController; import fr.free.nrw.commons.theme.BaseActivity; -import io.reactivex.disposables.Disposable; import java.util.List; import javax.inject.Inject; @@ -616,8 +611,8 @@ public class ContributionsFragment return contributionsListFragment.getContributionStateAt(position); } - public void backButtonClicked() { - if (mediaDetailPagerFragment.isVisible()) { + public boolean backButtonClicked() { + if (null != mediaDetailPagerFragment && mediaDetailPagerFragment.isVisible()) { if (store.getBoolean("displayNearbyCardView", true)) { if (nearbyNotificationCardView.cardViewVisibilityState == NearbyNotificationCardView.CardViewVisibilityState.READY) { nearbyNotificationCardView.setVisibility(View.VISIBLE); @@ -629,7 +624,9 @@ public class ContributionsFragment ((BaseActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(false); ((MainActivity)getActivity()).showTabs(); fetchCampaigns(); + return true; } + return false; } } diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/MainActivity.java b/app/src/main/java/fr/free/nrw/commons/contributions/MainActivity.java index 7d5a4570e..86e6eef77 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/MainActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/MainActivity.java @@ -94,7 +94,9 @@ public class MainActivity extends BaseActivity @Override public boolean onSupportNavigateUp() { if (activeFragment == ActiveFragment.CONTRIBUTIONS) { - contributionsFragment.backButtonClicked(); + if (!contributionsFragment.backButtonClicked()) { + return false; + } } else { onBackPressed(); showTabs(); @@ -238,8 +240,11 @@ public class MainActivity extends BaseActivity @Override public void onBackPressed() { if (contributionsFragment != null && activeFragment == ActiveFragment.CONTRIBUTIONS) { - // Meas that contribution fragment is visible - contributionsFragment.backButtonClicked(); + // Means that contribution fragment is visible + if (!contributionsFragment.backButtonClicked()) {//If this one does not wan't to handle + // the back press, let the activity do so + super.onBackPressed(); + } } else if (nearbyParentFragment != null && activeFragment == ActiveFragment.NEARBY) { // Means that nearby fragment is visible /* If function nearbyParentFragment.backButtonClick() returns false, it means that the bottomsheet is From 78dd5f6494fe4ac1eb2060c1249ba59ff2fe69f3 Mon Sep 17 00:00:00 2001 From: Ashish Date: Sat, 16 Jan 2021 00:14:09 +0530 Subject: [PATCH 04/18] Fixes #4179 (#4181) * Handled possible null check on MediaDetails in BookmarkListRootFragment#backPressed() --- .../nrw/commons/bookmarks/BookmarkListRootFragment.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarkListRootFragment.java b/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarkListRootFragment.java index 16320a86e..fc4a26aa6 100644 --- a/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarkListRootFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarkListRootFragment.java @@ -172,16 +172,15 @@ public class BookmarkListRootFragment extends CommonsDaggerSupportFragment imple } public void backPressed() { - if (mediaDetails.isVisible()) { + if (null != mediaDetails && mediaDetails.isVisible()) { // todo add get list fragment - ((BookmarkFragment)getParentFragment()).tabLayout.setVisibility(View.VISIBLE); + ((BookmarkFragment) getParentFragment()).tabLayout.setVisibility(View.VISIBLE); removeFragment(mediaDetails); setFragment(listFragment, mediaDetails); - ((MainActivity)getActivity()).showTabs(); } else { ((MainActivity) getActivity()).setSelectedItemId(NavTab.CONTRIBUTIONS.code()); - ((MainActivity)getActivity()).showTabs(); } + ((MainActivity) getActivity()).showTabs(); } @Override From b60b3dc3e27bbc63435d40161a79f18586d8b297 Mon Sep 17 00:00:00 2001 From: neslihanturan Date: Tue, 26 Jan 2021 18:04:10 +0300 Subject: [PATCH 05/18] Cherrypick for hotfix3.1 (#4205) * Fixes #4159 On Explore Tab, All Available Options on toolbar in media detail view are only targeting the first media in the list. Fixes #4159 On Explore Tab, All Available Options on toolbar in media detail view are only targeting the first media in the list. * fixed bug: App crashes on viewing review in Review Fragment #4132 (#4146) * fixed bug:app crashes on viewing review in Review Fragment #4135 * Fixed the issue with back button in contribution tab. (#4177) Co-authored-by: Pratham2305 * Fixed the issue with back navigation button on toolbar in explore tab. (#4175) * Fix (#4148) Issues on theme change * fixed themeChange crashes * fixed comments * Overlooked the title bar Co-authored-by: Pratham Pahariya <54663429+Pratham2305@users.noreply.github.com> Co-authored-by: Shabir Ahmad <56585337+shabar-shab@users.noreply.github.com> Co-authored-by: Pratham2305 Co-authored-by: Aditya-Srivastav <54016427+4D17Y4@users.noreply.github.com> --- .../bookmarks/BookmarkListRootFragment.java | 8 +++- .../contributions/ContributionsFragment.java | 46 +++++++++++++++---- .../commons/contributions/MainActivity.java | 22 ++++++--- .../explore/ExploreListRootFragment.java | 11 ++++- .../commons/review/ReviewImageFragment.java | 2 +- 5 files changed, 70 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarkListRootFragment.java b/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarkListRootFragment.java index fc4a26aa6..3ee03218a 100644 --- a/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarkListRootFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarkListRootFragment.java @@ -38,6 +38,10 @@ public class BookmarkListRootFragment extends CommonsDaggerSupportFragment imple @BindView(R.id.explore_container) FrameLayout container; + public BookmarkListRootFragment(){ + //empty constructor necessary otherwise crashes on recreate + } + public BookmarkListRootFragment(Bundle bundle, BookmarksPagerAdapter bookmarksPagerAdapter) { String title = bundle.getString("categoryName"); int order = bundle.getInt("order"); @@ -65,7 +69,9 @@ public class BookmarkListRootFragment extends CommonsDaggerSupportFragment imple @Override public void onViewCreated(@NonNull final View view, @Nullable final Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - setFragment(listFragment, mediaDetails); + if(savedInstanceState==null) { + setFragment(listFragment, mediaDetails); + } } public void setFragment(Fragment fragment, Fragment otherFragment) { 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 3e248e93c..144724a99 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 @@ -286,13 +286,13 @@ public class ContributionsFragment nearbyNotificationCardView.setVisibility(View.GONE); } } - showFragment(contributionsListFragment, CONTRIBUTION_LIST_FRAGMENT_TAG); + showFragment(contributionsListFragment, CONTRIBUTION_LIST_FRAGMENT_TAG, mediaDetailPagerFragment); } private void showMediaDetailPagerFragment() { // hide nearby card view on media detail is visible setupViewForMediaDetails(); - showFragment(mediaDetailPagerFragment, MEDIA_DETAIL_PAGER_FRAGMENT_TAG); + showFragment(mediaDetailPagerFragment, MEDIA_DETAIL_PAGER_FRAGMENT_TAG, contributionsListFragment); } private void setupViewForMediaDetails() { @@ -329,7 +329,7 @@ public class ContributionsFragment showContributionsListFragment(); } - showFragment(contributionsListFragment, CONTRIBUTION_LIST_FRAGMENT_TAG); + showFragment(contributionsListFragment, CONTRIBUTION_LIST_FRAGMENT_TAG, mediaDetailPagerFragment); } /** @@ -337,15 +337,44 @@ public class ContributionsFragment * * @param fragment * @param tag + * @param otherFragment */ - private void showFragment(Fragment fragment, String tag) { + private void showFragment(Fragment fragment, String tag, Fragment otherFragment) { FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); - transaction.replace(R.id.root_frame, fragment, tag); - transaction.addToBackStack(CONTRIBUTION_LIST_FRAGMENT_TAG); - transaction.commit(); + if (fragment.isAdded() && otherFragment != null) { + transaction.hide(otherFragment); + transaction.show(fragment); + transaction.addToBackStack(CONTRIBUTION_LIST_FRAGMENT_TAG); + transaction.commit(); + getChildFragmentManager().executePendingTransactions(); + } else if (fragment.isAdded() && otherFragment == null) { + transaction.show(fragment); + transaction.addToBackStack(CONTRIBUTION_LIST_FRAGMENT_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.commit(); + getChildFragmentManager().executePendingTransactions(); + } else if (!fragment.isAdded()) { + transaction.replace(R.id.root_frame, fragment, tag); + transaction.addToBackStack(CONTRIBUTION_LIST_FRAGMENT_TAG); + transaction.commit(); + getChildFragmentManager().executePendingTransactions(); + } + } + + public void removeFragment(Fragment fragment) { + getChildFragmentManager() + .beginTransaction() + .remove(fragment) + .commit(); getChildFragmentManager().executePendingTransactions(); } + public Intent getUploadServiceIntent(){ Intent intent = new Intent(getActivity(), UploadService.class); intent.setAction(UploadService.ACTION_START_SERVICE); @@ -620,7 +649,8 @@ public class ContributionsFragment } else { nearbyNotificationCardView.setVisibility(View.GONE); } - getChildFragmentManager().popBackStack(); + removeFragment(mediaDetailPagerFragment); + showFragment(contributionsListFragment, CONTRIBUTION_LIST_FRAGMENT_TAG, mediaDetailPagerFragment); ((BaseActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(false); ((MainActivity)getActivity()).showTabs(); fetchCampaigns(); diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/MainActivity.java b/app/src/main/java/fr/free/nrw/commons/contributions/MainActivity.java index 86e6eef77..24c2a1b16 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/MainActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/MainActivity.java @@ -110,11 +110,18 @@ public class MainActivity extends BaseActivity setContentView(R.layout.main); ButterKnife.bind(this); setSupportActionBar(toolbar); + toolbar.setNavigationOnClickListener(view -> { + onSupportNavigateUp(); + }); if (applicationKvStore.getBoolean("login_skipped") == true) { setTitle(getString(R.string.explore_tab_title_mobile)); setUpLoggedOutPager(); } else { - setTitle(getString(R.string.contributions_fragment)); + if(savedInstanceState == null){ + //starting a fresh fragment. + setTitle(getString(R.string.contributions_fragment)); + loadFragment(ContributionsFragment.newInstance(),false); + } setUpPager(); initMain(); } @@ -125,30 +132,31 @@ public class MainActivity extends BaseActivity } private void setUpPager() { - loadFragment(ContributionsFragment.newInstance()); tabLayout.setOnNavigationItemSelectedListener(item -> { if (!item.getTitle().equals("More")) { // do not change title for more fragment setTitle(item.getTitle()); } Fragment fragment = NavTab.of(item.getOrder()).newInstance(); - return loadFragment(fragment); + return loadFragment(fragment,true); }); } private void setUpLoggedOutPager() { - loadFragment(ExploreFragment.newInstance()); + loadFragment(ExploreFragment.newInstance(),false); tabLayout.setOnNavigationItemSelectedListener(item -> { if (!item.getTitle().equals("More")) { // do not change title for more fragment setTitle(item.getTitle()); } Fragment fragment = NavTabLoggedOut.of(item.getOrder()).newInstance(); - return loadFragment(fragment); + return loadFragment(fragment,true); }); } - private boolean loadFragment(Fragment fragment) { + private boolean loadFragment(Fragment fragment,boolean showBottom ) { + //showBottom so that we do not show the bottom tray again when constructing + //from the saved instance state. if (fragment instanceof ContributionsFragment) { if (activeFragment == ActiveFragment.CONTRIBUTIONS) { // Do nothing if same tab return true; @@ -173,7 +181,7 @@ public class MainActivity extends BaseActivity } bookmarkFragment = (BookmarkFragment) fragment; activeFragment = ActiveFragment.BOOKMARK; - } else if (fragment == null) { + } else if (fragment == null && showBottom) { if (applicationKvStore.getBoolean("login_skipped") == true) { // If logged out, more sheet is different MoreBottomSheetLoggedOutFragment bottomSheet = new MoreBottomSheetLoggedOutFragment(); bottomSheet.show(getSupportFragmentManager(), diff --git a/app/src/main/java/fr/free/nrw/commons/explore/ExploreListRootFragment.java b/app/src/main/java/fr/free/nrw/commons/explore/ExploreListRootFragment.java index 0a3f43a3b..19d9effc7 100644 --- a/app/src/main/java/fr/free/nrw/commons/explore/ExploreListRootFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/explore/ExploreListRootFragment.java @@ -34,6 +34,10 @@ public class ExploreListRootFragment extends CommonsDaggerSupportFragment implem @BindView(R.id.explore_container) FrameLayout container; + public ExploreListRootFragment(){ + //empty constructor necessary otherwise crashes on recreate + } + public ExploreListRootFragment(Bundle bundle) { String title = bundle.getString("categoryName"); listFragment = new CategoriesMediaFragment(); @@ -55,7 +59,9 @@ public class ExploreListRootFragment extends CommonsDaggerSupportFragment implem @Override public void onViewCreated(@NonNull final View view, @Nullable final Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - setFragment(listFragment, mediaDetails); + if(savedInstanceState == null) { + setFragment(listFragment, mediaDetails); + } } public void setFragment(Fragment fragment, Fragment otherFragment) { @@ -110,7 +116,8 @@ public class ExploreListRootFragment extends CommonsDaggerSupportFragment implem Log.d("deneme8","on media clicked"); container.setVisibility(View.VISIBLE); ((ExploreFragment)getParentFragment()).tabLayout.setVisibility(View.GONE); - mediaDetails = new MediaDetailPagerFragment(false, true, position); + mediaDetails = new MediaDetailPagerFragment(false, true); + mediaDetails.showImage(position); setFragment(mediaDetails, listFragment); } diff --git a/app/src/main/java/fr/free/nrw/commons/review/ReviewImageFragment.java b/app/src/main/java/fr/free/nrw/commons/review/ReviewImageFragment.java index f82ebd43a..0a828e079 100644 --- a/app/src/main/java/fr/free/nrw/commons/review/ReviewImageFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/review/ReviewImageFragment.java @@ -115,7 +115,7 @@ public class ReviewImageFragment extends CommonsDaggerSupportFragment { //Get existing user name if it is already saved using savedInstanceState else get from reviewController if (savedInstanceState == null) { - if (getReviewActivity().reviewController != null) { + if (getReviewActivity().reviewController.firstRevision != null) { user = getReviewActivity().reviewController.firstRevision.getUser(); } } else { From 60993b310910e6d74a9c26fa12fe7dc093d274b3 Mon Sep 17 00:00:00 2001 From: Madhur Gupta <30932899+madhurgupta10@users.noreply.github.com> Date: Tue, 4 May 2021 21:09:32 +0530 Subject: [PATCH 06/18] Fixes #4173 (#4396) --- app/build.gradle | 4 ++-- .../fr/free/nrw/commons/CommonsApplication.java | 3 ++- .../nrw/commons/logging/CommonsLogSender.java | 15 +++++++++++++++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 355748b73..0b1c1a475 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -57,8 +57,8 @@ dependencies { implementation "com.squareup.okhttp3:okhttp-ws:$OKHTTP_VERSION" // Logging - implementation 'ch.acra:acra-dialog:5.3.0' - implementation 'ch.acra:acra-mail:5.3.0' + implementation 'ch.acra:acra-dialog:5.8.1-beta11' + implementation 'ch.acra:acra-mail:5.8.1-beta11' implementation 'org.slf4j:slf4j-api:1.7.25' api('com.github.tony19:logback-android-classic:1.1.1-6') { exclude group: 'com.google.android', module: 'android' diff --git a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java index 9a1d8187b..f2fdfbd4f 100644 --- a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java +++ b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java @@ -68,7 +68,8 @@ import timber.log.Timber; ) @AcraMailSender( - mailTo = "commons-app-android-private@googlegroups.com" + mailTo = "commons-app-android-private@googlegroups.com", + reportAsFile = false ) @AcraDialog( diff --git a/app/src/main/java/fr/free/nrw/commons/logging/CommonsLogSender.java b/app/src/main/java/fr/free/nrw/commons/logging/CommonsLogSender.java index 4e8fe2e70..29c2c732e 100644 --- a/app/src/main/java/fr/free/nrw/commons/logging/CommonsLogSender.java +++ b/app/src/main/java/fr/free/nrw/commons/logging/CommonsLogSender.java @@ -2,12 +2,16 @@ package fr.free.nrw.commons.logging; import android.content.Context; +import android.os.Bundle; import javax.inject.Inject; import javax.inject.Singleton; import fr.free.nrw.commons.auth.SessionManager; import fr.free.nrw.commons.utils.ConfigUtils; import fr.free.nrw.commons.utils.DeviceInfoUtil; +import org.acra.data.CrashReportData; +import org.acra.sender.ReportSenderException; +import org.jetbrains.annotations.NotNull; /** * Class responsible for sending logs to developers @@ -87,4 +91,15 @@ public class CommonsLogSender extends LogsSender { return builder.toString(); } + + @Override + public boolean requiresForeground() { + return false; + } + + @Override + public void send(@NotNull Context context, @NotNull CrashReportData crashReportData, + @NotNull Bundle bundle) throws ReportSenderException { + + } } From 3416504cda5bbcad98beb1450707e58752312c00 Mon Sep 17 00:00:00 2001 From: neslihanturan Date: Sat, 15 May 2021 17:52:18 +0300 Subject: [PATCH 07/18] Fix #4147 Pre-fill desc in Nearby uploads with Wikidata item's label + description (#4390) * Update query to fetch descriptions * Make description added to NearbyResultItem * Make string operations to display description and label in a combined way * Fix reviews, remove long description from list and swap label and description texts * Fix repeated information issue * Fix double information issue * fix style issues * Remove douplicated information --- .../java/fr/free/nrw/commons/nearby/Place.java | 18 +++++++++++++++++- .../nrw/commons/nearby/PlaceAdapterDelegate.kt | 3 ++- .../nearby/fragments/NearbyParentFragment.java | 7 ++++++- .../commons/nearby/model/NearbyResultItem.kt | 7 ++++++- app/src/main/resources/queries/nearby_query.rq | 5 +++++ 5 files changed, 36 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/Place.java b/app/src/main/java/fr/free/nrw/commons/nearby/Place.java index 1da57e48e..11f670420 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/Place.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/Place.java @@ -60,10 +60,26 @@ public class Place implements Parcelable { if(!StringUtils.isBlank(itemClass)) { classEntityId = itemClass.replace("http://www.wikidata.org/entity/", ""); } + // Set description when not null and not empty + String description = (item.getDescription().getValue() != null && !item.getDescription().getValue().isEmpty()) ? item.getDescription().getValue() : ""; + // When description is "?" but we have a valid label, just use the label. So replace "?" by "" in description + description = (description.equals("?") + && (item.getLabel().getValue() != null + && !item.getLabel().getValue().isEmpty()) ? "" : description); + /* + * If we have a valid label + * - If have a valid label add the description at the end of the string with parenthesis + * - If we don't have a valid label, string will include only the description. So add it without paranthesis + */ + description = ((item.getLabel().getValue() != null && !item.getLabel().getValue().isEmpty()) + ? item.getLabel().getValue() + + ((description != null && !description.isEmpty()) + ? " (" + description + ")" : "") + : description); return new Place( item.getLabel().getValue(), Label.fromText(classEntityId), // list - item.getClassLabel().getValue(), // details + description, // description and label of Wikidata item PlaceUtils.latLngFromPointString(item.getLocation().getValue()), item.getCommonsCategory().getValue(), new Sitelinks.Builder() diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/PlaceAdapterDelegate.kt b/app/src/main/java/fr/free/nrw/commons/nearby/PlaceAdapterDelegate.kt index eaf32a48b..632eadd47 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/PlaceAdapterDelegate.kt +++ b/app/src/main/java/fr/free/nrw/commons/nearby/PlaceAdapterDelegate.kt @@ -51,7 +51,8 @@ fun placeAdapterDelegate( tvDesc.setText(R.string.no_description_found) tvDesc.visibility = INVISIBLE } else { - tvDesc.text = descriptionText + // Remove the label and display only texts inside pharentheses (description) since too long + tvDesc.text = descriptionText.substringAfter(tvName.text.toString() + " (").substringBeforeLast(")"); } distance.text = item.distance icon.setImageResource(item.label.icon) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.java index 0689dafc0..d024655ed 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.java @@ -1435,7 +1435,12 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment title.setText(selectedPlace.name); distance.setText(selectedPlace.distance); - description.setText(selectedPlace.getLongDescription()); + // Remove label since it is double information + String descriptionText = selectedPlace.getLongDescription() + .replace(selectedPlace.getName() + " (",""); + descriptionText = (descriptionText.equals(selectedPlace.getLongDescription()) ? descriptionText : descriptionText.replaceFirst(".$","")); + // Set the short description after we remove place name from long description + description.setText(descriptionText); fabCamera.setOnClickListener(view -> { if (fabCamera.isShown()) { diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/model/NearbyResultItem.kt b/app/src/main/java/fr/free/nrw/commons/nearby/model/NearbyResultItem.kt index 7950db906..2557c97d4 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/model/NearbyResultItem.kt +++ b/app/src/main/java/fr/free/nrw/commons/nearby/model/NearbyResultItem.kt @@ -11,7 +11,8 @@ class NearbyResultItem(private val item: ResultTuple?, @field:SerializedName("classLabel") private val classLabel: ResultTuple?, @field:SerializedName("commonsCategory") private val commonsCategory: ResultTuple?, @field:SerializedName("pic") private val pic: ResultTuple?, - @field:SerializedName("destroyed") private val destroyed: ResultTuple?) { + @field:SerializedName("destroyed") private val destroyed: ResultTuple?, + @field:SerializedName("description") private val description: ResultTuple?) { fun getItem(): ResultTuple { return item ?: ResultTuple() @@ -57,4 +58,8 @@ class NearbyResultItem(private val item: ResultTuple?, return destroyed ?: ResultTuple() } + fun getDescription(): ResultTuple { + return description ?: ResultTuple() + } + } \ No newline at end of file diff --git a/app/src/main/resources/queries/nearby_query.rq b/app/src/main/resources/queries/nearby_query.rq index 35af6bece..aeabd903d 100644 --- a/app/src/main/resources/queries/nearby_query.rq +++ b/app/src/main/resources/queries/nearby_query.rq @@ -2,6 +2,7 @@ SELECT (SAMPLE(?location) as ?location) ?item (SAMPLE(COALESCE(?itemLabelPreferredLanguage, ?itemLabelAnyLanguage)) as ?label) + (SAMPLE(COALESCE(?itemDescriptionPreferredLanguage, ?itemDescriptionAnyLanguage, "?")) as ?description) (SAMPLE(?classId) as ?class) (SAMPLE(COALESCE(?classLabelPreferredLanguage, ?classLabelAnyLanguage, "?")) as ?classLabel) (SAMPLE(COALESCE(?icon0, ?icon1)) as ?icon) @@ -22,6 +23,10 @@ SELECT OPTIONAL {?item rdfs:label ?itemLabelPreferredLanguage. FILTER (lang(?itemLabelPreferredLanguage) = "${LANG}")} OPTIONAL {?item rdfs:label ?itemLabelAnyLanguage} + # Get the description in the preferred language of the user, or any other language if no description is available in that language. + OPTIONAL {?item schema:description ?itemDescriptionPreferredLanguage. FILTER (lang(?itemDescriptionPreferredLanguage) = "${LANG}")} + OPTIONAL {?item schema:description ?itemDescriptionAnyLanguage } + # Get Commons category (P373) OPTIONAL { ?item wdt:P373 ?commonsCategory. } From 09d8443e98f98041448b25d0edda171916c827e6 Mon Sep 17 00:00:00 2001 From: Vinayak Aggarwal <56196007+vinayak0505@users.noreply.github.com> Date: Thu, 15 Apr 2021 20:15:10 +0530 Subject: [PATCH 08/18] Changes made (#4354) --- .../explore/ExploreListRootFragment.java | 3 +- .../media/MediaDetailPagerFragment.java | 45 +++++++++++-------- 2 files changed, 28 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/explore/ExploreListRootFragment.java b/app/src/main/java/fr/free/nrw/commons/explore/ExploreListRootFragment.java index 19d9effc7..8d5bc3c36 100644 --- a/app/src/main/java/fr/free/nrw/commons/explore/ExploreListRootFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/explore/ExploreListRootFragment.java @@ -117,8 +117,9 @@ public class ExploreListRootFragment extends CommonsDaggerSupportFragment implem container.setVisibility(View.VISIBLE); ((ExploreFragment)getParentFragment()).tabLayout.setVisibility(View.GONE); mediaDetails = new MediaDetailPagerFragment(false, true); - mediaDetails.showImage(position); + ((ExploreFragment) getParentFragment()).setScroll(false); setFragment(mediaDetails, listFragment); + mediaDetails.showImage(position); } /** 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 4c7f16c11..178fdb931 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 @@ -92,24 +92,13 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple adapter = new MediaDetailAdapter(getChildFragmentManager()); ((BaseActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true); + pager.setAdapter(adapter); if (savedInstanceState != null) { final int pageNumber = savedInstanceState.getInt("current-page"); - // Adapter doesn't seem to be loading immediately. - // Dear God, please forgive us for our sins - view.postDelayed(() -> { - pager.setAdapter(adapter); - pager.setCurrentItem(pageNumber, false); + pager.setCurrentItem(pageNumber, false); + getActivity().invalidateOptionsMenu(); + adapter.notifyDataSetChanged(); - if (getActivity() == null) { - Timber.d("Returning as activity is destroyed!"); - return; - } - - getActivity().supportInvalidateOptionsMenu(); - adapter.notifyDataSetChanged(); - }, 100); - } else { - pager.setAdapter(adapter); } if (getActivity() instanceof MainActivity) { ((MainActivity)getActivity()).hideTabs(); @@ -304,13 +293,31 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple public void showImage(int i, boolean isWikipediaButtonDisplayed) { this.isWikipediaButtonDisplayed = isWikipediaButtonDisplayed; - Handler handler = new Handler(); - handler.postDelayed(() -> pager.setCurrentItem(i), 5); + setViewPagerCurrentItem(i); } public void showImage(int i) { - Handler handler = new Handler(); - handler.postDelayed(() -> pager.setCurrentItem(i), 5); + setViewPagerCurrentItem(i); + } + + /** + * This function waits for the item to load then sets the item to current item + * @param position current item that to be shown + */ + private void setViewPagerCurrentItem(int position) { + final Boolean[] currentItemNotShown = {true}; + Runnable runnable = new Runnable() { + @Override + public void run() { + while(currentItemNotShown[0]){ + if(adapter.getCount() > position){ + pager.setCurrentItem(position, false); + currentItemNotShown[0] = false; + } + } + } + }; + new Thread(runnable).start(); } /** From b42742ac2126eb637c741b4b901e77a726e2f5e2 Mon Sep 17 00:00:00 2001 From: Josephine Lim Date: Thu, 3 Jun 2021 18:54:07 +1000 Subject: [PATCH 09/18] Remove nonexistent method --- .../fr/free/nrw/commons/explore/ExploreListRootFragment.java | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/fr/free/nrw/commons/explore/ExploreListRootFragment.java b/app/src/main/java/fr/free/nrw/commons/explore/ExploreListRootFragment.java index 8d5bc3c36..e8967d9e8 100644 --- a/app/src/main/java/fr/free/nrw/commons/explore/ExploreListRootFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/explore/ExploreListRootFragment.java @@ -117,7 +117,6 @@ public class ExploreListRootFragment extends CommonsDaggerSupportFragment implem container.setVisibility(View.VISIBLE); ((ExploreFragment)getParentFragment()).tabLayout.setVisibility(View.GONE); mediaDetails = new MediaDetailPagerFragment(false, true); - ((ExploreFragment) getParentFragment()).setScroll(false); setFragment(mediaDetails, listFragment); mediaDetails.showImage(position); } From 9139fd91374def62c91bb5f588b21e789b5288dd Mon Sep 17 00:00:00 2001 From: Madhur Gupta <30932899+madhurgupta10@users.noreply.github.com> Date: Mon, 7 Jun 2021 12:05:29 +0530 Subject: [PATCH 10/18] Fix #4283 IllegalStateException (#4440) * Fix #4283 IllegalStateException * Fix flickering issue --- .../commons/contributions/ContributionsFragment.java | 7 +++++++ .../contributions/ContributionsListFragment.java | 12 ++++++++++-- .../nrw/commons/media/MediaDetailPagerFragment.java | 4 +--- 3 files changed, 18 insertions(+), 5 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 144724a99..3a2e29853 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 @@ -582,6 +582,13 @@ public class ContributionsFragment presenter.onDetachView(); } + @Override + public void notifyDataSetChanged() { + if (mediaDetailPagerFragment != null) { + mediaDetailPagerFragment.notifyDataSetChanged(); + } + } + /** * Retry upload when it is failed * diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java index 0ae3b8b8c..3147c73ac 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java @@ -93,6 +93,8 @@ public class ContributionsListFragment extends CommonsDaggerSupportFragment impl private final int SPAN_COUNT_LANDSCAPE = 3; private final int SPAN_COUNT_PORTRAIT = 1; + private int contributionsSize; + @Override public View onCreateView( @@ -143,7 +145,11 @@ public class ContributionsListFragment extends CommonsDaggerSupportFragment impl } contributionsListPresenter.setup(); - contributionsListPresenter.contributionList.observe(this.getViewLifecycleOwner(), adapter::submitList); + contributionsListPresenter.contributionList.observe(this.getViewLifecycleOwner(), list -> { + contributionsSize = list.size(); + adapter.submitList(list); + callback.notifyDataSetChanged(); + }); rvContributionsList.setAdapter(adapter); adapter.registerAdapterDataObserver(new AdapterDataObserver() { @Override @@ -328,7 +334,7 @@ public class ContributionsListFragment extends CommonsDaggerSupportFragment impl } public int getTotalMediaCount() { - return adapter.getItemCount(); + return contributionsSize; } /** @@ -355,6 +361,8 @@ public class ContributionsListFragment extends CommonsDaggerSupportFragment impl public interface Callback { + void notifyDataSetChanged(); + void retryUpload(Contribution contribution); void showDetail(int position, boolean isWikipediaButtonDisplayed); 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 178fdb931..7756b9e40 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 @@ -6,7 +6,6 @@ import android.annotation.SuppressLint; import android.content.Intent; import android.net.Uri; import android.os.Bundle; -import android.os.Handler; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -97,9 +96,8 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple final int pageNumber = savedInstanceState.getInt("current-page"); pager.setCurrentItem(pageNumber, false); getActivity().invalidateOptionsMenu(); - adapter.notifyDataSetChanged(); - } + adapter.notifyDataSetChanged(); if (getActivity() instanceof MainActivity) { ((MainActivity)getActivity()).hideTabs(); } From 65715b734d1eab618419636bc4c63541ec932734 Mon Sep 17 00:00:00 2001 From: Josephine Lim Date: Wed, 9 Jun 2021 19:33:41 +1000 Subject: [PATCH 11/18] Versioning for v3.0.1 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 0b1c1a475..3d1ab456f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -150,8 +150,8 @@ android { defaultConfig { //applicationId 'fr.free.nrw.commons' - versionCode 876 - versionName '3.0.0' + versionCode 1016 + versionName '3.0.1' setProperty("archivesBaseName", "app-commons-v$versionName-" + getBranchName()) minSdkVersion 19 From 898dbcd75197d78849bbd39d8beedf1a2f7715d6 Mon Sep 17 00:00:00 2001 From: Josephine Lim Date: Wed, 9 Jun 2021 19:36:10 +1000 Subject: [PATCH 12/18] Update changelog.md --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 61d11ecd8..bc03bc28a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Wikimedia Commons for Android +## v3.0.1 +- Pre-fill desc in Nearby uploads with Wikidata item's label + description +- Improved ACRA crash reporting +- Fixed various crashes + ## v3.0.0 - Added Structured Data to upload workflow, users can now add depicts - Added Leaderboard in Achievements screen From e361dcc90ddaedd37b98cadfe0dbba97d18dfde8 Mon Sep 17 00:00:00 2001 From: Madhur Gupta <30932899+madhurgupta10@users.noreply.github.com> Date: Mon, 28 Jun 2021 12:59:07 +0530 Subject: [PATCH 13/18] Fix crash when image resolution is very high (#4483) --- app/src/main/AndroidManifest.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 81b9f7153..ffc972d89 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,6 +57,7 @@ Date: Tue, 29 Jun 2021 13:07:41 +0530 Subject: [PATCH 14/18] Fix #4482 (#4484) --- .../nrw/commons/media/MediaDetailPagerFragment.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) 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 7756b9e40..a1565fdc6 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 @@ -12,6 +12,9 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; +import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentStatePagerAdapter; @@ -89,9 +92,18 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple pager.addOnPageChangeListener(this); adapter = new MediaDetailAdapter(getChildFragmentManager()); + ((BaseActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true); + if (getActivity() != null) { + final ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar(); + if (actionBar != null) { + actionBar.setDisplayHomeAsUpEnabled(true); + } + } + pager.setAdapter(adapter); + if (savedInstanceState != null) { final int pageNumber = savedInstanceState.getInt("current-page"); pager.setCurrentItem(pageNumber, false); From 0e5bc0dfb14da1ea3d4987bc1970c9e98dbdce82 Mon Sep 17 00:00:00 2001 From: Josephine Lim Date: Wed, 30 Jun 2021 19:20:45 +1000 Subject: [PATCH 15/18] Versioning for v3.0.2 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 3d1ab456f..9183c2b2c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -150,8 +150,8 @@ android { defaultConfig { //applicationId 'fr.free.nrw.commons' - versionCode 1016 - versionName '3.0.1' + versionCode 1021 + versionName '3.0.2' setProperty("archivesBaseName", "app-commons-v$versionName-" + getBranchName()) minSdkVersion 19 From 448f93e923a55c63a6f784b004a707a5f1362ea5 Mon Sep 17 00:00:00 2001 From: Josephine Lim Date: Wed, 30 Jun 2021 19:22:55 +1000 Subject: [PATCH 16/18] Update changelog.md --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bc03bc28a..ba83aa025 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Wikimedia Commons for Android +## v3.0.2 +- Fixed crash when uploading high res image +- Fixed crash when viewing images in Explore + ## v3.0.1 - Pre-fill desc in Nearby uploads with Wikidata item's label + description - Improved ACRA crash reporting From 4c560149e64e89d07992519efe70da8944d9788a Mon Sep 17 00:00:00 2001 From: Josephine Lim Date: Thu, 15 Jul 2021 16:08:52 +1000 Subject: [PATCH 17/18] Remove duplicate code from merge to prevent NPE --- .../fr/free/nrw/commons/media/MediaDetailPagerFragment.java | 2 -- 1 file changed, 2 deletions(-) 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 a1565fdc6..55d2bfc71 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 @@ -93,8 +93,6 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple adapter = new MediaDetailAdapter(getChildFragmentManager()); - ((BaseActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true); - if (getActivity() != null) { final ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar(); if (actionBar != null) { From 017151873fb85cab504c13aeff503b8b6ce46785 Mon Sep 17 00:00:00 2001 From: Josephine Lim Date: Thu, 15 Jul 2021 17:22:07 +1000 Subject: [PATCH 18/18] Versioning for v3.0.3 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 9183c2b2c..5999efb59 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -150,8 +150,8 @@ android { defaultConfig { //applicationId 'fr.free.nrw.commons' - versionCode 1021 - versionName '3.0.2' + versionCode 1022 + versionName '3.0.3' setProperty("archivesBaseName", "app-commons-v$versionName-" + getBranchName()) minSdkVersion 19