From f3b450e020ccb661e976568008ed3417916674e5 Mon Sep 17 00:00:00 2001 From: Vivek Maskara Date: Wed, 19 Dec 2018 22:29:49 +0530 Subject: [PATCH] Merge 2.9 release with master (#2174) * Fix memory leak due to wikidata edit listener (#2048) * Fix bookmark crash fix (#2047) * Fix bookmark crash fix * Fix check for bookmark creator * 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 * Bugfix/duplicate categories (#2080) * Increased timeout to 60 seconds * Bug fix #1550 * filter duplicate categories * Fix crash because of inactive fragment UI (#2046) * Fix crash because of inactive fragment UI * Add java docs * 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 --- .../achievements/AchievementsActivity.java | 11 ++++-- .../commons/auth/AuthenticatedActivity.java | 2 +- .../pictures/BookmarkPicturesController.java | 2 +- .../pictures/BookmarkPicturesFragment.java | 4 +-- .../category/CategoryImagesListFragment.java | 4 +-- .../category/SubCategoryListFragment.java | 6 ++-- .../commons/contributions/MainActivity.java | 8 ++--- .../free/nrw/commons/di/NetworkingModule.java | 9 +++-- .../categories/SearchCategoryFragment.java | 4 +-- .../explore/images/SearchImageFragment.java | 4 +-- .../media/MediaDetailPagerFragment.java | 2 +- .../mwapi/ApacheHttpClientMediaWikiApi.java | 6 ++-- .../nrw/commons/nearby/NearbyFragment.java | 23 ++++++++---- .../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 | 35 +++++++++++++------ .../res/layout/nearby_info_popup_layout.xml | 19 ---------- app/src/main/res/values/strings.xml | 1 + 19 files changed, 91 insertions(+), 65 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/achievements/AchievementsActivity.java b/app/src/main/java/fr/free/nrw/commons/achievements/AchievementsActivity.java index d04d2b7b1..b2b14f3c9 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 @@ public class AchievementsActivity extends NavigationBaseActivity { * 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 @@ public class AchievementsActivity extends NavigationBaseActivity { 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/auth/AuthenticatedActivity.java b/app/src/main/java/fr/free/nrw/commons/auth/AuthenticatedActivity.java index b7c639f24..1bfcb7727 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 @@ public abstract class AuthenticatedActivity extends NavigationBaseActivity { .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/BookmarkPicturesController.java b/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesController.java index cca5867bb..9bd2613a1 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 @@ public class BookmarkPicturesController { 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/bookmarks/pictures/BookmarkPicturesFragment.java b/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesFragment.java index 90b3ef457..a41643309 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 @@ public class BookmarkPicturesFragment extends DaggerFragment { 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 @@ public class BookmarkPicturesFragment extends DaggerFragment { 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 1ead68701..1b91927e5 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 @@ public class CategoryImagesListFragment extends DaggerFragment { 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 @@ public class CategoryImagesListFragment extends DaggerFragment { 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 984d87fae..476fde975 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 @@ public class SubCategoryListFragment extends CommonsDaggerSupportFragment { 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 @@ public class SubCategoryListFragment extends CommonsDaggerSupportFragment { */ 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/contributions/MainActivity.java b/app/src/main/java/fr/free/nrw/commons/contributions/MainActivity.java index 9b8035e5d..24f47e3f0 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 @@ public class MainActivity extends AuthenticatedActivity implements FragmentManag // 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/di/NetworkingModule.java b/app/src/main/java/fr/free/nrw/commons/di/NetworkingModule.java index 953b7ecee..e894f8ab9 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 com.google.gson.GsonBuilder; 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(60, TimeUnit.SECONDS) + .writeTimeout(60, TimeUnit.SECONDS) + .readTimeout(60, TimeUnit.SECONDS) + .cache(new Cache(dir, OK_HTTP_CACHE_SIZE)) + .build(); } @Provides 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 520c55a57..983127c69 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 @@ public class SearchCategoryFragment extends CommonsDaggerSupportFragment { 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 @@ public class SearchCategoryFragment extends CommonsDaggerSupportFragment { */ 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 8b28f50d5..f3beadfcf 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 @@ public class SearchImageFragment extends CommonsDaggerSupportFragment { 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 @@ public class SearchImageFragment extends CommonsDaggerSupportFragment { */ 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/media/MediaDetailPagerFragment.java b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java index 5b1004be9..a3c941788 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 @@ -261,7 +261,7 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple 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; } 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 ed56e1c77..43c9a3cdc 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 @@ -355,6 +355,7 @@ public class ApacheHttpClientMediaWikiApi implements MediaWikiApi { @Override @NonNull public Observable searchCategories(String filterValue, int searchCatsLimit) { + List categories = new ArrayList<>(); return Single.fromCallable(() -> { List categoryNodes = null; try { @@ -375,11 +376,12 @@ public class ApacheHttpClientMediaWikiApi implements MediaWikiApi { 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; 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 58943b0b5..5a1c48edf 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 @@ -16,7 +16,6 @@ import android.support.v4.app.FragmentTransaction; import android.support.v7.app.AlertDialog; import android.util.Log; import android.view.LayoutInflater; - import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; @@ -38,6 +37,7 @@ import fr.free.nrw.commons.di.CommonsDaggerSupportFragment; 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; @@ -116,7 +116,6 @@ public class NearbyFragment extends CommonsDaggerSupportFragment resumeFragment();*/ bundle = new Bundle(); initBottomSheetBehaviour(); - wikidataEditListener.setAuthenticationStateListener(this); this.view = view; return view; } @@ -387,7 +386,7 @@ public class NearbyFragment extends CommonsDaggerSupportFragment 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); @@ -673,14 +672,17 @@ public class NearbyFragment extends CommonsDaggerSupportFragment } 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(); @@ -691,6 +693,10 @@ public class NearbyFragment extends CommonsDaggerSupportFragment } }; + if (getActivity() == null) { + return; + } + getActivity().registerReceiver(broadcastReceiver, intentFilter); } @@ -723,6 +729,7 @@ public class NearbyFragment extends CommonsDaggerSupportFragment @Override public void onAttach(Context context) { super.onAttach(context); + wikidataEditListener.setAuthenticationStateListener(this); } @Override @@ -731,6 +738,7 @@ public class NearbyFragment extends CommonsDaggerSupportFragment if (placesDisposable != null) { placesDisposable.dispose(); } + wikidataEditListener.setAuthenticationStateListener(null); if (placesDisposableCustom != null) { placesDisposableCustom.dispose(); } @@ -741,6 +749,7 @@ public class NearbyFragment extends CommonsDaggerSupportFragment super.onDetach(); snackbar = null; broadcastReceiver = null; + wikidataEditListener.setAuthenticationStateListener(null); } @Override 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 ebeb7f718..5036d6fa8 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 @@ public class NotificationActivity extends NavigationBaseActivity { 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 @@ public class NotificationActivity extends NavigationBaseActivity { 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 d0e432c33..63c9d974d 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 class FragmentUtils { } 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 b9da22e6e..030dbdef8 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 class NetworkUtils { 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 aef3dddb0..e88194d15 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; } @@ -76,15 +81,23 @@ public class ViewUtil { } } - 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 + */ + 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/layout/nearby_info_popup_layout.xml b/app/src/main/res/layout/nearby_info_popup_layout.xml deleted file mode 100644 index 04c1a2d54..000000000 --- a/app/src/main/res/layout/nearby_info_popup_layout.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 653a91450..3f25a4e5c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -437,6 +437,7 @@ 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 Ends on: Display campaigns Tap here to see the ongoing campaigns