summaryrefslogtreecommitdiffstats
path: root/java/com/android/dialer/common/FragmentUtils.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/android/dialer/common/FragmentUtils.java')
-rw-r--r--java/com/android/dialer/common/FragmentUtils.java38
1 files changed, 38 insertions, 0 deletions
diff --git a/java/com/android/dialer/common/FragmentUtils.java b/java/com/android/dialer/common/FragmentUtils.java
index cb036959d..ad7ec7390 100644
--- a/java/com/android/dialer/common/FragmentUtils.java
+++ b/java/com/android/dialer/common/FragmentUtils.java
@@ -16,6 +16,7 @@
package com.android.dialer.common;
+import android.app.Activity;
import android.support.annotation.CheckResult;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
@@ -62,6 +63,33 @@ public class FragmentUtils {
return null;
}
+ /** Version of {@link #getParent(Fragment, Class)} which supports {@link android.app.Fragment}. */
+ @CheckResult(suggest = "#checkParent(Fragment, Class)}")
+ @Nullable
+ public static <T> T getParent(
+ @NonNull android.app.Fragment fragment, @NonNull Class<T> callbackInterface) {
+ if (callbackInterface.isInstance(parentForTesting)) {
+ @SuppressWarnings("unchecked") // Casts are checked using runtime methods
+ T parent = (T) parentForTesting;
+ return parent;
+ }
+
+ android.app.Fragment parentFragment = fragment.getParentFragment();
+ if (callbackInterface.isInstance(parentFragment)) {
+ @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;
+ }
+ }
+ return null;
+ }
+
/** Returns the parent or throws. Should perform check elsewhere(e.g. onAttach, newInstance). */
@NonNull
public static <T> T getParentUnsafe(
@@ -70,6 +98,16 @@ public class FragmentUtils {
}
/**
+ * Version of {@link #getParentUnsafe(Fragment, Class)} which supports {@link
+ * android.app.Fragment}.
+ */
+ @NonNull
+ public static <T> T getParentUnsafe(
+ @NonNull android.app.Fragment fragment, @NonNull Class<T> callbackInterface) {
+ return Assert.isNotNull(getParent(fragment, callbackInterface));
+ }
+
+ /**
* Ensures fragment has a parent that implements the corresponding interface
*
* @param frag The Fragment whose parents are to be checked