// Path: app/src/main/java/me/yifeiyuan/climb/app/App.java
// public class App extends Application {
// 
//     private AppComponent mAppComponent;
// 
//     private static final String TAG = "Climb";
// 
//     @Override
//     public void onCreate() {
//         super.onCreate();
// //        PackageManagerHook.hook(this);
//         Log.d(TAG, "onCreate: " + getPackageName());
// 
//         mAppComponent = DaggerAppComponent
//                 .builder()
//                 .appModule(new AppModule(this))
//                 .apiModule(new ApiModule())
//                 .build();
// 
//         if (BuildConfig.DEBUG) {
//             AndroidDevMetrics.initWith(this);
//         }
// 
//         AppStatusManager.getInstance().init(this);
// 
//     }
// 
//     public AppComponent getAppComponent() {
//         return mAppComponent;
//     }
// 
//     @Override
//     protected void attachBaseContext(Context base) {
//         PackageManagerHook.hook(base);
//         super.attachBaseContext(base);
//     }
// }
// 
// Path: app/src/main/java/me/yifeiyuan/climb/di/components/AppComponent.java
// @Singleton
// @Component(modules = {AppModule.class, ApiModule.class})
// public interface AppComponent {
// 
//     App app();
// 
//     Api api();
// }
// 
// Path: swipeback/src/main/java/me/yifeiyuan/swipeback/SwipeBackActivity.java
// public class SwipeBackActivity extends AppCompatActivity implements SwipeBackActivityBase {
//     private SwipeBackActivityHelper mHelper;
// 
//     @Override
//     protected void onCreate(Bundle savedInstanceState) {
//         super.onCreate(savedInstanceState);
//         mHelper = new SwipeBackActivityHelper(this);
//         mHelper.onActivityCreate();
//     }
// 
//     @Override
//     protected void onPostCreate(Bundle savedInstanceState) {
//         super.onPostCreate(savedInstanceState);
//         mHelper.onPostCreate();
//     }
// 
//     @Override
//     public View findViewById(int id) {
//         View v = super.findViewById(id);
//         if (v == null && mHelper != null)
//             return mHelper.findViewById(id);
//         return v;
//     }
// 
//     @Override
//     public SwipeBackLayout getSwipeBackLayout() {
//         return mHelper.getSwipeBackLayout();
//     }
// 
//     @Override
//     public void setSwipeBackEnable(boolean enable) {
//         getSwipeBackLayout().setEnableGesture(enable);
//     }
// 
//     @Override
//     public void scrollToFinishActivity() {
//         Utils.convertActivityToTranslucent(this);
//         getSwipeBackLayout().scrollToFinishActivity();
//     }
// }


import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.IdRes;
import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.CollapsingToolbarLayout;
import android.support.v4.app.Fragment;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.view.View;
import butterknife.Bind;
import butterknife.ButterKnife;
import me.yifeiyuan.climb.R;
import me.yifeiyuan.climb.app.App;
import me.yifeiyuan.climb.di.components.AppComponent;
import me.yifeiyuan.swipeback.SwipeBackActivity;
        return super.onOptionsItemSelected(item);
    }

    /**
     * 添加fragment
     *
     * @param frag 要添加的frag
     * @param tag  frag的tag
     * @see #getContainerViewId()
     */
    protected void addFragment(@NonNull Fragment frag, @NonNull String tag) {
        getSupportFragmentManager()
                .beginTransaction()
                .add(getContainerViewId(), frag, tag)
                .commitAllowingStateLoss();
    }

    /**
     *
     * @return 存放fragment的container 的ID
     */
    protected @IdRes int getContainerViewId() {
        return R.id.container;
    }

    protected final <T extends View> T find(@IdRes int id) {
        return (T) findViewById(id);
    }

    public AppComponent getAppComponent() {
// Path: app/src/main/java/me/yifeiyuan/climb/app/App.java
// public class App extends Application {
// 
//     private AppComponent mAppComponent;
// 
//     private static final String TAG = "Climb";
// 
//     @Override
//     public void onCreate() {
//         super.onCreate();
// //        PackageManagerHook.hook(this);
//         Log.d(TAG, "onCreate: " + getPackageName());
// 
//         mAppComponent = DaggerAppComponent
//                 .builder()
//                 .appModule(new AppModule(this))
//                 .apiModule(new ApiModule())
//                 .build();
// 
//         if (BuildConfig.DEBUG) {
//             AndroidDevMetrics.initWith(this);
//         }
// 
//         AppStatusManager.getInstance().init(this);
// 
//     }
// 
//     public AppComponent getAppComponent() {
//         return mAppComponent;
//     }
// 
//     @Override
//     protected void attachBaseContext(Context base) {
//         PackageManagerHook.hook(base);
//         super.attachBaseContext(base);
//     }
// }
// 
// Path: app/src/main/java/me/yifeiyuan/climb/di/components/AppComponent.java
// @Singleton
// @Component(modules = {AppModule.class, ApiModule.class})
// public interface AppComponent {
// 
//     App app();
// 
//     Api api();
// }
// 
// Path: swipeback/src/main/java/me/yifeiyuan/swipeback/SwipeBackActivity.java
// public class SwipeBackActivity extends AppCompatActivity implements SwipeBackActivityBase {
//     private SwipeBackActivityHelper mHelper;
// 
//     @Override
//     protected void onCreate(Bundle savedInstanceState) {
//         super.onCreate(savedInstanceState);
//         mHelper = new SwipeBackActivityHelper(this);
//         mHelper.onActivityCreate();
//     }
// 
//     @Override
//     protected void onPostCreate(Bundle savedInstanceState) {
//         super.onPostCreate(savedInstanceState);
//         mHelper.onPostCreate();
//     }
// 
//     @Override
//     public View findViewById(int id) {
//         View v = super.findViewById(id);
//         if (v == null && mHelper != null)
//             return mHelper.findViewById(id);
//         return v;
//     }
// 
//     @Override
//     public SwipeBackLayout getSwipeBackLayout() {
//         return mHelper.getSwipeBackLayout();
//     }
// 
//     @Override
//     public void setSwipeBackEnable(boolean enable) {
//         getSwipeBackLayout().setEnableGesture(enable);
//     }
// 
//     @Override
//     public void scrollToFinishActivity() {
//         Utils.convertActivityToTranslucent(this);
//         getSwipeBackLayout().scrollToFinishActivity();
//     }
// }


// Path: app/src/main/java/me/yifeiyuan/climb/base/BaseActivity.java
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.IdRes;
import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.CollapsingToolbarLayout;
import android.support.v4.app.Fragment;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.view.View;
import butterknife.Bind;
import butterknife.ButterKnife;
import me.yifeiyuan.climb.R;
import me.yifeiyuan.climb.app.App;
import me.yifeiyuan.climb.di.components.AppComponent;
import me.yifeiyuan.swipeback.SwipeBackActivity;

        return super.onOptionsItemSelected(item);
    }

    /**
     * 添加fragment
     *
     * @param frag 要添加的frag
     * @param tag  frag的tag
     * @see #getContainerViewId()
     */
    protected void addFragment(@NonNull Fragment frag, @NonNull String tag) {
        getSupportFragmentManager()
                .beginTransaction()
                .add(getContainerViewId(), frag, tag)
                .commitAllowingStateLoss();
    }

    /**
     *
     * @return 存放fragment的container 的ID
     */
    protected @IdRes int getContainerViewId() {
        return R.id.container;
    }

    protected final <T extends View> T find(@IdRes int id) {
        return (T) findViewById(id);
    }

    public AppComponent getAppComponent() {
        return ((App)getApplication()).getAppComponent();