/* * Copyright (c) 2015 PocketHub * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.github.pockethub.android.ui.repo; import android.content.res.Resources; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v7.app.AppCompatActivity; import com.github.pockethub.android.R; import com.github.pockethub.android.ui.FragmentPagerAdapter; import com.github.pockethub.android.ui.code.RepositoryCodeFragment; import com.github.pockethub.android.ui.commit.CommitListFragment; import com.github.pockethub.android.ui.issue.IssuesFragment; /** * Adapter to view a repository's various pages */ public class RepositoryPagerAdapter extends FragmentPagerAdapter { private final Resources resources; private final boolean hasIssues; private final boolean hasReadme; private RepositoryCodeFragment codeFragment; private CommitListFragment commitsFragment; /** * Create repository pager adapter * * @param activity * @param hasIssues */ public RepositoryPagerAdapter(AppCompatActivity activity, boolean hasIssues, boolean hasReadme) { super(activity); resources = activity.getResources(); this.hasReadme = hasReadme; this.hasIssues = hasIssues; } @Override public CharSequence getPageTitle(int position) { position = hasReadme ? position : position + 1; switch (position) { case 0: return resources.getString(R.string.tab_readme); case 1: return resources.getString(R.string.tab_news); case 2: return resources.getString(R.string.tab_code); case 3: return resources.getString(R.string.tab_commits); case 4: return resources.getString(R.string.tab_issues); default: return null; } } @Override public Fragment getItem(int position) { position = hasReadme ? position : position + 1; switch (position) { case 0: return new RepositoryReadmeFragment(); case 1: return new RepositoryNewsFragment(); case 2: codeFragment = new RepositoryCodeFragment(); return codeFragment; case 3: commitsFragment = new CommitListFragment(); return commitsFragment; case 4: return new IssuesFragment(); default: return null; } } @Override public int getCount() { int count = hasIssues ? 5 : 4; count = hasReadme ? count : count - 1; return count; } /** * Returns index of code page */ public int getItemCode() { return hasReadme ? 2 : 1; } /** * Returns index of commits page */ public int getItemCommits() { return hasReadme ? 3 : 2; } /** * Pass back button pressed event down to fragments * * @return true if handled, false otherwise */ public boolean onBackPressed() { return codeFragment != null && codeFragment.onBackPressed(); } /** * Deliver dialog result to fragment at given position * * @param position * @param requestCode * @param resultCode * @param arguments * @return this adapter */ public RepositoryPagerAdapter onDialogResult(int position, int requestCode, int resultCode, Bundle arguments) { if (position == getItemCode() && codeFragment != null) { codeFragment.onDialogResult(requestCode, resultCode, arguments); } else if (position == getItemCommits() && commitsFragment != null) { commitsFragment.onDialogResult(requestCode, resultCode, arguments); } return this; } }