diff options
Diffstat (limited to 'java/com/android/dialer/common/FragmentUtils.java')
-rw-r--r-- | java/com/android/dialer/common/FragmentUtils.java | 38 |
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 |