summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/common
diff options
context:
space:
mode:
authorcalderwoodra <calderwoodra@google.com>2018-01-29 20:48:58 -0800
committerCopybara-Service <copybara-piper@google.com>2018-01-30 17:41:25 -0800
commit2cc8b342ff7ebefb2f97fde8b877452528f03d4e (patch)
tree1b1c5e0e7edc96e172d69119f841fc8728b4b8db /java/com/android/dialer/common
parenta6b96247b1348dd6316fb0b5355c980883765530 (diff)
Update FragUtils to encourage better readability in Activities.
Bug: 72525324 Test: existing PiperOrigin-RevId: 183776841 Change-Id: Ia78002d3da823a228cf5a29f93cd53ad21105f94
Diffstat (limited to 'java/com/android/dialer/common')
-rw-r--r--java/com/android/dialer/common/FragmentUtils.java49
1 files changed, 30 insertions, 19 deletions
diff --git a/java/com/android/dialer/common/FragmentUtils.java b/java/com/android/dialer/common/FragmentUtils.java
index ad7ec7390..947a9b20a 100644
--- a/java/com/android/dialer/common/FragmentUtils.java
+++ b/java/com/android/dialer/common/FragmentUtils.java
@@ -16,13 +16,11 @@
package com.android.dialer.common;
-import android.app.Activity;
import android.support.annotation.CheckResult;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.VisibleForTesting;
import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentActivity;
/** Utility methods for working with Fragments */
public class FragmentUtils {
@@ -35,8 +33,8 @@ public class FragmentUtils {
}
/**
- * @return The parent of frag that implements the callbackInterface or null if no such parent can
- * be found
+ * Returns an instance of the {@code callbackInterface} that is defined in the parent of the
+ * {@code fragment}, or null if no such call back can be found.
*/
@CheckResult(suggest = "#checkParent(Fragment, Class)}")
@Nullable
@@ -52,18 +50,22 @@ public class FragmentUtils {
@SuppressWarnings("unchecked") // Casts are checked using runtime methods
T parent = (T) parentFragment;
return parent;
- } else {
- FragmentActivity activity = fragment.getActivity();
- if (callbackInterface.isInstance(activity)) {
- @SuppressWarnings("unchecked") // Casts are checked using runtime methods
- T parent = (T) activity;
- return parent;
- }
+ } else if (callbackInterface.isInstance(fragment.getActivity())) {
+ @SuppressWarnings("unchecked") // Casts are checked using runtime methods
+ T parent = (T) fragment.getActivity();
+ return parent;
+ } else if (fragment.getActivity() instanceof FragmentUtilListener) {
+ @SuppressWarnings("unchecked") // Casts are checked using runtime methods
+ T parent = ((FragmentUtilListener) fragment.getActivity()).getImpl(callbackInterface);
+ return parent;
}
return null;
}
- /** Version of {@link #getParent(Fragment, Class)} which supports {@link android.app.Fragment}. */
+ /**
+ * Returns an instance of the {@code callbackInterface} that is defined in the parent of the
+ * {@code fragment}, or null if no such call back can be found.
+ */
@CheckResult(suggest = "#checkParent(Fragment, Class)}")
@Nullable
public static <T> T getParent(
@@ -79,13 +81,14 @@ public class FragmentUtils {
@SuppressWarnings("unchecked") // Casts are checked using runtime methods
T parent = (T) parentFragment;
return parent;
- } else {
- Activity activity = fragment.getActivity();
- if (callbackInterface.isInstance(activity)) {
- @SuppressWarnings("unchecked") // Casts are checked using runtime methods
- T parent = (T) activity;
- return parent;
- }
+ } else if (callbackInterface.isInstance(fragment.getActivity())) {
+ @SuppressWarnings("unchecked") // Casts are checked using runtime methods
+ T parent = (T) fragment.getActivity();
+ return parent;
+ } else if (fragment.getActivity() instanceof FragmentUtilListener) {
+ @SuppressWarnings("unchecked") // Casts are checked using runtime methods
+ T parent = ((FragmentUtilListener) fragment.getActivity()).getImpl(callbackInterface);
+ return parent;
}
return null;
}
@@ -133,4 +136,12 @@ public class FragmentUtils {
+ parent);
}
}
+
+ /** Useful interface for activities that don't want to implement arbitrary listeners. */
+ public interface FragmentUtilListener {
+
+ /** Returns an implementation of T if parent has one, otherwise null. */
+ @Nullable
+ <T> T getImpl(Class<T> callbackInterface);
+ }
}