123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- package com.reactnativenavigation.screens;
-
- import android.annotation.TargetApi;
- import android.app.Activity;
- import android.graphics.Color;
- import android.os.Build;
- import android.support.v7.app.AppCompatActivity;
- import android.view.Window;
- import android.widget.RelativeLayout;
-
- import com.reactnativenavigation.animation.VisibilityAnimator;
- import com.reactnativenavigation.params.ScreenParams;
- import com.reactnativenavigation.params.StyleParams;
- import com.reactnativenavigation.params.TitleBarButtonParams;
- import com.reactnativenavigation.params.TitleBarLeftButtonParams;
- import com.reactnativenavigation.utils.SdkSupports;
- import com.reactnativenavigation.utils.ViewUtils;
- import com.reactnativenavigation.views.TitleBarBackButtonListener;
- import com.reactnativenavigation.views.TopBar;
-
- import java.util.List;
-
- import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
- import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
-
- public abstract class Screen extends RelativeLayout {
-
- protected final AppCompatActivity activity;
- protected final ScreenParams screenParams;
- protected TopBar topBar;
- private final TitleBarBackButtonListener titleBarBackButtonListener;
- private VisibilityAnimator topBarVisibilityAnimator;
-
- public Screen(AppCompatActivity activity, ScreenParams screenParams, TitleBarBackButtonListener titleBarBackButtonListener) {
- super(activity);
- this.activity = activity;
- this.screenParams = screenParams;
- this.titleBarBackButtonListener = titleBarBackButtonListener;
-
- createViews();
- setStyle(screenParams.styleParams);
- }
-
- private void createViews() {
- createTopBar();
- createTitleBar();
- createContent();
- }
-
- protected abstract void createContent();
-
- private void createTitleBar() {
- addTitleBarButtons();
- topBar.setTitle(screenParams.title);
- }
-
- private void addTitleBarButtons() {
- setButtonColorFromScreen(screenParams.rightButtons);
- if (screenParams.leftButton != null) {
- screenParams.leftButton.setColorFromScreenStyle(screenParams.styleParams.titleBarButtonColor);
- }
- topBar.addTitleBarAndSetButtons(screenParams.rightButtons, screenParams.leftButton,
- titleBarBackButtonListener, screenParams.navigatorEventId);
- }
-
- private void createTopBar() {
- topBar = new TopBar(getContext());
- createTopBarVisibilityAnimator();
- addView(topBar, new LayoutParams(MATCH_PARENT, WRAP_CONTENT));
- }
-
- private void createTopBarVisibilityAnimator() {
- ViewUtils.runOnPreDraw(topBar, new Runnable() {
- @Override
- public void run() {
- if (topBarVisibilityAnimator == null) {
- topBarVisibilityAnimator = new VisibilityAnimator(topBar,
- VisibilityAnimator.HideDirection.Up,
- topBar.getHeight());
- }
- }
- });
- }
-
- private void setStyle(StyleParams styleParams) {
- setStatusBarColor(styleParams.statusBarColor);
- setNavigationBarColor(styleParams.navigationBarColor);
- topBar.setStyle(styleParams);
- }
-
- @TargetApi(Build.VERSION_CODES.LOLLIPOP)
- private void setStatusBarColor(StyleParams.Color statusBarColor) {
- if (!SdkSupports.lollipop()) {
- return;
- }
-
- final Activity context = (Activity) getContext();
- final Window window = context.getWindow();
- if (statusBarColor.hasColor()) {
- window.setStatusBarColor(statusBarColor.getColor());
- } else {
- window.setStatusBarColor(Color.BLACK);
- }
- }
-
- @TargetApi(Build.VERSION_CODES.LOLLIPOP)
- public void setNavigationBarColor(StyleParams.Color navigationBarColor) {
- if (!SdkSupports.lollipop()) {
- return;
- }
-
- final Activity context = (Activity) getContext();
- final Window window = context.getWindow();
- if (navigationBarColor.hasColor()) {
- window.setNavigationBarColor(navigationBarColor.getColor());
- } else {
- window.setNavigationBarColor(Color.BLACK);
- }
- }
-
- public abstract void ensureUnmountOnDetachedFromWindow();
-
- public abstract void preventUnmountOnDetachedFromWindow();
-
- public abstract void preventMountAfterReattachedToWindow();
-
- public String getScreenInstanceId() {
- return screenParams.screenInstanceId;
- }
-
- public void setTopBarVisible(boolean visible, boolean animate) {
- topBarVisibilityAnimator.setVisible(visible, animate);
- }
-
- public void setTitleBarTitle(String title) {
- topBar.setTitle(title);
- }
-
- public void setTitleBarRightButtons(String navigatorEventId, List<TitleBarButtonParams> titleBarButtons) {
- setButtonColorFromScreen(titleBarButtons);
- topBar.setTitleBarRightButtons(navigatorEventId, titleBarButtons);
- }
-
- public void setTitleBarLeftButton(String navigatorEventId, TitleBarBackButtonListener backButtonListener,
- TitleBarLeftButtonParams titleBarLeftButtonParams) {
- topBar.setTitleBarRightButton(navigatorEventId, backButtonListener, titleBarLeftButtonParams);
- }
-
- public StyleParams getStyleParams() {
- return screenParams.styleParams;
- }
-
- private void setButtonColorFromScreen(List<TitleBarButtonParams> titleBarButtonParams) {
- if (titleBarButtonParams == null) {
- return;
- }
-
- for (TitleBarButtonParams titleBarButtonParam : titleBarButtonParams) {
- titleBarButtonParam.setColorFromScreenStyle(screenParams.styleParams.titleBarButtonColor);
- }
- }
- }
|