react-native-navigation的迁移库

TopBarButtons.java 1.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package com.reactnativenavigation.parse;
  2. import android.support.annotation.Nullable;
  3. import com.reactnativenavigation.parse.params.Button;
  4. import com.reactnativenavigation.utils.CollectionUtils;
  5. import com.reactnativenavigation.utils.TypefaceLoader;
  6. import org.json.JSONObject;
  7. import java.util.ArrayList;
  8. public class TopBarButtons {
  9. public static TopBarButtons parse(TypefaceLoader typefaceLoader, JSONObject json) {
  10. TopBarButtons result = new TopBarButtons();
  11. if (json == null) return result;
  12. result.right = parseButtons(typefaceLoader, json, "rightButtons");
  13. result.left = parseButtons(typefaceLoader, json, "leftButtons");
  14. result.back = BackButton.parse(json.optJSONObject("backButton"));
  15. return result;
  16. }
  17. @Nullable
  18. private static ArrayList<Button> parseButtons(TypefaceLoader typefaceLoader, JSONObject json, String buttons) {
  19. return Button.parse(json, buttons, typefaceLoader);
  20. }
  21. public BackButton back = new BackButton();
  22. @Nullable public ArrayList<Button> left;
  23. @Nullable public ArrayList<Button> right;
  24. void mergeWith(TopBarButtons other) {
  25. if (other.left != null) left = other.left;
  26. if (other.right != null) right = other.right;
  27. back.mergeWith(other.back);
  28. }
  29. void mergeWithDefault(TopBarButtons defaultOptions) {
  30. if (left == null) {
  31. left = defaultOptions.left;
  32. } else if (!CollectionUtils.isNullOrEmpty(defaultOptions.left)){
  33. for (Button button : left) {
  34. button.mergeWithDefault(defaultOptions.left.get(0));
  35. }
  36. }
  37. if (right == null) {
  38. right = defaultOptions.right;
  39. } else if (!CollectionUtils.isNullOrEmpty(defaultOptions.right)) {
  40. for (Button button : right) {
  41. button.mergeWithDefault(defaultOptions.right.get(0));
  42. }
  43. }
  44. back.mergeWithDefault(defaultOptions.back);
  45. }
  46. }