/* * Copyright (c) 2014-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ package com.facebook.stetho.common.android; import android.app.Dialog; import android.content.res.Resources; import android.support.v4.app.DialogFragment; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.view.View; import javax.annotation.Nullable; final class FragmentCompatSupportLib extends FragmentCompat<Fragment, DialogFragment, FragmentManager, FragmentActivity> { private static final FragmentAccessorSupportLib sFragmentAccessor = new FragmentAccessorSupportLib(); private static final DialogFragmentAccessorSupportLib sDialogFragmentAccessor = new DialogFragmentAccessorSupportLib(); private static final FragmentManagerAccessorViaReflection<FragmentManager, Fragment> sFragmentManagerAccessor = new FragmentManagerAccessorViaReflection<>(); private static final FragmentActivityAccessorSupportLib sFragmentActivityAccessor = new FragmentActivityAccessorSupportLib(); @Override public Class<Fragment> getFragmentClass() { return Fragment.class; } @Override public Class<DialogFragment> getDialogFragmentClass() { return DialogFragment.class; } @Override public Class<FragmentActivity> getFragmentActivityClass() { return FragmentActivity.class; } @Override public FragmentAccessorSupportLib forFragment() { return sFragmentAccessor; } @Override public DialogFragmentAccessorSupportLib forDialogFragment() { return sDialogFragmentAccessor; } @Override public FragmentManagerAccessor<FragmentManager, Fragment> forFragmentManager() { return sFragmentManagerAccessor; } @Override public FragmentActivityAccessorSupportLib forFragmentActivity() { return sFragmentActivityAccessor; } private static class FragmentAccessorSupportLib implements FragmentAccessor<Fragment, FragmentManager> { @Nullable @Override public FragmentManager getFragmentManager(Fragment fragment) { return fragment.getFragmentManager(); } @Override public Resources getResources(Fragment fragment) { return fragment.getResources(); } @Override public int getId(Fragment fragment) { return fragment.getId(); } @Nullable @Override public String getTag(Fragment fragment) { return fragment.getTag(); } @Nullable @Override public View getView(Fragment fragment) { return fragment.getView(); } @Nullable @Override public FragmentManager getChildFragmentManager(Fragment fragment) { return fragment.getChildFragmentManager(); } } private static class DialogFragmentAccessorSupportLib extends FragmentAccessorSupportLib implements DialogFragmentAccessor<DialogFragment, Fragment, FragmentManager> { @Override public Dialog getDialog(DialogFragment dialogFragment) { return dialogFragment.getDialog(); } } private static class FragmentActivityAccessorSupportLib implements FragmentActivityAccessor<FragmentActivity, FragmentManager> { @Nullable @Override public FragmentManager getFragmentManager(FragmentActivity activity) { return activity.getSupportFragmentManager(); } } }