From f2d271af375dfa86054acffe148aee4e4d10ca8e Mon Sep 17 00:00:00 2001 From: Vivek Maskara Date: Fri, 30 Nov 2018 20:49:42 +0530 Subject: [PATCH 1/6] Fix memory leak due to wikidata edit listener (#2048) --- .../main/java/fr/free/nrw/commons/nearby/NearbyFragment.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyFragment.java index 5cafedcbc5..27c3c41ec2 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyFragment.java @@ -114,7 +114,6 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup c resumeFragment();*/ bundle = new Bundle(); initBottomSheetBehaviour(); - wikidataEditListener.setAuthenticationStateListener(this); this.view = view; return view; } @@ -642,6 +641,7 @@ private void performNearbyOperations() { @Override public void onAttach(Context context) { super.onAttach(context); + wikidataEditListener.setAuthenticationStateListener(this); } @Override @@ -650,6 +650,7 @@ public void onDestroy() { if (placesDisposable != null) { placesDisposable.dispose(); } + wikidataEditListener.setAuthenticationStateListener(null); } @Override @@ -657,6 +658,7 @@ public void onDetach() { super.onDetach(); snackbar = null; broadcastReceiver = null; + wikidataEditListener.setAuthenticationStateListener(null); } @Override From 2e29f4f7f92e3f876aa5594c424eb76ae0ce9edc Mon Sep 17 00:00:00 2001 From: Vivek Maskara Date: Sat, 1 Dec 2018 15:50:19 +0530 Subject: [PATCH 2/6] Fix bookmark crash fix (#2047) * Fix bookmark crash fix * Fix check for bookmark creator --- .../commons/bookmarks/pictures/BookmarkPicturesController.java | 2 +- .../fr/free/nrw/commons/media/MediaDetailPagerFragment.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesController.java b/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesController.java index cca5867bb1..9bd2613a1f 100644 --- a/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesController.java +++ b/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesController.java @@ -36,7 +36,7 @@ List loadBookmarkedPictures() { for (Bookmark bookmark : bookmarks) { List tmpMedias = mediaWikiApi.searchImages(bookmark.getMediaName(), 0); for (Media m : tmpMedias) { - if (m.getCreator().equals(bookmark.getMediaCreator())) { + if (m.getCreator().trim().equals(bookmark.getMediaCreator().trim())) { medias.add(m); break; } 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 722d94f318..ad5bf77e13 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 @@ -271,7 +271,7 @@ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { menu.clear(); // see http://stackoverflow.com/a/8495697/17865 inflater.inflate(R.menu.fragment_image_detail, menu); if (pager != null) { - MediaDetailProvider provider = (MediaDetailProvider) getParentFragment(); + MediaDetailProvider provider = getMediaDetailProvider(); if(provider == null) { return; } From 568f80766e16f38f5eecaf965a2d382425af47cc Mon Sep 17 00:00:00 2001 From: Ashish Kumar Date: Sat, 1 Dec 2018 18:55:29 +0530 Subject: [PATCH 3/6] Bug fix #2042 (#2056) * Bug fix #2042 * Added a snack with retry when api in AA fails * Increased connection timeouts in okhttpclient builder * added missing string resource --- .../achievements/AchievementsActivity.java | 11 ++++++++-- .../free/nrw/commons/di/NetworkingModule.java | 9 ++++++--- .../fr/free/nrw/commons/utils/ViewUtil.java | 20 +++++++++++++++++++ app/src/main/res/values/strings.xml | 1 + 4 files changed, 36 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/achievements/AchievementsActivity.java b/app/src/main/java/fr/free/nrw/commons/achievements/AchievementsActivity.java index d04d2b7b1d..b2b14f3c94 100644 --- a/app/src/main/java/fr/free/nrw/commons/achievements/AchievementsActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/achievements/AchievementsActivity.java @@ -185,6 +185,7 @@ void shareScreen(Bitmap bitmap) { * which then calls parseJson when results are fetched */ private void setAchievements() { + progressBar.setVisibility(View.VISIBLE); if (checkAccount()) { compositeDisposable.add(mediaWikiApi .getAchievements(Objects.requireNonNull(sessionManager.getCurrentAccount()).name) @@ -195,17 +196,23 @@ private void setAchievements() { if (response != null) { setUploadCount(Achievements.from(response)); } else { - onError(); + showSnackBarWithRetry(); } }, t -> { Timber.e(t, "Fetching achievements statistics failed"); - onError(); + showSnackBarWithRetry(); } )); } } + private void showSnackBarWithRetry() { + progressBar.setVisibility(View.GONE); + ViewUtil.showDismissibleSnackBar(findViewById(android.R.id.content), + R.string.achievements_fetch_failed, R.string.retry, view -> setAchievements()); + } + /** * Shows a generic error toast when error occurs while loading achievements or uploads */ diff --git a/app/src/main/java/fr/free/nrw/commons/di/NetworkingModule.java b/app/src/main/java/fr/free/nrw/commons/di/NetworkingModule.java index 953b7ecee5..92469202d4 100644 --- a/app/src/main/java/fr/free/nrw/commons/di/NetworkingModule.java +++ b/app/src/main/java/fr/free/nrw/commons/di/NetworkingModule.java @@ -9,6 +9,7 @@ import java.io.File; +import java.util.concurrent.TimeUnit; import javax.inject.Named; import javax.inject.Singleton; @@ -30,9 +31,11 @@ public class NetworkingModule { @Singleton public OkHttpClient provideOkHttpClient(Context context) { File dir = new File(context.getCacheDir(), "okHttpCache"); - return new OkHttpClient.Builder() - .cache(new Cache(dir, OK_HTTP_CACHE_SIZE)) - .build(); + return new OkHttpClient.Builder().connectTimeout(30, TimeUnit.SECONDS) + .writeTimeout(30, TimeUnit.SECONDS) + .readTimeout(30, TimeUnit.SECONDS) + .cache(new Cache(dir, OK_HTTP_CACHE_SIZE)) + .build(); } @Provides diff --git a/app/src/main/java/fr/free/nrw/commons/utils/ViewUtil.java b/app/src/main/java/fr/free/nrw/commons/utils/ViewUtil.java index aef3dddb0c..2f91071904 100644 --- a/app/src/main/java/fr/free/nrw/commons/utils/ViewUtil.java +++ b/app/src/main/java/fr/free/nrw/commons/utils/ViewUtil.java @@ -87,4 +87,24 @@ public static void displayPopupWindow(View anchorView, Context context, View pop popup.showAsDropDown(anchorView); } + /** + * A snack bar which has an action button which on click dismisses the snackbar and invokes the + * listener passed + */ + public static void showDismissibleSnackBar(View view, int messageResourceId, + int actionButtonResourceId, View.OnClickListener onClickListener) { + if (view.getContext() == null) { + return; + } + ExecutorUtils.uiExecutor().execute(() -> { + Snackbar snackbar = Snackbar.make(view, view.getContext().getString(messageResourceId), + Snackbar.LENGTH_INDEFINITE); + snackbar.setAction(view.getContext().getString(actionButtonResourceId), v -> { + snackbar.dismiss(); + onClickListener.onClick(v); + }); + snackbar.show(); + }); + } + } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4224f231f0..22feaa82ab 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -420,5 +420,6 @@ Upload your first media by touching the camera or gallery icon above. Never ask this again Display location permission Ask for location permission when needed for nearby notification card view feature. + Something went wrong, We could not fetch your achievements From 2bc9492367579a1a43ce31f8e55d91f70c28deb0 Mon Sep 17 00:00:00 2001 From: Ashish Kumar Date: Tue, 4 Dec 2018 20:56:25 +0530 Subject: [PATCH 4/6] Bugfix/duplicate categories (#2080) * Increased timeout to 60 seconds * Bug fix #1550 * filter duplicate categories --- .../main/java/fr/free/nrw/commons/di/NetworkingModule.java | 6 +++--- .../nrw/commons/mwapi/ApacheHttpClientMediaWikiApi.java | 6 ++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/di/NetworkingModule.java b/app/src/main/java/fr/free/nrw/commons/di/NetworkingModule.java index 92469202d4..e894f8ab92 100644 --- a/app/src/main/java/fr/free/nrw/commons/di/NetworkingModule.java +++ b/app/src/main/java/fr/free/nrw/commons/di/NetworkingModule.java @@ -31,9 +31,9 @@ public class NetworkingModule { @Singleton public OkHttpClient provideOkHttpClient(Context context) { File dir = new File(context.getCacheDir(), "okHttpCache"); - return new OkHttpClient.Builder().connectTimeout(30, TimeUnit.SECONDS) - .writeTimeout(30, TimeUnit.SECONDS) - .readTimeout(30, TimeUnit.SECONDS) + return new OkHttpClient.Builder().connectTimeout(60, TimeUnit.SECONDS) + .writeTimeout(60, TimeUnit.SECONDS) + .readTimeout(60, TimeUnit.SECONDS) .cache(new Cache(dir, OK_HTTP_CACHE_SIZE)) .build(); } diff --git a/app/src/main/java/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApi.java b/app/src/main/java/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApi.java index 2e1cbb1ac3..f35bb7f24e 100644 --- a/app/src/main/java/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApi.java +++ b/app/src/main/java/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApi.java @@ -347,6 +347,7 @@ public MediaResult fetchMediaByFilename(String filename) throws IOException { @Override @NonNull public Observable searchCategories(String filterValue, int searchCatsLimit) { + List categories = new ArrayList<>(); return Single.fromCallable(() -> { List categoryNodes = null; try { @@ -367,11 +368,12 @@ public Observable searchCategories(String filterValue, int searchCatsLim return new ArrayList(); } - List categories = new ArrayList<>(); for (CustomApiResult categoryNode : categoryNodes) { String cat = categoryNode.getDocument().getTextContent(); String catString = cat.replace("Category:", ""); - categories.add(catString); + if (!categories.contains(catString)) { + categories.add(catString); + } } return categories; From 36e077f0b1513cfcb28233c4cc151b1534f0f85f Mon Sep 17 00:00:00 2001 From: Vivek Maskara Date: Wed, 5 Dec 2018 13:39:08 +0530 Subject: [PATCH 5/6] Fix crash because of inactive fragment UI (#2046) * Fix crash because of inactive fragment UI * Add java docs --- .../commons/auth/AuthenticatedActivity.java | 2 +- .../pictures/BookmarkPicturesFragment.java | 4 ++-- .../category/CategoryImagesListFragment.java | 4 ++-- .../category/SubCategoryListFragment.java | 6 +++--- .../categories/SearchCategoryFragment.java | 4 ++-- .../explore/images/SearchImageFragment.java | 4 ++-- .../nrw/commons/nearby/NearbyFragment.java | 19 +++++++++++++------ .../notification/NotificationActivity.java | 4 ++-- .../free/nrw/commons/utils/FragmentUtils.java | 9 +++++++++ .../free/nrw/commons/utils/NetworkUtils.java | 3 +++ .../fr/free/nrw/commons/utils/ViewUtil.java | 7 ++++++- 11 files changed, 45 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/auth/AuthenticatedActivity.java b/app/src/main/java/fr/free/nrw/commons/auth/AuthenticatedActivity.java index b7c639f246..1bfcb77277 100644 --- a/app/src/main/java/fr/free/nrw/commons/auth/AuthenticatedActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/auth/AuthenticatedActivity.java @@ -64,7 +64,7 @@ protected void showBlockStatus() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .filter(result -> result) - .subscribe(result -> ViewUtil.showSnackbar(findViewById(android.R.id.content), R.string.block_notification) + .subscribe(result -> ViewUtil.showShortSnackbar(findViewById(android.R.id.content), R.string.block_notification) ); } } diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesFragment.java b/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesFragment.java index 90b3ef4574..a416433099 100644 --- a/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesFragment.java @@ -129,7 +129,7 @@ private void handleNoInternet() { statusTextView.setVisibility(VISIBLE); statusTextView.setText(getString(R.string.no_internet)); } else { - ViewUtil.showSnackbar(parentLayout, R.string.no_internet); + ViewUtil.showShortSnackbar(parentLayout, R.string.no_internet); } } @@ -140,7 +140,7 @@ private void handleNoInternet() { private void handleError(Throwable throwable) { Timber.e(throwable, "Error occurred while loading images inside a category"); try{ - ViewUtil.showSnackbar(parentLayout, R.string.error_loading_images); + ViewUtil.showShortSnackbar(parentLayout, R.string.error_loading_images); initErrorView(); }catch (Exception e){ e.printStackTrace(); diff --git a/app/src/main/java/fr/free/nrw/commons/category/CategoryImagesListFragment.java b/app/src/main/java/fr/free/nrw/commons/category/CategoryImagesListFragment.java index 1ead687017..1b91927e5b 100644 --- a/app/src/main/java/fr/free/nrw/commons/category/CategoryImagesListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/category/CategoryImagesListFragment.java @@ -124,7 +124,7 @@ private void handleNoInternet() { statusTextView.setVisibility(VISIBLE); statusTextView.setText(getString(R.string.no_internet)); } else { - ViewUtil.showSnackbar(parentLayout, R.string.no_internet); + ViewUtil.showShortSnackbar(parentLayout, R.string.no_internet); } } @@ -135,7 +135,7 @@ private void handleNoInternet() { private void handleError(Throwable throwable) { Timber.e(throwable, "Error occurred while loading images inside a category"); try{ - ViewUtil.showSnackbar(parentLayout, R.string.error_loading_images); + ViewUtil.showShortSnackbar(parentLayout, R.string.error_loading_images); initErrorView(); }catch (Exception e){ e.printStackTrace(); diff --git a/app/src/main/java/fr/free/nrw/commons/category/SubCategoryListFragment.java b/app/src/main/java/fr/free/nrw/commons/category/SubCategoryListFragment.java index 984d87fae4..476fde975d 100644 --- a/app/src/main/java/fr/free/nrw/commons/category/SubCategoryListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/category/SubCategoryListFragment.java @@ -135,10 +135,10 @@ private void handleSuccess(List subCategoryList) { private void handleError(Throwable throwable) { if (!isParentCategory){ Timber.e(throwable, "Error occurred while loading queried subcategories"); - ViewUtil.showSnackbar(categoriesRecyclerView,R.string.error_loading_categories); + ViewUtil.showShortSnackbar(categoriesRecyclerView,R.string.error_loading_categories); }else { Timber.e(throwable, "Error occurred while loading queried parentcategories"); - ViewUtil.showSnackbar(categoriesRecyclerView,R.string.error_loading_categories); + ViewUtil.showShortSnackbar(categoriesRecyclerView,R.string.error_loading_categories); } } @@ -161,6 +161,6 @@ private void initEmptyView() { */ private void handleNoInternet() { progressBar.setVisibility(GONE); - ViewUtil.showSnackbar(categoriesRecyclerView, R.string.no_internet); + ViewUtil.showShortSnackbar(categoriesRecyclerView, R.string.no_internet); } } diff --git a/app/src/main/java/fr/free/nrw/commons/explore/categories/SearchCategoryFragment.java b/app/src/main/java/fr/free/nrw/commons/explore/categories/SearchCategoryFragment.java index 520c55a572..983127c69d 100644 --- a/app/src/main/java/fr/free/nrw/commons/explore/categories/SearchCategoryFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/explore/categories/SearchCategoryFragment.java @@ -196,7 +196,7 @@ private void handleError(Throwable throwable) { Timber.e(throwable, "Error occurred while loading queried categories"); try { initErrorView(); - ViewUtil.showSnackbar(categoriesRecyclerView, R.string.error_loading_categories); + ViewUtil.showShortSnackbar(categoriesRecyclerView, R.string.error_loading_categories); }catch (Exception e){ e.printStackTrace(); } @@ -217,6 +217,6 @@ private void initErrorView() { */ private void handleNoInternet() { progressBar.setVisibility(GONE); - ViewUtil.showSnackbar(categoriesRecyclerView, R.string.no_internet); + ViewUtil.showShortSnackbar(categoriesRecyclerView, R.string.no_internet); } } diff --git a/app/src/main/java/fr/free/nrw/commons/explore/images/SearchImageFragment.java b/app/src/main/java/fr/free/nrw/commons/explore/images/SearchImageFragment.java index 8b28f50d51..f3beadfcf0 100644 --- a/app/src/main/java/fr/free/nrw/commons/explore/images/SearchImageFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/explore/images/SearchImageFragment.java @@ -206,7 +206,7 @@ private void handleSuccess(List mediaList) { private void handleError(Throwable throwable) { Timber.e(throwable, "Error occurred while loading queried images"); try { - ViewUtil.showSnackbar(imagesRecyclerView, R.string.error_loading_images); + ViewUtil.showShortSnackbar(imagesRecyclerView, R.string.error_loading_images); }catch (Exception e){ e.printStackTrace(); } @@ -226,7 +226,7 @@ private void initErrorView() { */ private void handleNoInternet() { progressBar.setVisibility(GONE); - ViewUtil.showSnackbar(imagesRecyclerView, R.string.no_internet); + ViewUtil.showShortSnackbar(imagesRecyclerView, R.string.no_internet); } /** diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyFragment.java index 27c3c41ec2..9eba63cf45 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyFragment.java @@ -15,7 +15,6 @@ import android.support.v4.app.FragmentTransaction; import android.support.v7.app.AlertDialog; import android.view.LayoutInflater; - import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; @@ -37,6 +36,7 @@ import fr.free.nrw.commons.location.LatLng; import fr.free.nrw.commons.location.LocationServiceManager; import fr.free.nrw.commons.location.LocationUpdateListener; +import fr.free.nrw.commons.utils.FragmentUtils; import fr.free.nrw.commons.utils.NetworkUtils; import fr.free.nrw.commons.utils.UriSerializer; import fr.free.nrw.commons.utils.ViewUtil; @@ -323,7 +323,7 @@ private void populatePlaces(NearbyController.NearbyPlacesInfo nearbyPlacesInfo) String gsonBoundaryCoordinates = gson.toJson(boundaryCoordinates); if (placeList.size() == 0) { - ViewUtil.showSnackbar(view.findViewById(R.id.container), R.string.no_nearby); + ViewUtil.showShortSnackbar(view.findViewById(R.id.container), R.string.no_nearby); } bundle.putString("PlaceList", gsonPlaceList); @@ -591,14 +591,17 @@ private void showErrorMessage(String message) { } private void addNetworkBroadcastReceiver() { + if (!FragmentUtils.isFragmentUIActive(this)) { + return; + } + IntentFilter intentFilter = new IntentFilter(NETWORK_INTENT_ACTION); - snackbar = Snackbar.make(transparentView , R.string.no_internet, Snackbar.LENGTH_INDEFINITE); - - broadcastReceiver = new BroadcastReceiver() { + snackbar = Snackbar.make(transparentView, R.string.no_internet, Snackbar.LENGTH_INDEFINITE); + broadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { - if (snackbar != null) { + if (snackbar != null && getActivity() != null) { if (NetworkUtils.isInternetConnectionEstablished(getActivity())) { refreshView(LOCATION_SIGNIFICANTLY_CHANGED); snackbar.dismiss(); @@ -609,6 +612,10 @@ public void onReceive(Context context, Intent intent) { } }; + if (getActivity() == null) { + return; + } + getActivity().registerReceiver(broadcastReceiver, intentFilter); } diff --git a/app/src/main/java/fr/free/nrw/commons/notification/NotificationActivity.java b/app/src/main/java/fr/free/nrw/commons/notification/NotificationActivity.java index ebeb7f7181..5036d6fa87 100644 --- a/app/src/main/java/fr/free/nrw/commons/notification/NotificationActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/notification/NotificationActivity.java @@ -106,7 +106,7 @@ private void addNotifications() { progressBar.setVisibility(View.GONE); }, throwable -> { Timber.e(throwable, "Error occurred while loading notifications"); - ViewUtil.showSnackbar(relativeLayout, R.string.error_notifications); + ViewUtil.showShortSnackbar(relativeLayout, R.string.error_notifications); progressBar.setVisibility(View.GONE); }); } else { @@ -123,7 +123,7 @@ private void handleUrl(String url) { private void setAdapter(List notificationList) { if (notificationList == null || notificationList.isEmpty()) { - ViewUtil.showSnackbar(relativeLayout, R.string.no_notifications); + ViewUtil.showShortSnackbar(relativeLayout, R.string.no_notifications); return; } notificationAdapterFactory = new NotificationAdapterFactory(notification -> { diff --git a/app/src/main/java/fr/free/nrw/commons/utils/FragmentUtils.java b/app/src/main/java/fr/free/nrw/commons/utils/FragmentUtils.java index d0e432c330..63c9d974da 100644 --- a/app/src/main/java/fr/free/nrw/commons/utils/FragmentUtils.java +++ b/app/src/main/java/fr/free/nrw/commons/utils/FragmentUtils.java @@ -28,4 +28,13 @@ public static boolean addAndCommitFragmentWithImmediateExecution( } return false; } + + /** + * Utility function to check whether the fragment UI is still active or not + * @param fragment + * @return + */ + public static boolean isFragmentUIActive(Fragment fragment) { + return fragment.getActivity() != null && fragment.isAdded() && !fragment.isDetached() && !fragment.isRemoving(); + } } diff --git a/app/src/main/java/fr/free/nrw/commons/utils/NetworkUtils.java b/app/src/main/java/fr/free/nrw/commons/utils/NetworkUtils.java index b9da22e6ee..030dbdef8d 100644 --- a/app/src/main/java/fr/free/nrw/commons/utils/NetworkUtils.java +++ b/app/src/main/java/fr/free/nrw/commons/utils/NetworkUtils.java @@ -11,6 +11,9 @@ public static boolean isInternetConnectionEstablished(Context context) { ConnectivityManager cm = (ConnectivityManager)context.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); + if (cm == null) { + return false; + } NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); return activeNetwork != null && activeNetwork.isConnectedOrConnecting(); diff --git a/app/src/main/java/fr/free/nrw/commons/utils/ViewUtil.java b/app/src/main/java/fr/free/nrw/commons/utils/ViewUtil.java index 2f91071904..527bf4b9e9 100644 --- a/app/src/main/java/fr/free/nrw/commons/utils/ViewUtil.java +++ b/app/src/main/java/fr/free/nrw/commons/utils/ViewUtil.java @@ -17,7 +17,12 @@ public class ViewUtil { public static final String SHOWCASE_VIEW_ID_2 = "SHOWCASE_VIEW_ID_2"; public static final String SHOWCASE_VIEW_ID_3 = "SHOWCASE_VIEW_ID_3"; - public static void showSnackbar(View view, int messageResourceId) { + /** + * Utility function to show short snack bar + * @param view + * @param messageResourceId + */ + public static void showShortSnackbar(View view, int messageResourceId) { if (view.getContext() == null) { return; } From 615c0be375a137b39f7fc1ed2b248b24a87e5a19 Mon Sep 17 00:00:00 2001 From: neslihanturan Date: Mon, 17 Dec 2018 14:00:06 +0200 Subject: [PATCH 6/6] Add information icon action Fiixes #2055 2.9.0: the 'i' icon in nearby doesn't do anything (#2057) * Localisation updates from https://translatewiki.net. * Remove unused mediawiki api dependency (#1991) * Categories with pipe suffix (#1873) * Bug fix issue #1826 Changes made : -Certain category names used to show suffixed with strings prefixed with pipe '|'. Removed everything after the pipe. As per the discussion on the thread, its safe to remove everything after the pipe, including the pipe * review suggested changes *Code formatting *Extracted out the index of pipe in a variable *Added issue link in comments * Remove libraries section from README (#1988) * Remove libraries section from README * Add wiki link to "libraries used" to README * Localisation updates from https://translatewiki.net. * Localisation updates from https://translatewiki.net. * Use alert dialog instead of popup window, for nearby information * Revert irrelevant changes, sorry --- .../commons/contributions/MainActivity.java | 8 +++----- .../fr/free/nrw/commons/utils/ViewUtil.java | 12 ------------ .../res/layout/nearby_info_popup_layout.xml | 19 ------------------- 3 files changed, 3 insertions(+), 36 deletions(-) delete mode 100644 app/src/main/res/layout/nearby_info_popup_layout.xml 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 9b8035e5d5..24f47e3f01 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 @@ -1,5 +1,6 @@ package fr.free.nrw.commons.contributions; +import android.app.AlertDialog; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageManager; @@ -119,22 +120,19 @@ private void addTabsAndFragments() { // Set custom view to add nearby info icon next to text View nearbyTabLinearLayout = LayoutInflater.from(this).inflate(R.layout.custom_nearby_tab_layout, null); - View nearbyInfoPopupWindowLayout = LayoutInflater.from(this).inflate(R.layout.nearby_info_popup_layout, null); ImageView nearbyInfo = nearbyTabLinearLayout.findViewById(R.id.nearby_info_image); tabLayout.getTabAt(1).setCustomView(nearbyTabLinearLayout); nearbyInfo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - /*new AlertDialog.Builder(MainActivity.this) + new AlertDialog.Builder(MainActivity.this) .setTitle(R.string.title_activity_nearby) .setMessage(R.string.showcase_view_whole_nearby_activity) .setCancelable(true) .setNeutralButton(android.R.string.ok, (dialog, id) -> dialog.cancel()) .create() - .show();*/ - String popupText = getResources().getString(R.string.showcase_view_whole_nearby_activity); - ViewUtil.displayPopupWindow(nearbyInfo, MainActivity.this, nearbyInfoPopupWindowLayout, popupText); + .show(); } }); diff --git a/app/src/main/java/fr/free/nrw/commons/utils/ViewUtil.java b/app/src/main/java/fr/free/nrw/commons/utils/ViewUtil.java index 527bf4b9e9..e88194d153 100644 --- a/app/src/main/java/fr/free/nrw/commons/utils/ViewUtil.java +++ b/app/src/main/java/fr/free/nrw/commons/utils/ViewUtil.java @@ -81,17 +81,6 @@ public static void hideKeyboard(View view){ } } - public static void displayPopupWindow(View anchorView, Context context, View popupWindowLayout, String text) { - - PopupWindow popup = new PopupWindow(context); - popup.setContentView(popupWindowLayout); - // Closes the popup window when touch outside of it - when looses focus - popup.setOutsideTouchable(true); - popup.setFocusable(true); - // Show anchored to button - popup.showAsDropDown(anchorView); - } - /** * A snack bar which has an action button which on click dismisses the snackbar and invokes the * listener passed @@ -111,5 +100,4 @@ public static void showDismissibleSnackBar(View view, int messageResourceId, snackbar.show(); }); } - } diff --git a/app/src/main/res/layout/nearby_info_popup_layout.xml b/app/src/main/res/layout/nearby_info_popup_layout.xml deleted file mode 100644 index 04c1a2d547..0000000000 --- a/app/src/main/res/layout/nearby_info_popup_layout.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - \ No newline at end of file