Java tutorial
/* * Copyright 2012 Google 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.google.android.apps.iosched.ui.phone; import android.view.Menu; import android.view.MenuItem; import com.google.analytics.tracking.android.EasyTracker; import com.google.android.apps.iosched.R; import com.google.android.apps.iosched.provider.ScheduleContract; import com.google.android.apps.iosched.ui.*; import com.google.android.apps.iosched.util.UIUtils; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.v7.app.ActionBar; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.app.FragmentTransaction; import android.support.v4.view.ViewPager; import java.util.ArrayList; import java.util.List; import static com.google.android.apps.iosched.provider.ScheduleContract.Sessions.QUERY_PARAMETER_FILTER; import static com.google.android.apps.iosched.provider.ScheduleContract.Sessions.QUERY_VALUE_FILTER_SESSIONS_CODELABS_ONLY; import static com.google.android.apps.iosched.provider.ScheduleContract.Sessions.QUERY_VALUE_FILTER_OFFICE_HOURS_ONLY; import static com.google.android.apps.iosched.util.LogUtils.LOGD; public class TrackDetailActivity extends BaseActivity implements ActionBar.TabListener, ViewPager.OnPageChangeListener, SessionsFragment.Callbacks, SandboxFragment.Callbacks, TrackInfoHelperFragment.Callbacks { private static final int TAB_SESSIONS = 100; private static final int TAB_OFFICE_HOURS = 101; private static final int TAB_SANDBOX = 102; private ViewPager mViewPager; private String mTrackId; private String mHashtag; private List<Integer> mTabs = new ArrayList<Integer>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_track_detail); Uri trackUri = getIntent().getData(); mTrackId = ScheduleContract.Tracks.getTrackId(trackUri); mViewPager = (ViewPager) findViewById(R.id.pager); mViewPager.setAdapter(new TrackDetailPagerAdapter(getSupportFragmentManager())); mViewPager.setOnPageChangeListener(this); mViewPager.setPageMarginDrawable(R.drawable.grey_border_inset_lr); mViewPager.setPageMargin(getResources().getDimensionPixelSize(R.dimen.page_margin_width)); if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction() .add(TrackInfoHelperFragment.newFromTrackUri(trackUri), "track_info").commit(); } } @Override public Intent getParentActivityIntent() { return new Intent(this, HomeActivity.class).putExtra(HomeActivity.EXTRA_DEFAULT_TAB, HomeActivity.TAB_EXPLORE); } @Override public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { mViewPager.setCurrentItem(tab.getPosition()); } @Override public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { } @Override public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { } @Override public void onPageScrolled(int i, float v, int i1) { } @Override public void onPageSelected(int position) { getSupportActionBar().setSelectedNavigationItem(position); int titleId = -1; switch (position) { case 0: titleId = R.string.title_sessions; break; case 1: titleId = R.string.title_office_hours; break; case 2: titleId = R.string.title_sandbox; break; } String title = getString(titleId); EasyTracker.getTracker().sendView(title + ": " + getTitle()); LOGD("Tracker", title + ": " + getTitle()); } @Override public void onPageScrollStateChanged(int i) { } private class TrackDetailPagerAdapter extends FragmentPagerAdapter { public TrackDetailPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { boolean allTracks = (ScheduleContract.Tracks.ALL_TRACK_ID.equals(mTrackId)); switch (mTabs.get(position)) { case TAB_SESSIONS: { Fragment fragment = new SessionsFragment(); fragment.setArguments( BaseActivity .intentToFragmentArguments(new Intent(Intent.ACTION_VIEW, (allTracks ? ScheduleContract.Sessions.CONTENT_URI : ScheduleContract.Tracks.buildSessionsUri(mTrackId)) .buildUpon() .appendQueryParameter(QUERY_PARAMETER_FILTER, QUERY_VALUE_FILTER_SESSIONS_CODELABS_ONLY) .build()))); return fragment; } case TAB_OFFICE_HOURS: { Fragment fragment = new SessionsFragment(); fragment.setArguments( BaseActivity .intentToFragmentArguments( new Intent(Intent.ACTION_VIEW, (allTracks ? ScheduleContract.Sessions.CONTENT_URI : ScheduleContract.Tracks.buildSessionsUri(mTrackId)) .buildUpon() .appendQueryParameter(QUERY_PARAMETER_FILTER, QUERY_VALUE_FILTER_OFFICE_HOURS_ONLY) .build()))); return fragment; } case TAB_SANDBOX: default: { Fragment fragment = new SandboxFragment(); fragment.setArguments(BaseActivity.intentToFragmentArguments( new Intent(Intent.ACTION_VIEW, allTracks ? ScheduleContract.Sandbox.CONTENT_URI : ScheduleContract.Tracks.buildSandboxUri(mTrackId)))); return fragment; } } } @Override public int getCount() { return mTabs.size(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); getMenuInflater().inflate(R.menu.track_detail, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_social_stream: Intent intent = new Intent(this, SocialStreamActivity.class); intent.putExtra(SocialStreamFragment.EXTRA_QUERY, UIUtils.getSessionHashtagsString(mHashtag)); startActivity(intent); break; } return super.onOptionsItemSelected(item); } @Override public void onTrackInfoAvailable(String trackId, TrackInfo track) { setTitle(track.name); setActionBarTrackIcon(track.name, track.color); mHashtag = track.hashtag; switch (track.meta) { case ScheduleContract.Tracks.TRACK_META_SESSIONS_ONLY: mTabs.add(TAB_SESSIONS); break; case ScheduleContract.Tracks.TRACK_META_SANDBOX_OFFICE_HOURS_ONLY: mTabs.add(TAB_OFFICE_HOURS); mTabs.add(TAB_SANDBOX); break; case ScheduleContract.Tracks.TRACK_META_OFFICE_HOURS_ONLY: mTabs.add(TAB_OFFICE_HOURS); break; case ScheduleContract.Tracks.TRACK_META_NONE: default: mTabs.add(TAB_SESSIONS); mTabs.add(TAB_OFFICE_HOURS); mTabs.add(TAB_SANDBOX); break; } mViewPager.getAdapter().notifyDataSetChanged(); if (mTabs.size() > 1) { setHasTabs(); final ActionBar actionBar = getSupportActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); for (int tab : mTabs) { int titleResId; switch (tab) { case TAB_SANDBOX: titleResId = R.string.title_sandbox; break; case TAB_OFFICE_HOURS: titleResId = R.string.title_office_hours; break; case TAB_SESSIONS: default: titleResId = R.string.title_sessions; break; } actionBar.addTab(actionBar.newTab().setText(titleResId).setTabListener(this)); } } } @Override public boolean onSessionSelected(String sessionId) { startActivity(new Intent(Intent.ACTION_VIEW, ScheduleContract.Sessions.buildSessionUri(sessionId))); return false; } @Override public boolean onCompanySelected(String companyId) { startActivity(new Intent(Intent.ACTION_VIEW, ScheduleContract.Sandbox.buildCompanyUri(companyId))); return false; } }