/* * Copyright (c) 2016 Zhang Hai <Dreaming.in.Code.ZH@Gmail.com> * All Rights Reserved. */ package me.zhanghai.android.douya.scalpel; import android.content.Context; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import me.zhanghai.android.douya.app.RetainedFragment; import me.zhanghai.android.douya.eventbus.EventBusUtils; public class ScalpelHelperFragment extends RetainedFragment { private static final String FRAGMENT_TAG = ScalpelHelperFragment.class.getName(); private boolean mEnabled; private boolean mActivityCreated; private boolean mInjected; /** * @deprecated Use {@link #attachTo(Fragment)} instead. */ public static ScalpelHelperFragment attachTo(FragmentActivity activity) { FragmentManager fragmentManager = activity.getSupportFragmentManager(); ScalpelHelperFragment fragment = (ScalpelHelperFragment) fragmentManager .findFragmentByTag(FRAGMENT_TAG); if (fragment == null) { fragment = new ScalpelHelperFragment(); fragmentManager.beginTransaction() .add(fragment, FRAGMENT_TAG) .commit(); } return fragment; } public static ScalpelHelperFragment attachTo(Fragment fragment) { //noinspection deprecation return attachTo(fragment.getActivity()); } public static void setEnabled(boolean enabled) { EventBusUtils.postAsync(new SetEnabledEvent(enabled)); } @Override public void onAttach(Context context) { super.onAttach(context); EventBusUtils.register(this); } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mActivityCreated = true; if (mEnabled) { enable(); } } @Override public void onDetach() { super.onDetach(); EventBusUtils.unregister(this); mActivityCreated = false; mInjected = false; } private void setEnabledForActivity(boolean enabled) { if (mActivityCreated) { if (enabled) { enable(); } else if (mInjected) { ScalpelUtils.setEnabled(getActivity(), false); } } mEnabled = enabled; } private void enable() { if (!mInjected) { ScalpelUtils.inject(getActivity()); mInjected = true; } ScalpelUtils.setEnabled(getActivity(), true); } @Subscribe(threadMode = ThreadMode.MAIN) public void onSetEnabled(SetEnabledEvent event) { setEnabledForActivity(event.enabled); } private static class SetEnabledEvent { public boolean enabled; public SetEnabledEvent(boolean enabled) { this.enabled = enabled; } } }