1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4  value: true
5});
6exports.getStatusBarColor = getStatusBarColor;
7exports.getStatusBarStyle = getStatusBarStyle;
8exports.getStatusBarTranslucent = getStatusBarTranslucent;
9exports.setStatusBarColors = setStatusBarColors;
10exports.setStatusBarStyles = setStatusBarStyles;
11exports.withStatusBar = void 0;
12
13function _assert() {
14  const data = _interopRequireDefault(require("assert"));
15
16  _assert = function () {
17    return data;
18  };
19
20  return data;
21}
22
23function _androidPlugins() {
24  const data = require("../plugins/android-plugins");
25
26  _androidPlugins = function () {
27    return data;
28  };
29
30  return data;
31}
32
33function _Colors() {
34  const data = require("./Colors");
35
36  _Colors = function () {
37    return data;
38  };
39
40  return data;
41}
42
43function _Styles() {
44  const data = require("./Styles");
45
46  _Styles = function () {
47    return data;
48  };
49
50  return data;
51}
52
53function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
54
55// https://developer.android.com/reference/android/R.attr#colorPrimaryDark
56const COLOR_PRIMARY_DARK_KEY = 'colorPrimaryDark'; // https://developer.android.com/reference/android/R.attr#windowTranslucentStatus
57
58const WINDOW_TRANSLUCENT_STATUS = 'android:windowTranslucentStatus'; // https://developer.android.com/reference/android/R.attr#windowLightStatusBar
59
60const WINDOW_LIGHT_STATUS_BAR = 'android:windowLightStatusBar';
61
62const withStatusBar = config => {
63  config = withStatusBarColors(config);
64  config = withStatusBarStyles(config);
65  return config;
66};
67
68exports.withStatusBar = withStatusBar;
69
70const withStatusBarColors = config => {
71  return (0, _androidPlugins().withAndroidColors)(config, config => {
72    config.modResults = setStatusBarColors(config, config.modResults);
73    return config;
74  });
75};
76
77const withStatusBarStyles = config => {
78  return (0, _androidPlugins().withAndroidStyles)(config, config => {
79    config.modResults = setStatusBarStyles(config, config.modResults);
80    return config;
81  });
82};
83
84function setStatusBarColors(config, colors) {
85  return (0, _Colors().assignColorValue)(colors, {
86    name: COLOR_PRIMARY_DARK_KEY,
87    value: getStatusBarColor(config)
88  });
89}
90
91function setStatusBarStyles(config, styles) {
92  const hexString = getStatusBarColor(config);
93  const floatElement = getStatusBarTranslucent(config);
94  styles = (0, _Styles().assignStylesValue)(styles, {
95    parent: (0, _Styles().getAppThemeLightNoActionBarGroup)(),
96    name: WINDOW_LIGHT_STATUS_BAR,
97    targetApi: '23',
98    value: 'true',
99    // Default is light-content, don't need to do anything to set it
100    add: getStatusBarStyle(config) === 'dark-content'
101  });
102  styles = (0, _Styles().assignStylesValue)(styles, {
103    parent: (0, _Styles().getAppThemeLightNoActionBarGroup)(),
104    name: WINDOW_TRANSLUCENT_STATUS,
105    value: 'true',
106    // translucent status bar set in theme
107    add: floatElement
108  });
109  styles = (0, _Styles().assignStylesValue)(styles, {
110    parent: (0, _Styles().getAppThemeLightNoActionBarGroup)(),
111    name: COLOR_PRIMARY_DARK_KEY,
112    value: `@color/${COLOR_PRIMARY_DARK_KEY}`,
113    // Remove the color if translucent is used
114    add: !!hexString
115  });
116  return styles;
117}
118
119function getStatusBarColor(config) {
120  var _config$androidStatus;
121
122  const backgroundColor = (_config$androidStatus = config.androidStatusBar) === null || _config$androidStatus === void 0 ? void 0 : _config$androidStatus.backgroundColor;
123
124  if (backgroundColor) {
125    // Drop support for translucent
126    (0, _assert().default)(backgroundColor !== 'translucent', `androidStatusBar.backgroundColor must be a valid hex string, instead got: "${backgroundColor}"`);
127  }
128
129  return backgroundColor;
130}
131/**
132 * Specifies whether the status bar should be "translucent". When true, the status bar is drawn with `position: absolute` and a gray underlay, when false `position: relative` (pushes content down).
133 *
134 * @default false
135 * @param config
136 * @returns
137 */
138
139
140function getStatusBarTranslucent(config) {
141  var _config$androidStatus2, _config$androidStatus3;
142
143  return (_config$androidStatus2 = (_config$androidStatus3 = config.androidStatusBar) === null || _config$androidStatus3 === void 0 ? void 0 : _config$androidStatus3.translucent) !== null && _config$androidStatus2 !== void 0 ? _config$androidStatus2 : false;
144}
145
146function getStatusBarStyle(config) {
147  var _config$androidStatus4;
148
149  return ((_config$androidStatus4 = config.androidStatusBar) === null || _config$androidStatus4 === void 0 ? void 0 : _config$androidStatus4.barStyle) || 'light-content';
150}
151//# sourceMappingURL=StatusBar.js.map