package com.likebamboo.osa.android.ui;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.util.AttributeSet;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.FrameLayout;
import com.likebamboo.osa.android.R;
import com.likebamboo.osa.android.ui.fragments.NavigationDrawerFragment;
import com.likebamboo.osa.android.ui.fragments.SettingsFragment;
import com.likebamboo.osa.android.ui.nav.ActivityNavigator;
import com.likebamboo.osa.android.ui.view.blur.BlurBehind;
import com.likebamboo.osa.android.ui.view.blur.OnBlurCompleteListener;
/**
* drawer导航界面基类
*/
public class NavigationActivity extends BaseActivity implements NavigationDrawerFragment.NavigationDrawerCallbacks {
/**
* 是否隐藏drawer
*/
public static final String EXTRA_SHOULD_DISABLE_DRAWER = "extra_should_disable_drawer";
/**
* drawer导航fragment
*/
private NavigationDrawerFragment mNavigationDrawerFragment;
/**
* 内容区域
*/
private FrameLayout mContainerView = null;
private boolean hiddenDrawer = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.activity_navigation);
hiddenDrawer = getIntent().getBooleanExtra(EXTRA_SHOULD_DISABLE_DRAWER, false);
mContainerView = (FrameLayout) findViewById(R.id.container);
DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
// 关闭DrawerLayout,且不让打开
if (hiddenDrawer) {
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
}
mNavigationDrawerFragment = (NavigationDrawerFragment) getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);
// Set up the drawer.
mNavigationDrawerFragment.setUp(R.id.navigation_drawer, drawerLayout, (hiddenDrawer ? R.drawable.ic_up : 0));
}
/**
* 通过layout名称构建视图
*
* @param layoutId
* @see [类、类#方法、类#成员]
*/
@Override
public void setContentView(int layoutId) {
getLayoutInflater().inflate(layoutId, mContainerView);
}
/**
* 通过view构建视图
*
* @param view
* @see [类、类#方法、类#成员]
*/
@Override
public void setContentView(View view) {
mContainerView.addView(view);
}
/**
* 设置Drawer 的开关模式
*
* @param mode
*/
public void setDrawerLockMode(int mode) {
DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawerLayout != null) {
drawerLayout.setDrawerLockMode(mode);
}
}
@Override
public boolean onNavigationDrawerItemSelected(int position, String text) {
//update the main content by start Activity
boolean close = true;
Intent i = new Intent();
i.putExtra(EXTRA_TITLE, text);
switch (position) {
case 0:// 首页
i.setClass(this, MainActivity.class);
break;
case 1:// 分类
i.setClass(this, CategoryActivity.class);
break;
case 2:// 作者
i.setClass(this, AuthorActivity.class);
break;
case 3:// 收藏
i.setClass(this, FavoriteActivity.class);
break;
case 4:// 设置
SettingsFragment fragment = SettingsFragment.newInstance();
fragment.show(getSupportFragmentManager(), "dialog");
close = false;
break;
default:
break;
}
ActivityNavigator.withAnim(i, ActivityNavigator.AnimationMode.DEFAULT).clearTop(i).startActivity(this, i);
return close;
}
@Nullable
@Override
public View onCreateView(String name, Context context, AttributeSet attrs) {
return super.onCreateView(name, context, attrs);
}
public void restoreActionBar() {
ActionBar actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setTitle(getTitle());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if (!mNavigationDrawerFragment.isDrawerOpen()) {
// Only show items in the action bar relevant to this screen
// if the drawer is not showing. Otherwise, let the drawer
// decide what to show in the action bar.
getMenuInflater().inflate(R.menu.main, menu);
restoreActionBar();
return true;
}
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (item.getItemId() == android.R.id.home) {
// 如果不显示drawer,直接finish
if (hiddenDrawer) {
finish();
return true;
}
// 如果显示drawer
if (mNavigationDrawerFragment != null) {
if (mNavigationDrawerFragment.isDrawerOpen()) {
mNavigationDrawerFragment.closeDrawer();
} else {
mNavigationDrawerFragment.openDrawer();
}
}
return true;
}
if (id == R.id.action_search) {
// 如果当前是搜索结果界面
if (this instanceof SearchResultActivity) {
finish();
return true;
}
BlurBehind.getInstance().execute(this, new OnBlurCompleteListener() {
@Override
public void onBlurComplete() {
// 搜索
Intent i = new Intent(NavigationActivity.this, SearchActivity.class);
ActivityNavigator.withAnim(i, ActivityNavigator.AnimationMode.FADE_IN_OUT).startActivity(NavigationActivity.this, i);
}
});
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onDestroy() {
super.onDestroy();
}
@Override
public void onBackPressed() {
if (mNavigationDrawerFragment != null && mNavigationDrawerFragment.isDrawerOpen()) {
mNavigationDrawerFragment.closeDrawer();
return;
}
super.onBackPressed();
}
@Override
public void finish() {
super.finish();
overridePendingTransition(0, 0);
}
}