package com.wangdaye.mysplash.main.view.activity; import android.annotation.SuppressLint; import android.os.Bundle; import android.support.design.widget.CoordinatorLayout; import android.support.v7.widget.Toolbar; import android.view.MenuItem; import android.view.View; import com.wangdaye.mysplash.R; import com.wangdaye.mysplash.common._basic.MysplashActivity; import com.wangdaye.mysplash.common.i.presenter.SwipeBackManagePresenter; import com.wangdaye.mysplash.common.i.view.SwipeBackManageView; import com.wangdaye.mysplash.common.ui.widget.SwipeBackCoordinatorLayout; import com.wangdaye.mysplash.common.ui.widget.coordinatorView.StatusBarView; import com.wangdaye.mysplash.common.utils.BackToTopUtils; import com.wangdaye.mysplash.common.utils.manager.AuthManager; import com.wangdaye.mysplash.common.utils.manager.ThemeManager; import com.wangdaye.mysplash.main.presenter.activity.SwipeBackManageImplementor; import com.wangdaye.mysplash.main.view.widget.NotificationsView; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; /** * Notification activity. * * This activity is used to show user's notifications. * * */ public class NotificationActivity extends MysplashActivity implements SwipeBackManageView, View.OnClickListener, Toolbar.OnMenuItemClickListener, SwipeBackCoordinatorLayout.OnSwipeListener { @BindView(R.id.activity_notification_statusBar) StatusBarView statusBar; @BindView(R.id.activity_notification_container) CoordinatorLayout container; @BindView(R.id.activity_notification_notificationsView) NotificationsView notificationsView; private SwipeBackManagePresenter swipeBackManagePresenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_notification); initPresenter(); ButterKnife.bind(this); AuthManager.getInstance() .getNotificationManager() .addOnUpdateNotificationListener( notificationsView.getOnUpdateNotificationListener()); } @Override protected void onStart() { super.onStart(); if (!isStarted()) { setStarted(); initView(); } } @Override protected void onDestroy() { super.onDestroy(); AuthManager.getInstance() .getNotificationManager() .removeOnUpdateNotificationListener( notificationsView.getOnUpdateNotificationListener()); if (notificationsView != null) { notificationsView.cancelRequest(); } } @Override protected void setTheme() { if (ThemeManager.getInstance(this).isLightTheme()) { setTheme(R.style.MysplashTheme_light_Translucent_Common); } else { setTheme(R.style.MysplashTheme_dark_Translucent_Common); } } @Override public void handleBackPressed() { if (notificationsView.needPagerBackToTop() && BackToTopUtils.isSetBackToTop(false)) { backToTop(); } else { finishActivity(SwipeBackCoordinatorLayout.DOWN_DIR); } } @Override public void backToTop() { notificationsView.pagerScrollToTop(); } @Override public void finishActivity(int dir) { AuthManager.getInstance() .getNotificationManager() .setLatestSeenTime(); SwipeBackCoordinatorLayout.hideBackgroundShadow(container); finish(); switch (dir) { case SwipeBackCoordinatorLayout.UP_DIR: overridePendingTransition(0, R.anim.activity_slide_out_top); break; case SwipeBackCoordinatorLayout.DOWN_DIR: overridePendingTransition(0, R.anim.activity_slide_out_bottom); break; } } @Override public CoordinatorLayout getSnackbarContainer() { return container; } // init. private void initPresenter() { this.swipeBackManagePresenter = new SwipeBackManageImplementor(this); } @SuppressLint("SetTextI18n") private void initView() { SwipeBackCoordinatorLayout swipeBackView = ButterKnife.findById( this, R.id.activity_notification_swipeBackView); swipeBackView.setOnSwipeListener(this); Toolbar toolbar = ButterKnife.findById(this, R.id.activity_notification_toolbar); ThemeManager.setNavigationIcon( toolbar, R.drawable.ic_toolbar_back_light, R.drawable.ic_toolbar_back_dark); ThemeManager.inflateMenu( toolbar, R.menu.activity_notification_light, R.menu.activity_notification_dark); toolbar.setNavigationOnClickListener(this); toolbar.setOnMenuItemClickListener(this); notificationsView.setActivity(this); notificationsView.initRefresh(); } // interface. // on click listener. @Override public void onClick(View view) { switch (view.getId()) { case -1: finishActivity(SwipeBackCoordinatorLayout.DOWN_DIR); break; } } @OnClick(R.id.activity_notification_toolbar) void clickToolbar() { backToTop(); } // on menu item click listener. @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case R.id.action_refresh: AuthManager.getInstance() .getNotificationManager() .clearNotifications(false); notificationsView.initRefresh(); break; } return true; } // on swipe listener. @Override public boolean canSwipeBack(int dir) { return swipeBackManagePresenter.checkCanSwipeBack(dir); } @Override public void onSwipeProcess(float percent) { statusBar.setAlpha(1 - percent); container.setBackgroundColor(SwipeBackCoordinatorLayout.getBackgroundColor(percent)); } @Override public void onSwipeFinish(int dir) { swipeBackManagePresenter.swipeBackFinish(this, dir); } // view. // swipe back manage view. @Override public boolean checkCanSwipeBack(int dir) { if (dir == SwipeBackCoordinatorLayout.UP_DIR) { return notificationsView.canSwipeBack(dir); } else { return notificationsView.canSwipeBack(dir); } } }