From 4c30cf03df5161f13f5e2fde93ad104913bfac5a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20P=C3=B3=C5=82grabia?= <tpsa.s.a@gmail.com>
Date: Fri, 16 Sep 2016 23:20:16 +0200
Subject: [PATCH] Refresh menu option.

---
 .../urbanexplorer/MainActivity.java           | 27 ++++++++++++++++---
 .../urbanexplorer/fragments/HomeFragment.java | 11 +++++++-
 .../fragments/WikiLocationsFragment.java      |  4 ++-
 app/src/main/res/menu/toolbar.xml             |  5 +++-
 app/src/main/res/values/strings.xml           |  2 ++
 5 files changed, 42 insertions(+), 7 deletions(-)

diff --git a/app/src/main/java/pl/tpolgrabia/urbanexplorer/MainActivity.java b/app/src/main/java/pl/tpolgrabia/urbanexplorer/MainActivity.java
index 70a8b97..1402760 100644
--- a/app/src/main/java/pl/tpolgrabia/urbanexplorer/MainActivity.java
+++ b/app/src/main/java/pl/tpolgrabia/urbanexplorer/MainActivity.java
@@ -122,6 +122,24 @@ public class MainActivity extends ActionBarActivity {
                 final Intent intent = new Intent(this, SettingsActivity.class);
                 startActivityForResult(intent, MainActivity.SETTINGS_ID_INTENT_REQUEST_ID, new Bundle());
                 return true;
+            case R.id.refresh:
+                switch (currentFragmentId) {
+                    case HOME_FRAGMENT_ID:
+                        HomeFragment homeFragment = (HomeFragment) getSupportFragmentManager()
+                            .findFragmentByTag(HomeFragment.TAG);
+                        homeFragment.fetchPanoramioPhotos();
+                        break;
+                    case WIKI_FRAGMENT_ID:
+                        WikiLocationsFragment wikiLocationsFragment = (WikiLocationsFragment)
+                            getSupportFragmentManager()
+                            .findFragmentByTag(WikiLocationsFragment.TAG);
+                        wikiLocationsFragment.fetchWikiLocations();
+                        break;
+                    default:
+                        Log.w(CLASS_TAG, "Unknown current fragment ID");
+                        break;
+                }
+                return true;
             default:
                 return super.onOptionsItemSelected(item);
         }
@@ -153,23 +171,24 @@ public class MainActivity extends ActionBarActivity {
                 // switch to home fragment
                 setTitle("Panoramio search");
                 Log.d(CLASS_TAG, "Switching to home fragment");
-                switchFragment(new HomeFragment());
+                final HomeFragment fragment = new HomeFragment();
+                switchFragment(fragment, HomeFragment.TAG);
                 break;
             case WIKI_FRAGMENT_ID:
                 setTitle("Wiki search");
                 // switch to wiki fragment
                 Log.d(CLASS_TAG, "Switching to wiki fragment");
-                switchFragment(new WikiLocationsFragment());
+                switchFragment(new WikiLocationsFragment(), WikiLocationsFragment.TAG);
                 break;
         }
 
     }
 
-    private void switchFragment(Fragment fragment) {
+    private void switchFragment(Fragment fragment, String tag) {
 
         FragmentManager fragmentManager = getSupportFragmentManager();
         FragmentTransaction ctx = fragmentManager.beginTransaction();
-        ctx.replace(R.id.fragments, fragment);
+        ctx.replace(R.id.fragments, fragment, tag);
         ctx.addToBackStack(null);
         ctx.commit();
         updateSwipeHandler();
diff --git a/app/src/main/java/pl/tpolgrabia/urbanexplorer/fragments/HomeFragment.java b/app/src/main/java/pl/tpolgrabia/urbanexplorer/fragments/HomeFragment.java
index c42d7fe..b207907 100644
--- a/app/src/main/java/pl/tpolgrabia/urbanexplorer/fragments/HomeFragment.java
+++ b/app/src/main/java/pl/tpolgrabia/urbanexplorer/fragments/HomeFragment.java
@@ -36,6 +36,8 @@ public class HomeFragment extends Fragment  {
     private static final String CLASS_TAG = HomeFragment.class.getSimpleName();
 
     private static final int PANORAMIA_BULK_DATA_SIZE = 10;
+    public static final String TAG = HomeFragment.class.getSimpleName();
+    public static final int FRAG_ID = 1;
     private LocationManager locationService;
     private boolean initialized = false;
 
@@ -241,7 +243,8 @@ public class HomeFragment extends Fragment  {
         );
     }
 
-    private void fetchPanoramioPhotos() {
+    public void fetchPanoramioPhotos() {
+        Log.v(CLASS_TAG, "Fetch panoramio photos");
         final FragmentActivity activity = getActivity();
         if (activity == null) {
             Log.w(CLASS_TAG, "Activity shouldn't be null. It isn't headless fragment");
@@ -249,6 +252,11 @@ public class HomeFragment extends Fragment  {
         }
 
         final Location location = locationService.getLastKnownLocation(LocationUtils.getDefaultLocation(activity));
+        if (location == null) {
+            Log.i(CLASS_TAG, "Location is still not available");
+            Toast.makeText(getActivity(), "Location is still not available", Toast.LENGTH_SHORT).show();
+            return;
+        }
         Double radiusX = fetchRadiusX();
         Double radiusY = fetchRadiusY();
         PanoramioUtils.fetchPanoramioImages(
@@ -308,6 +316,7 @@ public class HomeFragment extends Fragment  {
     }
 
     public void updateLocationInfo() {
+        Log.v(CLASS_TAG, "Update locations info");
         final View view = getView();
         if (view == null) {
             Log.wtf(CLASS_TAG, "Fragment has no view");
diff --git a/app/src/main/java/pl/tpolgrabia/urbanexplorer/fragments/WikiLocationsFragment.java b/app/src/main/java/pl/tpolgrabia/urbanexplorer/fragments/WikiLocationsFragment.java
index 503ae01..00b12ed 100644
--- a/app/src/main/java/pl/tpolgrabia/urbanexplorer/fragments/WikiLocationsFragment.java
+++ b/app/src/main/java/pl/tpolgrabia/urbanexplorer/fragments/WikiLocationsFragment.java
@@ -43,6 +43,7 @@ public class WikiLocationsFragment extends Fragment {
     private static final String CLASS_TAG = WikiLocationsFragment.class.getSimpleName();
     private static final double WIKI_DEF_RADIUS = 10.0;
     private static final long WIKI_DEF_LIMIT = 100;
+    public static final String TAG = WikiLocationsFragment.class.getSimpleName();
     private LocationManager locationService;
     private TextView currentLocation;
 
@@ -72,7 +73,8 @@ public class WikiLocationsFragment extends Fragment {
         return inflatedView;
     }
 
-    private void fetchWikiLocations() {
+    public void fetchWikiLocations() {
+        Log.v(CLASS_TAG, "Fetch wiki locations");
         final FragmentActivity activity = getActivity();
         if (activity == null) {
             Log.w(CLASS_TAG, "Activity shouldn't be null. No headless fragment");
diff --git a/app/src/main/res/menu/toolbar.xml b/app/src/main/res/menu/toolbar.xml
index 232de92..16bd00c 100644
--- a/app/src/main/res/menu/toolbar.xml
+++ b/app/src/main/res/menu/toolbar.xml
@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="utf-8"?>
 <menu xmlns:android="http://schemas.android.com/apk/res/android">
+    <item
+            android:id="@+id/refresh"
+            android:title="@string/refresh" />
     <item
         android:id="@+id/settings"
-        android:title="Settings" />
+        android:title="@string/settings" />
 </menu>
\ 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 c3b5e36..8d503ce 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -105,4 +105,6 @@
         "For example, position the FAB to one side of stream of a cards so the FAB won’t interfere "
         "when a user tries to pick up one of cards.\n\n"
     </string>
+    <string name="refresh">Refresh</string>
+    <string name="settings">Settings</string>
 </resources>