package ru.bsuirhelper.android.ui;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.*;
import com.google.analytics.tracking.android.EasyTracker;
import ru.bsuirhelper.android.ApplicationSettings;
import ru.bsuirhelper.android.R;
import ru.bsuirhelper.android.ui.notes.FragmentNotes;
import ru.bsuirhelper.android.ui.schedule.FragmentManagerGroups;
import ru.bsuirhelper.android.ui.schedule.FragmentSchedule;
/**
* Created by Влад on 29.10.13.
*/
public class ActivityDrawerMenu extends ActionBarActivity {
public static final String LOG_TAG = "BSUIR_DEBUG";
private final int ACTIVITY_SCHEDULE = 0;
private final int ACTIVITY_NOTES = 1;
private final int ACTIVITY_SETTINGS = 2;
private DrawerLayout mDrawerLayout;
private DrawerArrayAdapter mDrawerAdapter;
private ActionBarDrawerToggle mDrawerToggle;
private ListView mDrawerList;
private ActionBar mActionBar;
private Runnable mPendingRunnable;
private Handler mHandler;
private final String[] mMenuItems = new String[]{"Расписание", "Заметки", "Настройки"};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.drawerlayout);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerToggle = new ActionBarDrawerToggle(
this, /* host Activity */
mDrawerLayout, /* DrawerLayout object */
R.drawable.ic_drawer, /* nav drawer icon to replace 'Up' caret */
R.string.drawer_open, /* "open drawer" description */
R.string.drawer_close /* "close drawer" description */
) {
@Override
public void onDrawerClosed(View view) {
ActivityCompat.invalidateOptionsMenu(ActivityDrawerMenu.this);
// If mPendingRunnable is not null, then add to the message queue
if (mPendingRunnable != null) {
mHandler.post(mPendingRunnable);
mPendingRunnable = null;
}
}
};
mDrawerList = (ListView) findViewById(R.id.left_drawer);
mDrawerAdapter = new DrawerArrayAdapter(this, mMenuItems);
mDrawerList.setAdapter(mDrawerAdapter);
mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
closeDrawerMenu();
selectItem(position);
}
});
mActionBar = getSupportActionBar();
mActionBar.setDisplayHomeAsUpEnabled(true);
mActionBar.setHomeButtonEnabled(true);
mDrawerLayout.setDrawerListener(mDrawerToggle);
mHandler = new Handler();
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction().replace(R.id.content_frame, new FragmentSchedule()).commit();
if (ApplicationSettings.getInstance(this).getBoolean("isFirstShowDrawer", true)) {
openDrawerMenu();
ApplicationSettings.getInstance(this).putBoolean("isFirstShowDrawer", false);
}
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
if (mDrawerToggle != null) {
mDrawerToggle.syncState();
}
}
@Override
public void onStart() {
super.onStart();
EasyTracker.getInstance(this).activityStart(this);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
return super.onOptionsItemSelected(item);
}
protected void updateDrawerMenu() {
mDrawerAdapter.notifyDataSetChanged();
}
private void selectItem(final int position) {
// Create a new fragment and specify the planet to show based on position
Fragment fragment = null;
Intent intent = new Intent();
mActionBar.setSubtitle(null);
switch (position) {
case ACTIVITY_SCHEDULE:
fragment = new FragmentManagerGroups();
mActionBar.setTitle(FragmentManagerGroups.TITLE);
break;
case ACTIVITY_NOTES:
fragment = new FragmentNotes();
mActionBar.setTitle(FragmentNotes.TITLE);
break;
case ACTIVITY_SETTINGS:
startActivity(intent.setClass(getApplicationContext(), ActivitySettings.class));
return;
}
final Fragment finalFragment = fragment;
mPendingRunnable = new Runnable() {
@Override
public void run() {
// Insert the fragment by replacing any existing fragment
android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.content_frame, finalFragment)
.commit();
}
};
// Highlight the selected item, update the title, and close the drawer
mDrawerList.setItemChecked(position, true);
mDrawerLayout.closeDrawer(mDrawerList);
}
protected void openDrawerMenu() {
mDrawerLayout.openDrawer(GravityCompat.START);
}
protected void closeDrawerMenu() {
mDrawerLayout.closeDrawer(GravityCompat.START);
}
class DrawerArrayAdapter extends ArrayAdapter<String> {
LayoutInflater mInflater;
public DrawerArrayAdapter(Context context, String[] menuItems) {
super(context, R.layout.drawer_list_item, menuItems);
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parentView) {
if (convertView == null) {
convertView = mInflater.inflate(R.layout.drawer_list_item, null);
setViewHolder(convertView);
}
ViewHolder vh = (ViewHolder) convertView.getTag();
TextView counterOfNotes = (TextView) convertView.findViewById(R.id.textview_counternotes);
vh.menuName.setText(getItem(position));
switch (position) {
case ACTIVITY_SCHEDULE:
vh.icon.setImageResource(R.drawable.ic_calendar);
counterOfNotes.setVisibility(View.INVISIBLE);
break;
case ACTIVITY_NOTES:
counterOfNotes.setVisibility(View.VISIBLE);
counterOfNotes.setText(ApplicationSettings.getInstance(ActivityDrawerMenu.this).getInt("notes", 0) + "");
vh.icon.setImageResource(R.drawable.ic_notes);
break;
case ACTIVITY_SETTINGS:
vh.icon.setImageResource(R.drawable.ic_settings);
counterOfNotes.setVisibility(View.INVISIBLE);
break;
}
return convertView;
}
class ViewHolder {
ImageView icon;
TextView menuName;
}
private void setViewHolder(View v) {
ViewHolder vh = new ViewHolder();
vh.icon = (ImageView) v.findViewById(R.id.imageview_itemicon);
vh.menuName = (TextView) v.findViewById(R.id.textview_itemname);
v.setTag(vh);
}
}
}