summaryrefslogtreecommitdiff
path: root/library/src/main/java/moe/yuuta/flow/NavigationBar.java
diff options
context:
space:
mode:
Diffstat (limited to 'library/src/main/java/moe/yuuta/flow/NavigationBar.java')
-rw-r--r--library/src/main/java/moe/yuuta/flow/NavigationBar.java82
1 files changed, 82 insertions, 0 deletions
diff --git a/library/src/main/java/moe/yuuta/flow/NavigationBar.java b/library/src/main/java/moe/yuuta/flow/NavigationBar.java
new file mode 100644
index 0000000..14fae26
--- /dev/null
+++ b/library/src/main/java/moe/yuuta/flow/NavigationBar.java
@@ -0,0 +1,82 @@
+package moe.yuuta.flow;
+
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+class NavigationBar {
+ public enum ButtonPosition {
+ LEFT,
+ RIGHT
+ }
+
+ private ViewGroup mRoot;
+ private Button mLeftButton;
+ private Button mRightButton;
+
+ NavigationBar() {}
+
+ NavigationBar(@NonNull ViewGroup navBarRoot) {
+ attach(navBarRoot);
+ }
+
+ /**
+ * The config will be reset after re-attaching.
+ */
+ void attach(@NonNull ViewGroup navBarRoot) {
+ mRoot = navBarRoot;
+ mLeftButton = mRoot.findViewById(R.id.flow_nav_left_button);
+ mRightButton = mRoot.findViewById(R.id.flow_nav_right_button);
+ }
+
+ @NonNull
+ Button getButton(@NonNull ButtonPosition position) {
+ switch (position) {
+ case LEFT:
+ return mLeftButton;
+ case RIGHT:
+ return mRightButton;
+ default:
+ throw new IllegalArgumentException("Unexpected position");
+ }
+ }
+
+ private void setListener(@NonNull ButtonPosition position, @Nullable View.OnClickListener listener) {
+ switch (position) {
+ case LEFT:
+ mLeftButton.setOnClickListener(listener);
+ break;
+ case RIGHT:
+ mRightButton.setOnClickListener(listener);
+ break;
+ }
+ }
+
+ void applyInfo(@NonNull NavigationBarConfig config) {
+ mLeftButton.setText(config.getLeftButtonText());
+ mRightButton.setText(config.getRightButtonText());
+ setNavigationBarVisibility(config.getNavBarVisibility());
+ setButtonVisibility(ButtonPosition.LEFT, config.getLeftButtonVisibility());
+ setButtonVisibility(ButtonPosition.RIGHT, config.getRightButtonVisibility());
+ setListener(ButtonPosition.LEFT, config.getLeftListener());
+ setListener(ButtonPosition.RIGHT, config.getRightListener());
+ }
+
+ private void setNavigationBarVisibility(@View.Visibility int visibility) {
+ mRoot.setVisibility(visibility);
+ }
+
+ private void setButtonVisibility(@NonNull ButtonPosition position, @View.Visibility int visibility) {
+ switch (position) {
+ case LEFT:
+ mLeftButton.setVisibility(visibility);
+ break;
+ case RIGHT:
+ mRightButton.setVisibility(visibility);
+ break;
+ }
+ }
+}