jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/403752 )
Change subject: Lazily load the Nearby fragment.
......................................................................
Lazily load the Nearby fragment.
When the user goes to the History tab, the Nearby tab is pre-loaded
implicitly by the ViewPager, which causes much of the MapView logic to get
loaded unnecessarily. The MapView is a very heavy component, and
contributes to jitter and slowness when navigating between our bottom
tabs.
This patch encapsulates NearbyFragment inside a lazy-loadable fragment,
which is just a skeleton fragment that does not consume any resources when
loaded implicitly by the ViewPager.
Change-Id: Ic02db1b2bc5b7b27ca34b2f5034610c9a1c99476
---
M app/src/main/java/org/wikipedia/activity/FragmentUtil.java
M app/src/main/java/org/wikipedia/navtab/NavTab.java
A app/src/main/java/org/wikipedia/nearby/NearbyLazyLoadFragment.java
3 files changed, 70 insertions(+), 5 deletions(-)
Approvals:
jenkins-bot: Verified
Cooltey: Looks good to me, approved
diff --git a/app/src/main/java/org/wikipedia/activity/FragmentUtil.java
b/app/src/main/java/org/wikipedia/activity/FragmentUtil.java
index 60c2672..edbd4fd 100644
--- a/app/src/main/java/org/wikipedia/activity/FragmentUtil.java
+++ b/app/src/main/java/org/wikipedia/activity/FragmentUtil.java
@@ -10,9 +10,14 @@
//noinspection unchecked
return (T) fragment.getTargetFragment();
}
- if (callback.isInstance(fragment.getParentFragment())) {
- //noinspection unchecked
- return (T) fragment.getParentFragment();
+ if (fragment.getParentFragment() != null) {
+ if (callback.isInstance(fragment.getParentFragment())) {
+ //noinspection unchecked
+ return (T) fragment.getParentFragment();
+ } else if
(callback.isInstance(fragment.getParentFragment().getParentFragment())) {
+ //noinspection unchecked
+ return (T) fragment.getParentFragment().getParentFragment();
+ }
}
if (callback.isInstance(fragment.getActivity())) {
//noinspection unchecked
diff --git a/app/src/main/java/org/wikipedia/navtab/NavTab.java
b/app/src/main/java/org/wikipedia/navtab/NavTab.java
index 0728d31..0ff9779 100644
--- a/app/src/main/java/org/wikipedia/navtab/NavTab.java
+++ b/app/src/main/java/org/wikipedia/navtab/NavTab.java
@@ -10,7 +10,7 @@
import org.wikipedia.history.HistoryFragment;
import org.wikipedia.model.EnumCode;
import org.wikipedia.model.EnumCodeMap;
-import org.wikipedia.nearby.NearbyFragment;
+import org.wikipedia.nearby.NearbyLazyLoadFragment;
import org.wikipedia.readinglist.ReadingListsFragment;
public enum NavTab implements EnumCode {
@@ -31,7 +31,7 @@
},
NEARBY(R.string.nav_item_nearby, R.drawable.ic_explore_black_24dp) {
@NonNull @Override public Fragment newInstance() {
- return NearbyFragment.newInstance();
+ return NearbyLazyLoadFragment.newInstance();
}
};
diff --git a/app/src/main/java/org/wikipedia/nearby/NearbyLazyLoadFragment.java
b/app/src/main/java/org/wikipedia/nearby/NearbyLazyLoadFragment.java
new file mode 100644
index 0000000..621c510
--- /dev/null
+++ b/app/src/main/java/org/wikipedia/nearby/NearbyLazyLoadFragment.java
@@ -0,0 +1,60 @@
+package org.wikipedia.nearby;
+
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+
+import org.wikipedia.WikipediaApp;
+
+public class NearbyLazyLoadFragment extends Fragment {
+ private static final int CONTAINER_VIEW_ID = 0x8675309;
+ private static final String CHILD_FRAGMENT_TAG = "lazyChildFragment";
+ @Nullable private Fragment childFragment;
+
+ @NonNull public static NearbyLazyLoadFragment newInstance() {
+ return new NearbyLazyLoadFragment();
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setRetainInstance(true);
+ }
+
+ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup
container, Bundle savedInstanceState) {
+ View view = new FrameLayout(getContext());
+ FrameLayout.LayoutParams params = new
FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT);
+ view.setLayoutParams(params);
+ view.setId(CONTAINER_VIEW_ID);
+ return view;
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ maybeLoadChildFragment();
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ WikipediaApp.getInstance().getRefWatcher().watch(this);
+ }
+
+ @Override public void setUserVisibleHint(boolean isVisibleToUser) {
+ super.setUserVisibleHint(isVisibleToUser);
+ maybeLoadChildFragment();
+ }
+
+ private void maybeLoadChildFragment() {
+ if (isAdded() && getUserVisibleHint() && childFragment == null) {
+ childFragment = NearbyFragment.newInstance();
+
getChildFragmentManager().beginTransaction().add(CONTAINER_VIEW_ID,
childFragment, CHILD_FRAGMENT_TAG).commit();
+ }
+ }
+}
--
To view, visit https://gerrit.wikimedia.org/r/403752
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ic02db1b2bc5b7b27ca34b2f5034610c9a1c99476
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Dbrant <[email protected]>
Gerrit-Reviewer: Brion VIBBER <[email protected]>
Gerrit-Reviewer: Cooltey <[email protected]>
Gerrit-Reviewer: Sharvaniharan <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits