diff options
author | calderwoodra <calderwoodra@google.com> | 2018-01-29 20:48:58 -0800 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-01-30 17:41:25 -0800 |
commit | 2cc8b342ff7ebefb2f97fde8b877452528f03d4e (patch) | |
tree | 1b1c5e0e7edc96e172d69119f841fc8728b4b8db /java/com/android/dialer/common | |
parent | a6b96247b1348dd6316fb0b5355c980883765530 (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.java | 49 |
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); + } } |