package com.andrewpham.android.khanacademy_learnanything.controllers; import android.app.ActionBar; import android.app.FragmentTransaction; import android.content.Intent; import android.content.res.Configuration; import android.content.res.TypedArray; import android.graphics.drawable.ColorDrawable; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v4.app.FragmentActivity; import android.support.v4.view.ViewPager; import android.support.v4.widget.DrawerLayout; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import com.andrewpham.android.khanacademy_learnanything.R; import com.andrewpham.android.khanacademy_learnanything.adapters.NavDrawerListAdapter; import com.andrewpham.android.khanacademy_learnanything.adapters.TabsPagerAdapter; import com.andrewpham.android.khanacademy_learnanything.drawer_model.NavDrawerItem; import java.util.ArrayList; public class TopicActivity extends FragmentActivity implements ActionBar.TabListener { public static final String TAG = "TopicActivity"; private ActionBar mActionBar; private DrawerLayout mDrawerLayout; private ListView mDrawerList; private ActionBarDrawerToggle mDrawerToggle; private CharSequence mDrawerTitle; private CharSequence mTitle; private String[] mTopics; private TypedArray mIcons; private ArrayList<NavDrawerItem> mNavDrawerItems; private NavDrawerListAdapter mNavDrawerListAdapter; private ArrayList<String> mTranslatedTitles; private ArrayList<String> mNodeSlugs; private ViewPager mViewPager; private TabsPagerAdapter mAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle bundle = this.getIntent().getExtras(); mTranslatedTitles = bundle.getStringArrayList(HomeActivity.EXTRA_TRANSLATED_TITLES); Log.d(TAG, mTranslatedTitles.toString()); mNodeSlugs = bundle.getStringArrayList(HomeActivity.EXTRA_NODE_SLUGS); Log.d(TAG, mNodeSlugs.toString()); setContentView(R.layout.activity_topic); mTitle = mDrawerTitle = getTitle(); mTopics = mTranslatedTitles.toArray(new String[mTranslatedTitles.size()]); mIcons = getResources().obtainTypedArray(R.array.home_nav_drawer_icons); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout); mDrawerList = (ListView) findViewById(R.id.drawerListView); mDrawerList.setOnItemClickListener(new SlidingMenuClickListener()); mNavDrawerItems = new ArrayList<>(); for (int i = 0; i < mTopics.length; i++) { mNavDrawerItems.add(new NavDrawerItem(mTopics[i], mIcons.getResourceId(0, -1))); } // Recycle the typed array mIcons.recycle(); mNavDrawerListAdapter = new NavDrawerListAdapter(getApplicationContext(), mNavDrawerItems); mDrawerList.setAdapter(mNavDrawerListAdapter); // Initialization mViewPager = (ViewPager) findViewById(R.id.pager); mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { mActionBar.setSelectedNavigationItem(position); } @Override public void onPageScrollStateChanged(int state) { } }); mActionBar = getActionBar(); mAdapter = new TabsPagerAdapter(getSupportFragmentManager(), mTranslatedTitles.size(), mNodeSlugs); // Initializations with ViewPager mViewPager.setAdapter(mAdapter); mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); mActionBar.setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.actionbar_background))); mActionBar.setStackedBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.actionbar_tab_background))); // Initializations with Navigation Drawer mActionBar.setDisplayHomeAsUpEnabled(true); mActionBar.setHomeButtonEnabled(true); mActionBar.setDisplayShowTitleEnabled(false); mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.app_name, R.string.app_name) { public void onDrawerClosed(View view) { mActionBar.setTitle(mTitle); invalidateOptionsMenu(); } public void onDrawerOpened(View drawerView) { mActionBar.setTitle(mDrawerTitle); invalidateOptionsMenu(); } }; mDrawerLayout.setDrawerListener(mDrawerToggle); // Adding tabs for (String tab : mTopics) { mActionBar.addTab(mActionBar.newTab().setText(tab) .setTabListener(this)); } } @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) { } /** * Sliding menu item click listener */ private class SlidingMenuClickListener implements ListView.OnItemClickListener { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { mViewPager.setCurrentItem(position); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.options_menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { if (mDrawerToggle.onOptionsItemSelected(item)) { return true; } switch (item.getItemId()) { // case R.id.action_login: // try { // Intent i = new Intent(getApplicationContext(), WebpageActivity.class); // i.setData(Uri.parse(OAuthClient.initialize())); // startActivity(i); // } catch (Exception e) { // e.printStackTrace(); // } // return true; case R.id.action_folder: Intent j = new Intent(Intent.ACTION_VIEW); Uri uri = Uri.parse(Environment.getExternalStorageDirectory() + "/Android/data/" + this.getPackageName() + "/files"); j.setDataAndType(uri, "resource/folder"); startActivity(Intent.createChooser(j, getString(R.string.prompt_folder))); return true; case R.id.action_email: Intent i = new Intent(Intent.ACTION_SEND); i.setData(Uri.parse("mailto:")); i.setType("text/plain"); i.putExtra(Intent.EXTRA_EMAIL, getString(R.string.app_email)); startActivity(Intent.createChooser(i, getString(R.string.prompt_email))); return true; case R.id.action_redirect: try { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.app_store_url) + getString(R.string.external_app_name)))); } catch (android.content.ActivityNotFoundException e) { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.http_url) + getString(R.string.external_app_name)))); } return true; default: return super.onOptionsItemSelected(item); } } /** * Called when invalidateOptionsMenu() is triggered */ @Override public boolean onPrepareOptionsMenu(Menu menu) { // if nav drawer is opened, hide the action items boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList); menu.findItem(R.id.action_email).setVisible(!drawerOpen); return super.onPrepareOptionsMenu(menu); } @Override public void setTitle(CharSequence title) { mTitle = title; getActionBar().setTitle(mTitle); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); mDrawerToggle.syncState(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); mDrawerToggle.onConfigurationChanged(newConfig); } }