package com.andrewpham.android.khanacademy_learnanything.controllers;
import android.app.ActionBar;
import android.app.Activity;
import android.content.Context;
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.widget.DrawerLayout;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.GridView;
import android.widget.ListView;
import android.widget.TextView;
import com.andrewpham.android.khanacademy_learnanything.R;
import com.andrewpham.android.khanacademy_learnanything.adapters.NavDrawerListAdapter;
import com.andrewpham.android.khanacademy_learnanything.api.ApiClient;
import com.andrewpham.android.khanacademy_learnanything.drawer_model.NavDrawerItem;
import com.andrewpham.android.khanacademy_learnanything.oauth.OAuthClient;
import com.andrewpham.android.khanacademy_learnanything.topic_model.Child;
import com.andrewpham.android.khanacademy_learnanything.topic_model.TopicData;
import java.util.ArrayList;
import java.util.Arrays;
import retrofit.Callback;
import retrofit.RetrofitError;
import retrofit.client.Response;
public class HomeActivity extends Activity {
GridView mGridView;
public static final String EXTRA_TRANSLATED_TITLES = "com.andrewpham.android.khanacademy_learnanything.translated_titles";
public static final String EXTRA_NODE_SLUGS = "com.andrewpham.android.khanacademy_learnanything.node_slugs";
private ActionBar mActionBar;
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;
private CharSequence mDrawerTitle;
private CharSequence mTitle;
private String[] mTopics;
private ArrayList<String> mItems;
private TypedArray mIcons;
private ArrayList<NavDrawerItem> mNavDrawerItems;
private NavDrawerListAdapter mNavDrawerListAdapter;
private static final String[] TOPIC_SLUGS = new String[]{
"math",
"science",
"economics-finance-domain",
"humanities",
"computing",
"test-prep",
"partner-content",
"college-admissions",
"talks-and-interviews",
"coach-res"
};
private String mTopicSlug;
private static Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = getApplicationContext();
setContentView(R.layout.activity_home);
mTitle = mDrawerTitle = getTitle();
mTopics = getResources().getStringArray(R.array.home_nav_drawer_items);
mItems = new ArrayList<>(Arrays.asList(mTopics));
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);
mActionBar = getActionBar();
mActionBar.setDisplayHomeAsUpEnabled(true);
mActionBar.setHomeButtonEnabled(true);
mActionBar.setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.actionbar_background)));
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);
mGridView = (GridView) findViewById(R.id.gridView);
mGridView.setAdapter(new GridAdapter(mItems));
}
/**
* Sliding menu item click listener
*/
private class SlidingMenuClickListener implements
ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
getTopic(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(mContext, 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);
}
private class GridAdapter extends ArrayAdapter<String> {
public GridAdapter(ArrayList<String> items) {
super(getApplicationContext(), 0, items);
}
ViewHolder holder;
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = getLayoutInflater()
.inflate(R.layout.grid_item, parent, false);
holder = new ViewHolder();
holder.textView = (TextView) convertView.findViewById(R.id.title);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
String item = getItem(position);
holder.textView.setText(item);
convertView.setOnTouchListener(new View.OnTouchListener() {
private float startX;
private float startY;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
startX = event.getX();
startY = event.getY();
v.setBackgroundResource(R.drawable.list_item_shape_pressed);
v.setPadding(v.getPaddingLeft(), v.getPaddingTop() + 4,
v.getPaddingRight(), v.getPaddingBottom() - 4);
break;
case MotionEvent.ACTION_UP:
float endX = event.getX();
float endY = event.getY();
v.setBackgroundResource(R.drawable.list_item_shape_normal);
v.setPadding(v.getPaddingLeft(), v.getPaddingTop() - 4,
v.getPaddingRight(), v.getPaddingBottom() + 4);
if (TopicFragment.isAClick(startX, endX, startY, endY)) {
v.playSoundEffect(android.view.SoundEffectConstants.CLICK);
getTopic(position);
}
break;
case MotionEvent.ACTION_CANCEL:
v.setBackgroundResource(R.drawable.list_item_shape_normal);
v.setPadding(v.getPaddingLeft(), v.getPaddingTop() - 4,
v.getPaddingRight(), v.getPaddingBottom() + 4);
break;
}
return true;
}
});
return convertView;
}
}
static class ViewHolder {
TextView textView;
}
public void getTopic(int position) {
mTopicSlug = TOPIC_SLUGS[position];
final ArrayList<String> translatedTitles = new ArrayList<>();
final ArrayList<String> nodeSlugs = new ArrayList<>();
ApiClient.get().getTopicData(mTopicSlug, new Callback<TopicData>() {
@Override
public void success(TopicData topicData, Response response) {
for (Child child : topicData.getChildren()) {
translatedTitles.add(child.getTranslatedTitle());
nodeSlugs.add(child.getNodeSlug());
}
Bundle bundle = new Bundle();
bundle.putStringArrayList(EXTRA_TRANSLATED_TITLES, translatedTitles);
bundle.putStringArrayList(EXTRA_NODE_SLUGS, nodeSlugs);
Intent i = new Intent(mContext, TopicActivity.class);
i.putExtras(bundle);
startActivity(i);
}
@Override
public void failure(RetrofitError error) {
}
});
}
}