/* * Copyright 2012 GitHub Inc. * * 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.mobile.ui.gist; import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP; import static android.content.Intent.FLAG_ACTIVITY_SINGLE_TOP; import static com.github.mobile.Intents.EXTRA_GIST_ID; import static com.github.mobile.Intents.EXTRA_POSITION; import android.content.Intent; import android.os.Bundle; import android.widget.ProgressBar; import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.view.MenuItem; import com.github.kevinsawicki.wishlist.ViewUtils; import com.github.mobile.Intents.Builder; import com.github.mobile.R.id; import com.github.mobile.R.layout; import com.github.mobile.R.string; import com.github.mobile.core.gist.FullGist; import com.github.mobile.core.gist.GistStore; import com.github.mobile.core.gist.RefreshGistTask; import com.github.mobile.ui.FragmentProvider; import com.github.mobile.ui.PagerActivity; import com.github.mobile.ui.ViewPager; import com.github.mobile.util.AvatarLoader; import com.github.mobile.util.HttpImageGetter; import com.google.inject.Inject; import com.viewpagerindicator.TitlePageIndicator; import org.eclipse.egit.github.core.Gist; import org.eclipse.egit.github.core.User; /** * Activity to page through the content of all the files in a Gist */ public class GistFilesViewActivity extends PagerActivity { /** * Create intent to show files with an initial selected file * * @param gist * @param position * @return intent */ public static Intent createIntent(Gist gist, int position) { return new Builder("gist.files.VIEW").gist(gist.getId()) .add(EXTRA_POSITION, position).toIntent(); } private String gistId; private int initialPosition; private ViewPager pager; private ProgressBar loadingBar; private TitlePageIndicator indicator; private Gist gist; @Inject private GistStore store; @Inject private AvatarLoader avatars; @Inject private HttpImageGetter imageGetter; private GistFilesPagerAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); gistId = getStringExtra(EXTRA_GIST_ID); initialPosition = getIntExtra(EXTRA_POSITION); setContentView(layout.pager_with_title); pager = finder.find(id.vp_pages); loadingBar = finder.find(id.pb_loading); indicator = finder.find(id.tpi_header); if (initialPosition < 0) initialPosition = 0; getSupportActionBar().setTitle(getString(string.gist_title) + gistId); gist = store.getGist(gistId); if (gist != null) configurePager(); else { ViewUtils.setGone(loadingBar, false); ViewUtils.setGone(pager, true); ViewUtils.setGone(indicator, true); new RefreshGistTask(this, gistId, imageGetter) { @Override protected void onSuccess(FullGist gist) throws Exception { super.onSuccess(gist); GistFilesViewActivity.this.gist = gist.getGist(); configurePager(); } }.execute(); } } private void configurePager() { ActionBar actionBar = getSupportActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); User author = gist.getUser(); if (author != null) { actionBar.setSubtitle(author.getLogin()); avatars.bind(actionBar, author); } else actionBar.setSubtitle(string.anonymous); ViewUtils.setGone(loadingBar, true); ViewUtils.setGone(pager, false); ViewUtils.setGone(indicator, false); adapter = new GistFilesPagerAdapter(this, gist); pager.setAdapter(adapter); indicator.setViewPager(pager); if (initialPosition < adapter.getCount()) { pager.scheduleSetItem(initialPosition); onPageSelected(initialPosition); } } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: if (gist != null) { Intent intent = GistsViewActivity.createIntent(gist); intent.addFlags(FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_SINGLE_TOP); startActivity(intent); } return true; default: return super.onOptionsItemSelected(item); } } @Override protected FragmentProvider getProvider() { return adapter; } }