package com.ladjzero.uzlee;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.widget.Toolbar;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import com.joanzapata.iconify.IconDrawable;
import com.joanzapata.iconify.fonts.MaterialIcons;
import com.ladjzero.hipda.Forum;
import com.ladjzero.uzlee.utils.Utils;
import com.rey.material.app.Dialog;
import com.rey.material.widget.TabPageIndicator;
import butterknife.ButterKnife;
import butterknife.OnClick;
public class ActivityMain extends ActivityBase implements SharedPreferences.OnSharedPreferenceChangeListener, AdapterView.OnItemClickListener {
String title = "";
Toolbar toolbar;
boolean doubleBackToExitPressedOnce = false;
AdapterMenuItem actionsAdapter;
private FragmentNav mFragmentNav;
private FragmentThreadsPager mFragment;
private int mCurrentPagePosition = -1;
private boolean mIsRunning = false;
private boolean mNeedReload = false;
private View mCustomToolbarView;
private TabPageIndicator mPageIndicator;
private ViewPager mViewPager;
private Dialog mMenuDialog;
private View mMenuView;
public TabPageIndicator getPageIndicator() {
return mPageIndicator;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
setTitle(null);
mFragmentNav = (FragmentNav) getSupportFragmentManager().findFragmentById(R.id.fragment_drawer);
mFragmentNav.setup(R.id.fragment_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), (Toolbar) findViewById(R.id.toolbar));
mFragmentNav.closeDrawer();
FragmentManager fragmentManager = getSupportFragmentManager();
if (Utils.getUserSelectedForums(this).size() == 0) {
fragmentManager
.beginTransaction()
.replace(R.id.container, FragmentToPickForums.newInstance(null))
.commit();
return;
}
Bundle bundle = new Bundle();
mFragment = FragmentThreadsPager.newInstance(bundle);
fragmentManager
.beginTransaction()
.replace(R.id.container, mFragment)
.commit();
toolbar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mFragment.toolbarClick();
}
});
LayoutInflater mInflater = LayoutInflater.from(this);
mCustomToolbarView = mInflater.inflate(R.layout.tab_page_indicator_scroll, null);
mPageIndicator = (TabPageIndicator) mCustomToolbarView.findViewById(R.id.tabs);
getSupportActionBar().setDisplayShowCustomEnabled(true);
mFragment.setOnCreatedListener(new FragmentThreadsPager.OnCreatedListener() {
@Override
public void onCreated(ViewPager viewPager) {
mViewPager = viewPager;
// Delay because TabPageIndicator can not be re-rendered after menu icon were inserted.
// The underline of the default tab will be wider as it should be.
mCustomToolbarView.postDelayed(new Runnable() {
@Override
public void run() {
Toolbar.LayoutParams params = new Toolbar.LayoutParams(
Toolbar.LayoutParams.WRAP_CONTENT,
Toolbar.LayoutParams.MATCH_PARENT,
Gravity.CENTER_HORIZONTAL
);
mCustomToolbarView.setLayoutParams(params);
toolbar.addView(mCustomToolbarView);
mPageIndicator.setViewPager(mViewPager, 0);
mPageIndicator.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
int formerPosition = 0;
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if (mCurrentPagePosition != position) {
mCurrentPagePosition = position;
}
}
@Override
public void onPageSelected(int position) {
if (formerPosition == position) {
mFragment.toolbarClick();
}
formerPosition = position;
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
}, 700);
mFragment.setOnPageChangeListener(new FragmentThreadsPager.OnPageChangeListener() {
@Override
public void onPageChange(FragmentThreadsAbs f) {
mViewPager.postDelayed(new Runnable() {
@Override
public void run() {
invalidateOptionsMenu();
}
}, 300);
}
});
}
});
mMenuView = getLayoutInflater().inflate(R.layout.actions_dialog, null);
mMenuDialog = new Dialog(this);
ListView menuList = (ListView) mMenuView.findViewById(R.id.actions);
if (App.getInstance().getCore().getApiStore().getUser().getId() == 0) {
actionsAdapter = new AdapterMenuItem(this, new String[]{
"刷新"
}, new String[]{
"{md-refresh}"
});
} else {
actionsAdapter = new AdapterMenuItem(this, new String[]{
"新主题",
"刷新"
}, new String[]{
"{md-add}",
"{md-refresh}"
});
}
menuList.setAdapter(actionsAdapter);
menuList.setOnItemClickListener(this);
mMenuDialog.title("")
.titleColor(Utils.getThemeColor(this, R.attr.colorText))
.backgroundColor(Utils.getThemeColor(this, android.R.attr.colorBackground))
.negativeAction("取消")
.negativeActionClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mMenuDialog.dismiss();
}
})
.contentView(mMenuView)
.canceledOnTouchOutside(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
return false;
} else if (id == R.id.more) {
mMenuDialog.show();
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onResume() {
super.onResume();
mIsRunning = true;
if (mNeedReload) {
mNeedReload = false;
reload();
}
}
@Override
protected void onPause() {
super.onPause();
mIsRunning = false;
}
@Override
public void onBackPressed() {
if (doubleBackToExitPressedOnce) {
super.onBackPressed();
return;
}
this.doubleBackToExitPressedOnce = true;
showToast("再次后退将会退出");
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce = false;
}
}, 2000);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU) {
mFragmentNav.toggleDrawer();
return true;
}
return super.onKeyUp(keyCode, event);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.threads, menu);
menu.findItem(R.id.more)
.setIcon(new IconDrawable(this, MaterialIcons.md_more_vert)
.color(Utils.getThemeColor(this, R.attr.colorTextInverse))
.actionBarSize());
return super.onCreateOptionsMenu(menu);
}
@OnClick(R.id.message)
void onMessageClick() {
mFragmentNav.closeDrawer();
Intent intent = new Intent(this, ActivityAlerts.class);
startActivity(intent);
}
@OnClick(R.id.my_posts)
void onMyPostsClick() {
mFragmentNav.closeDrawer();
if (App.getInstance().getCore().getLocalApi().getUser() != null) {
Intent intent = new Intent(this, ActivityMyPosts.class);
startActivity(intent);
}
}
@OnClick(R.id.search)
void onSearchClick() {
mFragmentNav.closeDrawer();
Intent intent = new Intent(this, ActivitySearch.class);
startActivity(intent);
}
@OnClick(R.id.settings)
void onSettingsClick() {
mFragmentNav.closeDrawer();
Intent intent = new Intent(this, ActivitySettings.class);
startActivityForResult(intent, 0);
}
@OnClick(R.id.themeSwitch)
void onThemeSwitch() {
SharedPreferences settings = getSettings();
if (Utils.getTheme("night") == getThemeId()) {
settings.edit().putString("theme", settings.getString("lastDayTheme", DefaultTheme)).commit();
} else {
settings.edit().putString("theme", "night").commit();
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (data != null && data.getBooleanExtra("reload", false)) {
reload();
}
}
@Override
protected void onStart() {
super.onStart();
getSettings().registerOnSharedPreferenceChangeListener(this);
}
@Override
protected void onStop() {
getSettings().unregisterOnSharedPreferenceChangeListener(this);
super.onStop();
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if ("theme".equals(key) || "selected_forums".equals(key)) {
if (mIsRunning) {
reload();
} else {
mNeedReload = true;
}
}
}
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
mMenuDialog.dismiss();
if (App.getInstance().getCore().getApiStore().getUser().getId() == 0) {
App.getInstance().dispatchEvent(new FragmentThreadsAbs.EventRefresh());
} else {
switch (i) {
case 0:
Forum f = mFragment.getCurrentForum();
int fid = f.getFid();
Intent intent = new Intent(this, ActivityEdit.class);
intent.putExtra("title", Forum.findById(App.getInstance().getFlattenForums(), fid).getName());
intent.putExtra("fid", fid);
startActivity(intent);
return;
case 1:
App.getInstance().dispatchEvent(new FragmentThreadsAbs.EventRefresh());
}
}
}
}