@nativescript-community/ui-material-core
Version:
Material Core component
269 lines • 9.21 kB
JavaScript
import { Device, Utils, profile } from '@nativescript/core';
export const sdkVersion = parseInt(Device.sdkVersion, 10);
export const isPostLollipop = sdkVersion >= 21;
export const isPostLollipopMR1 = sdkVersion >= 22;
export const isPostMarshmallow = sdkVersion >= 23;
export const state = {
get selected() {
return 16842913;
},
get hovered() {
return 16843623;
},
get focused() {
return 16842908;
},
get enabled() {
return 16842910;
},
get pressed() {
return 16842919;
},
get window_focused() {
return 16842909;
},
get checked() {
return 16842912;
}
};
function createNativeArray(...args) {
const result = Array.create('int', args.length);
args.forEach((a, i) => (result[i] = a));
return result;
}
export const stateSets = {
get PRESSED_STATE_SET() {
if (!this.mPRESSED_STATE_SET) {
this.mPRESSED_STATE_SET = createNativeArray(state.pressed);
}
return this.mPRESSED_STATE_SET;
},
get HOVERED_FOCUSED_STATE_SET() {
if (!this.mHOVERED_FOCUSED_STATE_SET) {
this.mHOVERED_FOCUSED_STATE_SET = createNativeArray(state.hovered, state.focused);
}
return this.mPRESSED_STATE_SET;
},
get FOCUSED_STATE_SET() {
if (!this.mFOCUSED_STATE_SET) {
this.mFOCUSED_STATE_SET = createNativeArray(state.focused);
}
return this.mFOCUSED_STATE_SET;
},
get HOVERED_STATE_SET() {
if (!this.mHOVERED_STATE_SET) {
this.mHOVERED_STATE_SET = createNativeArray(state.hovered);
}
return this.mHOVERED_STATE_SET;
},
get SELECTED_PRESSED_STATE_SET() {
if (!this.mSELECTED_PRESSED_STATE_SET) {
this.mSELECTED_PRESSED_STATE_SET = createNativeArray(state.enabled, state.pressed);
}
return this.mSELECTED_PRESSED_STATE_SET;
},
get SELECTED_HOVERED_FOCUSED_STATE_SET() {
if (!this.mSELECTED_HOVERED_FOCUSED_STATE_SET) {
this.mSELECTED_HOVERED_FOCUSED_STATE_SET = createNativeArray(state.selected, state.hovered, state.focused);
}
return this.mSELECTED_HOVERED_FOCUSED_STATE_SET;
},
get SELECTED_FOCUSED_STATE_SET() {
if (!this.mSELECTED_FOCUSED_STATE_SET) {
this.mSELECTED_FOCUSED_STATE_SET = createNativeArray(state.selected, state.focused);
}
return this.mSELECTED_FOCUSED_STATE_SET;
},
get SELECTED_HOVERED_STATE_SET() {
if (!this.mSELECTED_HOVERED_STATE_SET) {
this.mSELECTED_HOVERED_STATE_SET = createNativeArray(state.selected, state.hovered);
}
return this.mSELECTED_HOVERED_STATE_SET;
},
get SELECTED_STATE_SET() {
if (!this.mSELECTED_STATE_SET) {
this.mSELECTED_STATE_SET = createNativeArray(state.selected);
}
return this.mSELECTED_STATE_SET;
},
get BACKGROUND_DEFAULT_STATE_1() {
if (!this.mBACKGROUND_DEFAULT_STATE_1) {
this.mBACKGROUND_DEFAULT_STATE_1 = createNativeArray(state.window_focused, state.enabled);
}
return this.mBACKGROUND_DEFAULT_STATE_1;
},
get BACKGROUND_DEFAULT_STATE_2() {
if (!this.mBACKGROUND_DEFAULT_STATE_1_SET) {
this.mBACKGROUND_DEFAULT_STATE_1_SET = createNativeArray(state.enabled);
}
return this.mBACKGROUND_DEFAULT_STATE_1_SET;
},
get BACKGROUND_SELECTED_STATE() {
if (!this.mBACKGROUND_SELECTED_STATE) {
this.mBACKGROUND_SELECTED_STATE = createNativeArray(state.window_focused, state.enabled, state.pressed);
}
return this.mBACKGROUND_SELECTED_STATE;
},
get BACKGROUND_CHECKED_STATE() {
if (!this.mBACKGROUND_CHECKED_STATE) {
this.mBACKGROUND_CHECKED_STATE = createNativeArray(state.window_focused, state.enabled, state.checked);
}
return this.mBACKGROUND_CHECKED_STATE;
},
get BACKGROUND_FOCUSED_STATE() {
if (!this.mBACKGROUND_FOCUSED_STATE) {
this.mBACKGROUND_FOCUSED_STATE = createNativeArray(state.focused, state.window_focused, state.enabled);
}
return this.mBACKGROUND_FOCUSED_STATE;
},
get BACKGROUND_DISABLED_STATE() {
if (!this.mBACKGROUND_DISABLED_STATE) {
this.mBACKGROUND_DISABLED_STATE = createNativeArray(-state.enabled);
}
return this.mBACKGROUND_DISABLED_STATE;
}
};
let ColorStateList;
export function getColorStateList(color) {
if (color === undefined || color === null) {
return null;
}
if (!ColorStateList) {
ColorStateList = android.content.res.ColorStateList;
}
return ColorStateList.valueOf(color);
}
export function getFullColorStateList(activeColor, inactiveColor = 1627389952, disabledColor = 1627389952) {
if (activeColor === undefined || activeColor === null) {
return null;
}
if (!NUtils) {
NUtils = com.nativescript.material.core.Utils;
}
return NUtils.getFullColorStateList(activeColor, inactiveColor, disabledColor);
}
export function getEnabledColorStateList(color, disabledColor) {
if (color === undefined || color === null) {
return null;
}
if (!NUtils) {
NUtils = com.nativescript.material.core.Utils;
}
return NUtils.getEnabledColorStateList(color, disabledColor);
}
let NUtils;
export const createStateListAnimator = profile('createStateListAnimator', function (view, nativeView) {
let elevation = view['elevation'];
if (elevation === undefined || elevation === null) {
elevation = view.getDefaultElevation();
}
elevation = Utils.layout.toDevicePixels(elevation);
let pressedZ = view['dynamicElevationOffset'];
if (pressedZ === undefined || pressedZ === null) {
pressedZ = view.getDefaultDynamicElevationOffset();
}
pressedZ = Utils.layout.toDevicePixels(pressedZ);
if (!NUtils) {
NUtils = com.nativescript.material.core.Utils;
}
NUtils.createStateListAnimator(view._context, nativeView, elevation, pressedZ);
});
export function getAttrColor(context, name) {
const ta = context.obtainStyledAttributes([Utils.android.resources.getId(':attr/' + name)]);
const color = ta.getColor(0, 0);
ta.recycle();
return color;
}
function createForegroundShape(radius) {
if (!NUtils) {
NUtils = com.nativescript.material.core.Utils;
}
return NUtils.createForegroundShape(radius);
}
export function createRippleDrawable(rippleColor, topLeftRadius = 0, topRightRadius = 0, bottomRightRadius = 0, bottomLeftRadius = 0) {
if (!NUtils) {
NUtils = com.nativescript.material.core.Utils;
}
return NUtils.createRippleDrawable(rippleColor, topLeftRadius, topRightRadius, bottomRightRadius, bottomLeftRadius);
}
export function handleClearFocus(view) {
if (!NUtils) {
NUtils = com.nativescript.material.core.Utils;
}
return NUtils.handleClearFocus(view);
}
export function setFocusable(view, focusable) {
view.setFocusable(focusable);
// so dumb setFocusable to false set setFocusableInTouchMode
// but not when using true :s so we have to do it
view.setFocusableInTouchMode(focusable);
}
export function getLayout(context, id) {
if (!id || !context) {
return 0;
}
return context.getResources().getIdentifier(id, 'layout', context.getPackageName());
}
export function getStyle(context, id) {
if (!id || !context) {
return 0;
}
return context.getResources().getIdentifier(id, 'style', context.getPackageName());
}
export function getAttr(context, id) {
if (!id || !context) {
return 0;
}
return context.getResources().getIdentifier(id, 'attr', context.getPackageName());
}
export function getHorizontalGravity(textAlignment) {
switch (textAlignment) {
case 'center':
return 1; //Gravity.CENTER_HORIZONTAL
case 'right':
return 8388613; //Gravity.END
case 'initial':
case 'left':
default:
return 8388611; //Gravity.START
}
}
export function getVerticalGravity(textAlignment) {
switch (textAlignment) {
case 'initial':
case 'top':
return 48; //Gravity.TOP
case 'middle':
case 'center':
return 16; //Gravity.CENTER_VERTICAL
case 'bottom':
return 80; //Gravity.BOTTOM
}
}
export function inflateLayout(context, layoutId) {
if (!NUtils) {
NUtils = com.nativescript.material.core.Utils;
}
return NUtils.inflateLayout(context, layoutId);
}
let isNewGridAPI;
export function addGridLayoutRow(gridLayout, value, unitType) {
if (isNewGridAPI === undefined) {
try {
gridLayout.addRow(value, unitType);
isNewGridAPI = true;
return;
}
catch (e) {
isNewGridAPI = false;
}
}
if (isNewGridAPI) {
gridLayout.addRow(value, unitType);
}
else {
// @ts-expect-error older API
gridLayout.addRow(new org.nativescript.widgets.ItemSpec(value, unitType));
}
}
//# sourceMappingURL=utils.js.map